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