2013-01-02 69 views
4

我試圖使用asp.net mvc應用程序發送電子郵件。使用smtp發送電子郵件僅在通過outlook發送後纔有效

using (SmtpClient client = new SmtpClient()) 
{ 
    MailMessage message = new MailMessage(from, to, subject, body); 
    client.Timeout = 10000; 
    client.Send(message); 
    return false; 
} 

的事情是,它不工作(我得到超時除外),直到我嘗試使用Outlook發送電子郵件:SMTP客戶端在web.config中例如爲:

<mailSettings> 
    <smtp from="[email protected]"> 
     <network host="mail.test.sk" defaultCredentials="false" userName="[email protected]" password="pass" port="25"/> 
</smtp> 
</mailSettings> 

C#配置。在通過outlook發送電子郵件之後,它也成功通過我的Web應用程序發送它。是否有某種特殊的身份驗證,Outlook允許所有來自我的IP的電子郵件進行身份驗證?只有通過outlook發送後,它的工作原理是什麼?

BTW: 我在VS asp.net開發服務器上運行應用程序。當我將其部署到webhosting服務器時,它不起作用(超時)。 我的虛擬主機提供商告訴我,該服務器上有一個經典的smtp認證(不是smtp之前的pop3)。

編輯:

我想通了,當它的工作,我嘗試過通過telnet或者Wireshark的追查,通信發起者:

220 mail2.hostmaster.sk ESMTP Postfix 
EHLO fernet-PC 
250-mail2.hostmaster.sk 
250-PIPELINING 
250-SIZE 104857600 
250-ETRN 
250-STARTTLS 
250-AUTH PLAIN LOGIN 
250-AUTH=PLAIN LOGIN 
250-ENHANCEDSTATUSCODES 
250-8BITMIME 
250 DSN 
... 

時相比,它沒有工作(只是嘗試前一天),整個通信看起來像:

220-mail2.hostmaster.sk ESMTP Postfix 
EHLO fernet-PC 
250-mail2.hostmaster.sk 
250-SIZE 104857600 
250-ETRN 
250-STARTTLS 
250-ENHANCEDSTATUSCODES 
250-8BITMIME 
250 DSN 

所以在支持AUTH甲基差異ods和支持流水線。我想那System.Net.Mail.SmtpClient然後不知道它應該使用哪種認證方法,所以它stucks,因此我得到超時異常。

有趣的是,Outlook沒有連接和發送電子郵件的問題。

我解決了我的問題,不使用他們的smtp服務器,因爲我沒有時間。我正在使用Gmail的SMTP服務器。我創建了一個新的gmail帳戶,在其中設置了我需要的別名,所以電子郵件看起來並不像第一次看到的那樣來自gmail。

+1

您是否有防病毒運行檢查端口25(諾頓,邁克菲等)的出站連接 –

+0

我已編輯您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

你有沒有在本地和服務器上的問題,或只是其中之一? – Jason

回答

0

我在網站上修復了類似的問題,並在研究此問題時遇到了此問題。

下面的代碼適用於Google Apps for Business;

public class SendSMTPEmail 
    { 
    public static void SendText(string ToName, string ToEmail, string FromName, string FromEmail, string Subject, string Content) 
    { 
     MailAddress from = new MailAddress(ToEmail, ToName); 
     MailAddress to = new MailAddress(ToEmail, ToName); 

     var smtp = new SmtpClient 
     { 
      Host = "smtp.gmail.com", 
      Port = 587, 
      EnableSsl = true, 
      DeliveryMethod = SmtpDeliveryMethod.Network, 
      Credentials = new NetworkCredential("[email protected]", "yourpassword"), 
      Timeout = 20000 
     }; 

     MailMessage message = new MailMessage() 
     { 
      From = from, 
      Body = Content, 
      Subject = Subject 
     }; 

     message.To.Add(to); 

     smtp.Send(message); 

    } 
} 

這有幫助嗎?

相關問題