OAuth2.0 gmail.send 和 gmail.readonly 范围

问题描述 投票:0回答:1

这个问题似乎与THIS重复,但由于解决方案尚未被接受,我决定发布我的问题。

在过去两年左右的时间里,我一直在 Gmail 中使用 OAuth 2.0 [LoginOAUTH2(string user, string accessToken)]。在第一个用户电子邮件设置中请求访问和刷新令牌时,我一直在使用“mail.google.com”范围。

由于范围“mail.google.com”是一个受限制的范围,在谷歌的应用程序验证过程中,我被指示使用“gmail.send”和“gmail.readonly”范围,因为这对于我的应用程序来说已经足够了。我的应用程序仅发送电子邮件并检索用户的电子邮件。不执行删除/移动操作。

我使用了建议的范围,我能够使用 OAuth 设置电子邮件,仅请求上述范围。检查范围此处

但是,当我尝试使用刚刚获得的令牌发送电子邮件时,出现以下错误:

“用户名和密码不被接受。有关详细信息,请访问 https://support.google.com/mail/?p=BadCredentials u20-20020a056a00099400b006da76842a66sm4965827pfg.85 - gsmtp”

所讨论的方法如下:

//server="smtp.gmail.com",token is the one OAuth provided
public Smtp NewConnection(string server, string token, string useremail, string serviceProvider)
{
var smtp = new Smtp();
smtp.ConnectSSL(server);
smtp.LoginOAUTH2(useremail, token);
return smtp;
}

如果使用“mail.google.com”范围,相同的代码可以完美地工作,但是由于该范围受到限制,我无法请求该范围。使用最小范围“gmail.send”和“gmail.readonly”会引发这些问题。我使用 Limilabs Mail.dll,这是建议使用的方法。

我非常感谢您在这件事上的帮助。任何有关正确解决方案的指导将不胜感激。

谢谢你

smtp gmail google-oauth
1个回答
0
投票

你的问题是混合了两件事。

gmail.发送

gmail.user.messages.send是gmail api中的一个方法。当它访问私人用户数据时,它需要用户的授权才能工作。

由于发送被视为写入操作,因此它不能使用只读范围。必须使用这些范围中的一个。

SMTP

直接通过邮件服务器或 SMTP 服务器与使用 Gmail api 不同。

通过 smtp 服务器,您可以使用用户名和应用程序密码来访问用户的邮件帐户,而无需通过 Oauth2。但是,如果您向用户发送标准谷歌密码而不是应用程序密码,您将收到以下错误。

用户名和密码不被接受。

Xoauth2

您还可以将 xoauth2 与 SMTP 服务器一起使用,但您必须使用 mail.google.com 范围向用户授权,其他范围不能与 SMTP 服务器一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.