【发布时间】: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