Cant emails through exchange: An existing connection was forcibly closed by the remote host

若如初见. 提交于 2019-12-05 07:21:37

问题


I just noticed that some of the email operations in my code have been failing and am trying to fix it up, however I keep getting the following error:

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)

My code is fairly straightforward:

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);

Does anyone have any ideas what could be going on? Our exchange server administrator says she can't see anything in the log.

Also, not that this is a surprise, but the same thing happens when I try to send a message from powershell.


回答1:


Got it!

Essentially it seems that this error (ErrorCode 10054) happens when you connect to a server successfully but then ask it to do something that it is not equipped to do.

In my case here is what happened:

  • I used to send mail through our front-facing mail server mail.mycompany.com
  • That is not the address of the exchange server though, it is the address you point your browser to to access outlook online.
  • This worked fine previously since non-web requests for that address were routed to the exchange server. At some point this policy was changed - in our case because spam management was handed off to AT&T. Of course I was not informed of any of this.
  • Since there was indeed a server running at that site it would let me connect to it but then drop the connection immediately (or possibly even not allow it to open all the way)
  • Setting the correct host-name fixed the problem.



回答2:


Usually when I see that it's a configuration on the Exchange server. In our environment, our Network Admins must explicitly allow machines to use the Exchange server as a relay. If the machine my code is running on is not explicitly added to the server, I get this message. Hopefully that helps.



来源:https://stackoverflow.com/questions/1161253/cant-emails-through-exchange-an-existing-connection-was-forcibly-closed-by-the

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!