Gmail REST API: 400 Bad Request + Fehlgeschlagene Voraussetzung

Ich versuche, E-Mails basierend auf der Gmail-REST-API mit Google Java API-Diensten zu senden. Ich habe über Google Develover Console einen Anwendungsclient konfiguriert und p12- und json-Dateien heruntergeladen.

Ich habe diese Beispielprogramme verwendet,https: //developers.google.com/gmail/api/guides/sending#sending_message ...

Dieses Beispiel funktioniert, basiert jedoch auf GoogleAuthorizationCodeFlow. Ich möchte nur von Server zu Server arbeiten, direkt aufrufen, keinen Browser öffnen, um ein Zugriffstoken zu erhalten ... und ich habe es (das Zugriffstoken), aber schließlich erhalte ich eine schlechte Anfrage ... Warum? ? Ich erhalte nicht mehr Informationen als "Bad Request" und "Precondition Failed"

Auf dieser Grundlage folge ich den nächsten Schritten:

Erster Schrit: Ein GoogleCredential-Objekt basierend auf meiner Kundenkonto-E-Mail und der von p12 generierten Datei erstellen:

GoogleCredential  credential = new GoogleCredential.Builder().setTransport(new NetHttpTransport())
                                    .setJsonFactory(new JacksonFactory())
                                    .setServiceAccountId(serviceAccountUserEmail)
                                    .setServiceAccountScopes(scopes)
                                    .setServiceAccountPrivateKeyFromP12File(
                                                new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))                             
                                                        .build();

Hier muss ich darauf hinweisen, dass ich viele Probleme bei der Verwendung von ClientID anstelle von ClientMail hatte. Es muss das Konto @ developer.gserviceaccount.com anstelle von .apps.googleusercontent.com verwendet werden. Wenn Sie diese Parameter nicht senden, wird der Fehler "INVALID GRANT" angezeigt. Dies wird hier erklärt:https: //developers.google.com/analytics/devguides/config/mgmt/v3/mgmtAuthorizatio

Zweiter Schrit: Erstellen Sie den Google Mail-Dienst basierend auf den Anmeldeinformationen:

Gmail gmailService = new Gmail.Builder(httpTransport,
                                              jsonFactory,
                                              credential)
                                            .setApplicationName(APP_NAME)
                                                .build();

Dritter Schrit Erstellen Sie eine Google-Rohnachricht aus einer MimmeMessage:

private static Message _createMessageWithEmail(final MimeMessage email) throws MessagingException, IOException {

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
email.writeTo(bytes);
String encodedEmail =       Base64.encodeBase64URLSafeString(bytes.toByteArray());      
Message message = new Message();    
message.setRaw(encodedEmail);
return message;

}

Vierter Schrit Rufen Sie den Dienst auf:

    Message message = _createMessageWithEmail(email);
message = service.users()
.messages()
.send(userId,message)
.execute();
Fünfter Schritt: Ergebnis nach Ausführung abrufen ... Hier erhalte ich die Ausnahme:

Ausnahme im Thread "main"

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Bad Request",
    "reason" : "failedPrecondition"
  } ],
  "message" : "Bad Request"
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)

Jede Ahnung was ist los oder welche Vorbedingung ist gescheitert ??

Antworten auf die Frage(6)

Ihre Antwort auf die Frage