Gmail API - Parsen Sie Nachrichteninhalte (Base64-Dekodierung?) mit Javascript

7

Ich versuche, die Google Mail-API zu verwenden, um die E-Mail eines Nutzers abzurufen, den Betreff und den Nachrichtentext der Nachricht abzurufen und dann auf einer Webseite anzuzeigen. Ich werde andere Sachen damit machen, aber das ist der Teil, mit dem ich Schwierigkeiten habe. Ich benutze Angular.js.

Hier ist mein API-Aufruf:

%Vor%

So gapi.client.gmail.users.messages.list gibt ein Array meiner Nachrichten mit ihren ID-Nummern zurück. Das funktioniert.

Der Aufruf von gapi.client.gmail.users.messages.get({<specific message ID>}) gibt dies aus - {"B":{"method":"gmail.users.messages.get","rpcParams":{},"transport":{"name":"googleapis"}}} .

Nicht sicher, was das ist, aber versuchen, die Nachrichtennutzlast ( email.payload.parts ) zu erhalten, ergibt undefined . Also, wie kann ich den Inhalt der Nachricht bekommen?

Ich würde auch annehmen, dass ich, wenn ich den Inhalt der Nachricht bekommen könnte, dann Base64 den Inhalt dekodieren müsste, um etwas Englisch daraus zu machen. Vorschläge hierzu wären ebenfalls sehr hilfreich. Ich habe folgendes gefunden: Ссылка , aber da ich mir nicht sicher bin, wie ich den Inhalt der Nachricht bekommen soll, damit ich es versuchen kann und entziehe sie, also nicht sicher, ob das php.js in dieser Hinsicht eine Hilfe ist.

    
eugene1832 14.07.2014, 20:06
quelle

4 Antworten

3

Je nachdem, wie Ihre E-Mails aussehen (einfacher Text / einfacher Teil? mehrteilig mit Text / HTML? Anhängen usw.?), haben Sie vielleicht keine "Teile" in Ihrer E-Mail.payload und stattdessen haben Sie was Sie suchen in "email.payload.body.data" (für einteilige Nachrichten). Dies alles setzt voraus, dass Sie eine message.get mit dem Standardformat ("full") ausführen. Wenn Sie stattdessen die gesamte E-Mail im Feld message.raw abrufen und in E-Mail-Bibliotheken für Ihre Sprache bearbeiten möchten, können Sie message.get (format = raw) aufrufen.

Weitere Informationen finden Sie in der Felddokumentation "body" und "parts []" für "Message" unter Ссылка

    
Eric D 14.07.2014, 20:15
quelle
22

In Bezug auf die Base64-Decodierung können Sie

verwenden %Vor%

Bei Google Mail sollten Sie auch einige Zeichen ersetzen:

%Vor%

Die obige Funktion steht Ihnen in JavaScript zur Verfügung (siehe ref ). Ich benutze es selbst, um die Google Mail-Nachrichten zu dekodieren. Keine Notwendigkeit, zusätzliche Sachen zu installieren. Als interessante Tangens, wenn Sie Ihre Nachricht zu Base64 verschlüsseln möchten, verwenden Sie btoa.

Nun können Sie für den Zugriff auf Ihre Nachrichtennutzlast eine Funktion schreiben:

%Vor%

referenzierte von meiner vorherigen SO Frage und

%Vor%     
FullStack 20.02.2015 05:19
quelle
3

Ah! Ich habe es herausgefunden. parts ist ein Array, also hätte ich es wie folgt aufgerufen: gapi.client.gmail.users.messages.get({'id': <message ID>}).payload.parts[0].body.data

Jetzt ist mein Problem die Entschlüsselung der E-Mails, was sich in reinen Text-E-Mails als erfolgreich erweist, aber nicht in E-Mails von nicht-persönlichen Orten (Unternehmen, E-Mails für soziale Netzwerke usw.). Aber ich werde eine neue Frage stellen, um Antworten dafür zu bekommen.

    
eugene1832 15.07.2014 16:03
quelle
0

Sie müssen suchen, wo der Körper für einen bestimmten Mime-Typ ist, ich habe eine rekursive Funktion dafür geschrieben:

%Vor%

So können Sie jetzt

anrufen %Vor%

Siehe da oben die flatMap-Methode? Klassische FP-Methode fehlt in js, hier ist, wie Sie es hinzufügen (oder Sie können lodash.js oder Unterstreichung.js verwenden, wenn Sie sich nicht mit den nativen Objekten anlegen wollen)

%Vor%     
standup75 19.11.2015 14:14
quelle