首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SmtpException:无法从传输连接读取数据: net_io_connectionclosed

SmtpException:无法从传输连接读取数据: net_io_connectionclosed
EN

Stack Overflow用户
提问于 2013-11-27 05:47:27
回答 21查看 261.7K关注 0票数 120

我正在使用SmtpClient库通过以下方式发送电子邮件:

代码语言:javascript
复制
SmtpClient client = new SmtpClient();
client.Host = "hostname";
client.Port = 465;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new NetworkCredential("User", "Pass);
client.Send("from@hostname", "to@hostname", "Subject", "Body");

代码在我的测试环境中运行良好,但是当我使用生产SMTP服务器时,代码失败,并显示SmtpException“发送邮件失败”。并显示内部IOException "Unable to read data from the transport connection: net_io_connectionclosed“。

我已经确认防火墙不是问题。客户端和服务器之间的端口打开得很好。我不确定还有什么可以抛出这个错误。

EN

回答 21

Stack Overflow用户

发布于 2016-01-16 22:17:21

将端口从465更改为587,即可正常工作。

票数 22
EN

Stack Overflow用户

发布于 2018-11-02 18:15:24

我已经尝试了上面的所有答案,但Office 365帐户仍然出现此错误。当允许不太安全的应用程序时,代码似乎在谷歌账户和smtp.gmail.com上运行得很好。

还有什么其他的建议我可以尝试一下吗?

下面是我使用的代码

代码语言:javascript
复制
int port = 587;
string host = "smtp.office365.com";
string username = "smtp.out@mail.com";
string password = "password";
string mailFrom = "noreply@mail.com";
string mailTo = "to@mail.com";
string mailTitle = "Testtitle";
string mailMessage = "Testmessage";

using (SmtpClient client = new SmtpClient())
{
    MailAddress from = new MailAddress(mailFrom);
    MailMessage message = new MailMessage
    {
        From = from
    };
    message.To.Add(mailTo);
    message.Subject = mailTitle;
    message.Body = mailMessage;
    message.IsBodyHtml = true;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.UseDefaultCredentials = false;
    client.Host = host;
    client.Port = port;
    client.EnableSsl = true;
    client.Credentials = new NetworkCredential
    {
        UserName = username,
        Password = password
    }; 
    client.Send(message);
}

更新以及我是如何解决它的:

通过将Smtp客户端更改为Mailkit解决了此问题。由于安全问题,微软现在不建议使用System.Net.Mail Smtp客户端,而应使用MailKit。使用Mailkit给了我更清晰的错误消息,我可以理解寻找问题的根本原因(许可证问题)。你可以通过下载一个Nuget包来获取邮件包。

有关更多信息,请阅读有关Smtp客户端的文档:https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2

下面是我如何使用MailKit实现SmtpClient

代码语言:javascript
复制
        int port = 587;
        string host = "smtp.office365.com";
        string username = "smtp.out@mail.com";
        string password = "password";
        string mailFrom = "noreply@mail.com";
        string mailTo = "mailto@mail.com";
        string mailTitle = "Testtitle";
        string mailMessage = "Testmessage";

        var message = new MimeMessage();
        message.From.Add(new MailboxAddress(mailFrom));
        message.To.Add(new MailboxAddress(mailTo));
        message.Subject = mailTitle;
        message.Body = new TextPart("plain") { Text = mailMessage };

        using (var client = new SmtpClient())
        {
            client.Connect(host , port, SecureSocketOptions.StartTls);
            client.Authenticate(username, password);

            client.Send(message);
            client.Disconnect(true);
        }
票数 12
EN

Stack Overflow用户

发布于 2016-03-18 12:08:23

您可能还必须更改您的Gmail帐户上的“不太安全的应用程序”设置。EnableSsl,使用端口587并启用“安全性较低的应用程序”。如果你在谷歌上搜索不太安全的应用程序部分,会有谷歌帮助页面将你链接到你的账户的页面。这就是我的问题,但多亏了上面所有的答案,现在一切都正常了。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20228644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档