在不阻止的情况下发送批量通知电子邮件

Posted

技术标签:

【中文标题】在不阻止的情况下发送批量通知电子邮件【英文标题】:Sending bulk notification emails without blocking 【发布时间】:2011-06-09 01:51:25 【问题描述】:

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

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

如何向订阅用户发送 10 到 100 封电子邮件,而不会使我的日志记录方法陷入困境?我的 SMTP 服务器在我的 LAN 上的对等点上,因此发送应该很快,但理想情况下这应该由外部排队进程处理。

我可以让 cron 作业每 10 分钟发送一次任何未完成的电子邮件,但对于这种特定的客户案例来说,时间非常敏感,即时通知(尽可能即时)会很棒。

如何从 ASP.NET MVC 中发送批量通知电子邮件而不使我的日志记录方法陷入困境?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

@FreshCode,是的,MSMQ 也非常适合这类任务。【参考方案2】:

早在 2007 年,我被要求调查 Web 服务器突然冻结并开始发送 503 错误并在几分钟后返回的案例。长话短说,最后发现它正在发送阻止服务器的电子邮件(除了一些错误的代码)。

基本上微软的 SMTP 服务器是作为单线程服务实现的 - 我上次检查过。这意味着您所有有价值的 ASP.NET 线程服务请求将不得不排队到单线程单体应用程序发送不那么紧急的电子邮件。您需要将您的网站与发送电子邮件分离开来——这是每个人都在做的事情,这是有充分理由的。

将您的电子邮件写入队列,并有一个阅读和发送电子邮件的过程。

【讨论】:

以上是关于在不阻止的情况下发送批量通知电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

设计 - 在不发送电子邮件的情况下创建已确认的用户帐户?

如何在不使用java发送任何邮件的情况下检查域中是不是存在电子邮件ID

在不删除 <img> 的情况下发送 HTML 电子邮件意图?

如何在不影响 Node.JS 应用程序的情况下从后台异步发送大量电子邮件?

是否可以在不使用 MIME 的情况下使用包含 CSS 装饰的 PHP 发送 html 电子邮件?

如何在不发送消息的情况下在 Android 中打开默认电子邮件客户端?