当我在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
来触发事件,要么实际查看是否捕捉到任何异常。几乎在任何情况下,甚至没有捕捉到任何特定异常的空捕获块都是可怕的想法。它们会导致各种各样的问题。