ASP.NET-并行发送批量邮件-最快、最高效的方式

ASP.NET-并行发送批量邮件-最快、最高效的方式,asp.net,vb.net,email,asynchronous,task-parallel-library,Asp.net,Vb.net,Email,Asynchronous,Task Parallel Library,我想发送一份通讯给我们网站的注册用户-超过100000 今天,我用一个简单的for循环发送邮件,这个循环非常沉重和缓慢。 我希望它尽可能快地完成这个过程(即使这个过程会在后台运行,并且不会影响用户的UI) 我尝试了TPL,Async,smtpClient.sendayncmail()等等,但从未真正创建一个工作示例来证明这些系统工作得更快(或根本工作得更快)。 我读过很多关于线程的帖子和解释,但它们似乎很陈旧、不受欢迎或无关紧要,因为有一些新技术我当然不知道 您能告诉我并行发送多封电子邮件最有效

我想发送一份通讯给我们网站的注册用户-超过100000

今天,我用一个简单的
for
循环发送邮件,这个循环非常沉重和缓慢。 我希望它尽可能快地完成这个过程(即使这个过程会在后台运行,并且不会影响用户的UI)

我尝试了
TPL
Async
smtpClient.sendayncmail()
等等,但从未真正创建一个工作示例来证明这些系统工作得更快(或根本工作得更快)。 我读过很多关于线程的帖子和解释,但它们似乎很陈旧、不受欢迎或无关紧要,因为有一些新技术我当然不知道

您能告诉我并行发送多封电子邮件最有效、最快的方式是什么吗?你能给我举个有效的例子吗?

更新日期:2018年6月20日

对于每个用户,每封电子邮件都是不同的。因此,BCC解决方案与我无关

我将详细说明我的问题: 我只关注使用发送功能的高级,例如ASP.NET
smtpClient.Send()
将邮件发送到SMTP

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

目前的主要缺陷是发送函数,它将字节上载到ASP.NET中的SMTP服务器。 那就是我找不到更快发送的方法的地方。(可以这么说,如果我买了一台更强大的服务器,即使是迭代方法也会工作得更快)

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

2018年6月28日更新

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

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

邮件服务器可能有密件抄送限制,因此您可能需要查看服务器的限制并批处理请求

编辑

关于“并行发送”

你在寻找错误的答案。如果你的机器需要X秒来生成Y封电子邮件,那么“并行”运行它们并不能解决任何问题。您最多要做的是在几个内核之间拆分生成,这可能会稍微提高性能,但几乎肯定不是问题所在

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

另一次编辑

您可以通过在不同的线程中运行SMTPClient的不同实例来尝试并行发送;然而,这不太可能真正帮助你


正如我和其他人之前提到的,您假设并行发送是某种神奇的子弹。不是。有些东西限制了您的速度,但几乎可以肯定的是,您不是单线程。

发送多封电子邮件的最快方式因机器而异,并且因您的使用情况而异。在不知道您实际尝试了什么、使用了什么机器以及您的电子邮件是否相关的情况下回答您的问题是非常困难的,也就是说,它们是否会相互阻止。如果您达到邮件服务器的最大吞吐量,那么除了增加这个最大值,还有什么解决方案呢?是的,你声称“目前的主要陷阱是将字节上传到SMTP服务器的发送功能”。如果你不能加快速度,你就不能更快地发送邮件。除非您并行尝试。邮件服务器是物理上独立的机器吗?如果是这样的话,可能是因为网络连接速度慢,邮件传输速度变慢了吗?是的,你可以通过查找速度慢的部分并在可能的情况下进行修复来加快速度。你需要进行测量,找出它在哪里慢,为什么慢。因为每封电子邮件都是独一无二的,所以你总是需要在某个地方进行某种循环。如果您有SQL Server,您可以直接从服务器发送消息,尽管我认为这不会解决您的问题。这无法做到,因为每封邮件都不同。每个用户都会收到带有其名称和自己内容的特定内容