2010-04-06 117 views
1

這裏是代碼。smtpException被用戶代碼未處理

void sendMail() 
{ 
    MailMessage mail = new MailMessage(); 

    mail.To.Add("[email protected]"); 
    mail.From = new MailAddress("[email protected]", txt_name.Text); 
    mail.Subject = txt_subject.Text; 
    mail.Body = txt_body.Text; 

    SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 
    smtp.EnableSsl = true; 

    NetworkCredential yetki = new NetworkCredential("[email protected]", "11111111"); 
    smtp.Credentials = yetki; 

    smtp.Send(mail); 

    Response.Write("mailiniz başarılı bir şekilde gönderilmiştir"); 
} 

protected void btn_gonder_Click(object sender, EventArgs e) 
{ 
    sendMail(); 
} 

回答

2

錯誤表明它是未處理意味着你沒有捕獲異常。現在,您在catch塊中實際處理異常的方式取決於您,例如將其記錄到文件,排隊重試或顯示消息框。或者試圖做一些事情來防止異常。

protected void btn_gonder_Click(object sender, EventArgs e) 
{ 
    try{ 
    sendMail(); 
    } 
    catch(Exception ex) 
    { 

    } 
} 

另請注意,您可以訪問ex.Message來查看異常消息,或向catch塊添加一個斷點並檢查ex。由於身份驗證的要求,您可能需要做更多的工作才能使其與Gmail一起使用。我不知道網絡證書是否足夠。我一直有問題,並採取了我的ISP的電子郵件帳戶,不需要驗證。

+0

@gmcalab因爲它是框架代碼。如果我打算採取一些可以糾正錯誤併成功完成對sendMail的調用的明確操作,或者我計劃重新拋出更專門化的異常,我只會將其放在sendMail中。如果我只是顯示一個消息框,我希望它在代碼的可重用部分之外。我不想從服務中調用sendMail並讓它嘗試顯示用戶永遠不會看到的消息框。 – AaronLS 2010-04-06 21:42:02

+0

@gmcalab我的意思是,整個過程只是爲了向他展示一個try/catch。根據他在哪裏使用這段代碼,上下文中try/catch的位置以及實際做什麼的主題會有很大的不同。你是狹隘的認爲有一個解決方案適合所有的方法。 – AaronLS 2010-04-06 21:46:08

+0

@gmcalab僅供參考,因爲我相信它和我的解決方案一樣有效,所以我給了你的解決方案一個滿意的答案。再次,嘗試/抓住的地方是分裂頭髮,因爲這是一個非常廣泛的討論,超出了問題的範圍。 – AaronLS 2010-04-06 21:48:00

6

使用try/catch塊

void sendMail() { 

    try{ 
     MailMessage mail = new MailMessage(); 

     mail.To.Add("[email protected]"); 

     mail.From = new MailAddress("[email protected]", txt_name.Text); 

     mail.Subject = txt_subject.Text; 

     mail.Body = txt_body.Text; 

     SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 

     smtp.EnableSsl = true; 

     NetworkCredential yetki = new NetworkCredential("[email protected]", "11111111"); 
     smtp.Credentials = yetki; 

     smtp.Send(mail); 
     Response.Write("mailiniz başarılı bir şekilde gönderilmiştir"); 
    } 
    catch(Exception e){ 
     Response.Write(e.Message); 
    } 

} 
+0

我改變了我的代碼。但它仍然給出錯誤和消息不發送[email protected] – ozkank 2010-04-06 21:28:02

+0

@wide,但現在處理異常。正確? – Gabe 2010-04-06 21:29:48

+0

是的。這是處理 – ozkank 2010-04-06 21:31:04

2

您在代碼中添加try/catch塊並忽略錯誤,或者發佈完整的異常消息以便我們幫助您解決實際問題。

1

在發送郵件時通過SSL應該使用端口465,即

SmtpClient smtp = new SmtpClient("smtp.gmail.com"); 
smtp.EnableSsl = true; 
smtp.Port = 465; 
... 

你或許應該仍然包裹調用Send在try/catch塊和處理,如果你能獲取引發任何SmtpExceptionthis page做任何事情。

請注意,您也可以將smtpClient配置放在web.config文件中(例如參見here)。

+0

+1擊敗我吧! :-)是的,端口必須正確設置,這很可能是問題所在 – 2010-04-06 21:37:03

1

您還沒有指定的Gmail的端口號是587。

smtp.port = 587; 

而且你的問題應該得到解決。否則你的代碼看起來不錯。

相關問題