我正在使用这段代码发送邮件:
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(),否则会出现资源问题。