Je souhaite changer tous les signatures
de mon domaine Gmail. Ce domaine a beaucoup de comptes, et je dois le changer de server-side
.Gmail API Signature côté serveur
J'utilise php
, et j'ai commencé mon projet avec: php composer.phar nécessitent google/apiclient:2.0
j'ai écrit un code, mais lorsque je tente de mettre à jour un e-mail (comme [email protected]), Je reçois:
{ "error": { "errors": [ { "domain": "global", "reason": "insufficientPermissions", "message": "Insufficient Permission" } ], "code": 403, "message": "Insufficient Permission" } }
Mon code (using API client library)
est quelque chose comme:
<?php
// initialize gmail
function getService() {
try {
include_once __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$credentials_file = __DIR__ . '/credentials/gmailAPI.json';
// set the location manually. Credential server-side
$client->setAuthConfig($credentials_file);
$client->setApplicationName("GmailAPI");
$client->setScopes(['https://apps-apis.google.com/a/feeds/emailsettings/2.0/']);
$gmail = new Google_Service_Gmail($client);
return $gmail;
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
function updateSignature(&$gmail) {
try {
// Start sendAs
$signature = new Google_Service_Gmail_SendAs();
// Configure Signature
$signature->setSignature("Any HTML text here.");
// Update account and print answer
var_dump($gmail->users_settings_sendAs->update("[email protected]","[email protected]",$signature));
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
try {
$gmail = getService();
updateSignature($gmail);
} catch (Exception $e) {
echo $e->getMessage();
}
?>
Mon fichier de référence (g mailAPI.json) est une clé de compte de service, et j'utilise Google for Work. J'ai créé cette information d'identification à l'aide d'un compte administrateur de ce domaine.
My credential file is:
{
"type": "service_account",
"project_id": "myProjectId",
"private_key_id": "myPrivateKeyid",
"private_key": "myPrivateKey",
"client_email": "[email protected]",
"client_id": "myId",
"auth_uri": "url",
"token_uri": "url",
"auth_provider_x509_cert_url": "url",
"client_x509_cert_url": "url"
}
Modifier 1
J'ai changé les champs d'application comme indiqué, et maintenant mes champs d'application sont:
$ client-> setScopes ([ 'https://www.googleapis.com/auth/gmail.settings.basic', » https://www.googleapis.com/auth/gmail.settings.sharing ']);
J'ai également ajouté permision sur Google (/ AdminHome? Chromeless = 1 # OGX: ManageOauthClients) à ma clé de compte de service.
J'ai essayé API explorer et cela fonctionne. Quand j'ai changé les portées, l'erreur a changé pour:
{"error": {"erreurs": [{"domain": "global", "raison": "failedPrecondition", "message": "Mauvaise demande "}], "code": 400, "message": "Bad Request"}}
J'utilise cette commande:
var_dump ($ gmail-> users_settings_sendAs-> mise à jour (" someEmail @ myDomain .com.br "," [email protected] ", $ signature));
J'ai essayé aussi
var_dump (gmail- $> users_settings_sendAs-> get ("[email protected]", "[email protected]"));
Mais j'ai reçu la même erreur.
Merci Januka, J'ai essayé l'explorateur d'API et cela fonctionne. J'ai changé mes étendues sur mon projet (identique à celui utilisé dans l'explorateur d'API), et l'erreur a changé. –
@Andre si ma réponse est utile upvote et la marquer comme bonne réponse –
S'il vous plaît n'oubliez pas de cliquer sur "Marquer comme réponse" les réponses qui ont résolu votre problème. Cela peut être bénéfique pour les autres membres de la communauté lisant ce fil. –