Ich kenne Daten-URIs, in denen base64
codierte Daten wie Bilder inline verwendet werden können. Heute habe ich eine E-Mail erhalten, eine Spam-E-Mail mit einem animierten (GIF-) Symbol im Betreff:
Hier ist nur das Symbol:
Das einzige, was mir in den Sinn kam, waren Daten-URIs und ob Google Mail das Einfügen von Emoticons in den Betreff zulässt. Ich habe die ausführliche Version der E-Mail gesehen und auf die Betreffzeile im folgenden Bild gezeigt:
GIF stammt also aus einer =?UTF-8?B?876Urg==?=
codierten Zeichenfolge, die dem Daten-URI-Schema ähnelt, aber ich konnte das Symbol nicht herausholen. Hier ist Element HTML-Quelle:
Kurz gesagt, es gibt viele Emoticons, von https://mail.google.com/mail/e/XXX
denen XXX
Hexadezimalzahlen stammen. Sie sind nirgendwo dokumentiert oder ich konnte sie nicht finden. Wenn es um Daten-URI geht, wie ist es dann möglich, sie in den E-Mail-Betreff von Google Mail aufzunehmen? (Ich habe diese E-Mail an ein Yahoo-E-Mail-Konto weitergeleitet, [?]
anstatt das Symbol zu sehen.) Und wenn nicht, wie wird diese codierte Zeichenfolge analysiert?
Antworten:
Kurze Beschreibung:
Sie werden intern als
goomoji
bezeichnet und scheinen eine nicht standardmäßige UTF-8-Erweiterung zu sein. Wenn Google Mail auf eines dieser Zeichen stößt, wird es durch das entsprechende Symbol ersetzt. Ich konnte keine Dokumentation dazu finden, aber ich konnte das Format zurückentwickeln.Was sind diese Symbole?
Diese Symbole sind eigentlich die Symbole, die im Bereich "Emoticons einfügen" angezeigt werden.
Obwohl ich das
52E
Symbol in der Liste nicht sehe , gibt es mehrere andere, die der gleichen Konvention folgen.B0C
4F4
Beachten Sie, dass es auch einige Symbole gibt, deren Namen vorangestellt sind, z . Ich konnte nicht feststellen, ob oder wie diese Symbole auf diese Weise verwendet werden können.
gtalk.03C
Was ist das für eine Daten-URI?
Es ist eigentlich kein Daten-URI , obwohl er einige Ähnlichkeiten aufweist. Es handelt sich tatsächlich um eine spezielle Syntax zum Codieren von Nicht-ASCII-Zeichen in E-Mail-Betreffs, die in RFC 2047 definiert ist . Grundsätzlich funktioniert es so.
In unserer Beispielzeichenfolge haben wir also die folgenden Daten.
charset
=UTF-8
encoding
=B
(bedeutet base64)data
=876Urg==
Wie funktioniert es?
Wir wissen, dass das irgendwie
876Urg==
die Ikone bedeutet52E
, aber wie?Wenn wir base64 dekodieren
876Urg==
, erhalten wir0xf3be94ae
. Dies sieht in Binärform wie folgt aus:Diese Bits stimmen mit einem 4-Byte-UTF-8-codierten Zeichen überein.
Die relevanten Bits sind also die folgenden:
Oder wenn ausgerichtet:
In hexadezimaler Reihenfolge sind diese Bytes die folgenden:
Wie Sie sehen können, stimmt das
FE
Präfix mit Ausnahme des Präfixes, mit dem diegoomoji
Symbole vermutlich von anderen UTF-8-Zeichen unterschieden werden sollen, mit52E
dem Symbol in der Symbol-URL überein . Einige Tests belegen, dass dies auch für andere Symbole gilt.Klingt nach viel Arbeit, gibt es einen Konverter?:
Dies kann natürlich per Skript erfolgen. Ich habe den folgenden Python-Code für meine Tests erstellt. Diese Funktionen können die Base64-codierte Zeichenfolge in und aus der kurzen Hex-Zeichenfolge konvertieren, die in der URL enthalten ist. Beachten Sie, dass dieser Code für Python 3 geschrieben wurde und nicht mit Python 2 kompatibel ist.
Konvertierungsfunktionen:
Beispiele:
Ausgabe:
Um die URL eines Symbols zu finden, müssen Sie natürlich lediglich einen neuen Entwurf in Google Mail erstellen, das gewünschte Symbol einfügen und den DOM-Inspektor Ihres Browsers verwenden.
quelle
B
in der speziellen Syntax Base64 impliziert, könnte eine Vermutung gewesen sein (die Zeichenfolge am Ende sieht aus wie eine Base64-codierte Zeichenfolge, wenn Sie diese zuvor gesehen haben); Danach ist es nicht so schwer zu bemerken, dass die vier Bytes einem der UTF-8-Muster für Unicode-Zeichen folgen, insbesondere weil er nach Unicode sucht. Es ist ziemlich coole Detektivarbeit,B
- es ist in # 4 definiertWenn Sie den richtigen Hex-Code-Punkt verwenden (z. B. fe4f4 für 'Haufen Poo' ) und wenn er in der Betreffzeile korrekt codiert ist, lassen Sie ihn base64 (siehe @AlexanderOMara) oder zitiert-printable (
=?utf-8?Q?=F3=BE=93=B4?=
) sein, dann wird Google Mail automatisch analysiere und ersetze es durch das entsprechende Emoji.Hier ist eine Google Mail-Emoji-Liste zum Kopieren und Einfügen in Betreffzeilen - oder E-Mail-Textkörper. Animierte Emojis, die im Posteingang noch mehr Aufmerksamkeit erregen, werden auf einen gelben Hintergrund gestellt:
quelle
Vielen Dank an Alexander O'Mara für eine so gut recherchierte Antwort auf die HTML-Bilder mit Goomoji-Tags!
Ich wollte nur drei Dinge hinzufügen:
Es gibt immer noch viele Emoji (und andere Unicode-Sequenzen, die Bilder erzeugen), die Spammer und andere frühere Vermarkter in E-Mail-Betreffzeilen verwenden und die Google Mail nicht in HTML-Bilder konvertiert. In einigen Browsern werden diese fett und farbig angezeigt, was fast so schlecht ist wie eine Animation. Browser könnten diese auch animieren, aber ich weiß nicht, ob dies der Fall ist. Diese Unicode-Sequenzen werden vom Browser als Unicode-Text angezeigt, sodass das genaue Erscheinungsbild (Farbe oder nicht, animiert oder nicht, ...) davon abhängt, welches Textwiedergabesystem der Browser verwendet. Das Erscheinungsbild eines bestimmten Unicode-Emoji hängt auch von Unicode-Variationsselektoren und Emoji-Modifikatoren abdie in der Unicode-Codepunktsequenz in der Nähe angezeigt werden. Im Gegensatz zum bildbasierten Emoji-Spam können diese Sequenzen als Unicode-Text aus dem Browser in andere Apps kopiert und eingefügt werden.
Ich hoffe, dass die vielen Vermarkter, die diese StackOverflow-Frage lesen, einfach nein sagen. Es ist eine schreckliche Idee, diese Sequenzen in Ihre E-Mail-Betreffzeilen aufzunehmen, und es wird Sie und Ihre Marke sofort als Lowlife-Spammer trüben. Es ist nicht die "Aufmerksamkeit" wert, die Ihre E-Mail erhalten wird.
Natürlich ist die erste Frage, die sich allen stellt: "Wie werde ich diese Dinge los?" Glücklicherweise gibt es dieses Open-Source-Benutzer-Skript Greasemonkey / Tampermonkey / Violentmonkey:
Google Mail Betreffzeile Emoji Roach Motel
Dieses Userscript eliminiert sowohl HTML-Bilder (dank der großartigen Arbeit von Alexander O'Mara ) als auch reine Unicode-Typen.
Für den letzteren Typ enthält das Userscript einen regulären Ausdruck, der die Unicode-Sequenzen erfasst, die wahrscheinlich von Vermarktern missbraucht werden. Die Regex sieht in ES6-Javascript so aus (das Userscript übersetzt dies in eine weit verbreitete Regex vor ES6 mit dem erstaunlichen ES6-Regex-Transpiler ):
quelle