2016-11-28 102 views
2

我想通過smtp.gmail.com在我的C#應用​​程序中發送電子郵件。 我的代碼一直運行良好,直到上週,我突然收到一條錯誤消息。 我允許我的Gmail賬戶中安全性較低的應用程序,啓用IMAP,沒有任何更改。使用gmail通過C#發送電子郵件

第一次驗證工作正常,我得到「端口打開」。

下面是代碼:

using (TcpClient tcpClient = new TcpClient()) 
    { 
     try 
     { 
      tcpClient.Connect("smtp.gmail.com", 587); 
      MessageBox.Show("Port open"); 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("Port closed"); 
     } 
    } 

    SmtpClient smtp = new SmtpClient 
    { 
     Host = "smtp.gmail.com", 
     Port = 587, 
     EnableSsl = true, 
     UseDefaultCredentials = false, 
     DeliveryMethod = SmtpDeliveryMethod.Network, 
     Credentials = new System.Net.NetworkCredential("[email protected]", "mypassword") 
    }; 

    using (var message = new MailMessage("[email protected]", "[email protected]") 
    { 
     Subject = "Test", 
     Body = "Hi" 
    }) 
    { 
     smtp.Send(message); 
    } 

} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

我得到的錯誤:

「服務不可用,關閉傳輸通道
服務器響應爲:無法連接到SMTP服務器2A00:1450 :400C:C01 :: 6C(2A00:1450:400C:C01 :: 6C:587),連接錯誤10061" }

感謝您的幫助

+1

嘗試在另一個gmail帳戶上檢查您的代碼,gmail可能會對您的smtp活動做出反應並限制連接 – Vladimir

+0

有時,10061錯誤是由本地計算機或網絡連接上的防火牆或防病毒引起的。 我有一個學校網絡問題,無法發送電子郵件,但在家裏我可以。 –

+0

你與TcpClient的第一次連接是非常無用的,你爲什麼不放棄它?我不知道來自同一個IP的多個活動連接的Google策略。假設您的TcpClient連接沒有失敗,那麼您應該檢查您的應用程序是否包含在GMail的_Less安全應用程序列表中。同時檢查本地問題,本地/域網絡策略可能會阻止您的連接。 –

回答

0

我想你需要檢查你的操作系統的防火牆權限。好像你不能聽端口587.

你可以發送你的netstat -a輸出嗎?