www sirve que para googleapis google examples example auth oauth-2.0 google-oauth gmail-api google-api-php-client

oauth-2.0 - googleapis - para que sirve la api de gmail



La API de Gmail devuelve el código de error 403 y "Delegación denegada para<correo electrónico del usuario>" (3)

La API de Gmail falla para un dominio al recuperar mensajes con este error:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 OK { "code" : 403, "errors" : [ { "domain" : "global", "message" : "Delegation denied for <user email>", "reason" : "forbidden" } ], "message" : "Delegation denied for <user email>" }

Estoy utilizando OAuth 2.0 y la delegación de autoridad de dominio de Google Apps para acceder a los datos del usuario. El dominio ha otorgado derechos de acceso a datos a la aplicación.


Nuestros usuarios habían migrado a un dominio y su cuenta tenía alias adjuntos. Necesitábamos predeterminar la dirección SendAs a uno de los alias importados y queremos una forma de automatizarlo. La API de Gmail parecía la solución, pero nuestro usuario privilegiado con roles para realizar cambios en las cuentas no funcionaba: seguimos viendo el error 403 "Delegación denegada por".

Aquí hay un ejemplo de PHP de cómo pudimos enumerar sus configuraciones de SendAs.

<?PHP // // Description: // List the user''s SendAs addresses. // // Documentation: // https://developers.google.com/gmail/api/v1/reference/users/settings/sendAs // https://developers.google.com/gmail/api/v1/reference/users/settings/sendAs/list // // Local Path: // /path/to/api/vendor/google/apiclient-services/src/Google/Service/Gmail.php // /path/to/api/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsSendAs.php // // Version: // Google_Client::LIBVER == 2.1.1 // require_once $API_PATH . ''/path/to/google-api-php-client/vendor/autoload.php''; date_default_timezone_set(''America/Los_Angeles''); // this is the service account json file used to make api calls within our domain $serviceAccount = ''/path/to/service-account-with-domain-wide-delagation.json''; putenv(''GOOGLE_APPLICATION_CREDENTIALS='' . $serviceAccount ); $userKey = ''[email protected]''; // In the Admin Directory API, we may do things like create accounts with // an account having roles to make changes. With the Gmail API, we cannot // use those accounts to make changes. Instead, we impersonate // the user to manage their account. $impersonateUser = $userKey; // these are the scope(s) used. define(''SCOPES'', implode('' '', array( Google_Service_Gmail::GMAIL_SETTINGS_BASIC ) ) ); $client = new Google_Client(); $client->useApplicationDefaultCredentials(); // loads whats in that json service account file. $client->setScopes(SCOPES); // adds the scopes $client->setSubject($impersonateUser); // account authorized to perform operation $gmailObj = new Google_Service_Gmail($client); $res = $gmailObj->users_settings_sendAs->listUsersSettingsSendAs($userKey); print_r($res); ?>


Parece que lo mejor es tener siempre userId = "me" en sus solicitudes. Eso le dice a la API que solo use el buzón del usuario autenticado, sin necesidad de confiar en las direcciones de correo electrónico.


Quería acceder a los correos electrónicos de la nueva cuenta / identificación de correo electrónico, pero lo que sucedió fue que la carpeta creada recientemente con ''credenciales'' que contenía un JSON se asoció con la identificación / cuenta de correo electrónico anterior que probé anteriormente. El token de acceso y otros parámetros presentes en JSON no están asociados con una nueva cuenta / ID de correo electrónico. Entonces, para que se ejecute, solo tiene que eliminar la carpeta ''.credentails'' y ejecutar el programa nuevamente. Ahora, el programa abre el navegador y le pide que otorgue permisos.

Para eliminar la carpeta que contiene archivos en python

import shutil shutil.rmtree("path of the folder to be deleted")

puedes agregar esto al final del programa