前言
在項目開發中常常會需要做發送 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 命令行輸入如下命令:
1
|
Install-Package NETCore.MailKit |
安裝完成之后,在代碼中引入以下命令空間即可。
1
2
|
using MailKit.Net.Smtp; using MimeKit; |
配置 Email 的基礎信息
下面的代碼片段展示了在 appsettings.json 文件中配置 email 的詳細信息。
1
2
3
4
5
6
7
8
|
"NotificationMetadata" : { "SmtpServer" : "smtp.gmail.com" , "Port" : 465, "Password" : "specify your password here" } |
為了能夠實現 configuration 中的NotificationMetadata節點映射,我定義了一個 NotificationMetadata 類,代碼如下:
1
2
3
4
5
6
7
8
9
|
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 類。
1
2
3
4
5
6
7
8
|
public void ConfigureServices(IServiceCollection services) { var notificationMetadata = Configuration.GetSection( "NotificationMetadata" ). Get<NotificationMetadata>(); services.AddSingleton(notificationMetadata); services.AddControllers(); } |
生成 EmailMessage 消息類
使用如下代碼創建一個 EmailMessage 類。
1
2
3
4
5
6
7
8
9
10
|
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。
1
2
3
4
5
6
7
8
9
10
|
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 類,下面的代碼展示了具體實現步驟。
1
2
3
4
5
6
7
8
9
|
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 方法下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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。
1
2
3
4
5
6
7
8
9
|
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內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://segmentfault.com/a/1190000039018070