Asp.Net Core中发送Email的完整步骤
前言
在项目开发中常常会需要做发送 Email 的功能,在 ASP.NET Core 中你可以用 MailKit 来实现 Email 的发送,MailKit 是一个开源的客户端库,可用在 Windows,Linux 或者 Mac 上,本篇文章就来讨论在 ASP.NET Core 中去实现。
安装 MailKit
要想使用 MailKit,你可以使用 Visual Studio 2019 中的 NuGet package manager 可视化界面进行安装,或者通过 NuGet package manager console 命令行输入如下命令:
Install-Package NETCore.MailKit
安装完成之后,在代码中引入以下命令空间即可。
using MailKit.Net.Smtp;
using MimeKit;
配置 Email 的基础信息
下面的代码片段展示了在 appsettings.json 文件中配置 email 的详细信息。
"NotificationMetadata": {
"Sender": "sender_email@gmail.com",
"SmtpServer": "smtp.gmail.com",
"Reciever": "receiver_email@yahoo.com",
"Port": 465,
"Username": "sender_email_user@gmail.com",
"Password": "specify your password here"
}
为了能够实现 configuration 中的NotificationMetadata节点映射,我定义了一个 NotificationMetadata 类,代码如下:
public class NotificationMetadata
{
public string Sender { get; set; }
public string Reciever { get; set; }
public string SmtpServer { get; set; }
public int Port { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
接下来在 Startup.ConfigureServices 方法中将 NotificationMetadata 节点映射到 NotificationMetadata 类。
public void ConfigureServices(IServiceCollection services)
{
var notificationMetadata =
Configuration.GetSection("NotificationMetadata").
Get
services.AddSingleton(notificationMetadata);
services.AddControllers();
}
生成 EmailMessage 消息类
使用如下代码创建一个 EmailMessage 类。
private MimeMessage CreateMimeMessageFromEmailMessage(EmailMessage message)
{
var mimeMessage = new MimeMessage();
mimeMessage.From.Add(message.Sender);
mimeMessage.To.Add(message.Reciever);
mimeMessage.Subject = message.Subject;
mimeMessage.Body = new TextPart(MimeKit.Text.TextFormat.Text)
{ Text = message.Content };
return mimeMessage;
}
生成 MimeMessage 类
下面的代码展示了如何从自定义的 EmailMessage 类中构造出一个 MimeMessage。
private MimeMessage CreateMimeMessageFromEmailMessage(EmailMessage message)
{
var mimeMessage = new MimeMessage();
mimeMessage.From.Add(message.Sender);
mimeMessage.To.Add(message.Reciever);
mimeMessage.Subject = message.Subject;
mimeMessage.Body = new TextPart(MimeKit.Text.TextFormat.Text)
{ Text = message.Content };
return mimeMessage;
}
用 MailKit 同步发送 Email
为了最终能够实现 email 发送,需要使用 MailKit.Net.Smtp 命名空间下的 SmtpClient 类,下面的代码展示了具体实现步骤。
using (SmtpClient smtpClient = new SmtpClient())
{
smtpClient.Connect(_notificationMetadata.SmtpServer,
_notificationMetadata.Port, true);
smtpClient.Authenticate(_notificationMetadata.UserName,
_notificationMetadata.Password);
smtpClient.Send(mimeMessage);
smtpClient.Disconnect(true);
}
为了方便起见,我就把完整的发送 Email 代码放在 DefaultController.Get 方法下。
public string Get()
{
EmailMessage message = new EmailMessage();
message.Sender = new MailboxAddress("Self", _notificationMetadata.Sender);
message.Reciever = new MailboxAddress("Self", _notificationMetadata.Reciever);
message.Subject = "Welcome";
message.Content = "Hello World!";
var mimeMessage = CreateEmailMessage(message);
using (SmtpClient smtpClient = new SmtpClient())
{
smtpClient.Connect(_notificationMetadata.SmtpServer,
_notificationMetadata.Port, true);
smtpClient.Authenticate(_notificationMetadata.UserName,
_notificationMetadata.Password);
smtpClient.Send(mimeMessage);
smtpClient.Disconnect(true);
}
return "Email sent successfully";
}
用 MailKit 异步发送 Email
上面我们用同步的方式发送 Email,这一节来看看如何使用异步的方式发送 Email。
using (SmtpClient smtpClient = new SmtpClient())
{
await smtpClient.ConnectAsync(_notificationMetadata.SmtpServer,
_notificationMetadata.Port, true);
await smtpClient.AuthenticateAsync(_notificationMetadata.UserName,
_notificationMetadata.Password);
await smtpClient.SendAsync(mimeMessage);
await smtpClient.DisconnectAsync(true);
}
最后值得注意的是,MailKit 除了简单的字符串,还支持模板的方式甚至可以带上 附件 发送,更多的 MailKit 特性我会在后面的文章中和大家去讨论。
译文链接:https://www.infoworld.com/art...
总结
到此这篇关于Asp.Net Core中发送Email的文章就介绍到这了,更多相关Asp.Net Core发送Email内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播
相关文章
- ASP.NET配置KindEditor文本编辑器图文教程
- ASP.NET数据绑定之DataList控件实战篇
- ASP.NET插件uploadify批量上传文件完整使用教程
- ASP.NET DropDownList控件的使用方法
- ASP.NET中AJAX 调用实例代码
- ASP.NET控件之RadioButtonList详解
- ASP.NET Maker(代码自动生成工具)v2020.0.4.1 特别安装版(附激活教程)
- ASP.NET创建三层架构图解详细教程
- ASP.NET堆和栈一之基本概念和值类型内存分配
- asp.net mvc下拉框Html.DropDownList 和DropDownListFor的常用方法