SMTPException:无法从传输连接中读取数据:net_io_connectionclosed

Hil*_*lmi 15 c# email

我知道这个问题看起来像是其他许多问题的重复,而不是.

当我尝试通过我的Web应用程序在本地计算机上发送电子邮件时,抛出了SMTPException,例外情况是:

//on this line : SmtpServer.Send(mail);
Unable to read data from the transport connection: net_io_connectionclosed.
Run Code Online (Sandbox Code Playgroud)

虽然生产代码完美,相同的代码,相同的连接,相同的凭据,我使用IP而不是别名,我试图关闭我的本地机器上的防火墙,没有什么帮助我解决这个问题.

虽然在我的本地机器上用于以前工作,但任何人都可以只提示提出这个问题可能是什么问题?

Rob*_*Kee 24

如果您使用的是住宅互联网连接,那么您的ISP通常会通过阻止所有到端口25的出站连接来阻止外发电子邮件发送.这在美国很常见.尝试通过TCP/IP连接到本地电子邮件服务器,或连接到您自己的内部网络上的服务器.

  • 相当多的人这样做是为了试图限制恶意软件对人们的机器使用他们的网络发送垃圾邮件的影响. (2认同)
  • 我有AT&T Uverse和有趣的端口587目标gmail的smtp服务器成功,但465失败,上面提到的消息. (2认同)

sha*_*p00 6

这个帖子包含一些.

例如:看起来分配静态IP可能会解决问题.

这个错误意味着System.net.mail无法找到smtp服务器.

答案取决于您是拥有固定IP还是动态IP,但基本上,您需要为smtp服务器分配有效的IP.

使用固定IP,这是相对简单的.使用动态IP需要一些调整.

打开IIS管理器并检查smtp服务器的属性.

在默认SMTP虚拟服务器的属性中,在"访问"选项卡的"连接控制和中继"对话框中,确保已分配本地IP.(就我而言,它是10.0.0.2 ...)

您可能还需要修改hosts文件,将127.0.0.1指向您的计算机名称.(\ WINDOWS\system32\drivers\etc\hosts)

然后,在您的代码中,将您的机器名称分配给smtp客户端:

Dim client As New SmtpClient("yourmachinename") client.Send(mail)
Run Code Online (Sandbox Code Playgroud)

或者,同一线程中的另一个人似乎找到了一个未正确关闭SMTP连接的解决方法.

设置SmtpClient.ServicePoint.MaxIdleTime = 1:根据支持的变通 http://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=146711 这让所有的SMTP正常工作.

这是一个完整的示例:

MailMessage msgMail = new MailMessage();
msgMail.To.Add(new MailAddress("info@somedomain.se"));
msgMail.Subject = "Message from web";
msgMail.IsBodyHtml = true;
msgMail.Body = "Test message";
SmtpClient Client = new SmtpClient();  /* uses settings form web.config */
Client.ServicePoint.MaxIdleTime = 1; /* without this the connection is idle too long and not terminated, times out at the server and gives sequencing errors */
Client.Send(msgMail);
msgMail.Dispose();
Run Code Online (Sandbox Code Playgroud)