我正在更新一些与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封电子邮件。
答案 0 :(得分:4)
从查看规范来看,超时仅承诺该方法将在该时间内返回,而不是发送已停止。
如果您需要发送多封电子邮件,请考虑使用SendAsync method并订阅SendCompleted event以确定发送电子邮件是否成功。