可以实例化一次SMTP客户端并同步发送2000封电子邮件吗?发送2000封电子邮件
我们收到以下错误,实例化一个SMTP客户端时为每一封邮件我们发送邮件使用的代码粘贴也是在这个岗位结束:
System.Net.Mail.SmtpException:服务不可用,传输通道关闭 。服务器的回应是:4.4.1连接时间 出
我怀疑实例化每个消息的SMTP客户端导致这一点,但不知道。代码如下。
List<MailMessage> messages = GetMailMessages();
foreach(MailMessags m in messages)
{
try
{
SmtpClient client = new SmtpClient();//SHOULD THIS BE PLACED OUTSIDE AND BEFORE THE LOOP
client.Send(m);
}
catch (Exception)
{
throw;
}
}
编辑1:
我刚刚发现这个MSDN上。 (http://msdn.microsoft.com/en-us/library/ee706942%28v=vs.110%29.aspx)。 因此,当使用大量电子邮件发送时,您似乎只能实例化SMTP客户端一次,并将其重用于所有多个MailMessage。
由SmtpClient 类到SMTP服务器的当前实例建立可以是 的连接重新使用,如果应用程序希望多个消息发送到同一个SMTP服务器。这是
当使用身份验证或加密建立与SMTP 服务器的连接时特别有用。验证和建立TLS会话的过程可能是昂贵的操作。 A 要求在发送大量电子邮件到 时为每条消息重新建立连接,同一个SMTP服务器可能会对性能产生重大影响。有多个 大容量电子邮件应用程序发送电子邮件状态更新,新闻稿分发或电子邮件 警报。
是的,绝对实例化循环外的客户端,并为每个邮件重新使用它。在消息之间休息几秒钟可能会很好。 – HaukurHaf
使用单个'SmtpClient'来处理所有消息,并在完成时调用'Dispose()'(使用'using'语句)。 –
你可以尝试在发送后使用SmtpClient - '使用(var client = new SmtpClient()){client.Send(m); }' – Win