wake-up-neo.com

Animiertes Symbol im Betreff der E-Mail

Ich kenne Daten-URIs , in denen base64 codierte Daten können wie Bilder inline verwendet werden. Heute habe ich tatsächlich eine Spam-E-Mail erhalten, in deren Betreff sich ein animiertes (GIF-) Symbol befand:

enter image description here

Hier ist nur das Symbol:

enter image description here

Das einzige, was mir in den Sinn kam, war, dass es nur um Daten-URIs ging und ob Google Mail das Einfügen von Emoticons in Betreff zulässt. Ich habe die vollständige ausführliche Version der E-Mail gesehen und auf die Betreffzeile im folgenden Bild hingewiesen:

enter image description here

GIF kommt also von =?UTF-8?B?876Urg==?= codierte Zeichenfolge, die dem Daten-URI-Schema ähnelt, aber ich konnte das Symbol nicht herausholen. Hier ist die HTML-Quelle des Elements:

enter image description here

Lange Rede kurzer Sinn, es gibt viele Emoticons von https://mail.google.com/mail/e/XXX wobei XXX Hexadezimalzahlen sind. 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, siehe [?] anstelle von icon) und wenn nicht, wie wird diese codierte Zeichenfolge analysiert?

102
revo

Kurze Beschreibung:

Sie werden intern als goomoji bezeichnet und scheinen keine 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 finden, aber ich konnte das Format rückentwickeln.


Was sind diese Symbole?

Diese Symbole sind eigentlich die Symbole, die im Bereich "Emoticons einfügen" angezeigt werden.

Gmail Insert Emoticons

Ich sehe zwar nicht das 52E Symbol in der Liste gibt es mehrere andere, die der gleichen Konvention folgen.

Beachten Sie, dass es auch einige Symbole gibt, deren Namen vorangestellt sind, z. B. gtalk.03C gtalk.03C. Ich konnte nicht feststellen, ob oder wie diese Symbole auf diese Weise verwendet werden können.


Was ist das für eine Daten-URI?

Es ist eigentlich kein Daten-URI , obwohl es einige Ähnlichkeiten aufweist. Dies ist 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 unserem Beispielstring haben wir also die folgenden Daten.

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


Wie funktioniert es?

Wir wissen das irgendwie, 876Urg== bedeutet das Symbol 52E, aber wie?

Wenn wir base64 dekodieren 876Urg==, wir bekommen 0xf3be94ae. Dies sieht in binärer Form folgendermaßen 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 Schreibweise lauten diese Bytes wie folgt:

FE52E

Wie Sie sehen können, entspricht das FE -Präfix, mit dem die goomoji -Symbole vermutlich von anderen UTF-8-Zeichen unterschieden werden sollen, dem 52E in der Symbol-URL. Einige Tests beweisen, dass dies für andere Symbole zutrifft.


Klingt nach viel Arbeit, gibt es einen Konverter ?:

Dies kann natürlich per Skript erfolgen. Ich habe den folgenden Python Code zu Testzwecken erstellt. Diese Funktionen können die base64-codierte Zeichenfolge in eine kurze hexadezimale Zeichenfolge konvertieren, die in der URL enthalten ist. Hinweis: Dieser Code ist für Python 3 und ist nicht Python 2 kompatibel.

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 lediglich einen neuen Entwurf in Google Mail erstellen, das gewünschte Symbol einfügen und den DOM-Inspektor Ihres Browsers verwenden.

DOM Inspector

172

Wenn Sie den richtigen Hex-Code-Punkt verwenden (z. B. fe4f4 für 'Haufen von Poo' ) und wenn es korrekt innerhalb des Betreffzeilen-Headers codiert ist, lassen Sie es base64 (siehe @AlexanderOMara) oder quoted-printable sein (=?utf-8?Q?=F3=BE=93=B4?=), dann wird Google Mail automatisch analysiert und durch das entsprechende Emoji ersetzt.

Hier ist eine Google Mail-Emojiliste zum Kopieren und Einfügen in Betreffzeilen - oder E-Mail-Textkörper. Animierte Emojis, die im Posteingang noch mehr Aufmerksamkeit erregen, werden gelb hinterlegt:

Gmail emojis on emailmarketingtipps.de

18
lukeA

Vielen Dank an Alexander O'Mara für diese gut recherchierte Antwort zu den mit Goomoji-Tags versehenen HTML-Bildern!

Ich wollte nur drei Dinge hinzufügen:

  • Es gibt immer noch viele Emoji (und andere Unicode-Sequenzen, die Bilder generieren), die Spammer und andere ehemalige Vermarkter in E-Mail-Betreffzeilen verwenden und die von Google Mail nicht in HTML-Bilder konvertiert werden. In einigen Browsern werden diese fett und farbig dargestellt, was fast so schlecht ist wie Animationen. Browser könnten auch diese animieren, aber ich weiß nicht, ob es welche gibt. Diese Unicode-Sequenzen werden vom Browser als Unicode-Text angezeigt, sodass das genaue Erscheinungsbild (Farbe oder nicht, animiert oder nicht, ...) davon abhängt, welches Text-Rendering-System der Browser verwendet. Das Erscheinungsbild eines bestimmten Unicode-Emoji hängt auch von nicode-Variationsselektoren und Emoji-Modifikatoren ab, die in der Unicode-Codepunktsequenz in dessen 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, die vielen Vermarkter, die diese StackOverflow-Frage lesen, werden einfach nein sagen. Es ist eine schreckliche Idee, diese Sequenzen in die Betreffzeilen Ihrer E-Mails aufzunehmen, und sie werden Sie und Ihre Marke sofort als Spammer in den Schatten stellen. Es ist nicht die Aufmerksamkeit wert, die Ihre E-Mail erhalten wird.

  • Natürlich ist die erste Frage, die sich jeder stellt: "Wie werde ich diese Dinge los?" Zum Glück gibt es dieses Open-Source-User-Skript für 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, mit dem die Unicode-Sequenzen erfasst werden, die von Marketingfachleuten möglicherweise missbraucht werden. Der reguläre Ausdruck sieht in ES6 Javascript so aus (das User-Skript übersetzt dies mit dem erstaunlichen ES6 Regex Transpiler in einen weit verbreiteten regulären Ausdruck vor ES6):

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
0
Louis Semprini