我有一个 MVC3 Web 应用程序,我正在使用 MvcMailer 发送电子邮件(一次可能有数千个)。如果我只是将每个收件人密件抄送到同一封电子邮件中,这很好用,但是如果我尝试循环通过他们向他们发送单独的电子邮件,它会非常慢,我猜这是因为它每次都再次连接到 smtp 服务器?
我们有自己的 smtp 服务器,它正在连接,我目前正在尝试发送这样的电子邮件:
foreach(Person x in names)
{
var mail = Mailer.Example_Mail()
mail.To.Add(x.Email_Address);
mail.Send();
}
我从教程中知道,您可以将电子邮件保存到文件中,而不是连接到 smtp 服务器并立即发送它们,而且我还从这篇文章中接受的答案中知道,您可以让 IIS 接收它们并发送它们,但是不幸的是,我不知道怎么做。
如果有人可以让我知道这样做的最佳方法是什么,那就太棒了!谢谢大家!
更新
我已经尝试使用SendAsync()
@Mike 建议的方法,这确实大大加快了速度,但它现在丢失了约 40% 的电子邮件。在没有抛出任何错误的情况下,每 100 封电子邮件中只有大约 65 封可以通过。我尝试按照“处理异步电子邮件的事件”部分中的建议捕获任何错误,但似乎根本没有抛出任何错误。下面的代码:
List<object> errors = new List<object>();
var mail = Mailer.Example_Mail();
mail.To.Add("some@address.com");
for (int i = 0; i < 100; i++)
{
var client = new SmtpClientWrapper();
client.SendCompleted += (sender, e) =>
{
if (e.Error != null || e.Cancelled)
{
errors.Add(e);
}
};
mail.SendAsync("user state object", client);
}