ASP.NET Core发送邮件的方法
前言
我们知道目前.NETCore还不支持SMTP协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是MailKit和FluentEmail,下面我对它们分别进行介绍。
MailKit
在ASP.NETCore中,可以使用MailKit来发送邮件,它支持跨平台,并且支持IMAP,POP3,SMTP等协议。
你可以使用下面的方式安装:
Install-PackageMailKit
下面是一个简单的发送邮件的例子:
varmessage=newMimeMessage();
message.From.Add(newMailboxAddress("JoeyTribbiani","joey@friends.com"));
message.To.Add(newMailboxAddress("Mrs.ChanandlerBong","chandler@friends.com"));
message.Subject="星期天去哪里玩?";
message.Body=newTextPart("plain"){Text="我想去故宫玩,如何"};
using(varclient=newSmtpClient()){
//Fordemo-purposes,acceptallSSLcertificates(incasetheserversupportsSTARTTLS)
client.ServerCertificateValidationCallback=(s,c,h,e)=>true;
client.Connect("smtp.friends.com",587,false);
//Note:sincewedon'thaveanOAuth2token,disable
//theXOAUTH2authenticationmechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2");
//Note:onlyneedediftheSMTPserverrequiresauthentication
client.Authenticate("joey","password");
client.Send(message);
client.Disconnect(true);
}
如果你要发送的Body内容是HTML的话,你可以使用下面这种:
varbodyBuilder=newBodyBuilder(); bodyBuilder.HtmlBody=@"Thisisboldandthisisitalic"; message.Body=bodyBuilder.ToMessageBody();
FluentEmail
FluentEmail这个也是一个开源项目,利用它,你可以使用Razor模板来发送邮件,并且可以集成一些第三方的邮件发送程序比如Mailgun等,但是此包只在.NET4.6下才支持SMTP。你可以使用如下命令来安装它:
Install-PackageFluentEmail.Razor
你可以使用最基本的方式来发送邮件,很简单如下:
//注意:.NET4.6才支持
Email.DefaultSender=newSmtpSender();
varemail=Email
.From("foo@email.com")
.To("bar@email.com","bob")
.Subject("星期天去哪里玩?")
.Body("我想去故宫玩,如何?");
awaitemail.SendAsync();
或者,你可以使用Razor模板来发送:
//注意:.NET4.6才支持
Email.DefaultSender=newSmtpSender();
//UsingRazortemplatingpackage
Email.DefaultRenderer=newRazorRenderer();
vartemplate="Dear@Model.Name,Youaretotally@Model.Compliment.";
varemail=Email
.From("bob@hotmail.com")
.To("somedude@gmail.com")
.Subject("woonuget")
.UsingTemplate(template,new{Name="Luke",Compliment="Awesome"});
Email.DefaultRenderer是告诉FulentEmail使用哪个渲染器(你也可以自己实现一个自己的),然后提供了一个template模板,内容为Razor语法的模板字符串,然后使用UsingTemplate来进行渲染呈现。
磁盘上的cshtml 模板
加入你的邮件Razor模板文件比较大,用字符串来表示的话不太优雅,那么你可以把模板文件放到磁盘上,然后使用如下方式来加载:
//注意:.NET4.6才支持
Email.DefaultSender=newSmtpSender();
Email.DefaultRenderer=newRazorRenderer();
varemail=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提供的RestAPI来管理发送或者接收的邮件。使用FluentEmail集成的Mailgun只需要添加如下包:
Install-PackageFluentEmail.Mailgun
注册完Mailgun之后会给你分配一个APIKey和一个二级域名,在程序种,你需要如下配置:
//同时支持.NETCore和.NETFramework
varsender=newMailgunSender(
"sandboxcf5f41bbf2f84f15a386c60e253b5fe8.mailgun.org",//Mailgun二级域名
"key-8d32c046d7f14ada8d5ba8253e3e30df"//MailgunAPIKey
);
Email.DefaultSender=sender;
varemail=Email
.From("foo@email.com")
.To("bar@email.com","bob")
.Subject("星期天去哪里玩?")
.Body("我想去故宫玩,如何?");
awaitemail.SendAsync();
总结
通过上述示例我们可以看出MailKit和FluentEmail各有优缺点。MailKit的优点是支持的协议比较多,而且是跨平台的,但是缺点是没有提供对Razor的支持,并且如果使用Mailgun的话需要自己进行集成。那么FlentEmail的优点是提供了Razor模板的支持并且封装了Mailgun,缺点是SMTP协议还没有提供对.NETCore的支持。
综上所述,如果你使用Mailgun来发送邮件的话,那么FluentEmail是你应该选择的,如果你想使用SMTP协议链接到自己的邮件服务器来发送邮件的话,那么你应该用MailKit。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。