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

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

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

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

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

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

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

这个post包含一些。

例如:看起来分配静态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) 

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

根据支持的解决方法设置SmtpClient.ServicePoint.MaxIdleTime = 1 : http : SmtpClient.ServicePoint.MaxIdleTime = 1 ,它使所有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(); 

System.Net.NetworkCredential(用户,密码); ///错误
System.Net.NetworkCredential(电子邮件,密码); ///对

因为某些电子邮件服务器是可用的

您使用的Gmail帐户限制了每天/每月发送的电子邮件数量,如果超过该限制,它将拒绝任何其他外发电子邮件。