在项目开拓中经常会需要做发送 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<NotificationMetadata>(); 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内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!
您大概感乐趣的文章: