2015-09-23 80 views
1

我有簡單的控制檯應用程序,並試圖通過C#中的SMTP類發送郵件,但沒有發送郵件,應用程序已關閉,也沒有引發異常。問題行是client.Send(msg)。通過SMTP客戶端發送電子郵件失敗,沒有例外

using (var client = new SmtpClient()) { 
    client.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted); 
    client.Port = 587; 
    client.DeliveryMethod = SmtpDeliveryMethod.Network;      
    client.EnableSsl = True; 
    client.Timeout = 20000; 
    client.Credentials = new NetworkCredential(@ConfigurationManager.AppSettings["senderEmailAddress"].ToString(),@ConfigurationManager.AppSettings["senderEmailPassword"].ToString()); 
    client.Host = "smtp.gmail.com; 

    using (var msg = new MailMessage()) { 
    msg.From = new MailAddress(@ConfigurationManager.AppSettings["senderEmailAddress"].ToString()); 
    msg.Sender = new MailAddress(@ConfigurationManager.AppSettings["senderEmailAddress"].ToString()); 
    msg.Subject = fileName; 
    msg.Attachments.Add(new Attachment(OutputFilePath)); 
    msg.To.Add(EmailAddress); 
    client.Send(msg); }} 

private void smtp_SendCompleted(object sender, AsyncCompletedEventArgs e) { 
     if (e.Cancelled == true || e.Error != null) { 
      throw new Exception(e.Cancelled ? "EMail sedning was canceled." : "Error: " + e.Error.ToString()); 
     } 
    } 

是否有可能至少得到異常?

+0

您是否配置了Gmail帳戶以允許外部連接? – acostela

+0

我不確定你的意思,但我在智能手機或Outlook中使用此帳戶。 – petrppe

+0

這在早些時候在SO中得到了回答。 [http://stackoverflow.com/questions/32260/sending-email-in-net-through-gmail](http://stackoverflow.com/questions/32260/sending-email-in-net-through-gmail) –

回答

0

請確保在發件人gmail帳戶中必須關閉2步驗證。

如果2步驗證仍然存在,那麼它將無法與gmail服務器建立安全的SSL連接。

+0

關閉2步驗證。 – petrppe

0

我可以看到它在代碼中唯一缺少的是:

client.UseDefaultCredentials = false; 

添加它上面下面的代碼行:

client.Credentials = new NetworkCredential(@ConfigurationManager.AppSettings["senderEmailAddress"].ToString(),@ConfigurationManager.AppSettings["senderEmailPassword"].ToString()); 

如果有關於錯誤登錄到Gmail,會拋出一個異常 - 確保檢查你的事件查看器,並確保你沒有一個空的catch塊來吞噬異常。

對於gmail,沒有指定msg.From的點,因爲谷歌不允許模擬,所以它將被忽略。

+0

仍然沒有成功...... – petrppe

+0

@petrppe你如何檢查這是否工作?您是否在等待收到電子郵件,或者您是否在檢查發件箱/發送郵件部分?你怎麼知道沒有例外拋出?你是否在try/catch中使用了部分封裝了整個SMTPClient? – user1666620

+0

我在等待收到電子郵件。是的,smtp客戶端完全包裝在try-catch博客中。 – petrppe

相關問題