СИТУАЦИЯ:
Я тестирую API Gmail для своего приложения.
Я тестировал несколько запросов, и они работают нормально. Например, получите сообщения, получите историю пользователей, получите черновик и т. Д.
В основном все запросы только для чтения работают нормально.
У меня есть некоторые проблемы, связанные с разрешением с другими запросами, например, когда мне приходится писать или удалять черновик.
Это ошибка, которую я получаю:
(403) Insufficient Permission
КОД:
Это функция инициализации приложения:
public function gmail_init_service() { $client = new Google_Client(); $client->setApplicationName("Gmail API test"); $client->setDeveloperKey("MY_KEY"); $client->setClientSecret('MY_CLIENT_SECRET'); $client->SetClientId('MY_CLIENT_ID'); $client->setScopes(array('https://mail.google.com/')); $client->setAccessToken('{"access_token":"MY_ACCESS_TOKEN","token_type":"Bearer","expires_in":3600,"refresh_token":"MY_REFRESH_TOKEN","created":1433502343}'); $service = new Google_Service_Gmail($client); return $service; }
Это просьба удалить один проект:
public function gmail_delete_draft() { $service = $this->gmail_init_service(); // --------------- Get draft list -------------- $list = $service->users_drafts->listUsersDrafts('me'); $draftList = $list->getDrafts(); // --------------- Get draft IDs --------------- $inbox_draft = []; foreach($draftList as $mlist) { $draftId = $mlist->id; $optParamsGet2['format'] = 'full'; $single_message = $service->users_drafts->get('me', $draftId , $optParamsGet2); $inbox_draft[]['draftId'] = $draftId; $inbox_draft[]['draft'] = $single_message; } // --------------- Delete draft --------------- $draft_delete = $service->users_drafts->delete('me', 'DRAFT_ID' ); }
РЕДАКТИРОВАТЬ:
Я попытался отменить разрешение и установить новые учетные данные. Область, объявленная при инициализации службы, такова:
https://mail.google.com/
что, как указано в документации, предоставить полный доступ к учетной записи .
Но я все равно получаю ту же ошибку. Точная ошибка для следующих запросов:
Удалить черновик – Создать черновик – Создать метку – Удалить сообщение
ВОПРОС:
Почему я получаю эту ошибку?
Это связано с тем же хранением значений в кеше?
Или связано с разрешением API?
Для создания черновика вам нужно https://www.googleapis.com/auth/gmail.compose . Итак, что произойдет, если вы
$client->setScopes(array( 'https://mail.google.com/', 'https://www.googleapis.com/auth/gmail.compose' ));
или если вы хотите получить более формальный
define('SCOPES', implode(' ', array( Google_Service_Gmail::MAIL_GOOGLE_COM, Google_Service_Gmail::GMAIL_COMPOSE) )); $client->setScopes(SCOPES)
или каким бы то ни было действительным php (я еще не сделал php).
Обратите внимание, что если у вас уже есть токен, вам может потребоваться сделать несколько слов, чтобы отменить его, чтобы вы могли переиздавать с добавленными разрешениями. Это может означать удаление файла, возможно, с именем gmail.storage или, если у вас есть доступ к учетному записям учетной записи и внес свой вклад в https://security.google.com/settings/security/permissions, разрешения доступа могут быть отменены вручную.
Эта ссылка может иметь значение: https://developers.google.com/gmail/api/auth/scopes
И меандр через исходный код может быть просветляющим.
Возможно, вы сможете узнать о моей битве с такой же штукой под Python
Для удаления почты вам необходимо https://mail.google.com/
качестве области действия.