.NET 通過SmtpClient發送郵件 提示 4.7.1 service unavailable try again later 解決辦法


最近用C#的SmtpClient發送電子郵件碰到這個錯誤:

正在處理錯誤。 服務器響應為:4.7.1 Service unavailable - try again later

換了其他的SMTP服務器,沒有問題,唯獨客戶使用的這個服務器會報異常。

使用Foxmail也可以正常發送郵件,但是C#寫程序,就不能發送。

非常好奇,到底是哪里出了問題。於是下載了Wireshark,跟蹤了端口為25的TCP數據包(Filter處填:tcp port 25)。

點擊Start開始捕捉數據包。

從圖里可以發現這個服務器非常奇葩的會拒絕一次SMTP協議里的MAIL FROM指令,從而造成異常,再試一次就好了。

然而C#的SmtpClient類我們沒法更改(System.dll),於是谷歌找到了System.Net.Mail.SmtpClient的mono實現,復制了下來,增加了一次登錄時錯誤451的判斷,然后重新發送一次去掉了@和域名的,只保留用戶名的MAIL FROM信息,就可以成功發送了。

從Github的SmtpClient源碼中,還知道了一個叫做MailKit的開源發送郵件代碼,地址是 https://github.com/jstedfast/MailKit

這個功能比SmtpClient強大很多,但是我的程序都已經完成了,就不再花時間去改了,有時間可以再研究這個軟件。

GitHub 的System.Net.Mail源碼在這里:https://github.com/mono/mono/tree/master/mcs/class/System/System.Net.Mail


免責聲明!

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



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