.NET Core使用FluentEmail发送邮件的示例代码

前言

在实际的项目开发中,我们会遇到许多需要通过程序发送邮件的场景,比如异常报警、消息、进度通知等等。一般情况下我们使用原生的SmtpClient类库居多,它能满足我们绝大多数场景。但是使用起来不够简洁,许多场景需要我们自行封装方法去实现,而且代码量非常可观。庆幸的是,我们有一款非常棒的组件,能满足我们绝大多数应用场景,而且使用简单功能强大,就是我们今天要说的FluentEmail,这也是我们实际在项目中正在使用的邮件发送组件。如果你们在.Net Core中有发送邮件的需求,也推荐去尝试一下。

FluentEmail

FluentEmail是一款在GitHub上开源免费的支持.Net和.Net Core邮件发送组件,目前已有1K多的Star,而且近两年随着.Net Core的日益成熟,它的Star增长趋势还是非常迅猛的。它在GitHub地址是https://github.com/lukencode/FluentEmail,它的功能非常强大而且非常实用,支持Razor的邮件模板和支持使用SendGrid,MailGun,SMTP发送邮件,而且使用也非常简单。

Nuget组件

FluentEmail功能强大,而且对不同场景的支持都有独立的Nuget包,这种低耦合的拆分不仅使得依赖非常清晰,而且避免引入不需要的代码,具体功能包含在以下的组件包中

  • FluentEmail.Core - 基础核心包,包含了基础的模型定义和默认的设置,而且以下的引用包都包含了这个核心包。
  • FluentEmail.Smtp - 使用SMTP服务发送邮件的程序包。
  • FluentEmail.Razor - 通过Razor模板生成邮件发送内容。
  • FluentEmail.Mailgun - 使用Mailgun的Rest接口发送邮件。
  • FluentEmail.SendGrid - 使用SendGrid接口发送邮件。
  • FluentEmail.Mailtrap - 发送邮件Mailtrap, 使用的是FluentEmail.Smtp包进行发送.
  • FluentEmail.MailKit - 使用MailKit邮件库发送邮件。

普通邮件方式

接下来我们就演示一下如何使用FluentEmail发送邮件,由于我们实际业务中大多数都使用的SMTP的方式发送邮件,所以我们就以此为做演示,首先我们在项目中引入FluentEmail.Smtp包,目前最新版本为2.8.0

<PackageReference Include="FluentEmail.Smtp" Version="2.8.0" />

接下来我们就可以愉快的写代码了,它的编码使用方式非常简单而且非常简洁,主要通过链式编程的方式

//如果使用smtp服务发送邮件必须要设置smtp服务信息
SmtpClient smtp = new SmtpClient
{
  //smtp服务器地址(我这里以126邮箱为例,可以依据具体你使用的邮箱设置)
  Host = "smtp.126.com",
  UseDefaultCredentials = true,
  DeliveryMethod = SmtpDeliveryMethod.Network,
  //这里输入你在发送smtp服务器的用户名和密码
  Credentials = new NetworkCredential("邮箱用户名", "邮箱密码")
};
//设置默认发送信息
Email.DefaultSender = new SmtpSender(smtp);
var email = Email
  //发送人
  .From("zhangsan@126.com")
  //收件人
  .To("lisi@qq.com")
  //抄送人
  .CC("admin@126.com")
  //邮件标题
  .Subject("邮件标题")
  //邮件内容
  .Body("邮件内容");
//依据发送结果判断是否发送成功
var result = email.Send();
//或使用异步的方式发送
//await email.SendAsync();
if (result.Successful)
{
  //发送成功逻辑
}
else
{
  //发送失败可以通过result.ErrorMessages查看失败原因
}

如果你发送的内容中包含html格式的内容可以使用如下方式

var email = Email
  //发送人
  .From("zhangsan@126.com")
  //收件人
  .To("lisi@qq.com")
  //抄送人
  .CC("admin@126.com")
  //邮件标题
  .Subject("邮件标题")
  //只需要额外设置第二个参数为true即可
  .Body("<h1 align=\"center\">.NET大法好</h1><p>是的,这一点毛病都没有</p>",true);
//发送
var result = email.Send();

这个我们通过点击查看Body的方法声明即可得知第二个参数是用来表示内容是否为html格式,默认为false

IFluentEmail Body (string body, bool isHtml = false);

如果邮件的收件人为多个邮箱地址的话,可以采用To方法的另一个重载方法可以接受List<FluentEmail.Core.Models.Address>

var email = Email
  //发送人
  .From("zhangsan@126.com")
  //邮件标题
  .Subject("邮件标题")
  //邮件内容
  .Body("<h1 align=\"center\">.NET大法好</h1><p>是的,一点毛病都没有</p>",true);

//构建多个接收人邮箱
string toUserStr = "oldwang@126.com;xiaoming@163.com;xiaoli@qq.com";
List<FluentEmail.Core.Models.Address> toUsers = toUserStr.Split(";")
  .Select(i => new FluentEmail.Core.Models.Address { EmailAddress = i }).ToList();
//支持传入Address集合
email.To(toUsers)
//抄送人集合
.CC(toUsers);
//发送
var result = email.Send();

.NET Core使用FluentEmail发送邮件的示例代码

扫一扫手机访问