2013-03-07 103 views
0

我寫了一個示例程序,通過複製此KB article中的代碼,並根據用戶信息進行一些編輯。它使用不贊成的.NET庫System.Web.Mail來執行它,因爲新的System.Net.Mail不支持隱式SSL。我使用端口465上的Google smtp服務器進行測試,這是他們的隱式電子郵件端口,並且一切正常。然而,當我把這個給客戶端在他的網絡進行測試,沒有被髮送/接收,這裏是錯誤:無法使用隱式SSL SMTP服務器發送電子郵件

2013-03-07 15:33:43 - The transport failed to connect to the server. 
2013-03-07 15:33:43 - at System.Web.Mail.SmtpMail.LateBoundAccessHelper.CallMethod(Object obj, String methodName, Object[] args) 
2013-03-07 15:33:43 - at System.Web.Mail.SmtpMail.CdoSysHelper.Send(MailMessage message) 
2013-03-07 15:33:43 - at System.Web.Mail.SmtpMail.Send(MailMessage message) 

我不是很精通,當涉及到電子郵件SSL所以這裏是我可能理論根源:

假設他是用正確的SMTP服務器和正確的端口(SSL端口),我不知道如果有以下可能是原因:

  1. 他們是在郵件服務器上使用SSL,但他沒有在他運行我的機器上安裝證書程序即使他在同一個域上,並使用與發件人相同的電子郵件域名。

  2. 他們使用SSL,但他們可能使用NTLM或匿名身份驗證,而我的程序使用基本身份驗證。

對不起,如果我提供的信息很少,因爲我自己在這方面很陌生,所以我還在研究更多。

您是否知道在我的最後可以執行的任何步驟,以確保我的小測試程序可以使用隱式SSL電子郵件服務器的smtp服務器進行發送?

編輯:我沒有在我的代碼中添加以下行來表示我正在使用SSL。

oMsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true"); 

回答

0

在這裏,我使用gmail smtp使用c#發送郵件。請參閱下面的代碼。它會給你一個洞見,這些東西是如何工作的。將Gmail設置替換爲您的電子郵件服務器設置。不要擔心安全證書,它們將由框架本身照顧。

public static bool SendMail(string to, string subject, string body) 
    { 
     bool result; 
     try 
     { 
      var mailMessage = new MailMessage 
      { 
       From = new MailAddress("your email address") 
      }; 

      mailMessage.To.Add(new MailAddress(to)); 
      mailMessage.IsBodyHtml = true; 
      mailMessage.Subject = subject; 
      mailMessage.Body = body; 
      var userName = "your gmail username"; 
      var password = "your gmail password here"; 
      var smtpClient = new SmtpClient 
      { 
       Credentials = new NetworkCredential(userName, password), 
       Host = smtp.gmail.com, 
       Port = 587, 
       EnableSsl = true 
      }; 

      smtpClient.Send(mailMessage); 
      result = true; 
     } 
     catch (Exception) 
     { 
      result = false; 
     } 
     return result; 
    } 

你引用的那段代碼太老了,也太晦澀了。 CDO被用於ASP應用程序發送郵件。我想你還沒有向下滾動看到

Article ID: 555287 - Last Review: April 7, 2005 - Revision: 1.0 
APPLIES TO 
Microsoft .NET Framework 1.1 

你闖民宅代碼,這是非常老了......反正跟着出了代碼,一切都會好起來......

UPDATE

我的不好,我沒有仔細閱讀。但是

I am leaving the above code as it is, as it might be a help for you or any other guy, who need the mailing functionality via SSL over gmail or any other server later.

。那麼在這種情況下你需要一些第三方app.I找到您庫See here

+0

謝謝阿米特,不幸的是這不會爲我工作,因爲我看到你正在使用System.Net.Mail庫。它只支持顯式SSL而不是隱式SSL的TLS。如果將其更改爲端口465,則代碼將不會發送,因爲端口587上的gmail是顯式SSL,而465是隱式SSL – Fylix 2013-03-08 00:14:46

1

這也許是來不及回答,但對https://sourceforge.net/p/netimplicitssl/wiki/Home/

看看您可以將郵件發送到端口465 ,而不需要修改你的代碼,那麼多。

從項目的wiki頁面:

var mailMessage = new MimeMailMessage(); 
mailMessage.Subject = "test mail"; 
mailMessage.Body = "hi dude!"; 
mailMessage.Sender = new MimeMailAddress("[email protected]", "your name"); 
mailMessage.IsBodyHtml = true; 
mailMessage.To.Add(new MimeMailAddress("[email protected]", "your friendd's name")); 
mailMessage.Attachments.Add(new MimeAttachment("your file address")); 
var emailer = new SmtpSocketClient(); 
emailer.Host = "your mail server address"; 
emailer.Port = 465; 
emailer.EnableSsl = true; 
emailer.User = "mail sever user name"; 
emailer.Password = "mail sever password" ; 
emailer.AuthenticationMode = AuthenticationType.PlainText; 
emailer.MailMessage = mailMessage; 
emailer.OnMailSent += new SendCompletedEventHandler(OnMailSent); 
//Send email 
emailer.SendMessageAsync(); 

// A simple call back function: 
private void OnMailSent(object sender, AsyncCompletedEventArgs asynccompletedeventargs) 
{ 
    Console.Out.WriteLine(asynccompletedeventargs.UserState.ToString()); 
} 
相關問題