Asp.Net Core中发送Email的完整步骤
前言
在项目开发中常常会需要做发送Email的功能,在ASP.NETCore中你可以用MailKit来实现Email的发送,MailKit是一个开源的客户端库,可用在Windows,Linux或者Mac上,本篇文章就来讨论在ASP.NETCore中去实现。
安装MailKit
要想使用MailKit,你可以使用VisualStudio2019中的NuGetpackagemanager可视化界面进行安装,或者通过NuGetpackagemanagerconsole命令行输入如下命令:
Install-PackageNETCore.MailKit
安装完成之后,在代码中引入以下命令空间即可。
usingMailKit.Net.Smtp; usingMimeKit;
配置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":"specifyyourpasswordhere"
}
为了能够实现configuration中的NotificationMetadata节点映射,我定义了一个NotificationMetadata类,代码如下:
publicclassNotificationMetadata
{
publicstringSender{get;set;}
publicstringReciever{get;set;}
publicstringSmtpServer{get;set;}
publicintPort{get;set;}
publicstringUserName{get;set;}
publicstringPassword{get;set;}
}
接下来在Startup.ConfigureServices方法中将NotificationMetadata节点映射到NotificationMetadata类。
publicvoidConfigureServices(IServiceCollectionservices)
{
varnotificationMetadata=
Configuration.GetSection("NotificationMetadata").
Get();
services.AddSingleton(notificationMetadata);
services.AddControllers();
}
生成EmailMessage消息类
使用如下代码创建一个EmailMessage类。
privateMimeMessageCreateMimeMessageFromEmailMessage(EmailMessagemessage)
{
varmimeMessage=newMimeMessage();
mimeMessage.From.Add(message.Sender);
mimeMessage.To.Add(message.Reciever);
mimeMessage.Subject=message.Subject;
mimeMessage.Body=newTextPart(MimeKit.Text.TextFormat.Text)
{Text=message.Content};
returnmimeMessage;
}
生成MimeMessage类
下面的代码展示了如何从自定义的EmailMessage类中构造出一个MimeMessage。
privateMimeMessageCreateMimeMessageFromEmailMessage(EmailMessagemessage)
{
varmimeMessage=newMimeMessage();
mimeMessage.From.Add(message.Sender);
mimeMessage.To.Add(message.Reciever);
mimeMessage.Subject=message.Subject;
mimeMessage.Body=newTextPart(MimeKit.Text.TextFormat.Text)
{Text=message.Content};
returnmimeMessage;
}
用MailKit同步发送Email
为了最终能够实现email发送,需要使用MailKit.Net.Smtp命名空间下的SmtpClient类,下面的代码展示了具体实现步骤。
using(SmtpClientsmtpClient=newSmtpClient())
{
smtpClient.Connect(_notificationMetadata.SmtpServer,
_notificationMetadata.Port,true);
smtpClient.Authenticate(_notificationMetadata.UserName,
_notificationMetadata.Password);
smtpClient.Send(mimeMessage);
smtpClient.Disconnect(true);
}
为了方便起见,我就把完整的发送Email代码放在DefaultController.Get方法下。
publicstringGet()
{
EmailMessagemessage=newEmailMessage();
message.Sender=newMailboxAddress("Self",_notificationMetadata.Sender);
message.Reciever=newMailboxAddress("Self",_notificationMetadata.Reciever);
message.Subject="Welcome";
message.Content="HelloWorld!";
varmimeMessage=CreateEmailMessage(message);
using(SmtpClientsmtpClient=newSmtpClient())
{
smtpClient.Connect(_notificationMetadata.SmtpServer,
_notificationMetadata.Port,true);
smtpClient.Authenticate(_notificationMetadata.UserName,
_notificationMetadata.Password);
smtpClient.Send(mimeMessage);
smtpClient.Disconnect(true);
}
return"Emailsentsuccessfully";
}
用MailKit异步发送Email
上面我们用同步的方式发送Email,这一节来看看如何使用异步的方式发送Email。
using(SmtpClientsmtpClient=newSmtpClient())
{
awaitsmtpClient.ConnectAsync(_notificationMetadata.SmtpServer,
_notificationMetadata.Port,true);
awaitsmtpClient.AuthenticateAsync(_notificationMetadata.UserName,
_notificationMetadata.Password);
awaitsmtpClient.SendAsync(mimeMessage);
awaitsmtpClient.DisconnectAsync(true);
}
最后值得注意的是,MailKit除了简单的字符串,还支持模板的方式甚至可以带上附件发送,更多的MailKit特性我会在后面的文章中和大家去讨论。
译文链接:https://www.infoworld.com/art...
总结
到此这篇关于Asp.NetCore中发送Email的文章就介绍到这了,更多相关Asp.NetCore发送Email内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!