Asp.Net Core中發(fā)送Email的完整步驟
前言
在項(xiàng)目開(kāi)發(fā)中常常會(huì)需要做發(fā)送 Email 的功能,在 ASP.NET Core 中你可以用 MailKit 來(lái)實(shí)現(xiàn) Email 的發(fā)送,MailKit 是一個(gè)開(kāi)源的客戶端庫(kù),可用在 Windows,Linux 或者 Mac 上,本篇文章就來(lái)討論在 ASP.NET Core 中去實(shí)現(xiàn)。
安裝 MailKit
要想使用 MailKit,你可以使用 Visual Studio 2019 中的 NuGet package manager 可視化界面進(jìn)行安裝,或者通過(guò) NuGet package manager console 命令行輸入如下命令:
Install-Package NETCore.MailKit
安裝完成之后,在代碼中引入以下命令空間即可。
using MailKit.Net.Smtp; using MimeKit;
配置 Email 的基礎(chǔ)信息
下面的代碼片段展示了在 appsettings.json 文件中配置 email 的詳細(xì)信息。
"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" }
為了能夠?qū)崿F(xiàn) configuration 中的NotificationMetadata節(jié)點(diǎn)映射,我定義了一個(gè) NotificationMetadata 類(lèi),代碼如下:
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; } }
接下來(lái)在 Startup.ConfigureServices 方法中將 NotificationMetadata 節(jié)點(diǎn)映射到 NotificationMetadata 類(lèi)。
public void ConfigureServices(IServiceCollection services) { var notificationMetadata = Configuration.GetSection("NotificationMetadata"). Get<NotificationMetadata>(); services.AddSingleton(notificationMetadata); services.AddControllers(); }
生成 EmailMessage 消息類(lèi)
使用如下代碼創(chuàng)建一個(gè) EmailMessage 類(lèi)。
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 類(lèi)
下面的代碼展示了如何從自定義的 EmailMessage 類(lèi)中構(gòu)造出一個(gè) 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 同步發(fā)送 Email
為了最終能夠?qū)崿F(xiàn) email 發(fā)送,需要使用 MailKit.Net.Smtp 命名空間下的 SmtpClient 類(lèi),下面的代碼展示了具體實(shí)現(xiàn)步驟。
using (SmtpClient smtpClient = new SmtpClient()) { smtpClient.Connect(_notificationMetadata.SmtpServer, _notificationMetadata.Port, true); smtpClient.Authenticate(_notificationMetadata.UserName, _notificationMetadata.Password); smtpClient.Send(mimeMessage); smtpClient.Disconnect(true); }
為了方便起見(jiàn),我就把完整的發(fā)送 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 異步發(fā)送 Email
上面我們用同步的方式發(fā)送 Email,這一節(jié)來(lái)看看如何使用異步的方式發(fā)送 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 除了簡(jiǎn)單的字符串,還支持模板的方式甚至可以帶上 附件 發(fā)送,更多的 MailKit 特性我會(huì)在后面的文章中和大家去討論。
譯文鏈接:https://www.infoworld.com/art...
總結(jié)
到此這篇關(guān)于Asp.Net Core中發(fā)送Email的文章就介紹到這了,更多相關(guān)Asp.Net Core發(fā)送Email內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- ASP.NET Core WebApi版本控制的實(shí)現(xiàn)
- ASP.NET Core對(duì)不同類(lèi)型的用戶進(jìn)行區(qū)別限流詳解
- 詳解如何在ASP.NET Core中編寫(xiě)高效的控制器
- 詳解如何在ASP.NET Core中使用IHttpClientFactory
- ASP.NET Core 使用Cookie驗(yàn)證身份的示例代碼
- 如何在ASP.Net Core使用分布式緩存的實(shí)現(xiàn)
- ASP.NET Core中如何實(shí)現(xiàn)重定向詳解
- 如何在ASP.NET Core中使用Session的示例代碼
- asp.net core集成CKEditor實(shí)現(xiàn)圖片上傳功能的示例代碼
- ASP.NET Core中實(shí)現(xiàn)全局異常攔截的完整步驟
- 如何在Asp.Net Core中集成Refit
相關(guān)文章
asp.net SQL存儲(chǔ)過(guò)程分頁(yè)
上周花一下午時(shí)間寫(xiě)了個(gè)分頁(yè).給大家分享下,如果寫(xiě)得不好請(qǐng)大家指出一起討論哈,小弟第一次寫(xiě)文章哈..謝謝.2009-05-05ASP.NET FileUpload 上傳圖片實(shí)例
Add a FileUpload control to the aspx page2009-09-09如何在?ASP.NET?Core?Web?API?中處理?Patch?請(qǐng)求
這篇文章主要介紹了在?ASP.NET?Core?Web?API中處理Patch請(qǐng)求,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05.NET?core項(xiàng)目AsyncLocal在鏈路追蹤中的應(yīng)用
這篇文章主要為大家介紹了.NET?core項(xiàng)目zhong?AsyncLocal在鏈路追蹤中的應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05使用.NET存儲(chǔ)XML數(shù)據(jù)的方法
使用.NET存儲(chǔ)XML數(shù)據(jù)的方法...2007-04-04