2013-03-21 71 views
11

我一直在嘗試通過C#從Gmail帳戶發送一封電子郵件用於我的網站的帳戶註冊。從Gmail發送郵件C#連接超時

我嘗試了幾種方法,但同樣的異常繼續彈出:System.Net.Mail.Smtp異常 - 連接超時。

這是我在Web.config文件inluded:

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" 
       from="Writely &lt;[email protected]&gt;"> 
      <network host="smtp.gmail.com" 
        port="465" 
        enableSsl="true" 
        defaultCredentials="false" 
        userName="[email protected]" 
        password="******" /> 
     </smtp> 
    </mailSettings> 
</system.net> 

Writely的地方是我的網站的名稱,[email protected]是帳戶我想從發送電子郵件。

然後在當我和我的數據庫連接,並保存在我的表中的用戶我的賬戶控制器,我創造我的MAILMESSAGE對象,並試圖通過相同的郵件:

using (DBConnection conn = new DBConnection()) 
{ 
     conn.UserInfoes.Add(userInfo); 
     conn.SaveChanges(); 

     MailMessage mail = new MailMessage(); 
     mail.From = new MailAddress("[email protected]"); 
     mail.To.Add("[email protected]"); 
     mail.Subject = "Welcome to Writely"; 
     mail.Body = "Test content"; 

     SmtpClient smtp = new SmtpClient(); 
     smtp.Send(mail); 
} 

我缺少的東西或做有問題?我讀過這是在堆棧溢出的其他問題上這樣做的好方法,所以我真的不知道這裏有什麼問題。

感謝您的幫助:)

回答

8

你需要告訴SmtpClient使用哪些設置。它不會自動從Web.Config文件中讀取此信息。

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 465); 
smtp.Credentials = new NetworkCredential("[email protected]", "***"); 
smtp.EnableSsl = true; 
smtp.Send(mail); 
+0

這不是在那裏我指定的服務器主機名行?網絡主機=「smtp.gmail.com」在web.config? – Bernice 2013-03-21 18:41:13

+0

@Bernice對不起,讓我改述。 SmtpClient類不會自動使用Web.Config中的信息。請參閱我更新的答案中的代碼。 – 2013-03-21 18:43:52

+0

哦好的謝謝:) ..谷歌使用港口587或465?因爲我在互聯網上看到每個問題的不同端口號。我是否需要將web.config中的端口更改爲587? – Bernice 2013-03-21 18:49:07

5

Gmail要求身份驗證:

Outgoing Mail (SMTP) Server 
requires TLS or SSL: smtp.gmail.com (use authentication) 
Use Authentication: Yes 
Port for TLS/STARTTLS: 587 
Port for SSL: 465 

所以我所做的是

var client = new SmtpClient("smtp.gmail.com", 587) 
     { 
      Credentials = new NetworkCredential("[email protected]", "mypwd"), 
      EnableSsl = true 
     }; 
     client.Send("[email protected]", "[email protected]", "Welcome to Writely", "Test content"); 
3

我有相同的問題,它的交換端口號從465到587

後解決

我對「電子郵件確認」,「密碼恢復」和「發送電子郵件」有問題,現在全部3個問題都解決了:)。

我知道這是一個很老的帖子,但我通常使用現有的帖子來尋找答案,而不是要求提出新的問題。

謝謝大家的一切幫助。

1

由於我已經回答了here

此問題也可能是由您的gmail帳戶中的安全配置引起的。

正確的端口是587,但要進行身份驗證,您需要允許您的gmail帳戶中安全性較低的應用訪問。 試試吧here

它爲我工作,希望它有助於..在asp.net web表單

0

示例/共享點

StringBuilder Body = new StringBuilder(); 
Body.Append("Your text"); 

String FromEmail = "you email"; 
String DisplayNameFromEmailMedico = "display when you receive email"; 
MailMessage message = new MailMessage(); 
message.From = new MailAddress(FromEmail, DisplayNameFromEmailMedico); 
message.To.Add(new MailAddress("[email protected]")); 
message.Subject = "subject that print in email"; 
message.IsBodyHtml = true; 
message.Body = Body.ToString(); 
SmtpClient client = new SmtpClient(); 

NetworkCredential myCreds = new NetworkCredential("[email protected]", "key from email smtp", ""); 
client.EnableSsl = true; 
client.Credentials = myCreds; 
client.Send(message);