ASP.NET - 并行发送批量邮件 - 最快速,最有效的方式

时间:2018-06-19 08:57:51

标签: asp.net vb.net email asynchronous task-parallel-library

我想向我们网站的注册用户发送简报 - 超过100000

今天,我将邮件发送到一个简单的for循环中,这个循环非常繁重而且很慢。 我希望它能够尽快完成整个过程(即使该过程在后台运行并且没有打扰用户的UI)

我尝试了TPLAsyncsmtpClient.SendAsyncMail()等等,但实际上从未创建过一个可以证明这些系统工作速度更快(或根本不工作)的工作示例。 我已经阅读了许多使用线程的帖子和解释,但它们似乎已经过时,已弃用或无关紧要,因为我肯定不知道有新技术。

您能否告诉我,并行发送多封电子邮件的最有效,最快捷的方法是什么?你能告诉我一个有效的例子吗?

更新20/06/2018

每个用户的每封电子邮件都不同。因此,BCC解决方案对我来说无关紧要。

我会再详细说明一下我的问题: 我只专注于使用发送功能的高级别,例如ASP.NET smtpClient.Send()将邮件发送到SMTP。

我现在忽略了SMTP本身的一部分。我有一个很棒的SMTP服务器,知道如何处理排队。

现在的主要缺陷是Send函数,它将字节上传到ASP.NET中的SMTP服务器。 那是我无法找到更快发送方式的地方。 (可以说,如果我购买更强大的服务器,即使迭代方法也能更快地运行)

但我想要一个可扩展的解决方案 - 一个更智能的解决方案,我可以在其中并行发送大量邮件。

更新28/06/2018

显然并行解决方案无法解决我的问题。正如@Terry Carmen和其他人所解释的那样,我可能不得不在这个过程中看看其他瓶颈。谢谢大家的帮助! 多么棒的社区!!!

1 个答案:

答案 0 :(得分:1)

将用户作为密件抄送收件人添加到邮件中,并让邮件服务器完成工作。

邮件服务器可能具有密件抄送限制,因此您可能必须查看服务器的限制并分批处理请求。

修改

关于“并行发送”

您正在寻找错误的答案。如果您的计算机花X秒才能生成Y封电子邮件,则“并行”运行它们将无法解决任何问题。您最多要做的是将世代划分成几个内核,这可能会稍微提高性能,但是几乎可以肯定这不是问题。

您需要查看“实际的慢速部分是什么”。它可能是您的磁盘,CPU或网络连接,数据库服务器或邮件服务器上的速率限制设置。几乎可以肯定,实际的SMTPClient对象不是问题。

另一项修改

您可以尝试通过在单独的线程中运行单独的SMTPClient实例来并行发送;但是,这不太可能对您有实际帮助。

正如我自己和其他人之前提到的,您假设并行发送是某种魔术子弹。不是。某些事情限制了您的速率,并且几乎可以肯定不是您是单线程的。