【问题标题】:Authentication Required error when using Google OAuth in Mailkit在 Mailkit 中使用 Google OAuth 时需要身份验证错误
【发布时间】:2021-06-07 02:37:48
【问题描述】:

我正在尝试在 mailkit 中使用 Google OAuth 从我的应用程序发送邮件。

使用 Google Auth .net 库,我从 Google 获得了用户的访问令牌。当我使用 mailkit 中的访问令牌发送电子邮件时,如下所示,

var SocketOption = SecureSocketOptions.StartTls;

await smtpClient.ConnectAsync(smtp.gmail.com, 587, SocketOption).ConfigureAwait(false);

await smtpClient.AuthenticateAsync(userid, accesstoken).ConfigureAwait(false);

await smtpClient.SendAsync(message).ConfigureAwait(false);

我从 Mailkit 得到以下异常。

MailKit.ServiceNotAuthenticatedException: '5.7.0 需要身份验证。 了解更多信息,请访问 5.7.0 https://support.google.com/mail/?p=WantAuthError f23sm12136220pfa.85 - gsmtp'

注意:我确认我从 Google 收到的访问令牌是有效的,通过使用如下 Gmail API。

var gmailService = new Google.Apis.Gmail.v1.GmailService(new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
                ApplicationName = "App name"
            });

var gmailProfile = gmailService.Users.GetProfile("me").Execute();
string EmailAddress = gmailProfile.EmailAddress;

所以,我使用的凭据不是问题。

【问题讨论】:

  • 你连接的是 SMTP 服务器还是 gmail api?你意识到它们是不同的。据我了解,MailKit 直接通过 SMTP 服务器连接,它不会通过 Gmail api,因此您的测试无效。
  • @DaImTo 我提到 gmail API 只是为了确认我的凭据有效。我正在尝试使用 Mailkit SMTP 发送实际邮件。
  • Oauth2 凭据与 SMTP 服务器有什么关系?
  • @DaImTo 对于 smtpClient.AuthenticateAsync 函数,我们通常传递用户 ID 和密码。由于我使用的是 Google OAuth,因此我将传递从 Google Auth API 返回的 OAuth 用户 ID 和访问令牌。

标签: c# .net smtp google-oauth mailkit


【解决方案1】:

如果要通过 OAuth2 进行身份验证,则需要显式使用 OAuth2 SASL 机制:

var sasl = new SaslMechanismOAuth2 (userid, accesstoken);
await smtpClient.AuthenticateAsync(sasl).ConfigureAwait(false);

【讨论】:

  • 谢谢!当我尝试上述方法时,我收到以下错误。 MailKit.Net.Smtp.SmtpCommandException:'5.7.8 用户名和密码不被接受。了解更多信息,请访问 5.7.8 support.google.com/mail/?p=BadCredentialss15sm14043912pfe.108 - gsmtp'
  • 在 SaslMechanismOAuth2 (userid, accesstoken) 中,userid 应该是电子邮件地址吗?例如:xyz@gmail.com?
  • 你一定是使用了无效的令牌。
  • 顺便说一句,确保您使用正确的 SMTP 访问范围。提示:它是"https://mail.google.com/" - 只有那个范围才有效。其他人都不会。
猜你喜欢
  • 2014-06-07
  • 2016-03-27
  • 1970-01-01
  • 2015-08-23
  • 2012-12-12
  • 2015-11-13
  • 2012-06-01
  • 1970-01-01
  • 2011-10-20
相关资源
最近更新 更多