错误[403]在使用Gmail api时试图获取电子邮件列表



我想做一个非常简单的任务。使用google . api的api获取电子邮件列表。这是我得到的错误:

Google.Apis.Requests.RequestError
Delegation denied for association8385@gmail.com [403]
Errors [
Message[Delegation denied for association8385@gmail.com] Location[ - ] Reason[forbidden] 
Domain[global] ]
下面是我的代码:
using (FileStream stream = new(emailSettings.Value.ClientCredentials, FileMode.Open, 
FileAccess.Read))
{
string folderPath =  emailSettings.Value.CredentialsInfo;
string filePath = Path.Combine(folderPath, "APITokenCredentials");
_credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.FromStream(stream).Secrets,
_scopes, 
"user", 
CancellationToken.None, 
new FileDataStore(filePath, true)).Result;
}
_service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = _credential,
ApplicationName = emailSettings.Value.ApplicationName
});
UsersResource.MessagesResource.ListRequest listRequest = 
_service.Users.Messages.List(_hostAddress);
listRequest.LabelIds = "INBOX";
listRequest.IncludeSpamTrash = false;
listRequest.Q = "is:unread";
ListMessagesResponse listReqponse = listRequest.Execute() ;

当我尝试执行listRequest.Execute()时发生崩溃

我启用了Gmail API和People API。我已经创建了ClientCredentials json。此外,我已经创建了我的OAuth 2.0客户端id作为Web应用程序。创建服务时,将创建必要的令牌。对于这个简单的任务,我怀疑这是一个配置问题。

谁能给我指一下正确的方向

您得到的错误消息有点奇怪,它暗示您正在尝试使用服务帐户进行身份验证。然而,你正在使用的代码是为一个已安装的应用程序,你提到你正试图使用一个web应用程序凭证不幸的是,你正在使用的代码是为一个已安装的应用程序。

我刚刚运行了你的代码"修复了一些问题"使用从Google开发者控制台安装的客户端就可以了。

class Program
{
private static readonly string creds = @"C:YouTubedevcredentials.json";
private static readonly string credsPath ="creds";

static void Main(string[] args)
{
UserCredential _credential;

using (var stream = new FileStream(creds, FileMode.Open, FileAccess.Read))
{
var filePath = Path.Combine(credsPath, "APITokenCredentials");
_credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.FromStream(stream).Secrets,
new []{ Google.Apis.Gmail.v1.GmailService.Scope.GmailModify}, 
"user", 
CancellationToken.None, 
new FileDataStore(filePath, true)).Result;
}
var _service = new GmailService(new BaseClientService.Initializer()
{
HttpClientInitializer = _credential,
ApplicationName = "emailSettings.Value.ApplicationName"
});
var request = _service.Users.Messages.List("me");
request.LabelIds = "INBOX";
request.IncludeSpamTrash = false;
request.Q = "is:unread";
var response = request.Execute() ;       
}

如果你正在尝试使用asp.net core或。net 5创建web应用程序,那么你应该遵循以下内容

Asp .net core谷歌登录我没有一个gmail的样本,但我可以把一个在一起,如果你需要。

根据我的研究,我目前的方法将不适用于我必须做的其他任务。我认为我应该使用服务账户。所以这个问题已经有了答案。由于

相关内容

  • 没有找到相关文章

最新更新