1. 程式人生 > >C#傳送電子郵件(SMTP)及outlook.com賬號之概要

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選項開啟和關閉都能傳送成功。