前言
最近公司的 Mail Server 要全面走 SSL,所以 Port 改使用 465 。
所以程式中寄 Mail 的部份也要調整成啟用 SSL , Port 改成 465 。
但程式一執行下去,就 Hang 一段時間,然後噴「The operations timed out」的錯誤。
研究
上網查了一下,蠻多人遇到這問題的,如果使用 SmtpClient 去送的話,就會 timeout 。
建議改成 587 ,我將它改成了 587 之後,果然就順利送出了。
1 | var server = "yourmailserver"; |
那為什麼走 465 不行呢?
似乎是因為 465 是走 Implicit SSL, 而 System.Net.Mail.SmtpClient 並不 Support 它(請參考:You cannot use System.Net.Mail.SmtpClient to send an e-mail message with Implicit SSL)。
但 587 一定需要給帳密,如果在 Domain 內要 Mailrelay 呢?
我們可以參考 How can I send emails through SSL SMTP with the .NET Framework? , 使用 Andrew Siemer 建議的方式,改用舊版的「System.Web.Mail」來寄送就可以了哦! 如下,
1 | System.Web.Mail.MailMessage myMail = new System.Web.Mail.MailMessage(); |
參考資料
You cannot use System.Net.Mail.SmtpClient to send an e-mail message with Implicit SSL
How to send e-mail programmatically by using System.Web.Mail in Visual C# 2005 or in Visual C# .NET
How can I send emails through SSL SMTP with the .NET Framework?
Which SMTP Port Should I Use? Understanding Ports 25, 465, & 587
Solving Timeout Problem When Sending Email via Yandex (C#)