当前位置: 移动技术网 > IT编程>开发语言>.net > 在ASP.NET Core 中发送邮件的实现方法(必看篇)

在ASP.NET Core 中发送邮件的实现方法(必看篇)

2017年12月08日  | 移动技术网IT编程  | 我要评论

两女一桶,microsd卡,白银都市网

前言

我们知道目前 .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。

以上这篇在asp.net core 中发送邮件的实现方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网