我正在使用这段代码发送邮件:
SmtpClient client = new SmtpClient();
client.Host = smtpServer;
client.Send(mailMessage);
如果我每秒触发这个代码十次,那么在几百封邮件之后,发送一封邮件需要 10 秒......这里会不会涉及队列?
我正在使用这段代码发送邮件:
SmtpClient client = new SmtpClient();
client.Host = smtpServer;
client.Send(mailMessage);
如果我每秒触发这个代码十次,那么在几百封邮件之后,发送一封邮件需要 10 秒......这里会不会涉及队列?
看起来邮件服务器正在强制这种延迟,可能是为了避免垃圾邮件:http://en.wikipedia.org/wiki/Tarpit_(networking)。
你用的是什么邮件服务器?它是如何配置的?您是使用经过身份验证的还是未经身份验证的 SMTP 来发送邮件?
正如 Massimo 所说,许多智能 SMTP 服务器都具有节流功能。也可以使用网络限制将其限制在 SMTP 服务器之外。
如果您的代码被阻塞,您应该异步发送。您可以使用 SmtpClient 上的 .SendAsync() 方法,这不是我最喜欢的,或者使用 SmartThreadPool 之类的东西为每条消息创建一个线程。
如果您异步发送这些消息,您将无法将消息包含在 using() 语句中,因此您需要在 MailMessage 上调用 .Dispose(),否则会出现资源问题。