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

时间:2013-07-05 21:36:16

标签: c# email

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

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

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

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

虽然在我的本地计算机上已经习惯了以前的工作,但任何人都可以提一下提出这个问题会出现什么问题?

5 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:6)

This thread包含一些。

例如:看起来assigning a static 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)

或者,同一线程seems to have found a workaround中的另一个人未正确关闭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();

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

就我而言,设置用户名和密码时,我不得不从Domain中删除Network Credentials属性

答案 4 :(得分:-4)

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