使用系统网络邮件批量发送电子邮件的性能

时间:2014-02-04 08:34:00

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

我被要求查看内联网系统的批量电子邮件,并想要一些建议。

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

如果我们允许他们向越来越大的群体发送电子邮件,我可能面临哪些陷阱?我认为我可能需要查看异步发送它们,是否可以更快地将一封电子邮件发送到大型通讯组列表而不是发送给每位收件人的电子邮件。

非常感谢任何建议

2 个答案:

答案 0 :(得分:0)

发件人发送到分发列表的速度会更快(您只发送1封电子邮件)。但是,电子邮件服务器仍然必须向该列表上的所有用户发送电子邮件,因此它只能节省50%的时间。

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

答案 1 :(得分:0)

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

  1. 发送电子邮件的计算机(通常是网络服务器)
  2. 邮件服务器
  3. 我个人认为邮件服务器有点像黑盒子。在报告问题然后我调整电子邮件超时发送电子邮件之间的延迟或两者兼而有之后,我不担心会超载。

    Web服务器当然不应该因发送大量电子邮件而陷入困境,甚至最糟糕的是请求线程不应该被垄断,否则会产生另一个问题 - 扩展。因此,这意味着应该使用非线程池线程来处理电子邮件的发送。我会想到Async/AwaitSmtpClient.SendAsync关键字。{/ 3}}。

    我认为这些都是妥协,但仍比同步发送电子邮件更好。不应该使用Web服务器来发送大量电子邮件。这应该卸载到专门执行此任务的另一台计算机上。

    • Application Server或
    • 电子邮件服务

    为了使这种情况有效,一种方法需要一个简单但可靠的系统,将电子邮件请求保存到队列(可能是一个简单的数据库表),并让应用程序服务器(邮件服务)在另一端弹出队列

    因此,在专用的应用程序服务器上异步发送。

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

    The Business&社交方面的事情

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

    批量购买优惠

    1. 关闭Web服务器的负载,因为它只需要发送一封电子邮件。
    2. 批量回顾

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