Я пытаюсь читать сообщения GMail, используя их API из приложения .NET. Следовательно, я использую «Service Account» (те, которые не требуют от пользователя интерактивного подтверждения доступа и предназначены для использования в режиме обслуживания для обслуживания).Невозможно использовать GMail Api из учетной записи службы из-за недействительного гранта
Итак, у меня есть следующий код ...
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Auth.OAuth2;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.IO;
using Google.Apis.Gmail.v1;
using Google.Apis.Gmail.v1.Data;
namespace Test
{
public class MyClient
{
public List<Message> GetMyMessages()
{
var serviceAccountId = "MyServiceAccountId.apps.googleusercontent.com";
var serviceEMailAddress = "[email protected]"; // Not required?
var certificatePwd = "thesecret";
var userEMailAccount = "[email protected]";
var certFile = File.ReadAllBytes("MyCert.p12");
var cert = new X509Certificate2(certFile, certificatePwd, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
var scopes = new string[] { GmailService.Scope.MailGoogleCom }; // Also tried with: GmailService.Scope.GmailCompose and GmailService.Scope.GmailModify
var currentCredential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountId)
{
User = userEMailAccount,
Scopes = scopes
}.FromCertificate(cert));
var service = new GmailService(new Google.Apis.Services.BaseClientService.Initializer
{
ApplicationName = "MyApp",
HttpClientInitializer = currentCredential
});
var Messages = new List<Message>();
var request = service.Users.Messages.List(userEMailAccount);
request.MaxResults = 3;
// request.Q = "";
do
{
try
{
var response = request.Execute();
Messages.AddRange(response.Messages);
request.PageToken = response.NextPageToken;
}
catch (Exception e)
{
// throws exception with message: Error:"invalid_grant", Description:"", Uri:""
Console.WriteLine("An error occurred: " + e.Message);
}
} while (!string.IsNullOrEmpty(request.PageToken));
return Messages;
}
}
}
Это работает отлично до вызова метода request.Execute(), который терпит неудачу со следующим исключением: Error: "invalid_grant", Описание:» ", Uri:" "
Итак, что мне не хватает? что с этим не так?
Думаю, вам стоит прочитать присягу. У учетной записи службы нет учетной записи gmail. Пользователь - это просто текстовая строка, используемая для создания аутентификации, вы можете добавить туда blah и сделать то же самое. При этом вы не можете использовать Gmail с учетной записью службы. Попробуйте Oauth2. – DaImTo
Должен вас начать: http://www.daimto.com/how-to-access-gmail-with-c-net/ https://github.com/LindaLawton/Google-Dotnet-Samples/tree/master/ Google-Gmail – DaImTo
Ничего себе, если у кого-то есть решение этой проблемы, это именно то место, где я застрял. – bordeo