前言
我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是MailKit 和FluentEmail ,下面我对它们分别进行介绍。
MailKit
在 ASP.NET Core 中,可以使用 MailKit 来发送邮件,它支持跨平台,并且支持 IMAP, POP3, SMTP 等协议。
你可以使用下面的方式安装:
Install-Package MailKit
下面是一个简单的发送邮件的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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 的话,你可以使用下面这种:
1
2
3
|
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等,但是此包只在 .NET 4.6 下才支持 SMTP 。你可以使用如下命令来安装它:
Install-Package FluentEmail.Razor
你可以使用最基本的方式来发送邮件,很简单如下:
1
2
3
4
5
6
7
8
9
10
|
//注意: .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 模板来发送:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//注意: .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 模板文件比较大,用字符串来表示的话不太优雅,那么你可以把模板文件放到磁盘上,然后使用如下方式来加载:
1
2
3
4
5
6
7
8
9
10
|
//注意: .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 还不太清楚,Mailgun 是国外的一个邮件服务公司,比如著名的 Github 的邮件服务就托管在它的上面,免费的 Maingun 账户每个月可以发送 10000 封邮件,对于很多中小网站足够用了。
当使用 Mailgun 来发送邮件的时候,你首先需要去注册一个账号,然后可以利用 Mailgun 提供的 Rest API 来管理发送或者接收的邮件。使用 FluentEmail 集成的 Mailgun只需要添加如下包:
Install-Package FluentEmail.Mailgun
注册完 Mailgun 之后会给你分配一个 API Key 和一个二级域名,在程序种,你需要如下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// 同时支持 .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。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/savorboard/p/aspnetcore-email.html