smtpException未被用户代码处理

时间:2010-04-06 21:14:18

标签: c# asp.net

这是代码。

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

    mail.To.Add("abc@gmail.com");
    mail.From = new MailAddress("abc@gmail.com", 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("abc@gmail.com", "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();
}

5 个答案:

答案 0 :(得分:6)

使用try / catch块

void sendMail() {

   try{
      MailMessage mail = new MailMessage();

      mail.To.Add("abc@gmail.com");

      mail.From = new MailAddress("abc@gmail.com", 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("abc@gmail.com", "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);
   }

}

答案 1 :(得分:2)

表示未处理的错误意味着您没有捕获异常。现在,您在catch块中实际处理异常的工作取决于您,例如将其记录到文件,排队重试或显示消息框。或者试图做一些事情来防止异常。

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

  }
}

另请注意,您可以访问ex.Message以查看异常消息,或者向catch块添加断点并检查ex。由于身份验证的要求,您可能需要做更多工作才能使其与gmail一起使用。我不知道网络凭据是否足够。我一直遇到麻烦,并使用我的ISP的电子邮件帐户,不需要身份验证。

答案 2 :(得分:2)

您可以在代码中添加try / catch块并忽略错误,或者发布整个异常消息,以便我们帮助您解决实际问题。

答案 3 :(得分:1)

根据this page通过SSL发送邮件时,您应该使用端口465,即

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

你应该仍然可以在try / catch块中包含对Send的调用,并处理任何被抛出的SmtpException,如果你可以做任何事情的话。

请注意,您也可以将smtpClient配置放在web.config文件中(例如,请参阅here)。

答案 4 :(得分:1)

您尚未指定Gmail的端口号587。

smtp.port = 587;

你的问题应该解决了。否则你的代码看起来不错。