Animiertes Symbol im Betreff der E-Mail

103

Ich kenne Daten-URIs, in denen base64codierte 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:

Geben Sie hier die Bildbeschreibung ein

Hier ist nur das Symbol:

Geben Sie hier die Bildbeschreibung ein

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:

Geben Sie hier die Bildbeschreibung ein

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:

Geben Sie hier die Bildbeschreibung ein

Kurz gesagt, es gibt viele Emoticons, von https://mail.google.com/mail/e/XXXdenen XXXHexadezimalzahlen 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?

revo
quelle
25
Die eigentliche Frage ist, wie blockiert man sie?!
Bambams
@bambams Was meinst du?
Revo
13
Sie sind unglaublich nervig und werden, wie Sie sagten, nur von Spammern verwendet. Ich möchte lieber, dass sie von Google Mail nicht angezeigt werden (es scheint bereits 99% als Spam zu erkennen).
Bambams
1
Hier ist, wie man sie blockiert
Jamesmstone
Der Link von Jamesmstone zeigt, wie die Nachrichten blockiert werden. Wenn Sie das Emoji selbst blockieren und die Nachrichten hinterlassen möchten, verwenden Sie das Google Mail-Betreff Emoji Roach Motel- Benutzerskript.
Louis Semprini

Antworten:

175

Kurze Beschreibung:

Sie werden intern als goomojibezeichnet 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.

Google Mail Emoticons einfügen

Obwohl ich das 52ESymbol in der Liste nicht sehe , gibt es mehrere andere, die der gleichen Konvention folgen.

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 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.

=?charset?encoding?data?=

In unserer Beispielzeichenfolge haben wir also die folgenden Daten.

=?UTF-8?B?876Urg==?=
  • charset = UTF-8
  • encoding= B(bedeutet base64)
  • data = 876Urg==


Wie funktioniert es?

Wir wissen, dass das irgendwie 876Urg==die Ikone bedeutet 52E, aber wie?

Wenn wir base64 dekodieren 876Urg==, erhalten wir 0xf3be94ae. Dies sieht in Binärform wie folgt aus:

11110011 10111110 10010100 10101110

Diese Bits stimmen mit einem 4-Byte-UTF-8-codierten Zeichen überein.

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Die relevanten Bits sind also die folgenden:

     011   111110   010100   101110

Oder wenn ausgerichtet:

00001111 11100101 00101110

In hexadezimaler Reihenfolge sind diese Bytes die folgenden:

FE52E

Wie Sie sehen können, stimmt das FEPräfix mit Ausnahme des Präfixes, mit dem die goomojiSymbole vermutlich von anderen UTF-8-Zeichen unterschieden werden sollen, mit 52Edem 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:

import base64

def goomoji_decode(code):
    #Base64 decode.
    binary = base64.b64decode(code)
    #UTF-8 decode.
    decoded = binary.decode('utf8')
    #Get the UTF-8 value.
    value = ord(decoded)
    #Hex encode, trim the 'FE' prefix, and uppercase.
    return format(value, 'x')[2:].upper()

def goomoji_encode(code):
    #Add the 'FE' prefix and decode.
    value = int('FE' + code, 16)
    #Convert to UTF-8 character.
    encoded = chr(value)
    #Encode UTF-8 to binary.
    binary = bytearray(encoded, 'utf8')
    #Base64 encode return end return a UTF-8 string. 
    return base64.b64encode(binary).decode('utf-8')

Beispiele:

print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))

Ausgabe:

52E
876Urg==

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.

DOM-Inspektor

Alexander O'Mara
quelle
14
Das ist eine erstaunliche vollständige Antwort. Ich habe nichts zu sagen, aber ich frage mich nur, wie Sie ein Reverse Engineering durchgeführt haben !! Danke Alexander.
Revo
2
Die Behauptung, dass Bin 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,
egal
3
@sameers Keine Notwendigkeit zu raten B- es ist in # 4 definiert
Sylas Seabrook
Es wäre gut, den RFC in der obigen Antwort als Referenz zu erwähnen.
Sameers
@JeremyMiller Danke, dass du den relevanten RFC aufgespürt hast! Ich konnte es nicht finden, als ich diese Antwort schrieb.
Alexander O'Mara
19

Wenn 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:

Google Mail-Emojis auf emailmarketingtipps.de

lukeA
quelle
0

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 ):

var re = /(\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F|[\u{2100}-\u{2BFF}\u{E000}-\u{F8FF}\u{1D000}-\u{1F5FF}\u{1F650}-\u{1FA6F}\u{F0000}-\u{FFFFF}\u{100000}-\u{10FFFF}])\s*/gu

// which includes the Unicode Emoji pattern from
//   https://github.com/tc39/proposal-regexp-unicode-property-escapes
// plus also these blocks frequently used for spammy emojis
// (see https://en.wikipedia.org/wiki/Unicode_block ):
//   U+2100..U+2BFF     Arrows, Dingbats, Box Drawing, ...
//   U+E000..U+F8FF     Private Use Area (gmail generates them for some emoji)
//   U+1D000..U+1F5FF   Musical Symbols, Playing Cards (sigh), Pictographs, ...
//   U+1F650..U+1FA6F   Ornamental Dingbats, Transport and Map symbols, ...
//   U+F0000..U+FFFFF   Supplementary Private Use Area-A
//   U+100000..U+10FFFF Supplementary Private Use Area-B
// plus any space AFTER the discovered emoji spam
Louis Semprini
quelle