确认使用C#发送电子邮件



当我在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");
}
}

提前谢谢。

您需要在中放入一些错误处理代码

Catch {...}

否则,您只会发现一个错误并忽略它。如果catch块没有启动,那么只要你能合理地确定(不需要检查送货收据(,那么你就可以假设电子邮件已经成功发送。

如果使用SendCompleted事件,则需要使用SendAsync异步发送电子邮件。否则,在电子邮件发送或失败之前,该方法不会返回控制。

在您发布的示例中,空捕获正在吞噬任何可能发生的错误,甚至可以确定这么多错误。

因此,要么使用SendAsync来触发事件,要么实际查看是否捕捉到任何异常。几乎在任何情况下,甚至没有捕捉到任何特定异常的空捕获块都是可怕的想法。它们会导致各种各样的问题。

最新更新