【问题标题】:performance of bulk emailing using system net mail使用系统网络邮件的批量发送电子邮件的性能
【发布时间】:2014-02-04 08:34:00
【问题描述】:

我被要求研究一个用于 Intranet 系统的批量电子邮件,并希望得到一些建议。

目前我们使用 System.Net.Mail 并通过客户自己的 smtp 服务器(通常是 Microsoft Exchange)同步发送电子邮件。

如果我们允许他们向越来越大的群体发送电子邮件,我可能会遇到什么样的陷阱?我考虑过我可能需要考虑异步发送它们,将一封电子邮件发送到大型分发列表而不是发送电子邮件给每个收件人是否更快。

任何建议将不胜感激

【问题讨论】:

    标签: .net email smtp system.net.mail


    【解决方案1】:

    对于发件人来说,发送到通讯组列表会更快(您只发送 1 封电子邮件)。但是,电子邮件服务器仍然需要向该列表中的所有用户发送一封电子邮件,因此它只节省了 50% 的时间。

    但是,大型电子邮件列表确实有 drawbacks

    【讨论】:

    • 好的,谢谢,这会减轻 Web 服务器的负载并将工作传递给 smtp 服务器。
    • 是的。无论如何,SMTP 服务器都会完成这项工作,但 Web 服务器只发送一条消息而不是多条消息。
    【解决方案2】:

    在典型的低容量场景中,有两个计算机系统需要在此处考虑计算负载。

    1. 发送电子邮件的计算机(通常是 Web 服务器)
    2. 邮件服务器

    我个人认为邮件服务器有点像一个黑盒子。我不担心它会过载,直到它报告问题然后我调整我的电子邮件超时发送电子邮件之间的延迟或两者兼而有之。

    Web 服务器当然不应该因为发送大量电子邮件而陷入困境,更糟糕的是,请求线程不应该被垄断,这会产生另一个问题 - 规模。因此,这意味着应该使用非线程池线程来处理电子邮件的发送。想到Async/Await关键字或使用SmtpClient.SendAsync

    我相信这两者都是妥协,但仍然比同步发送电子邮件要好。根本不应该使用 Web 服务器来发送大量电子邮件。这应该被卸载到另一台专门用于此任务的计算机上。

    • 应用服务器或
    • 电子邮件服务

    为了让这个场景工作,一种方法需要一个简单但可靠的系统,将电子邮件请求持久化到一个队列(可能是一个简单的数据库表),并让应用程序服务器(邮件服务)在另一端弹出队列.

    所以在专用应用服务器上异步发送。

    我仍然不相信这就是结局。如何快速发送大量电子邮件。在 8 核计算机上生成 1000 个线程可能效果不佳。因此,您的代码需要能够处理这种在安排电子邮件时有效利用可用处理能力的场景。我使用的一个组件可以完美地处理这种情况 - MassMailer.NET。它控制线程数,还支持内置和自定义队列/存储库。它建立在 Composing plus Sending Email 和在 background threads 上调度任务的两个其他组件之上。

    事物的商业和社会方面

    要考虑的另一件事是您是否希望在“收件人”字段中包含所有收件人。虽然这减轻了 Web 服务器的负担,但由于每个接收邮件的人都可以访问收件人列表这一事实,事情变得复杂了。对于包括营销列表在内的某些业务流程,这是绝对不行的。此外,在内部使用此方法时,可能会导致稍后发送更多邮件,因为人们单击“全部回复”按钮(这在当今的商业环境中当然很常见)。

    批量受益

    1. 减轻 Web 服务器的负载,因为它只需要发送一封电子邮件。

    散装缺点

    1. 由于商业利益冲突,不应与某些邮件列表一起使用
    2. 由于“全部回复”按钮,无意中导致邮件服务器必须在以后处理更多电子邮件。

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 1970-01-01
      • 2021-02-08
      • 2016-04-04
      • 2010-12-11
      • 2023-03-28
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多