2016-12-28 254 views
0

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

我必须启用“允许安全性较低的应用程序”才能使其在本地工作。

这是我使用的代码:

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

的异常记录他们你有什么如何解决这个问题的想法?

+0

我想知道你是否在azure和本地应用上使用**相同的用户名和密码。 –

+0

是的,我试图硬编码的用户名/密码。它在本地工作,但不在天蓝色。 – user568327

回答

0

我创建一个示例使用MimeKit和MailKit电子邮件框架,以发送电子邮件,我发现代码工作在本地和蔚蓝的罚款,如果我提供有效的用户名&密码,并允许安全性较低的应用程序访问Gmail帐户(帐户无法使用两步验证)。

using (var client = new SmtpClient()) 
{ 
    MimeMessage mes = new MimeMessage(); 
    mes.From.Add(new MailboxAddress("xxx", "[email protected]")); 
    mes.To.Add(new MailboxAddress("xxx", "[email protected]")); 
    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是一款基于云计算的电子邮件服务,您可以试试。

+0

这很奇怪。我们的代码看起来相同,只是我使用的是异步版本。 – user568327

+0

在启用双因素身份验证并生成特定于应用程序的密码后,我才开始工作。自从你的代码正在工作以后,我给你正确的答案。 – user568327

0

感谢您的指导。我与azure应用程序和Gmail有同样的问题。阅读本页后,我开启了两步验证并生成了应用专用密码。这也解决了我的问题。