【问题标题】:Send Bulk emails asynchronously using EWS in ASP.NET MVC在 ASP.NET MVC 中使用 EWS 异步发送批量电子邮件
【发布时间】: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# 中发送批量电子邮件?我搜索了一下,发现了几个我还没有实现的选项,但我有几个问题:

  1. 我可以使用委托异步执行任务吗?如果用户退出应用程序会发生什么。它会完成发送电子邮件还是停止?

  2. 我可以使用 System.Threading.ThreadPool.QueueUserWorkItem 吗?如果用户退出应用程序会发生什么。它会完成发送电子邮件还是停止?

  3. 过去我曾使用 MSMQ 完成此任务,但我们没有时间实现包括侦听器在内的整个机制。

【问题讨论】:

  • 将电子邮件的实际发送分离到不同的应用程序中。 Web 应用程序只是将要发送的电子邮件排队。这是使用消息队列还是简单地将记录保存到数据库表中取决于您。一个单独的应用程序,可能是 Windows 服务或计划的控制台应用程序或某处的某种定期运行的作业,将轮询该数据(消息队列、数据库等)并遍历记录以发送电子邮件。

标签: asp.net-mvc email asynchronous threadpool exchangewebservices


【解决方案1】:

为什么需要使用 EWS? SMTP 将是批量发送邮件的更好选择,如果邮件不是发往内部用户,Exchange 服务器上的传输服务将在必要时处理和排队邮件,然后将它们发送到外部源。使用 EWS 意味着 Exchange 存储将处理邮件,如果启用了限制,您可能会受到限制,这应该会阻止您对服务器造成严重影响,但会减慢处理速度。使用 SMTP 将避免对使用 Outlook 的最终用户产生任何影响(如果服务器是多卷的并且您的应用程序最终不会成为您自己的服务器,则有一些附加条件)但是可能会影响进出您组织的消息流,具体取决于关于您发送多少电子邮件,因为它需要处理队列中的消息。

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多