2012-06-11 75 views
5

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

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


从我读我可以:

  • 同步或异步的(新线),给他们一个循环
  • 准备,把他们在拾取目录
  • 创建一个Windows服务将检查现有队列
  • 从sql server 2008发送它们(我有快递)。

请问您可以建议最好的方法吗?

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

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

在此先感谢。

+3

不要。您的服务器在内部执行这些操作会遇到很多风险:黑名单 - 是的。通过合法的服务运行它 - 有一吨可用。 – matthewnreid

回答

5

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

务必确保人们首先选择使用双重选择加入系统,如果您发送电子邮件,如果他们回复“激活帐户”,那么您可以向他们发送更多电子邮件(如果他们不假定他们输入的话)错误的地址。

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

如果你想真正走完整的专业方式。你需要实现某种形式的消息队列系统(比如ActiveMQ或者RabbitMQ),然后将它们发送到一个队列中,然后创建一个Windows进程来监听其中一个队列,并且当一封邮件到达时发送出去。这样,如果你的邮件处理器死了,或者运行缓慢等等,你可以调出更多的处理器,把它连接到同一个队列,更多的进程共享这个工作(简单分发)。

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

如果可能,IIS应该尽可能地避免异步,因为您不希望应用程序池回收在您的工作中一半。

相关问题