SMTP异常:无法从传输连接读取数据:net_io_connectionclosed

本文关键字:net 数据 io connectionclosed 读取 传输 异常 SMTP 连接 | 更新日期: 2023-09-27 18:21:28

我知道这个问题看起来和其他几十个问题重复,但事实并非如此。

当我试图通过web应用程序在本地机器上发送电子邮件时,会抛出SMTPException,异常为:

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

虽然生产上的代码运行得很好,但相同的代码、相同的连接、相同的凭据,我使用的是IP而不是别名,我试图关闭本地机器上的防火墙,但没有任何帮助我解决这个问题。

虽然以前在我的本地机器上工作过,但有人能给我一个提示吗?引发这个问题的问题可能是什么?

SMTP异常:无法从传输连接读取数据:net_io_connectionclosed

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

这个线程包含一些。

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

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

答案会因您是否拥有固定IP或动态IP,但基本上,您需要为smtp分配一个有效的IP服务器

对于固定IP,这是相对简单的。具有动态IP这需要一些调整。

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

在默认SMTP虚拟服务器的属性中的"访问"选项卡中,在"连接控制"answers"中继"对话框中,确保您的本地IP已分配。(在我的情况下,它是10.0.0.2…)

您可能还需要修改主机文件,将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://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();

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

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

在我的情况下,在设置用户名和密码

时,我不得不从Network Credentials中省略Domain属性

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