【问题标题】:SMTPException : Unable to read data from the transport connection: net_io_connectionclosedSMTPException:无法从传输连接中读取数据:net_io_connectionclosed
【发布时间】:2013-07-04 01:04:53
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# email


    【解决方案1】:

    This thread 包含一些。

    例如:看起来assigning a static IP 可能会解决问题。

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

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

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

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

    在默认 SMTP 虚拟服务器的属性中,在“访问”选项卡中, 在 Connection Control 和 Relay 对话框中,确保您的本地 IP 已分配。 (就我而言,它是 10.0.0.2...)

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

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

    【讨论】:

    • 是的,我的 ISP 阻止了连接,我不知道他们为什么最近这样做了,但正如我所说的那样,它以前可以工作,谢谢,
    • 很多人这样做是为了试图限制恶意软件对人们机器的影响,使其无法使用他们的网络发送垃圾邮件。
    • 我有 AT&T Uverse,有趣的是,针对 gmail 的 smtp 服务器的 587 端口成功,但 465 失败,上面给出了有问题的消息。
    【解决方案3】:

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

    【讨论】:

    • “当我尝试发送电子邮件时”听起来好像 OP 正在群发邮件......
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2013-12-12
        • 2016-02-21
        • 1970-01-01
        • 2022-08-19
        • 2015-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多