16

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

当我尝试通过我的 Web 应用程序在本地计算机上发送电子邮件时,会抛出 SMTPException 并且异常是:

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

虽然生产中的代码运行良好,但相同的代码、相同的连接、相同的凭据,我使用的是 IP 而不是别名,我试图关闭本地计算机上的防火墙,但没有任何东西可以帮助我解决这个问题.

虽然以前在我的本地机器上工作过,但任何人都可以提示一下引发此问题的问题可能是什么?

4

5 回答 5

25

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

于 2013-07-08T22:45:49.547 回答
7

该线程包含一些。

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

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

答案会因您拥有固定 IP 还是动态 IP 而有所不同,但基本上,您需要为您的 smtp 服务器分配一个有效 IP。

对于固定 IP,这相对简单。使用动态 IP 需要进行一些调整。

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

在默认 SMTP 虚拟服务器的属性中,在“访问”选项卡中,在“连接控制”和“中继”对话框中,确保分配了您的本地 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();
于 2013-07-08T09:36:35.297 回答
0

就我而言,我不得不在设置用户名和密码时忽略该Domain属性Network Credentials

于 2020-09-01T10:07:30.427 回答
0

System.Net.NetworkCredential(用户,密码);///错误
的 System.Net.NetworkCredential(email, password); ///正确的

因为某些电子邮件服务器是不稳定的

于 2016-07-05T07:25:02.930 回答
-3

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

于 2014-11-10T16:05:04.643 回答