0

我在 aspnet 核心上使用 MimeKit,一切都在本地工作,但是当我尝试在 azure App Service 上发送电子邮件时,我得到“身份验证失败” 。

我必须启用“允许不太安全的应用程序”才能让它在本地工作。

这是我正在使用的代码:

        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;
        }

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

4

2 回答 2

0

我创建了一个使用 MimeKit 和 MailKit 电子邮件框架发送电子邮件的示例,如果我提供有效的用户名和密码并允许不太安全的应用程序访问 gmail 帐户(该帐户不使用两步验证),我发现该代码在本地和 azure 上运行良好。

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是基于云的电子邮件服务,您可以尝试一下。

于 2016-12-29T06:30:00.150 回答
0

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

于 2017-01-06T12:39:42.957 回答