gpt4 book ai didi

.net - 使用SmtpClient发送邮件的最佳方式?

转载 作者:行者123 更新时间:2023-12-04 18:17:19 25 4
gpt4 key购买 nike

发送大量电子邮件时,我正在寻找良好的性能。

我听说正确的方法是打开一个连接,发送大约20封电子邮件并关闭连接。并一遍又一遍地做。
这样对吗?

SmtpClient是如何工作的,它会在自己的生命周期内打开连接吗? (不是IDisposable,所以看起来不是这样)
还是为每个发送的电子邮件打开一个连接?
还是一直保持连接打开?
还是它有合适的魔术来打开和关闭连接?

我想知道,所以我知道如何启动SmtpClient。作为单例或仅用于大量消息...

最佳答案

它仅从连接发送单个MailMessage。实际上,它甚至无法正确关闭连接。它发送邮件,但随后不告诉邮件服务器它要退出。因此,它只是将其挂起,直到底层的合并流决定关闭套接字为止。

这是Reflector的内部代码:

...
this.GetConnection();
fileMailWriter = this.transport.SendMail((message.Sender != null) ? message.Sender : message.From, recipients, message.BuildDeliveryStatusNotificationString(), out exception);
}
catch (Exception exception2)
{
if (Logging.On)
{
Logging.Exception(Logging.Web, this, "Send", exception2);
}
if ((exception2 is SmtpFailedRecipientException) && !((SmtpFailedRecipientException) exception2).fatal)
{
throw;
}
this.Abort();
if (this.timedOut)
{
throw new SmtpException(SR.GetString("net_timeout"));
}
if (((exception2 is SecurityException) || (exception2 is AuthenticationException)) || (exception2 is SmtpException))
{
throw;
}
throw new SmtpException(SR.GetString("SmtpSendMailFailure"), exception2);
}

顺便说一句,这是有关SmtpClient不发出QUIT命令的更多信息。
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=146711&wa=wsignin1.0

编辑:在 web.archive.org上查看上方的无效链接

解决方法是将SmtpClient.ServicePoint.MaxTimeout设置为1。这将更快地关闭套接字,但是,实际上并没有发出QUIT命令。

关于.net - 使用SmtpClient发送邮件的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/968506/

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