欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-12 17:46:40
前言 我们知道目前 .net core 还不支持 smtp 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组...

前言

我们知道目前 .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 中发送邮件的实现方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。