gpt4 book ai didi

.net - 在 .NET 中以高速率发送 SMTP 电子邮件

转载 作者:行者123 更新时间:2023-12-04 03:55:01 24 4
gpt4 key购买 nike

我有一个 .NET 服务,它在后台线程上处理队列,并从队列中的项目以非常高的速率发送大量小型电子邮件消息(如果可能的话,每秒发送 100 条消息)。目前,我使用 SmtpClient.Send() 但我担心它可能会影响性能。

每次调用Send()经历打开套接字、执行 SMTP session (HELO、MAIL FROM、RCPT TO、DATA)和关闭套接字的完整周期。在伪代码中:

for each message {
open socket
send HELO
send MAIL FROM
send RCPT TO
send DATA
send QUIT
close socket
}

( 编辑 :这个关于 SmtpClient.Send() 的陈述实际上是错误的,正如我在回答中所解释的那样。)

我认为以下伪代码会更优化:
open socket
send HELO
for each message {
send MAIL FROM
send RCPT TO
send DATA
}
send QUIT
close socket

我应该担心 SmtpClient.Send() 的性能吗?当以高速率发送电子邮件时?我有哪些优化性能的选择?

最佳答案

SmtpClient类在后台缓存 SMTP 服务器连接。调用SmtpClient.Send()重复向同一个 SMTP 服务器提交多条消息将有效地执行第二个示例中的伪代码。

提高性能的一种方法可能是使用 SmtpClient 的多个实例。在多个线程上运行。该服务现在将拥有许多并发连接,而​​不是只有一个与 SMTP 服务器的连接。传入的电子邮件消息从队列中取出并分派(dispatch)到调用 SmtpClient.Send() 的工作线程池中。将消息发送到 SMTP 服务器。

我做了一些基本的测试,发现这可以将性能提高多达 100%。但是,最佳并发连接数和实际性能改进可能在很大程度上取决于 SMTP 服务器。扩展这个想法的一种方法是连接到多个 SMTP 服务器。

关于.net - 在 .NET 中以高速率发送 SMTP 电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2713766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com