当我在C#中使用STMP发送电子邮件时,尽管我已经使用SendCompleted
事件处理程序,但不能确保已发送电子邮件。这是我的代码:
private void btnLogin1_Click(object sender, EventArgs e)
{
try
{
MailAddress FromAddress = new MailAddress("*******", "*******");
MailAddress ToAddress = new MailAddress("*****");
String FromPassword = "******";
SmtpClient SMTP = new SmtpClient();
SMTP.Host = "smtp.yandex.com";
SMTP.Port = 587;
SMTP.EnableSsl = true;
SMTP.DeliveryMethod = SmtpDeliveryMethod.Network;
SMTP.UseDefaultCredentials = false;
SMTP.Credentials = new NetworkCredential(FromAddress.Address, FromPassword);
SMTP.SendCompleted += SMTP_SendCompleted;
MailMessage Message = new MailMessage();
Message.From = FromAddress;
Message.To.Add(ToAddress);
Message.Subject = "Welcome";
Message.SubjectEncoding = Encoding.UTF8;
Message.Priority = MailPriority.High;
Message.IsBodyHtml = true;
Message.Body = "<b>Test Mail</b>";
Message.BodyEncoding = Encoding.UTF8;
SMTP.Send(Message);
}
catch { }
}
private void SMTP_SendCompleted(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("Sent");
}
}
谢谢。
答案 0 :(得分:3)
您需要在其中放入一些错误处理代码
Catch {...}
否则,您只是捕获一个错误而忽略了它。 如果catch块没有触发,则在您可以合理确定的范围内(无需检查送达回执),就可以假定电子邮件已成功发送。
答案 1 :(得分:2)
如果您正在使用SendCompleted
事件,则需要使用SendAsync
异步发送电子邮件。否则,直到发送电子邮件或发送电子邮件失败后,该方法才会返回控制。
在您发布的示例中,空捕获捕获了可能发生的所有错误,甚至确定了很多错误。
因此,可以使用SendAsync
来触发事件,或者实际查看是否捕获了任何异常。在几乎每种情况下,甚至都没有捕获到任何特定异常的空捕获块是可怕的想法。它们会导致各种各样的问题。