J'ai un serveur web jetty sécurisé SSL dont la tâche est de lire/envoyer des emails au nom de l'utilisateur. Pour lire pub/sub est préférable, au lieu de tirer. Ont suivi ces étapes de developers.google.comGmail API configurer le compte de service et lire/envoyer des mails au nom de l'utilisateur
- a créé un projet dans la console, activé Gmail api, compte de service créé avec Google Apps délégation de domaine à l'échelle téléchargée à la fois JSON et p12 clé privée
- Créé OAuth cliend-id en sélectionnant web l'application a donné un nom et qu'autorisé URI de redirection à l'un des serveurs web point final api
- Grant publie droit au sujet en utilisant api
- sujet créé la console dans le pub-sub et souscrit avec un point final HTTPs. Manuellement vérifiée à l'aide API de console pour publier un message et reçu avec succès
Maintenant, tout ce qui reste à faire est d'utiliser la bibliothèque client Java pour utiliser les informations d'identification de compte de service et de parler à gmail des API pour le compte de l'utilisateur (ont recueilli auth & jeton d'actualisation des utilisateurs pour le sujet)
Étapes essayées.
En utilisant la clé privée téléchargée (p12) essayé de créer des titres de compétences et pour l'échantillon récupération des étiquettes du courrier
HttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); String serviceAccount = "[email protected]"; Credential credential = GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) .setJsonFactory(JSON_FACTORY) .setServiceAccountId(serviceAccount) .setServiceAccountPrivateKeyFromP12File(new File("/path-to-key-file.p12")) .setServiceAccountScopes(Collections.singleton(GmailScopes.GMAIL_LABELS)) .build(); Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, cred).setApplicationName("web-application-name-created-via-console").build(); String user = "me"; //Tried direct email id also service.users().labels().list(user).execute();
Réponse,
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Bad Request",
"reason" : "failedPrecondition"
} ],
"message" : "Bad Request"
}
Note: La partie codante est essayé dans le serveur local et non celui qui a SSL. Je suppose que cela ne devrait pas être un problème car j'ai tous les fichiers clés nécessaires pour accéder à l'API.
S'il vous plaît, faites-moi savoir s'il me manque quelque chose.
Avez-vous un moyen de consigner la requête finale? :) Ce serait utile. Par exemple. méthode, URL et en-têtes. – Tholle
Avez-vous résolu cela? Comment envoyez-vous au nom d'un utilisateur? –
Oui en utilisant GoogleCredential.getApplicationDefault() – Itachi