2008-10-05 48 views
5

我可以同時使用System.Net.Mail和System.Web.Mail來使用GMail,但是我無法讓它們都使用smtp .att.yahoo.com。爲什麼System.Net.Mail在System.Web.Mail工作時失敗

我從我自己的Web.config密鑰中獲取SMTP設置。這些設置在我使用System.Web.Mail發送時有效,但是在System.Net.Mail發送失敗。

<add key="SmtpServer" value="smtp.att.yahoo.com"/> 
    <add key="SmtpServerAuthenticateUser" value="[email protected]"/> 
    <add key="SmtpServerPort" value="465"/> 
    <add key="SmtpUseSSL" value="1"/> 
    <add key="SmtpServerAuthenticatePassword" value="MY PASSWORD"/> 

這裏是一個抓住我的設置代碼,並與Gmail的工作,但沒有對att.yahoo:

 SmtpClient smtp; 

     if (!string.IsNullOrEmpty(Util.get_setting("SmtpServer", ""))) 
     { 
      smtp = new SmtpClient(Util.get_setting("SmtpServer", "")); 
     } 
     else 
     { 
      smtp = new SmtpClient(); 
     } 


     if (!string.IsNullOrEmpty(Util.get_setting("SmtpServerAuthenticatePassword", ""))) 
      smtp.Credentials = new System.Net.NetworkCredential(
       Util.get_setting("SmtpServerAuthenticateUser", ""), 
       Util.get_setting("SmtpServerAuthenticatePassword", "")); 

     if (!string.IsNullOrEmpty(Util.get_setting("SmtpServerPort", ""))) 
      smtp.Port = int.Parse(Util.get_setting("SmtpServerPort", "")); 

     if (Util.get_setting("SmtpUseSSL", "0") == "1") 
      smtp.EnableSsl = true; 

     smtp.Send(message); 

這是我的問題嗎?

http://blogs.msdn.com/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

+0

您是否嘗試使用端口25? – gimel 2008-10-05 18:45:54

回答

9

我學到了答案。答案是:

由於System.Net.Mail不支持「隱式」SSL,只有「顯式」SSL。

1

Gimel的回答是回到前面。他說使用新的系統。 。郵件庫,但問題是,系統。 網絡 .Mail在端口465(如System)上不適用於SSL。 網絡。郵件做/工作!

我已經打敗了我的頭對這整天和相同的設置系統。 Web .Mail WORKS和System。 Net。郵件不工作(至少對於我一直在測試的SMTP服務器),在這裏我想我應該總是升級到微軟的最新產品,以獲得最好的生活。 :-(

鏈接到M $的博客似乎說明了一切;「System.Net.Mail只支持」顯式SSL「。」我假設我已經測試過的SMTP服務器需要隱式SSL。這是一個雅虎服務器btw)

由於「升級」到新的API無疑會破壞需要隱式SSL的服務器的用戶的功能,這似乎是在這種情況下向後「升級」的步驟。還是隻能用警告編譯,只需禁用這些警告(0618如果我記得)繼續卡車。哦,你可能要考慮確保您的應用程序始終運行對您構建的.NET framework版本,並通過配置文件的方式與測試,如果將來如果M $撕掉舊的API,您的應用程序就很安全。

1

通過System.Net.Mail關於隱性和顯性的SSL連接以前的答案是絕對正確的。我能夠通過這個障礙,而不必使用現在已經過時的System.Web.Mail的方式是使用CDO(協作數據對象)。

予詳述並在另一個堆棧溢出後(GMail SMTP via C# .Net errors on all ports)如果好奇舉了一個例子。否則,您可以直接轉到知識庫文章http://support.microsoft.com/kb/310212

希望這會有所幫助!

相關問題