我正在更新一些旧代码以与 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 封电子邮件。
最佳答案
从规范上看,timeout只是 promise 方法会在该时间内返回,并不表示已经停止发送。
如果您需要发送多封电子邮件,请考虑使用 SendAsync method并订阅 SendCompleted event判断邮件发送成功/失败。
关于c# - SmtpClient.Send 将发送消息并超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8219413/