Невозможно перечислить UserMessages () — ошибка 500 Backend

При использовании приведенного ниже кода, чтобы попытаться перечислить сообщения, полученные от только что настроенной учетной записи Gmail, я получаю

[Google_Service_Exception] Error calling GET https://www.googleapis.com/gmail/v1/users/myGmailAccount%40gmail.com/messages: (500) Backend Error

Я знаю, что часть проверки работает правильно, потому что я могу внести незначительные изменения и запросить API книг, как показано в этот пример. Ниже приведен код, который я использую для запроса последних полученных сообщений …

const EMAIL = '[email protected]';

private $permissions = [
'https://www.googleapis.com/auth/gmail.readonly'
];

private $serviceAccount = '[email protected]';

/** @var Google_Service_Gmail */
private $gmail = null;

/** @var null|string */
private static $serviceToken = null;

public function __construct()
{
$client = new Google_Client();
$client->setApplicationName($this->applicationName);
$this->gmail = new Google_Service_Gmail($client);

//authentication
if (isset(self::$serviceToken)) {
$client->setAccessToken(self::$serviceToken);
}

$credentials = new Google_Auth_AssertionCredentials(
$this->serviceAccount,
$this->permissions,
$this->getKey()
);
$client->setAssertionCredentials($credentials);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($credentials);
}
self::$serviceToken = $client->getAccessToken();
}

public function getMessages()
{
$this->gmail->users_messages->listUsersMessages(self::EMAIL);
}

Я предоставил API доступ к Gmail:
введите описание изображения здесь

500 заставляет меня поверить, что это внутренняя ошибка API gmail, или я что-то упускаю из-за того, что клиент PHP не проверяет.

-1

Решение

Эта работа для меня. Насколько я понимаю, служебная учетная запись не имеет почтового ящика, и она не слишком уверена, с каким почтовым ящиком она должна работать. Таким образом, вы не можете использовать функцию listUsersMessages (), чтобы получить все сообщения.

Поэтому вам нужно будет указать адрес электронной почты, с которым должна работать учетная запись службы.

Убедитесь, что область действия в API веб-приложения разрешена для

1. Добавьте эту строку:

$credentials->sub = self::EMAIL;

До:

$client->setAssertionCredentials($credentials);

2. Затем обновите ваш getMessages (), чтобы:

$this->gmail->users_messages->listUsersMessages("me");

Надеюсь это поможет!

2

Другие решения

Я полагаю, что учетная запись уже вошла в веб-интерфейс, верно? Вы пробовали с отдельным пользователем? Как насчет того, чтобы сделать что-то вроде списка ярлыков? Вы пытались использовать сайт API исследователей? https://developers.google.com/apis-explorer/#p/gmail/v1/

Можете ли вы предоставить первые 5 цифр идентификатора клиента разработчика (в любом случае, это не секрет), чтобы я мог попытаться отследить ошибку?

0

Чтобы это работало, вы должны олицетворять учетную запись пользователя (учетная запись службы не имеет почтового ящика, так как lthh89vt указывает на то).

Если вы попытаетесь получить доступ к почтовому ящику напрямую, вы получите (500) Back End ошибка.

Полный код:

$client_email = '[email protected]';
$private_key = file_get_contents('MyProject.p12');
$scopes = array('https://www.googleapis.com/auth/gmail.readonly');

$user_to_impersonate = '[email protected]';
$credentials = new Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key,
'notasecret',                                 // Default P12 password
'http://oauth.net/grant_type/jwt/1.0/bearer', // Default grant type
$user_to_impersonate,
);

$client = new Google_Client();
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}

$service = new Google_Service_Gmail($client);
$results = $service->users_messages->listUsersMessages('me');

Полные инструкции можно найти на Клиентская библиотека Google API для PHP

0
По вопросам рекламы [email protected]