MimeKit azure gmail -> 身份验证失败

MimeKit azure gmail -> Authentication failed

我在 aspnet core 上使用 MimeKit,一切都在本地工作,但是当我尝试在 azure 应用服务上发送电子邮件时,我收到 "Authentication failed"

我必须启用 "Allow less secure apps" 才能让它在本地工作。

这是我使用的代码:

        using (var client = new SmtpClient())
        {
            await client.ConnectAsync("smtp.gmail.com", 465, SecureSocketOptions.SslOnConnect);
            await client.AuthenticateAsync(_emailOptions.Username, _emailOptions.Password);
            await client.SendAsync(emailMessage);
            await client.DisconnectAsync(true);
        }

我已通过在抛出的异常中记录 _emailOptions.Username 和 _emailOptions.Password 来验证它们是正确的

        catch (Exception ex)
        {
            _log.LogError(new EventId(1), ex, "Username: '{0}', Password: '{1}'", _emailOptions.Username, _emailOptions.Password);
            throw;
        }

您对如何解决此问题有任何想法吗?

我创建了一个使用 MimeKit 和 MailKit 电子邮件框架发送电子邮件的示例,如果我提供有效的用户名和密码并允许不太安全的应用程序访问 gmail 帐户(该帐户不使用 2 -步骤验证)。

using (var client = new SmtpClient())
{
    MimeMessage mes = new MimeMessage();
    mes.From.Add(new MailboxAddress("xxx", "xxx@gmail.com"));
    mes.To.Add(new MailboxAddress("xxx", "xxx@hotmail.com"));
    mes.Subject = "hello";
    mes.Body = new TextPart("plain")
    {
        Text = @"hi,
        i'm azure! " + DateTime.Now.ToString()
    };

    client.Connect("smtp.gmail.com", 465, SecureSocketOptions.SslOnConnect);
    client.Authenticate("username here", "password here");
    client.Send(mes);
    client.Disconnect(true);
}

请确保您提供的帐户是否使用两步验证或未启用安全性较低的应用程序访问帐户。此外,SendGrid是一个基于云的电子邮件服务,你可以试试。

感谢指导。我对 azure app 和 gmail 有同样的问题。阅读此页面后,我打开了两步验证并生成了应用程序专用密码。这也解决了我的问题。