C#傳送電子郵件(SMTP)及outlook.com賬號之概要
這是關於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選項開啟和關閉都能傳送成功。