通过 C# 网页发送大量电子邮件的最佳方式是什么?

Rob*_*Rob 3 c# asp.net email

我有一个项目的一部分,需要从网页发送 1 到 2000 封电子邮件。一个开源错误跟踪器使用线程发送电子邮件,但它充满了错误。

所以只是想知道是否有人对我如何创建一个最多发送 2000 封电子邮件的程序有任何想法?

我的一位同事告诉我将其保留为一个进程(一次发送一封电子邮件的正常例行程序),因为无论如何处理所有电子邮件都不会花费很长时间。似乎不对,我想使用线程......也许我喜欢复杂的例程?

[额外]我有类似的东西: foreach(emailAddresses 中的字符串电子邮件) { MailMessage mailMessage = new MailMessage(); mailMessage.To.Add(...) ... SmtpClient 客户端 = new SmtpClient(); 客户端.Send(mailMessage); }

goo*_*ate 5

使用System.Net.Mail发送邮件;但是,您应该使用 .NET 4 以避免任何连接问题,因为 Connect 网站上存在一个错误,该错误将导致您的消息无法发送。

不要使用线程有以下三个原因:

原因 1:MTA 是为了处理消息重试而设计的,并且可以处理失败。您的代码可能不够健壮,无法处理此问题。System.Net.Mail 无法立即执行此操作。

原因 2:如果您确实使用线程,您将压垮目标 SMTP 服务器并阻止您。大多数 Windows SMTP 中继默认阻止超过 15 个(或 25 个?)并发连接。

如果您使用的是 Exchange 2010 或 2007,则如果您每分钟发送超过 x 条消息,则会激活一项限制功能。这是每个 MTA 的设置,需要根据您的具体情况进行调整。

原因 3:执行此操作的首选方法是拥有一个专用的 IIS SMTP 服务器(或 Exchange...),该服务器允许大容量并发连接。只需使用 Sys.Net.Mail 将投递任务交给邮件基础设施即可。邮件基础设施不需要太多。只要有一个允许您中继的 MTA,它就会代表您“智能主机”到互联网上。

有关如何设置 MTA 的更多问题可以在 @serverfault 上得到解答。

然而

如果您从 ASP.NET 网页发送电子邮件,您可能需要使用线程...否则会阻止 UI。除此之外,我认为不需要为电子邮件生成任务运行并发线程。

最后,如果您要将同一封邮件发送给许多收件人,则可以使用通讯组列表或将许多目标收件人附加到同一封邮件中。