Ich habe schwerwiegende Probleme beim Entschlüsseln des Nachrichtentexts der E-Mails, die ich mit der Google Mail-API erhalte. Ich möchte den Inhalt der Nachricht erfassen und den Inhalt in ein Div einfügen. Ich benutze einen Base64-Decoder, von dem ich weiß, dass er E-Mails nicht unterschiedlich dekodiert, aber ich bin mir nicht sicher, wie ich eine E-Mail überprüfen soll, um zu entscheiden, welcher Decoder verwendet wird - E-Mails, die utf-8-kodiert sind, werden von der .decodiert Base64-Decoder, aber kein UTF-8-Decoder.
Ich habe die E-Mail-Dekodierung seit einigen Tagen untersucht, und ich habe gelernt, dass ich hier ein wenig außerhalb meiner Liga bin. Ich habe noch nicht viel Arbeit mit dem Kodieren von E-Mails getan. Hier ist der Code, den ich verwende, um die E-Mails zu erhalten:
%Vor% Ich habe einige Überprüfungen und Debugging durchgeführt, also gibt es noch übrig gebliebene console.log
und einige andere Dinge, die nur zum Testen da sind. Trotzdem können Sie hier sehen, was ich versuche zu tun.
Was ist der beste Weg, um die E-Mails zu entschlüsseln, die ich aus der Google Mail-API abrufe? Sollte ich versuchen, die E-Mails in <script>
's mit charset
und type
Attributen zu setzen, die dem Kodierungsinhalt der E-Mail entsprechen? Ich glaube, ich erinnere mich, dass charset nur mit einem src
-Attribut funktioniert, was ich hier nicht hätte. Irgendwelche Vorschläge?
Für eine Prototyp-App, die ich schreibe, funktioniert der folgende Code für mich:
%Vor%Achtung: Diese Punkte sind nicht explizit dokumentiert und könnten falsch sein:
Die users.messages: get
API gibt "analysierten Text" zurück. standardmäßig. Diese Daten scheinen immer in UTF-8 und Base64 codiert zu sein, unabhängig von der Kopfzeile Content-Type
und Content-Transfer-Encoding
.
Zum Beispiel hatte mein Code keine Probleme beim Parsen einer E-Mail mit diesen Headern: Content-Type: text/plain; charset=ISO-2022-JP
, Content-Transfer-Encoding: 7bit
.
Die Zuordnungstabelle der Base64-Codierung variiert zwischen verschiedenen Implementierungen . Die Google Mail-API verwendet -
und _
als die letzten beiden Zeichen der Tabelle, wie von RFC 4648 definiert "URL und Dateiname sicheres Alphabet" 1 .
Überprüfen Sie, ob Ihre Base64-Bibliothek eine andere Zuordnungstabelle verwendet. Wenn dies der Fall ist, ersetzen Sie diese Zeichen durch die, die Ihre Bibliothek akzeptiert, bevor Sie den Körper an den Decoder übergeben.
1 Es gibt eine unterstützende Zeile in der Dokumentation: Das" rohe "Format gibt" body content als base64url codierte Zeichenfolge "zurück. (Danke Eric!)
Verwenden Sie atob zum Dekodieren der Nachrichten in JavaScript (siehe ref ). Um auf Ihre Message Payload zuzugreifen, können Sie eine Funktion schreiben:
%Vor%referenzierte von meiner vorherigen SO Frage und
%Vor%Wenn das oben genannte nicht 100% korrekt dekodiert, können die Kommentare von @cgenco zu dieser Antwort auf Sie zutreffen. In diesem Fall tue
%Vor%Hier ist die Lösung: Gmail-API - Die Methode "Users.messages: get" hat in der Nachricht message.payload.body.data die base64-Daten getrennt, sie wird durch das Symbol "-" getrennt. Es ist nicht der gesamte base64-kodierte Text, sondern Teile von base64-Text. Sie müssen versuchen, jeden einzelnen Teil davon zu decodieren oder eine Mono-Saite zu erzeugen, indem Sie das "-" - Symbol verbinden und ersetzen. Danach können Sie es leicht zu menschlichem Text dekodieren. Sie können jedes Teil manuell hier Ссылка
überprüfenVerwenden Sie den websafe-Decoder zum Entschlüsseln von E-Mails und Anhängen von Google Mail. Ich habe leere Seiten, wenn ich nur Base64decoder verwendet habe, musste dies verwenden: Ссылка
Tags und Links javascript character-encoding email gmail-api decoding