我知道这个问题看起来像是其他问题的重复,而不是。
当我尝试通过我的Web应用程序在本地计算机上发送电子邮件时,抛出了SMTPException,例外情况是:
//on this line : SmtpServer.Send(mail);
Unable to read data from the transport connection: net_io_connectionclosed.
虽然生产代码完美运行,相同的代码,相同的连接,相同的凭据,我使用IP而不是别名,我试图关闭本地计算机上的防火墙,没有任何帮助我来解决这个问题。
虽然在我的本地计算机上已经习惯了以前的工作,但任何人都可以提一下提出这个问题会出现什么问题?
答案 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帐户限制了每天/每月发送的电子邮件数量,如果超过该限制,它将拒绝任何其他外发电子邮件。