2016-09-15 4 views
0

Я хочу, чтобы мой почтовый ящик gmail использовал Gmail API. Мне нужно использовать учетную запись службы, потому что мое приложение не взаимодействует с пользователем. я получаю следующее сообщение об ошибке по запросу:Учетная запись службы API Gmail

"InnerException = {"Error:\"unauthorized_client\", Description:\"Unauthorized client or scope in request.\", Uri:\"\""} "

Это мой код:

 string applicationName = "Gmail API .NET"; 
     string[] scopes = { GmailService.Scope.GmailReadonly }; 

     string certPath = "./XXXXXXXXXX.p12"; 
     string userEmail = "[email protected]"; 
     string serviceAccountEmail = "MYSERVICEACCOUNT...am.gserviceaccount.com"; 

     //Carga el certificado obtenido de 
     var certificate = new X509Certificate2(certPath, "notasecret", X509KeyStorageFlags.Exportable); 

     ServiceAccountCredential credential = new ServiceAccountCredential(
      new ServiceAccountCredential.Initializer(serviceAccountEmail) 
      { 
       User = userEmail, 
       Scopes = scopes 
      }.FromCertificate(certificate) 
     ); 

     if (credential.RequestAccessTokenAsync(CancellationToken.None).Result) <--- Here I get the error 
     { 
      GmailService gs = new GmailService(
       new BaseClientService.Initializer() 
       { 
        ApplicationName = applicationName, 
        HttpClientInitializer = credential 
       } 
      ); 
     } 

Что я делаю неправильно? Кто-нибудь может мне помочь?

С уважением

+0

Вам необходимо настроить свою учетную запись Gmail, чтобы разрешить доступ к POP3/SMTP. Вы можете сделать это в настройках Gmail в Интернете. –

+0

Спасибо. Я сделал, но получил тот же результат :( – ratillo89

ответ

0

Вы пробовали образец кода от Google для этой функции?

using Google.Apis.Gmail.v1; 
using Google.Apis.Gmail.v1.Data; 

// ... 

public class MyClass { 

    // ... 

/// <summary> 
/// Retrieve a Message by ID. 
/// </summary> 
/// <param name="service">Gmail API service instance.</param> 
/// <param name="userId">User's email address. The special value "me" 
/// can be used to indicate the authenticated user.</param> 
/// <param name="messageId">ID of Message to retrieve.</param> 
public static Message GetMessage(GmailService service, String userId, String messageId) 
{ 
    try 
    { 
     return service.Users.Messages.Get(userId, messageId).Execute(); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("An error occurred: " + e.Message); 
    } 

    return null; 
} 

// ... 

} 

Вы пробовали API исследователь здесь: https://developers.google.com/gmail/api/v1/reference/users/messages/get#net и ввода информации запроса? Работало ли оно с страницы API?

+0

Из теста Google отлично работает Я думаю, что проблема связана с аутентификацией. Я получаю эту ошибку {"Ошибка: \" unauthorized_client \ ", Описание: \" Несанкционированный клиент или область действия в request. \ ", Uri: \" \ ""}, когда я вызываю этот метод credential.RequestAccessTokenAsync (CancellationToken.None). Результат – ratillo89

0

Постарайтесь проверить это documentation об учетной записи службы в библиотеках .NET. В этой документации также приведен пример кода, который вы можете использовать для настройки учетной записи службы. Этот link также может дать вам представление о том, как получить доступ к API GMAIL, используя учетную запись службы.

Теперь, за полученную вами ошибку, проверьте эти ссылки, если это может вам помочь.

0

Учетные записи служб не могут получить доступ к @ gmail.com почтовые ящики. Вы должны использовать один из других поддерживаемых сценариев авторизации OAuth 2.0, описанных в https://developers.google.com/identity/protocols/OAuth2.

См. https://stackoverflow.com/a/39534420/3377170 для более подробной информации.

+0

Мне удалось работать со старой учетной записью Gmail. Тесты были выполнены с новой учетной записью. возможно, если старые учетные записи позволяют использовать учетные записи служб? – ratillo89

+1

В прошлом была лазейка, которая позволяла учетным записям службы доступа к учетным записям @ gmail.com, но она была закрыта. См. http://stackoverflow.com/a/ 39534420/3377170. –

Смежные вопросы