it-swarm-es.com

Ícono animado en el asunto del correo electrónico.

Sé acerca de URI de datos s en el que base64 los datos codificados se pueden usar en línea como las imágenes. Hoy recibí un correo electrónico, en realidad un correo no deseado en el que había un icono animado (gif) en su tema:

enter image description here

Aquí está el icono solo:

enter image description here

Así que lo único que se me ocurrió fue todo sobre los URI de datos y si Gmail permite insertar algún tipo de emoticonos en el tema. Vi la versión completa detallada del correo electrónico y señalé la línea de asunto en la imagen de abajo:

enter image description here

Por lo tanto, GIF proviene de una cadena codificada en =?UTF-8?B?876Urg==?= que es similar al esquema URI de datos, sin embargo, no pude obtener el icono. Aquí está la fuente del elemento HTML:

enter image description here

En pocas palabras, hay muchos emoticonos de https://mail.google.com/mail/e/XXX donde XXX son números hexadecimales. No están documentados en ninguna parte o no pude encontrarlo. Si se trata de URI de datos, ¿cómo es posible incluirlos en el asunto del correo electrónico de Gmail? (Reenvié ese correo electrónico a una cuenta de correo electrónico de yahoo, viendo [?] en lugar de un ícono) y si no lo está, ¿cómo se analiza esa cadena codificada?

100
revo

Breve descripción:

Se les conoce internamente como goomojiname__, y parecen ser una extensión UTF-8 no estándar. Cuando Gmail encuentra uno de estos caracteres, se reemplaza por el icono correspondiente. No pude encontrar ninguna documentación sobre ellos, pero pude realizar ingeniería inversa del formato.


¿Qué son estos iconos?

Esos íconos son en realidad los íconos que aparecen debajo del panel "Insertar emoticones".

Gmail Insert Emoticons

Si bien no veo el icono 52E en la lista, hay varios otros que siguen la misma convención.

Tenga en cuenta que también hay algunos íconos cuyos nombres tienen prefijo, como gtalk.03C gtalk.03C. No pude determinar si o cómo se pueden usar estos iconos de esta manera.


¿Qué es este URI de datos?

En realidad no es un URI de datos , aunque comparte algunas similitudes. En realidad, es una sintaxis especial para codificar caracteres no ASCII en asuntos de correo electrónico, definidos en RFC 2047 . Basicamente funciona de esta manera.

=?charset?encoding?data?=

Entonces, en nuestra cadena de ejemplo, tenemos los siguientes datos.

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


¿Entonces, cómo funciona?

Sabemos que de alguna manera, 876Urg== significa el icono 52E, pero ¿cómo?

Si descodificamos en base64 876Urg==, obtenemos 0xf3be94ae. Esto se parece a lo siguiente en binario:

11110011 10111110 10010100 10101110

Estos bits son consistentes con un carácter codificado en UTF-8 de 4 bytes.

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Así que los bits relevantes son los siguientes:

     011   111110   010100   101110

O cuando está alineado:

00001111 11100101 00101110

En hexadecimal, estos bytes son los siguientes:

FE52E

Como puede ver, excepto por el prefijo FEque se supone que distingue los goomojiíconos de otros caracteres UTF-8, coincide con el 52E en la URL del icono. Algunas pruebas demuestran que esto es válido para otros íconos.


Parece un montón de trabajo, ¿hay un convertidor ?:

Esto, por supuesto, puede ser escrito. Creé el siguiente código de Python para mis pruebas. Estas funciones pueden convertir la cadena codificada en base64 hacia y desde la cadena hexadecimal corta que se encuentra en la URL. Tenga en cuenta que este código está escrito para Python 3 y no es compatible con Python 2.

Funciones de conversión:

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

Ejemplos:

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

Salida:

52E
876Urg==

Y, por supuesto, encontrar la URL de un ícono simplemente requiere crear un nuevo borrador en Gmail, insertar el ícono que desee y usar el inspector DOM de su navegador.

DOM Inspector

171
Alexander O'Mara

Si usa el punto de código hexadecimal correcto (por ejemplo, fe4f4 para 'stack of poo' ) y si está codificado correctamente dentro del encabezado de la línea de asunto, sea base64 (vea @AlexanderOMara) o imprimible entre comillas (=?utf-8?Q?=F3=BE=93=B4?=) , luego Gmail lo analizará y reemplazará automáticamente con el emoji correspondiente.

Aquí hay una lista de emoji de Gmail para copiar y pegar en líneas de asunto - o cuerpos de correo electrónico. Los emojis animados, que atraen aún más la atención en la bandeja de entrada, se colocan sobre un fondo amarillo:

 Gmail emojis on emailmarketingtipps.de 

18
lukeA

¡Muchas gracias a Alexander O'Mara por una respuesta tan bien investigada sobre las imágenes HTML etiquetadas con goomoji!

Solo quería añadir tres cosas:

  • Todavía hay muchos muchos emoji (y otras secuencias de Unicode que generan imágenes) que los spammers y otros vendedores anteriores están empezando a usar en las líneas de asunto del correo electrónico y que gmail no se convierte a imágenes HTML. En algunos navegadores, estos aparecen en negrita y en color, lo que es casi tan malo como la animación. Los navegadores podrían también optan por animarlos, pero no sé si alguno los hace. El navegador muestra estas secuencias de Unicode como texto Unicode, por lo que el aspecto exacto (color o no, animado o no, ...) depende del sistema de procesamiento de texto que usa el navegador. La apariencia de un emoji de Unicode dado también depende de cualquier Selectores de variación de Unicode y modificadores de emoji que aparecen cerca de él en la secuencia de puntos de código de Unicode. A diferencia del spam emoji basado en imágenes, estas secuencias se pueden copiar y pegar desde el navegador y en otras aplicaciones como texto Unicode.

  • Espero que los muchos vendedores que lean esta pregunta de StackOverflow simplemente digan que no. Es una idea horrible incluir estas secuencias en las líneas de asunto de su correo electrónico e inmediatamente las empañará a usted y a su marca como spammers de baja vida. No vale la "atención" que recibirá su correo electrónico.

  • Por supuesto, la primera pregunta que viene a la mente de todos es: "¿Cómo me deshago de estas cosas?" Afortunadamente, existe este script de código abierto de Greasemonkey/Tampermonkey/Violentmonkey:

Asunto de Gmail Motel Emoji Roach

Este script de usuario elimina tanto la imagen HTML (gracias al impresionante trabajo de Alexander O'Mara ) como los tipos de Unicode puro.

Para el último tipo, el script de usuario incluye una expresión regular diseñada para capturar las secuencias de Unicode que es probable que sean abusadas por los vendedores. El regex se ve así en Javascript ES6 (el script de usuario lo traduce a un regex pre-ES6 ampliamente soportado usando el sorprendente 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
Louis Semprini