2010-04-06 54 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; 

而且你的问题应该得到解决。否则你的代码看起来不错。

相关问题