【问题标题】:Cant emails through exchange: An existing connection was forcibly closed by the remote host无法通过交换发送电子邮件:现有连接被远程主机强行关闭
【发布时间】:2010-11-12 18:33:18
【问题描述】:

我刚刚注意到我的代码中的一些电子邮件操作失败并正在尝试修复它,但是我不断收到以下错误:

System.Net.Mail.SmtpException: Failure sending mail. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
 ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
   at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.DelegatedStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.Net.BufferedReadStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine)
   at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader caller)
   at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
   at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
   at System.Net.Mail.SmtpClient.GetConnection()
   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   --- End of inner exception stack trace ---
   at System.Net.Mail.SmtpClient.Send(MailMessage message)

我的代码相当简单:

MailMessage mail = new MailMessage();
mail.To.Add(email_to);
mail.From = new MailAddress(email_from);
mail.Subject = email_subject;
mail.Body = email_body;


var client = new SmtpClient(smtp_server_url);
client.Credentials = new NetworkCredential(username, password, domain);
client.Timeout = 30000;
client.Send(mail);

有人知道会发生什么吗?我们的 Exchange 服务器管理员说她在日志中看不到任何内容。

此外,这并不令人意外,但当我尝试从 powershell 发送消息时,也会发生同样的事情。

【问题讨论】:

    标签: .net smtp exchange-server system.net.mail


    【解决方案1】:

    知道了!

    基本上,当您成功连接到服务器但随后要求它做一些它不具备做的事情时,似乎会发生此错误(ErrorCode 10054)。

    在我的情况下发生了什么:

    • 我曾经通过我们的前置邮件服务器 mail.mycompany.com 发送邮件
    • 这不是 Exchange 服务器的地址,而是您将浏览器指向的地址以在线访问 Outlook。
    • 这在以前运行良好,因为对该地址的非 Web 请求被路由到交换服务器。在某些时候,这项政策发生了变化——在我们的案例中,因为垃圾邮件管理已移交给 AT&T。当然,我没有被告知这些。
    • 由于确实有一个服务器在该站点上运行,它会让我连接到它,然后立即断开连接(或者甚至可能不允许它一直打开)
    • 设置正确的主机名解决了这个问题。

    【讨论】:

      【解决方案2】:

      通常当我看到它是 Exchange 服务器上的配置时。在我们的环境中,我们的网络管理员必须明确允许机器将 Exchange 服务器用作中继。如果运行我的代码的机器没有显式添加到服务器,我会收到此消息。希望这会有所帮助。

      【讨论】:

      • 谢谢,但不是这样,我可以从 Outlook 发送就好了。只有从 .NET 代码发送我有问题
      • 我也怀疑配置/身份验证问题。如果将 email_from 和 email_to 设置为您的电子邮件地址(与您用于交换的相同),它是否有效?
      • 您可能已经知道这一点,所以如果我假设不正确,请原谅我,但我不会因为您可以通过 Outlook 发送电子邮件而忽略 Exchange 服务器设置,从机器上的代码发送邮件使用System.net.Mail.SmtpClient,它通过 SMTP 连接。这与 Outlook 的连接方式不同。管理员必须明确允许机器将服务器用作 smtp 邮件的中继。此 cab 由机器的 IP 和客户端凭据或两者兼而有之。
      • @David,这也许是真的,但直到最近它还在其他机器上工作。可能与被放置在活动目录中的用户有关,但我传递了正确的域。 email_from 和 email_to 都是我用于测试的电子邮件地址。
      猜你喜欢
      • 2014-12-02
      • 2021-05-12
      相关资源
      最近更新 更多