在ASP.NET中发送大量电子邮件的最佳方法

5
我有一个网站,需要向已注册的会员发送个性化邮件。这不是广告程序(垃圾邮件),而是定期通知他们自己的状态。需要一次批量发送的电子邮件数量为3000封。该网站托管在 Windows 2008 Server(VPS)上,我已经在 IIS7 上安装了SMTP。
花费一些时间阅读有关如何通过 asp.net 实现群发电子邮件机制的文章后,我感到有些困惑。
从我所看到的内容中,我可以:
- 在循环中同步或异步(新线程)发送它们 - 准备好并将它们放在 pickup 目录中 - 创建一个检查现有队列的 Windows 服务 - 从 sql server 2008 发送它们(我有 Express 版本)
您能建议最好的方式吗?
我是否会遇到我的服务器被加入黑名单的问题?
除此之外,还有没有更好的方法来实现这个功能?
提前致谢。

3
不要这样做。在服务器内部进行此操作会有许多风险:被列入黑名单 - 是的。将其通过合法的服务运行 - 有很多可用的选择。 - inevio
1个回答

6
关于您的服务器被列入黑名单,重点不在于您“一次”发送多少邮件,而是“发送给谁”。如果您将邮件发送给不想要它们的用户,并且他们将您报告为垃圾邮件发送者,则您无疑会被许多DNS黑名单网站列入黑名单。
始终确保人们首先使用双重选择系统进行选择,您发送电子邮件,如果他们响应“激活帐户”,那么您可以发送更多电子邮件,如果他们不假定他们输入了错误的地址。
就处理方式而言,我始终发现最好的方法是编写一个与站点分开运行的小型服务。您真的不想使用与IIS服务相同的线程发送电子邮件。
如果您真的想采用完全专业的方法,那么您需要实施某种形式的消息队列系统(例如ActiveMQ或RabbitMQ),将消息发送到其中并将它们放入队列中,然后创建一个Windows进程来监听其中一个队列,当收到电子邮件时,发送出去。这样,如果您的邮件处理器死机或运行缓慢等等,您可以启动更多的处理器,将其连接到同一个队列,并使更多的进程共享工作(简单分配)。
一种稍微不那么复杂的方法是使用FIFO队列,在数据库中很容易实现,只需将电子邮件保存到带有日期戳的表中,并使用SELECT TOP 10 * FROM OutgoingMail ORDER BY datestamp ASC(记得使用适当的索引)然后使用服务批量发送它们。
如果可能的话,请避免从IIS异步处理此类内容,因为您不希望应用程序池在任务执行过程中重新启动。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接