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

 

完。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM