Gmail-API - Parse Inhalt der Nachricht (Base64-Decodierung?) mit Javascript
Ich versuche zu verwenden die Gmail-API, um ein Benutzer-E-Mail, greifen Sie den Betreff und Text, und zeigen Sie es auf einer Webseite. Ich werde tun andere Sachen, aber das ist der Teil, den ich habe Schwierigkeiten mit. Ich bin mit Angular.js.
Hier ist mein API-Aufruf:
function makeApiCall() {
gapi.client.load('gmail', 'v1', function() {
var request = gapi.client.gmail.users.messages.list({
labelIds: ['INBOX']
});
request.execute(function(resp) {
var content = document.getElementById("message-list");
angular.forEach(resp, function(message) {
var email = gapi.client.gmail.users.messages.get({'id': message.id});
//var raw = email.payload.parts;
//console.log(raw);
content.innerHTML += JSON.stringify(email) + "<br>";
})
});
});
}
So gapi.client.gmail.users.messages.list
gibt ein array von meinen Botschaften, mit deren ID-Nummern. Das ist die Arbeit.
Den Aufruf gapi.client.gmail.users.messages.get({<specific message ID>})
Ausgänge dieser - {"B":{"method":"gmail.users.messages.get","rpcParams":{},"transport":{"name":"googleapis"}}}
.
Nicht sicher, was das ist, aber Versuch, die message-payload (email.payload.parts
), Ergebnisse in undefined
. So, wie bekomme ich den Inhalt der Nachricht?
Außerdem würde ich davon ausgehen, dass wenn ich den Inhalt der Nachricht, ich würde dann Base64 decodieren der Inhalte zu bekommen ein wenig Englisch aus ihm heraus. Anregungen für das wäre eine große Hilfe auch. Ich habe dies gefunden: https://github.com/kvz/phpjs, aber da bin ich mir nicht sicher, wie Sie Sie bekommen, den Inhalt der Nachricht, so dass ich versuchen kann, und das Dekodieren, also nicht sicher, ob das php.js ist eine Hilfe in dieser Hinsicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Je nachdem, was Ihre E-Mails Aussehen (text/plain Teil aus? multipart mit text/html? Anhänge, etc?) Sie können oder möglicherweise nicht über eine "teilen" in Ihrer E-Mail.Nutzlast und stattdessen haben Sie, was Sie suchen in "E-Mail.Nutzlast.Körper.Daten" (für single-part-Nachrichten). Dies alles vorausgesetzt, du machst eine Nachricht.Holen Sie sich mit dem Standard-format ("full"). Wenn Sie stattdessen möchten, um die gesamte E-Mail in der Nachricht.raw-Bereich und befassen sich mit es im E-Mail-Bibliotheken, die für Ihre Sprache, die Sie können call-Nachricht.Holen Sie sich(format=raw).
Für mehr info schauen Sie sich die "Körper" und "Teile" []" Feld " Dokumentation "Nachricht" an https://developers.google.com/gmail/api/v1/reference/users/messages
gapi.client.gmail.users.messages.get({<message id>}).payload.body.data
ist, gibt esUncaught TypeError: Cannot read property 'body' of undefined
. Aber wenn testen die .get-Methode aufrufen, auf die Gmail-API-Dokumentation (ich wusste über diesen link Sie gepostet), bei der es Versuchen! Abschnitt der Nachrichten.bekommen Teil, ich kann sehen, Inhalte in das payload Feld meiner message-Objekt, also sollte es nicht undefined. Obwohl für Teile, [], es sagtFor...text/plain, this field is empty.
Eine grundlegende E-Mail-Nachricht enthält text, richtig? Also vielleicht das ist, nicht wo ich hingehen soll..Bezüglich der Base64-Dekodierung, die Sie verwenden können,
Für Gmail, werden Sie auch wollen, zu ersetzen einige der Zeichen:
Die obige Funktion ist verfügbar, um Sie in JavaScript (siehe ref). Ich verwende es selbst zu decodieren, die von Gmail-Nachrichten. Sie benötigen keine extra Sachen. Als eine interessante Tangente, wenn Sie wollen, um die Verschlüsselung Ihrer Nachricht Base64, verwenden Sie btoa.
Nun, für den Zugriff auf die message-payload, können Sie eine Funktion schreiben:
verwiesen aus meiner früheren ALSO Frage und
raw
Nachrichten.Ah! Ich fand es heraus.
parts
ist ein array, also sollte ich nenne es gerne:gapi.client.gmail.users.messages.get({'id': <message ID>}).payload.parts[0].body.data
Nun mein problem ist die Entschlüsselung der E-Mails, die sich als erfolgreich erwiesen in nur-text-E-Mails, nicht aber in E-Mails von nicht-personenbezogenen-Standorte (Unternehmen, die social media update-E-Mails, etc.). Aber ich mache eine neue Frage beantwortet zu bekommen, dass.
Die Sie brauchen, zu suchen, wo der Körper für einen bestimmten mime-Typ, ich habe eine rekursive Funktion geschrieben haben:
So, jetzt können Sie anrufen
Sehen die flatMap-Methode da oben? Klassische FP-Methode fehlt in js, hier ist, wie man ihn (oder Sie verwenden können lodash.js oder underscore.js wenn Sie nicht zu verwirren wollen mit der systemeigenen Objekte)