无阻塞地发送批量通知电子邮件

时间:2011-01-14 10:40:18

标签: asp.net-mvc email bulk subscription

对于我客户的定制CRM,我希望通过电子邮件通知用户(技术人员)对已标记案例的更改。

这保证了用户和案例之间的简单订阅映射表以及每次在日志记录方法中对案例进行更改时发送的自动电子邮件。

如何在不降低记录方法的情况下向订阅用户发送10-100封电子邮件?我的SMTP服务器位于我的LAN上的对等端,因此发送应该很快,但理想情况下,这应该由外部排队过程处理。

我可以让cron工作每10分钟发送一次优秀的电子邮件,但对于这个特定的客户端案例非常时间敏感,即时通知(就像电子邮件一样)会很棒。

如何在不影响我的日志记录方法的情况下从ASP.NET MVC中发送批量通知电子邮件?

2 个答案:

答案 0 :(得分:3)

早在2007年,我被要求调查Web服务器突然冻结并开始发送503错误并在几分钟后回来的情况。总而言之,最后发现它正在发送阻止服务器的电子邮件(除了一些不良代码)。

基本上Microsoft的SMTP服务器是作为单线程服务实现的 - 最后我检查过。这意味着所有提供请求的宝贵ASP.NET线程都必须排队到单个线程单片应用程序才能发送不那么紧急的电子邮件。你需要将你的网站与发送电子邮件分开 - 这是每个人都做的事情,并且有充分的理由。

将您的电子邮件写入队列,并让流程阅读并发送电子邮件。

答案 1 :(得分:2)

从ASP.NET应用程序发送电子邮件不是一个好主意,因为它可能会垄断宝贵的服务器资源。更好的解决方案是设置Windows服务以执行此任务,甚至编写可安排与Windows Scheduler一起运行的控制台应用程序。 Quartz.NET是一个很好的解决方案,您可以考虑让您安排工作。

如果您希望从特定控制器操作中触发这些电子邮件发送,您还可以拥有一个可以异步调用的单独WCF服务。