Icône animée dans le sujet du courriel

je sais à propos de "151960920 de Données" URI s de base64 codée de données peut être utilisé en ligne, tels que des images. Aujourd'hui j'ai reçu un email en fait un spam dans lequel il y avait une icône animée (gif) dans son sujet:

enter image description here

Voici l'icône seule:

enter image description here

donc la seule chose qui m'ait traversé l'esprit était tout au sujet des données URIs et si Gmail permet une sorte d'émoticônes à insérer dans le sujet. J'ai vu la version complète détaillée de l'email et indiqué à la ligne d'objet à l'image ci-dessous:

enter image description here

donc GIF vient de =?UTF-8?B?876Urg==?= chaîne encodée qui est similaire au schéma URI de données cependant je ne pouvais pas obtenir l'icône hors de lui. Voici l'élément HTML source:

enter image description here

pour faire court, il y a beaucoup d'émoticônes de https://mail.google.com/mail/e/XXXXXX sont des nombres hexadécimaux. Ils ne sont documentés nulle part ou Je ne l'ai pas trouvé. Si c'est à propos D'URI de données, alors comment est-il possible de les inclure dans le sujet de courriel de Gmail? (J'ai envoyé cet email à un compte email yahoo, en voyant [?] au lieu de l'icône) et si ce n'est pas le cas, alors comment cette chaîne encodée est analysée?

99
demandé sur revo 2015-01-22 20:47:42

3 réponses

brève description:

ils sont appelés à l'interne goomoji , et ils semblent être une extension UTF-8 non standard. Lorsque Gmail rencontre l'un de ces caractères, il est remplacé par l'icône correspondante. Je n'ai pas pu trouver de documentation sur eux, mais j'ai pu inverser le format.



quelles sont ces icônes?

Those les icônes sont en fait les icônes qui apparaissent sous le panneau" Insert emoticons".

Gmail Insert Emoticons

bien que je ne vois pas l'icône 52E dans la liste, il y a plusieurs autres qui suivent la même convention.

notez qu'il y a aussi des icônes dont les noms sont préfixés, comme gtalk.03C gtalk.03C . Je n'étais pas en mesure de déterminer si ou comment ces icônes peuvent être utilisées de cette manière.



C'est quoi ce truc D'URI de données?

ce n'est pas réellement un URI de données , si elle ne part quelques similitudes. C'est en fait une syntaxe spéciale pour encoder des caractères non-ASCII dans des sujets de messagerie, définis dans RFC 2047 . Fondamentalement, il fonctionne comme ceci.

=?charset?encoding?data?=

Ainsi, dans notre exemple de chaîne, nous avons les données suivantes.

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



alors, comment ça marche?

nous savons que d'une manière ou d'une autre, 876Urg== signifie l'icône 52E , mais comment?

si nous base64 décodons 876Urg== , nous obtenons 0xf3be94ae . Cela ressemble à ce qui suit en binaire:

11110011 10111110 10010100 10101110

ces bits sont compatibles avec un caractère encodé UTF-8 de 4 octets.

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

donc les bits pertinents sont les suivants.:

     011   111110   010100   101110

ou lorsqu'elle est alignée:

00001111 11100101 00101110

en hexadécimal, ces octets sont les suivants:"

FE52E

comme vous pouvez le voir, à l'exception du préfixe FE qui est probablement pour distinguer les icônes goomoji des autres caractères UTF-8, il correspond au 52E dans l'URL de l'icône. Certains tests prouvent que cela est vrai pour d'autres icônes.



sonne comme beaucoup de travail, est-ce qu'il y a un convertisseur?:

Cela peut bien sûr être scripté. J'ai créé le code Python suivant pour mes tests. Ces fonctions permettent de convertir la chaîne encodée base64 en et à partir de la chaîne hexadécimale courte trouvée dans L'URL. Notez que ce code est écrit pour Python 3, et n'est pas compatible Python 2.

Fonctions de Conversion:

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

exemples:

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

sortie:

52E
876Urg==

et, bien sûr, pour trouver l'URL d'une icône, Il suffit de créer un nouveau brouillon dans Gmail, d'insérer l'icône désirée et d'utiliser L'inspecteur DOM de votre navigateur.

DOM Inspector

169
répondu Alexander O'Mara 2015-12-26 08:28:05

si vous utilisez le code hexadécimal approprié (par exemple fe4f4 pour 'pile de poo' ) et si elle est correctement encodée dans l'en-tête de ligne objet, qu'elle soit base64 (voir @AlexanderOMara) ou quoted-printable ( =?utf-8?Q?=F3=BE=93=B4?= ), alors Gmail l'analysera automatiquement et la remplacera par l'emoji correspondant.

Voici une liste D'emoji Gmail pour copier et coller dans les lignes d'objet - ou les corps de courrier électronique. Les émoticônes animées, qui prenez encore plus d'attention dans la boîte de réception, sont placés sur un fond jaune:

Gmail emojis on emailmarketingtipps.de

18
répondu lukeA 2015-05-20 23:58:18

Merci beaucoup à Alexander O'Mara pour une réponse si bien documentée sur les images HTML étiquetées par goomoji!

je voulais juste ajouter trois choses:

  • il y a encore beaucoup d'emoji (et d'autres séquences Unicode générant des images) que les spammeurs et d'autres marchands d'autrefois commencent à utiliser dans les lignes d'objet de courrier électronique et que gmail ne convertit pas en images HTML. Dans certains navigateurs, ces montrer audacieux et coloré, qui est presque aussi mauvais que d'animation. Navigateurs pourrait également choisir d'animer ces, Mais je ne sais pas si faire. Ces séquences Unicode sont affichées par le navigateur comme texte Unicode, donc l'apparence exacte (couleur ou non, animé ou non, ...) dépend de ce texte système de rendu du navigateur. L'apparence d'un emoji Unicode donné dépend également de n'importe quel selecteurs de variation Unicode et modificateurs emoji que apparaît près de lui dans la séquence de point de code Unicode. Contrairement au spam emoji basé sur l'image, ces séquences peuvent être copiées et collées hors du navigateur et dans d'autres applications sous forme de texte Unicode.

  • j'espère que les nombreux spécialistes du marketing qui liront cette question ne feront que dire non. C'est une idée horrible d'inclure ces séquences dans vos lignes de sujet de courriel et cela va immédiatement vous ternir ainsi que votre marque en tant que polluposteurs. Cela ne vaut pas la peine "l'attention" votre e-mail obtiendrez.

  • bien sûr, la première question qui vient à l'esprit de tout le monde est: "Comment puis-je me débarrasser de ces choses?"Heureusement, il y a cet open-source Greasemonkey / Tampermonkey/Violentmonkey userscript:

Gmail Subject Line Emoji Roach Motel

ce userscript élimine les deux HTML-image (Grâce au Travail impressionnant de Alexander O'Mara ) et les types Unicode pur.

pour ce dernier type, le userscript comprend une expression régulière conçue pour capter les séquences Unicode susceptibles d'être utilisées abusivement par les vendeurs. Le regex ressemble à cela dans le Javascript ES6 (l'userscript traduit cela en pré-ES6 regex largement soutenu en utilisant l'étonnant 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
0
répondu Louis Semprini 2018-07-18 23:02:22