ASP.NET Core发送邮件的方法
前言
我们知道目前 .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等,但是此包只在 .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 还不太清楚,mailgun 是国外的一个邮件服务公司,比如著名的 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。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。