Я пытаюсь составить список электронных писем со стандартной учетной записи Gmail (не учетной записи Google Apps), используя OAuth2 и служебную учетную запись (на самом деле, я хочу отправлять электронные письма, но это может подождать).
Я создал проект, создал учетную запись службы, загрузил закрытый ключ и включил API Gmail (и API календаря). Я могу успешно получить доступ к своему календарю, используя код, очень похожий на код ниже. Тем не менее я получаю следующую ошибку при попытке составить список почтовых сообщений.
Ошибка обновления токена OAuth2, сообщение: error_description "Unauthorized client or scope in request."
(Для информации. Если я закомментирую строку $ credential-> sub =…, я получу следующую ошибку: “(500) Backend Error”
и я вижу, что это регистрируется на вкладке «Использование» на странице API разработчиков).
Кто-нибудь может подтвердить, что то, что я пытаюсь сделать, возможно? И если да, есть идеи, куда идти дальше?
Вот мой код:
class mail
{
private $service;
public function __construct($clientid, $keyfile, $account_name, $app_name)
{
$client = new Google_Client();
$client->setApplicationName($app_name);
$this->service = new Google_Service_Gmail($client);
// Load the key in PKCS 12 format
$key = file_get_contents($keyfile);
$client->setClientId($clientid);
$credentials = new Google_Auth_AssertionCredentials(
$account_name, array('https://mail.google.com/'),$key);
$credentials->sub = '[email protected]';
$client->setAssertionCredentials($credentials);
}
public function list_mail()
{
try
{
$result = $this->service->users_messages->listUsersMessages("me");
}
catch (Exception $e)
{
throw new Exception("Gmail API error: ".$e->getMessage()."<br />");
}
return $result;
}
}
$mail_obj = new mail(CLIENT_ID, KEY_FILE, SERVICE_ACCOUNT_NAME, APP_NAME);
$result = $mail_obj->list_mail();
Задача ещё не решена.
Других решений пока нет …