GMail -使用smtp客户端发送电子邮件错误-错误net_io_connectionclosed



我们有一个使用dll发送电子邮件的桌面应用程序。该dll使用。net framework 4.0 smtp客户端。在gmail账户上启用2F认证并创建应用程序密码后,我们无法再发送电子邮件。应用程序日志中报告的错误是:

"System.Net.Mail。SmtpException:发送邮件错误。——比;System.IO.IOException:无法从传输连接读取数据:net_io_connectionclosed".

我们是否需要任何其他配置来允许使用应用程序密码发送电子邮件?关于

编辑

这是Client类。

public Client()
{
_credentials = new NetworkCredential();
_client = new SmtpClient()
{
UseDefaultCredentials = false,
Credentials = _credentials,
DeliveryMethod = SmtpDeliveryMethod.Network
};
Initialize();
RefreshPort();
}
private SmtpClient _client;
private NetworkCredential _credentials;
private int? _port;
public bool Ssl
{
get { return _client.EnableSsl; }
set
{
_client.EnableSsl = value;
RefreshPort();
}
}
public string Host
{
get { return _client.Host; }
set { _client.Host = value; }
}
public int? Port
{
get { return _port ?? _client.Port; }
set
{
_port = value;
RefreshPort();
}
}
public string Username
{
get { return _credentials.UserName; }
set { _credentials.UserName = value; }
}
public string Password
{
get { return _credentials.Password; }
set { _credentials.Password = value; }
}
public TimeSpan Timeout
{
get { return TimeSpan.FromMilliseconds(_client.Timeout); }
set { _client.Timeout = (int)value.TotalMilliseconds; }
}
public string DisplayName { get; set; }
private void RefreshPort()
{
_client.Port = _port ?? (Ssl ? 587 : 25);
}

这是发送电子邮件的方法

public void Send(Message message)
{
using (MailMessage mail = new MailMessage()
{
From = new MailAddress(Username, DisplayName),
Subject = message.Subject,
Body = message.Body,
IsBodyHtml = message.Html
})
{
message.To?.ForEach(to => mail.To.Add(new MailAddress(to)));
message.CC?.ForEach(cc => mail.CC.Add(new MailAddress(cc)));
message.BCC?.ForEach(bcc => mail.Bcc.Add(new MailAddress(bcc)));
message.Attachments?.ForEach(attachment => mail.Attachments.Add(new Attachment(attachment)));
if (message.Encoding != null)
{
mail.SubjectEncoding = message.Encoding;
mail.BodyEncoding = message.Encoding;
}
_client.Send(mail);
}
}

如果您目前正在使用您正在连接的gmail帐户的实际密码。最好的办法是创建一个应用程序的密码并使用它。

使用App密码登录

<标题>

更新我刚刚测试了它,这似乎工作得很好。

using (var client = new SmtpClient())
{
client.Connect("smtp.gmail.com", 465, true);
client.Authenticate("xxxx@gmail.com", "appspassword");
client.Send(message.GetMessage());
client.Disconnect(true);
}

另一个选项是xoauth2

相关内容

  • 没有找到相关文章

最新更新