首页 > 解决方案 > 在旧代码中发送邮件时出现 SMTP 身份验证错误

问题描述

我遇到了一个奇怪的问题,正如标题所说,每当我尝试发送邮件时,都会引发以下异常:

System.Net.Mail.SmtpException: 'SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 需要身份验证。了解更多信息'

没有什么不寻常的,但是这是大约 2 年前编写的代码,从那时起就没有被触及过,今天我运行它时 - 突然不起作用。

public static Task SendEmailAsync(string email, string subject, string htmlMessage)
{
    return Task.Run(() =>
    {
        using (var client = BuildClient())
        {
            var message = BuildMessage(email, subject, htmlMessage);
            client.Send(message);
        }
    });
}

private static SmtpClient BuildClient()
{
    var smtp = new SmtpClient("smtp.gmail.com", 587)
    {
        EnableSsl = true,
        UseDefaultCredentials = false,
        Credentials = new NetworkCredential("xxxxx@abv.bg", "xxx")
    };

    return smtp;
}

private static MailMessage BuildMessage(string email, string subject, string htmlMessage)
{
    var mailMessage = new MailMessage
    {
        From = new MailAddress("xxxx@abv.com"),
        Subject = subject,
        Body = htmlMessage
    };
    mailMessage.To.Add(email);

    return mailMessage;
}

如您所见,主机是 gmail.com,但我使用的是不同的电子邮件提供商 abv.bg,我也尝试将其与 gmail 帐户交换,但错误仍然相同。

这是原始代码的稍微缩短的版本,但这也会产生错误,因为我没有使用 gmail,所以没有“不太安全的应用程序”或 2fa 这样的东西,这不可能是原因,即使它是当我尝试使用 gmail 帐户时,我启用了不太安全的应用程序选项,但无济于事。我已经在 .net core 3.0 和 .net framework 4.7.2 下运行了这段代码,结果相同。我也完全在本地运行它,所以时区应该不是问题。我检查了密码和电子邮件的三倍、四倍。

所以我基本上不知道为什么会这样,任何提示都将不胜感激。

标签: c#.netemail.net-coresmtp

解决方案


推荐阅读