发送大量通知邮件而不被阻止

3
对于我客户的定制化CRM,我希望用户(技术人员)能够通过电子邮件收到标记案例的更改通知。
这需要一个简单的订阅映射表,用于用户和案例之间的关联,以及每当从日志记录方法中对案例进行更改时自动发送电子邮件。
如何向订阅用户发送10-100封电子邮件,而不会拖慢我的日志记录方法?我的SMTP服务器位于我的局域网上,因此发送应该很快,但最好由外部排队处理来处理此问题。
我可以设置cron作业每10分钟发送任何未完成的电子邮件,但对于这个特定的客户案例非常时间敏感,即时通知(尽可能快地发送电子邮件)将是很好的选择。
如何在ASP.NET MVC内部发送批量通知电子邮件,而不会拖慢我的日志记录方法?
2个回答

4
2007年,我被要求调查一个Web服务器突然冻结并开始发送503错误,几分钟后又恢复的案例。简而言之,最终发现是发送电子邮件阻塞了服务器(除了一些糟糕的代码)。
基本上,微软的SMTP服务器是以单线程服务实现的 - 我最近检查过。这意味着您所有有价值的ASP.NET线程都必须排队到单个线程的应用程序中发送不太紧急的电子邮件。您需要将网站与发送电子邮件分离 - 这是每个人都这样做的,也有很好的原因。
将电子邮件写入队列,并有一个进程读取和发送电子邮件。

2

在ASP.NET应用程序中发送电子邮件并不是一个好主意,因为它可能会占用宝贵的服务器资源。更好的解决方案是设置一个Windows服务来执行此任务,甚至编写一个控制台应用程序,可以使用Windows Scheduler进行调度。Quartz.NET是一个很好的解决方案,允许您安排作业。

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


@FreshCode,是的,MSMQ也非常适合这种任务。 - Darin Dimitrov

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