在asp.net中发送批量电子邮件的最佳方式

时间:2012-06-11 09:56:33

标签: c# asp.net email smtp bulk

我有一个网站,我需要向注册会员发送个性化电子邮件。这不是广告程序(垃圾邮件),而是不时告知他们的状态。必须批量发送的电子邮件数量最多为3000个。该网站托管在Windows 2008 Server(VPS)上,我在IIS7上安装了SMTP。

在花了一些时间阅读如何实现通过asp.net发送大量电子邮件的机制后,我感到有点困惑。


从我的阅读中我可以:

  • 在循环中同步或异步(新线程)发送它们
  • 准备并将它们放入皮卡目录
  • 创建一个检查现有队列的Windows服务
  • 从sql server 2008发送它们(我已快递)。

请您建议最好的方式吗?

我是否有关于黑名单我的服务器的问题?

有没有更好的方法,这里没有提到实现这个?

提前致谢。

1 个答案:

答案 0 :(得分:6)

关于您的服务器被列入黑名单,您一次发送多少“您发送给他们的人”并不重要。如果您将它们发送给不想要它们的用户,并且他们将您报告为垃圾邮件发送者,那么您无疑会被众多DNS黑名单网站中的一个列入黑名单。

始终确保人们首先选择使用双重选择系统,您发送电子邮件,如果他们回复“激活帐户”,那么您可以向他们发送更多电子邮件,如果他们不认为他们输入了错误的地址。

就最佳处理方式而言,我总是发现最好的方法是编写一个与网站分开运行的小型服务。您真的不想使用与IIS服务相同的线程发送电子邮件。

如果你真的想要完全成熟的专业方式。您可能希望实现某种形式的消息队列系统(如ActiveMQ或RabbitMQ),您可以在其中发送消息,并将它们放入队列中,然后您将创建一个Windows进程来侦听其中一个队列,并在电子邮件发出时发送出去。这样,如果您的邮件处理器死机或运行缓慢等等,您可以调出更多处理器,将其连接到同一队列,更多进程共享作业(简单分发)。

稍微复杂一点的方法是使用FIFO队列,这可以很容易地在数据库中进行,只需将电子邮件保存到带有日期戳的表中,然后使用SELECT TOP 10 * FROM OutgoingMail ORDER BY datestamp发送它们ASC(记住并使用适当的索引)然后使用服务将它们分批发送出去。

如果可能的话,应该尽可能避免Asynch这样的事情,你不希望应用程序池在你的工作中途回收。