日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core 使用MailKit发送电子邮件

發布時間:2023/12/4 asp.net 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core 使用MailKit发送电子邮件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍字關注“汪宇杰博客”

發送郵件通知的功能在各種系統里都很常見。我的博客也能在有新評論、新回復,或者文章被其他網站引用時向管理員發送郵件。那么在.NET?Core里,如何實現發送電子郵件呢?

準備工作

我的案例會利用微軟outlook.com的個人版郵箱作為發件賬號發送郵件,使用SMTP協議。但你也可以使用其他支持SMTP的郵箱系統來做實驗。anyway,首先就是,你得有一個郵箱賬號啦~

關于 MailKit

很多有經驗的.NET老程序員可能會說,發郵件有什么難的,十幾年前我們就能用.NET Framework自帶的SmtpClient發郵件了,并且.NET?Core也能用。為啥還要寫這篇文章?

但是,萬物皆有始有終,最近我突然發現,SmtpClient?已經被微軟標記為棄用:

并且微軟官方欽點了一個繼任者:MailKit,也就是本文要介紹的東西。

https://github.com/jstedfast/MailKit

這是一個基于MimeKit的跨平臺.NET郵件庫,支持IMAP、POP3、SMTP協議。它相比.NET自帶的SmtpClient,支持更廣泛的協議和更現代的電子郵件標準。因此微軟官方建議,SmtpClient只用來兼容老應用,如果開發新應用的話,直接使用MailKit。

并且,它是在MIT協議下開源的。意味著非常自由的使用,也可以由全世界的.NET開發者參與貢獻,一起維護和完善這個東西。

使用SMTP協議發送郵件

我得到這個好東西以后,第一步就是將使用SmtpClient的老代碼遷移到MailKit。因此,我的案例里只使用SMTP這一種協議來發郵件。

安裝包

首先,使用NuGet安裝MailKit:

Visual Studio

Install-Package MailKit

.NET Core CLI

dotnet add package MailKit

構建?MimeMessage

MimeMessage是MailKit里代表一封電子郵件的對象,它和.NET自帶的MailMessage類型非常類似。比如添加主題和發件人:

var messageToSend = new MimeMessage

{

? ? Sender = new MailboxAddress("發件人姓名", "發件人Email地址"),

? ? Subject = "主題",

};

添加發件人信息和以前有所不同,MailKit居然支持多個發件人,所以From是一個集合類型,要通過Add方法來添加:

messageToSend.From.Add(new MailboxAddress("發件人姓名", "發件人郵箱賬號名"));

郵件正文(Body屬性)支持多種格式,最常用的是純文本和HTML。需要用TextPart類來安排,TextPart的構造函數里可以指定正文格式,例如HTML:

messageToSend.Body = new TextPart(TextFormat.Html) { Text = bodyText };

或者純文本

messageToSend.Body = new TextPart(TextFormat.Plain) { Text = bodyText };

添加收件人信息:

messageToSend.To.Add(new MailboxAddress("收件人Email地址"));

添加抄送(CC)信息:

messageToSend.Cc.Add(new MailboxAddress("抄送者Email地址"));

使用Outlook.com發送電子郵件

微軟Office?365的outlook支持SMTP協議。

服務器地址:smtp-mail.outlook.com

端口:587

SSL:支持

以下代碼演示了幾個步驟:

  • 注冊郵件發送成功后的事件

  • 連接服務器

  • 驗證賬號

  • 發送郵件

  • 斷開連接

  • using (var smtp = new MailKit.Net.Smtp.SmtpClient())

    {

    ? ? smtp.MessageSent += (sender, args) => { // args.Response };

    ? ? smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;

    ? ? await smtp.ConnectAsync("smtp-mail.outlook.com", 587, SecureSocketOptions.StartTls);

    ? ? await smtp.AuthenticateAsync("賬號", "密碼");

    ? ? await smtp.SendAsync(messageToSend);

    ? ? await smtp.DisconnectAsync(true);

    }

    MessageSent事件里可以通過args參數,獲得服務器的響應信息,以便于記錄Log。

    連接outlook.com的服務器需要設置為SecureSocketOptions.StartTls,不然會拒絕連接。對于其他服務器,可以試試?SecureSocketOptions.Auto

    效果

    以下是MailKit在我的博客系統使用的郵件庫(Edi.TemplateEmail)中發送郵件的效果:

    總結

    以上是生活随笔為你收集整理的.NET Core 使用MailKit发送电子邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。