微軟官方由於 System.Net.Mail 的 SmtpClient 不支援許多新的協定,官方建議使用MailKit。
使用方法
環境配置:
- LINQPad 7
- .Net 6
- MailKit 3.1.1
- GoogleMail
Gmail設定
將IMAP存取設為啟用IMAP
帳戶管理安全性,開啟低安全性
建立Mail
// 建立Mail類別
var message = new MimeMessage();
// 添加寄件人(下兩種寫法均可)
//message.From.Add(MailboxAddress.Parse("From@gmail.com"));
// 可設定名稱
message.To.Add(new MailboxAddress("FromName","From@gmail.com"));
// 添加收件人(下兩種寫法均可)
//message.From.Add(MailboxAddress.Parse("To@gmail.com"));
// 可設定名稱
message.To.Add(new MailboxAddress("ToName","To@icloud.com"));
// 設定主旨標題
message.Subject = "[測試通知]標題";
// 建立內文類別
var mailBody = new BodyBuilder();
// 設定存文字內文
mailBody.TextBody = "純文字";
// 設定為HTML內文
mailBody.HtmlBody = "<p>HTML文字</p> <br>";
// 設定附件
mailBody.Attachments.Add(@"C:\temp\testFile.txt");
// 設定Mail內容
message.Body = mailBody.ToMessageBody();
MimeMessage常用屬性:
屬性 | 類別 | 說明 |
From | InternetAddressList | 寄件人(多於一個的時候,實際的寄件者要設在Sender) |
Sender | MailboxAddress | 實際寄件人 |
To | InternetAddressList | 收件人 |
Cc | InternetAddressList | 副本 |
Bcc | InternetAddressList | 秘密副本 |
ReplyTo | InternetAddressList | 回覆的收件者 (預設為 From) |
Subject | String | 郵件標題 |
Body | MimeEntity | 郵件內容(文字、附件、 HTML ... 等) |
寄送郵件
// 建立SMTPClient
using (var client = new SmtpClient())
{
// 此範例已Gmail為例
var host = "smtp.gmail.com";
var port = 587;
// 預設為(Auto)也可以如有錯誤可透過明確定義來試試
//client.Connect(host,port);
// 明確定義透過TLS(StartTls)連線建立連線服務
client.Connect(host,port,SecureSocketOptions.StartTls);
// 透過指定用戶發送:用戶名、密碼驗證
client.Authenticate("userName@gmail.com","password");
// 發送Mail
client.Send(message);
// 斷開連接(ture)
client.Disconnect(true);
Console.WriteLine("Done");
}
完整代碼
https://gist.github.com/Yuno-Liu/4709bb520f2588bd9acde2cc9f085634