這是關于c#發送電子郵件(SMTP)的技術筆記,以”簡報“形式呈現,
因為最后成功通過outlook.com發送了郵件,所以,我覺得還是有必要 記錄一下其中的要點,
一、技術核心
.net Framework 提供的兩個類:SmtpClient和MailAddress
前者負責連接到服務器并且發送郵件,后者構成郵件的內容,
詳細請參考:
《C#SMTP發郵件》
https://www.cnblogs.com/xinyf/p/6294785.html
二、多個接收人
觀察網易郵箱,多個接收人使用的是分號(【,】)分割,但是直接傳遞引數到【MailAddress.To】的【Add()】方法卻會出現決議例外,
解決方案兩個:
微軟方面在這個方法的注釋上說,多個接收人用逗號分割,
自己拆分成陣列,然后回圈【Add()】
我自己嘗試第一個方案的時候,趕上了126郵箱認為我發廣告屏蔽了我賬號stmp,所以,我后來成功的時候是使用的第二個方案,

三、使用outlook.com提供的SMTP
3.1 設定
https://support.office.com/zh-cn/article/outlook-com-%E7%9A%84-pop%E3%80%81imap-%E5%92%8C-smtp-%E8%AE%BE%E7%BD%AE-d088b986-291d-42b8-9564-9c414e2aa040

3.2 埠號不是默認的25,而是587
沒有添加埠的時候,回傳的例外提示是:
SMTP 服務器要求安全連接或客戶端未通過身份驗證, 服務器回應為:5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [AM0PR02CA0048.eurprd02.prod.outlook.com].
添加了埠之后,仍然沒有通過,例外也變了,
SMTP 服務器要求安全連接或客戶端未通過身份驗證, 服務器回應為:5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [AM0PR01CA0034.eurprd01.prod.exchangelabs.com]
于是進入下一個環節:
3.3 關于STARTTLS
看到微軟outlook強調:
SMTP 加密方法 STARTTLS
所以,就懷疑是跟STARTTLS有關,
根據下面這篇文章好像找到了 添加 這個選項的辦法:
http://www.voidcn.com/article/p-mgynnypj-btn.html
也就是說這一行:

添加了之后問題仍然存在,并且例外和服務器回傳的資訊都和以前一樣,
后來發現,還需要開啟SSL
.EnableSsl = true;
上面的鏈接里面已經是這么用的,但是當時我沒看到,在搜到了這個問題的時候才注意到,
https://q.cnblogs.com/q/83815/
另外,測驗的時候,UseDefaultCredentials選項開啟和關閉都能發送成功,
完,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/114228.html
標籤:C#
上一篇:LinqDB 查詢資料庫
下一篇:C# extract multiples from web pages based on OpenQA.Selenium.Chrome and ChromeDriver
