【发布时间】:2012-05-04 16:40:04
【问题描述】:
我编写了一个控制台应用程序,它读取表格中的消息队列并将它们作为电子邮件发送给多个收件人。一个典型的使用场景是一次性发送 2000 封电子邮件,每封邮件都发送到不同的电子邮件地址,邮件正文略有不同(邮件合并名称、地址等)
该应用程序运行良好,似乎在一分半钟内处理了 2000 封邮件。我使用的方法非常简单(为简洁起见,我删除了 try..catch 块):
using (var mailBot = new SmtpClient())
{
foreach (var mail in dataContext.Mails
.Where(item => !item.IsSent)
.OrderBy(item => item.MailId)
.ToList())
{
mailBot.Send(new MailMessage(mail.MailFrom, mail.MailTo, mail.Subject, mail.Message));
mail.IsSent = true;
dataContext.SaveChanges();
}
}
现在,我的问题是,我怎样才能加快这个应用程序的运行速度?我觉得这种串行方法可能会通过使用SmtpClient.SendAsync() 来改进,但我担心我无法控制将创建多少线程,并且我仍然需要应用程序等待发送结果,因为我需要标记邮件是否发送成功。另外,我认为接收 SMTP 服务器只能处理一定数量的并发请求。
那么,我是否自欺欺人地认为多线程解决方案可以加快邮件传递并允许应用提前退出?
【问题讨论】:
-
这里是 gmail 如何处理批量发件人support.google.com/mail/bin/answer.py?hl=en&answer=81126
-
请注意,反垃圾邮件过滤器拒绝您的电子邮件的风险非常高。如果 2 个以上的电子邮件地址在同一个邮件服务器上,它可以将它们拒绝为垃圾邮件。
标签: .net smtpclient