我正在使用ASP.NET MVC(旧版本是ColdFusion)构建的Windows 2008 VPS上启动新版本的调查系统。
系统操作的一个重要部分是每周向我们的订阅者发送一批10,000封电子邮件,然后完成一个简短的在线调查。
我使用VPS自己的SMTP服务器进行邮件发送,与旧版本相同,但发现批量邮件发送时间比以前长得多。
我的调查表明我的循环代码很有效,几乎所有的延迟都发生在实际的SMTP发送操作中。
研究进一步表明,在按顺序处理长邮件列表时会出现这种情况,并且电子邮件批次通常是通过提供与回调异步操作的多个并发SMTP会话的托管列表来完成的。据推测,这就是cfmail(我们之前使用过的)标签在幕后做的事情。
所以看起来我需要在ASP.NET中管理一系列System.Net.Mail.SmtpClent会话来复制这种行为,并使用SendAsync方法(它生成自己的线程来完成每个任务)。 / p>
我的问题是,在我们的服务器上,在启动邮件发送的HTTP请求中,是否有人可以看到这种方法同时运行多个线程以及最多10,20,50或100个SMTP会话的潜在问题?
答案 0 :(得分:0)
这是一个很好的方法,但您不希望有太多的并发SMTP会话,原因如下:
"在调用SendAsync之后,您必须等待电子邮件传输完成后再尝试使用Send或SendAsync发送另一封电子邮件。"