Wie kann eine Nachricht mithilfe der neuen Gmail-REST-API erfolgreich gesendet werden?
Ich bin derzeit versuchen zu testen, die neue Gmail-REST-API.
In der API Explorer ist es möglich, autorisieren Anfragen, die mit OAuth 2.0 und zum ausführen der Anfrage, d.h. eine Nachricht senden.
Zuerst habe ich autorisiert.
Ich bin mit dem folgenden Testdaten (und natürlich habe ich eine gültige to
E-Mail-Adresse):
{
"raw": "c2VuZGluZyBhIG1haWwgdXNpbmcgR21haWwgUkVTVCBBUEk=",
"payload": {
"headers": [
{ "name": "to", "value": "[email protected]" },
{ "name": "from", "value": "[email protected]" },
{ "name": "subject", "value": "Test Gmail REST API" }
],
"mimeType": "text/plain"
}
}
Bekomme ich auch eine 200 OK
und die folgenden Ergebnis Rückseite, die gut aussieht.
{
"id": "146dee391881b35b",
"threadId": "146dee391881b35b",
}
Jedoch, die E-mail nicht erfolgreich gesendet wurde und ich finden eine Nachricht von [email protected]
im Posteingang statt;: "An error occurred, your message has not been sent."
Fragen:
1. Hat jemand dies testen erfolgreich?
2. Muss ich hinzufügen, dass einige andere parameter diese Ausführung zu erhalten?
BEARBEITEN: Es gibt 2 verschiedene HTTP-request-Methoden,
- die URI Hochladen für den Medien-upload-Anfragen, und
- die Metadaten URI zur Metadaten-nur Anfragen
The API Explorer currently supports metadata requests only
was bedeutet, dass nur-text-Nachrichten ohne Anhang, und das ist, was ich versuche zu tun.
InformationsquelleAutor der Frage Taifun | 2014-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
hab!
nach dem Lesen der RFC-2822-Spezifikation fand ich heraus, dass die komplette Nachricht muss übergeben werden, in der
raw
parameter, siehe Beispiel:So, nachdem die base64-Codierung der gesamten Nachricht, und übergeben es in die
raw
parameter ohne Verwendung anderer parameter, es funktioniert gut.Edit 1:
@Amit erwähnt, es muss web-sichere base64 - codiert, siehe auch https://code.google.com/p/stringencoders/wiki/WebSafeBase64
Nur konvertieren
+
zu-
und/
zu_
war ausreichend für mich.Edit 2:
Die Antwort auf die Frage von @Hjulle hier ein Beispiel: man braucht nur die
userId
und in den request-body dieraw
parameter. Angenommen, Ihre E-Mail-Adresse ist[email protected]
Ersten Base64-Kodieren, wird die komplette Nachricht (siehe oben) mit einem online-encoder und erhalten Sie diese Zeichenfolge:
Jetzt konvertieren
+
zu-
und/
zu_
und Sie erhaltenNun übergeben Sie diese in die
raw
parameter der API-Explorer.InformationsquelleAutor der Antwort Taifun
Hinweis: Dies ist eine PHP-spezifische Antwort, aber ich bin mir sicher Sie werden es nützlich finden.
In den Fall, Sie kämpfen mit der Einrichtung der raw-Daten korrekt in PHP, so wie ich, mit PHPMailer würde die Dinge sauberer und einfacher für Sie.
Nachdem Sie die Bibliothek in Ihrem code (wenn Sie mit Komponisten, fügen Sie einfach "phpmailer/phpmailer": "~5.2" in der erfordern Abschnitt Ihres Komponisten.json), legen Sie die grundlegenden details:
Nun können Sie die base64-Kodieren $mime, um die unformatierte Zeichenfolge für die Gmail-API. Verwenden Sie diese anstelle von einfachen base64_encode, um eine gültige web-sichere-codierte Zeichenfolge.
rtrim(strtr(base64_encode($mime), '+/', '-_'), '=');
InformationsquelleAutor der Antwort trajchevska