我有一个MVC3网络应用程序,我正在使用MvcMailer发送电子邮件(可能一次成千上万)。如果我只是将每个收件人BCC发送到同一个电子邮件中,这是正常工作,但如果我尝试循环通过他们发送个人电子邮件它是非常慢的,我猜是因为它每次都连接到smtp服务器?
我们有自己连接的smtp服务器,我目前正在尝试发送这样的电子邮件:
foreach(Person x in names)
{
var mail = Mailer.Example_Mail()
mail.To.Add(x.Email_Address);
mail.Send();
}
我从tutorial知道您可以将电子邮件保存到文件而不是连接到smtp服务器并立即发送,我也从此post的接受答案中知道您可以让IIS接收并发送它们,但不幸的是我不知道如何。
如果有人能让我知道这样做的最佳方法是什么,那将是非常棒的!谢谢大家!
更新
我已经尝试使用@Mike建议的SendAsync()
方法,这确实可以大大提高速度,但它现在正在丢失约40%的电子邮件。没有错误被抛出,每100封电子邮件中只有65封通过。我试图捕获“处理异步电子邮件事件”部分中的建议here的任何错误,但似乎根本没有抛出任何错误。代码如下:
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);
}