来源:Savorboard
cnblogs.com/savorboard/p/6790703.html
前言
我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit 和 FluentEmail , 下面我对它们分别进行介绍。
MailKit
在 ASP.NET Core 中,可以使用 MailKit 来发送邮件,它支持跨平台,并且支持 IMAP, POP3, SMTP 等协议。
你可以使用下面的方式安装:
Install-Package MailKit
下面是一个简单的发送邮件的例子:
var message = new MimeMessage ();
message.From.Add (new MailboxAddress ('Joey Tribbiani', 'joey@friends.com'));
message.To.Add (new MailboxAddress ('Mrs. Chanandler Bong', 'chandler@friends.com'));
message.Subject = '星期天去哪里玩?';
message.Body = new TextPart ('plain') { Text = '我想去故宫玩,如何' };
using (var client = new SmtpClient ()) {
// For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
client.ServerCertificateValidationCallback = (s,c,h,e) => true;
client.Connect ('smtp.friends.com', 587, false);
// Note: since we don't have an OAuth2 token, disable
// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove ('XOAUTH2');
// Note: only needed if the SMTP server requires authentication
client.Authenticate ('joey', 'password');
client.Send (message);
client.Disconnect (true);
}
如果你要发送的 Body 内容是 HTML 的话,你可以使用下面这种:
var bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = @'<b>This is bold and this is <i>italic</i></b>';
message.Body = bodyBuilder.ToMessageBody();
Fluent Email
Fluent Email 这个也是一个开源项目,利用它,你可以使用 Razor 模板来发送邮件,并且可以集成一些第三方的邮件发送程序比如 Mailgun(https://www.mailgun.com/)等,但是此包只在 .NET 4.6 下才支持 SMTP 。你可以使用如下命令来安装它:
Install-Package FluentEmail.Razor
你可以使用最基本的方式来发送邮件,很简单如下:
//注意: .NET 4.6 才支持
Email.DefaultSender = new SmtpSender();
var email = Email
.From('foo@email.com')
.To('bar@email.com', 'bob')
.Subject('星期天去哪里玩?')
.Body('我想去故宫玩,如何?');
await email.SendAsync();
或者,你可以使用 Razor 模板来发送:
//注意: .NET 4.6 才支持
Email.DefaultSender = new SmtpSender();
// Using Razor templating package
Email.DefaultRenderer = new RazorRenderer();
var template = 'Dear @Model.Name, You are totally @Model.Compliment.';
var email = Email
.From('bob@hotmail.com')
.To('somedude@gmail.com')
.Subject('woo nuget')
.UsingTemplate(template, new { Name = 'Luke', Compliment = 'Awesome' });
Email.DefaultRenderer 是告诉FulentEmail 使用哪个渲染器(你也可以自己实现一个自己的),然后提供了一个 template 模板,内容为 Razor 语法的模板字符串,然后使用 UsingTemplate 来进行渲染呈现。
磁盘上的 cshtml 模板
加入你的邮件 Razor 模板文件比较大,用字符串来表示的话不太优雅,那么你可以把模板文件放到磁盘上,然后使用如下方式来加载:
//注意: .NET 4.6 才支持
Email.DefaultSender = new SmtpSender();
Email.DefaultRenderer = new RazorRenderer();
var email = Email
.From('foo@email.com')
.To('bar@email.com', 'bob')
.Subject('星期天去哪里玩?')
.UsingTemplateFromFile($'{Directory.GetCurrentDirectory}/EmailTemplage.cshtml', new {Name ='Luke'})
使用 Mailgun 发送邮件
可能有一些人对 Mailgun(https://www.mailgun.com/) 还不太清楚,Mailgun (https://www.mailgun.com/)是国外的一个邮件服务公司,比如著名的 Github 的邮件服务就托管在它的上面,免费的 Maingun 账户每个月可以发送 10000 封邮件,对于很多中小网站足够用了。
当使用 Mailgun 来发送邮件的时候,你首先需要去注册一个账号,然后可以利用 Mailgun 提供的 Rest API 来管理发送或者接收的邮件。使用 FluentEmail 集成的 Mailgun只需要添加如下包:
Install-Package FluentEmail.Mailgun
注册完 Mailgun 之后会给你分配一个 API Key 和一个二级域名,在程序种,你需要如下配置:
// 同时支持 .NET Core 和 .NET Framework
var sender = new MailgunSender(
'sandboxcf5f41bbf2f84f15a386c60e253b5fe8.mailgun.org', // Mailgun 二级域名
'key-8d32c046d7f14ada8d5ba8253e3e30df' // Mailgun API Key
);
Email.DefaultSender = sender;
var email = Email
.From('foo@email.com')
.To('bar@email.com', 'bob')
.Subject('星期天去哪里玩?')
.Body('我想去故宫玩,如何?');
await email.SendAsync();
总结
通过上述示例我们可以看出 MailKit 和 FluentEmail 各有优缺点。MailKit 的优点是支持的协议比较多,而且是跨平台的,但是缺点是没有提供对 Razor的支持,并且如果使用 Mailgun 的话需要自己进行集成。
那么 FlentEmail 的优点是提供了 Razor 模板的支持并且封装了 Mailgun, 缺点是 SMTP 协议还没有提供对 .NET Core 的支持。
综上所述,如果你使用 Mailgun 来发送邮件的话,那么 FluentEmail 是你应该选择的,如果你想使用 SMTP 协议链接到自己的邮件服务器来发送邮件的话,那么你应该用 MailKit。
看完本文有收获?请转发分享给更多人
关注「DotNet」,提升.Net技能
联系客服