使用 SmtpClient(C#)发送大量邮件一段时间后会花费很长时间

使用 SmtpClient(C#)发送大量邮件一段时间后会花费很长时间

我正在使用这段代码发送邮件:

SmtpClient client = new SmtpClient();
client.Host = smtpServer;
client.Send(mailMessage);

如果我每秒触发此代码十次,那么在发送几百封邮件之后,发送一封邮件需要 10 秒...这里可能涉及队列吗?

答案1

看起来邮件服务器正在强制这种延迟,可能是为了避免垃圾邮件:http://en.wikipedia.org/wiki/Tarpit_(网络)

您使用的是什么邮件服务器?它是如何配置的?您使用经过身份验证的还是未经身份验证的 SMTP 发送邮件?

答案2

正如 Massimo 所说,许多智能 SMTP 服务器都具有节流功能。它还可以使用网络节流功能在 SMTP 服务器外部进行限制。

如果您的代码被阻塞,则应异步发送。您可以使用 SmtpClient 上的 .SendAsync() 方法(这不是我的最爱),或者使用类似 SmartThreadPool 的东西为每条消息创建一个线程。

如果您异步发送这些消息,则无法将消息包含在 using() 语句中,因此您需要在 MailMessage 上调用 .Dispose(),否则会出现资源问题。

相关内容