【发布时间】:2018-02-02 18:26:06
【问题描述】:
我有一个 C# 中的 ASP.NET MVC Web 应用程序。我想毫不拖延地发送带有附件的批量电子邮件。我使用 Microsoft.Exchange.WebServices 使用交换服务器发送电子邮件。一切正常,但即使发送 2 封带有 1 MB 附件的电子邮件也需要大约 30-45 秒的时间。我也有发送 2000 封电子邮件的用例,所以我知道它会导致服务器崩溃。
要求:当我在我的 UI 中点击发送时,它应该会提示用户说正在发送电子邮件并且用户可以继续浏览。
是否有任何异步方式可以使用 EWS 在 ASP.NET C# 中发送批量电子邮件?我搜索了一下,发现了几个我还没有实现的选项,但我有几个问题:
我可以使用委托异步执行任务吗?如果用户退出应用程序会发生什么。它会完成发送电子邮件还是停止?
我可以使用 System.Threading.ThreadPool.QueueUserWorkItem 吗?如果用户退出应用程序会发生什么。它会完成发送电子邮件还是停止?
过去我曾使用 MSMQ 完成此任务,但我们没有时间实现包括侦听器在内的整个机制。
【问题讨论】:
-
将电子邮件的实际发送分离到不同的应用程序中。 Web 应用程序只是将要发送的电子邮件排队。这是使用消息队列还是简单地将记录保存到数据库表中取决于您。一个单独的应用程序,可能是 Windows 服务或计划的控制台应用程序或某处的某种定期运行的作业,将轮询该数据(消息队列、数据库等)并遍历记录以发送电子邮件。
标签: asp.net-mvc email asynchronous threadpool exchangewebservices