SmtpClient.Send将发送消息和超时
本文关键字:消息 超时 Send SmtpClient | 更新日期: 2023-09-27 18:15:17
我正在更新一些旧代码与SQL集成。我所在的公司偶尔会发送大量电子邮件,这会大大降低邮件服务器的速度。如果电子邮件开始增加,我们想把它们排到数据库中。在测试对代码的一些更改时,我注意到我将收到电子邮件并且客户端仍然会超时。这将导致问题,因为客户端随后将电子邮件设置在队列中,当另一个服务试图清理数据库时,我将稍后收到它。
SmtpClient emailClient = new SmtpClient(Settings.SmtpServer);
emailClient.Timeout = 100;
bool sent = false;
try
{
using (Impersonate imp = DA.GetImpersonator())
{
emailClient.Send(message);
sent = true;
}
}
catch (SmtpException) { }
finally
{
if (sent)
{
email.IsSent = true;
DA.Save(email);
}
}
10次测试中,9次超时,1次成功;我收到了7封邮件
从规范来看,超时只承诺方法将在该时间内返回,而不保证发送已停止。
如果您需要发送多封邮件,请考虑使用SendAsync方法并订阅SendCompleted事件来确定发送邮件的成功/失败。