SMTP.SendMail错误 - 远程主机强制关闭现有连接

时间:2012-07-12 18:34:03

标签: asp.net email smtp

我正在尝试使用以下代码发送电子邮件并获取上述错误。

有两封电子邮件正在发送,第一封电子邮件似乎已正常送达,下面的代码似乎无效。

有人可以帮忙吗?

        using (var mail = new MailMessage(fromEmail.Trim(), ToEmail.Trim()))
        {
            mail.IsBodyHtml = true;

            bodyText = bodyText.Replace("**Message**", Message);

            // populate the message
            mail.Subject = subject;
            mail.Body = bodyText;

            // send it
            var smtpClient = new SmtpClient();
            smtpClient.Send(mail);
        }

配置:

  <system.net>
    <mailSettings>
      <smtp from="test@foo.com">
        <network defaultCredentials="true" port="25" host="127.0.0.1" password="" userName=""/>
      </smtp>
    </mailSettings>
  </system.net>

1 个答案:

答案 0 :(得分:3)

而不是将MailMessage作为using块的主题,请尝试将SmtpClient作为主题。

编辑: 如果你的.net版本是&lt; 4.0,您需要进行一些操作以确保在尝试发送另一条消息之前处理smtp客户端。

假设using块也代表实例方法的主体,那么天真的测试可能是:

  1. 创建包含类的实例
  2. 通过调用上面引用的类方法发送第一条消息 <击>
  3. <击>
  4. 设置reference = null(换句话说,确保实际上已经标记/处理了SmtpClient。您可能需要/需要手动处理该实例作为进一步检查)

    Jeff Tucker建议您将SmtpClient.Timeout值设置为2 - 请参阅他对此的评论。

  5. 创建同一个类的新实例
  6. 发送第二条消息
  7. 在此之后(假设有效),您可以迭代这些步骤来优化和缩小逻辑,直到您对它满意为止。