API Gmail: authorization insufficiente

LA SITUAZIONE:

Sto testando l' API di Gmail per la mia app.

Ho provato alcune richieste e stanno funzionando bene. Ad esempio get messaggi, get la cronologia utente, get list bozze ecc.

Fondamentalmente tutte le richieste di sola lettura stanno funzionando bene.

Ho invece alcuni problemi relativi all'authorization con altre richieste, ad esempio quando devo scrivere o eliminare una bozza.

Questo è l'errore che ottengo:

(403) Insufficient Permission 

IL CODICE:

Questa è la function per inizializzare l'app:

 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(arrays('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; } 

Questa è la richiesta di eliminare una bozza:

 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' ); } 

MODIFICARE:

Ho provato a revocare l'authorization e impostare nuove credenziali. L'ambito dichiarato durante l'initialization del servizio è:

 https://mail.google.com/ 

che come indicato nella documentazione concedere l'accesso completo all'account .

Ma sto ancora ricevendo lo stesso errore. Lo stesso errore esatto per le seguenti richieste:

Elimina bozza – Crea bozza – Crea etichetta – Elimina messaggio

LA DOMANDA:

Perché sto ricevendo quell'errore?
Ha a che fare con lo stesso archivio di valori in una cache?
O è legato al permesso dell'API?

È necessario " https://www.googleapis.com/auth/gmail.compose " per creare una bozza. Quindi cosa succede se tu

 $client->setScopes(arrays( 'https://mail.google.com/', 'https://www.googleapis.com/auth/gmail.compose' )); 

o se vuoi diventare più formale

 define('SCOPES', implode(' ', arrays( Google_Service_Gmail::MAIL_GOOGLE_COM, Google_Service_Gmail::GMAIL_COMPOSE) )); $client->setScopes(SCOPES) 

o qualunque sia il php valido (non ho fatto php per un po ').

Nota che se hai già un token potresti wherer fare un po 'di ginnastica per revocarlo in modo da poter riemettere con le autorizzazioni aggiunte. Ciò potrebbe significare cancellare un file, forse chiamato gmail.storage o, se hai accesso all'accesso all'account e accedere a https://security.google.com/settings/security/permissions, le autorizzazioni di accesso possono essere revocate manualmente.

Questo link potrebbe essere rilevante: https://developers.google.com/gmail/api/auth/scopes

E un meandro attraverso il codice sorgente potrebbe essere illuminante.

Potresti essere in grado di carpire qualche intuizione dalla mia battaglia con questo stesso genere di cose con Python

È necessario https://mail.google.com/ come ambito per poter eliminare la posta.