Icona animata nell'oggetto dell'email


103

Conosco gli URI dei dati in cui i base64dati codificati possono essere utilizzati in linea come le immagini. Oggi ho ricevuto un'e-mail in realtà di spam in cui c'era un'icona animata (gif) nell'oggetto:

inserisci qui la descrizione dell'immagine

Ecco solo l'icona:

inserisci qui la descrizione dell'immagine

Quindi l'unica cosa che mi è passata per la mente era tutta sugli URI dei dati e se Gmail consente l'inserimento di una sorta di emoticon nell'oggetto. Ho visto la versione dettagliata completa dell'email e ho indicato la riga dell'oggetto nell'immagine sottostante:

inserisci qui la descrizione dell'immagine

Quindi GIF proviene da una =?UTF-8?B?876Urg==?=stringa codificata che è simile allo schema dell'URI dei dati, tuttavia non sono riuscito a estrarne l'icona. Ecco la sorgente HTML dell'elemento:

inserisci qui la descrizione dell'immagine

Per farla breve, ci sono molte emoticon da https://mail.google.com/mail/e/XXXcui XXXderivano numeri esadecimali. Non sono documentati da nessuna parte o non sono riuscito a trovarli. Se si tratta dell'URI dei dati, come è possibile includerli nell'oggetto dell'email di Gmail? (Ho inoltrato quell'e-mail a un account e-mail yahoo, vedendo [?]invece di icona) e se non lo è, allora come viene analizzata quella stringa codificata?


25
La vera domanda è come si bloccano ?!
bambams

@bambams Cosa intendi?
revo

13
Sono incredibilmente fastidiosi e come hai detto sono usati solo dagli spammer. Preferirei che non venissero mostrati da Gmail (sembra già rilevare il 99% come spam).
bambams

1
ecco come bloccarli
jamesmstone

il collegamento di jamesmstone mostra come bloccare i messaggi; se vuoi bloccare le emoji stesse e lasciare i messaggi, usa lo script utente Emoji Roach Motel della riga dell'oggetto Gmail .
Louis Semprini

Risposte:


175

Breve descrizione:

Sono denominati internamente come goomojie sembrano essere un'estensione UTF-8 non standard. Quando Gmail incontra uno di questi personaggi, viene sostituito dall'icona corrispondente. Non sono riuscito a trovare alcuna documentazione su di essi, ma sono stato in grado di decodificare il formato.


Cosa sono queste icone?

Quelle icone sono in realtà le icone che appaiono sotto il pannello "Inserisci emoticon".

Gmail Inserisci emoticon

Anche se non vedo l' 52Eicona nell'elenco, ce ne sono molti altri che seguono la stessa convenzione.

Notare che ci sono anche alcune icone i cui nomi hanno un prefisso, come . Non sono stato in grado di determinare se o come queste icone possono essere utilizzate in questo modo.gtalk.03C gtalk.03C


Cos'è questa cosa dell'URI dei dati?

In realtà non è un URI dati , sebbene condivida alcune somiglianze. In realtà è una sintassi speciale per la codifica di caratteri non ASCII negli oggetti delle email, definita nella RFC 2047 . Fondamentalmente, funziona così.

=?charset?encoding?data?=

Quindi, nella nostra stringa di esempio, abbiamo i seguenti dati.

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


Quindi, come funziona?

Lo sappiamo in qualche modo, 876Urg==significa l'icona 52E, ma come?

Se decodifichiamo in base64 876Urg==, otteniamo 0xf3be94ae. Questo è simile al seguente in binario:

11110011 10111110 10010100 10101110

Questi bit sono coerenti con un carattere codificato UTF-8 a 4 byte.

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Quindi i bit rilevanti sono i seguenti .:

     011   111110   010100   101110

O quando allineato:

00001111 11100101 00101110

In esadecimale, questi byte sono i seguenti:

FE52E

Come puoi vedere, ad eccezione del FEprefisso che presumibilmente serve a distinguere le goomojiicone dagli altri caratteri UTF-8, corrisponde 52Eall'URL dell'icona. Alcuni test dimostrano che questo vale per altre icone.


Sembra un sacco di lavoro, esiste un convertitore ?:

Questo può ovviamente essere scritto. Ho creato il seguente codice Python per i miei test. Queste funzioni possono convertire la stringa codificata in base64 nella e dalla breve stringa esadecimale trovata nell'URL. Nota, questo codice è scritto per Python 3 e non è compatibile con Python 2.

Funzioni di conversione:

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

Esempi:

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

Produzione:

52E
876Urg==

E, naturalmente, trovare l'URL di un'icona richiede semplicemente la creazione di una nuova bozza in Gmail, l'inserimento dell'icona desiderata e l'utilizzo dell'ispettore DOM del browser.

DOM Inspector


14
Questa è una straordinaria risposta completa. Non ho niente da dire ma mi chiedo solo come hai fatto a fare un reverse engineering su questo !! Grazie Alessandro.
revo

2
L'asserzione che Bnella sintassi speciale implica Base64 potrebbe essere stata una supposizione (la stringa alla fine sembra una stringa codificata Base64, se le hai viste prima); dopo di che non è così difficile notare che i quattro byte seguono uno dei modelli UTF-8 per i caratteri Unicode, specialmente perché sta cercando Unicode. È un bel lavoro investigativo, lo stesso :)
Sameers

3
@sameers Non c'è bisogno di indovinare B- è definito in # 4

Sarebbe bene menzionare la RFC nella risposta sopra, come riferimento.
Sameers

@JeremyMiller Grazie per aver rintracciato la RFC pertinente! Non sono riuscito a localizzarlo mentre stavo scrivendo questa risposta.
Alexander O'Mara

19

Se utilizzi il punto del codice esadecimale corretto (ad esempio fe4f4 per "mucchio di cacca" ) e se è codificato correttamente nell'intestazione della riga dell'oggetto, lascia che sia base64 (vedi @AlexanderOMara) o quoted-printable ( =?utf-8?Q?=F3=BE=93=B4?=), Gmail verrà automaticamente analizzalo e sostituiscilo con l'emoji corrispondente.

Ecco un elenco di emoji di Gmail da copiare e incollare nelle righe dell'oggetto o nel corpo delle email. Gli emoji animati, che attireranno ancora più attenzione nella posta in arrivo, sono posizionati su uno sfondo giallo:

Emoji Gmail su emailmarketingtipps.de


0

Mille grazie ad Alexander O'Mara per una risposta così ben studiata sulle immagini HTML con tag goomoji!

Volevo solo aggiungere tre cose:

  • Ci sono ancora molte molte emoji (e altre sequenze Unicode che generano immagini) che gli spammer e altri esperti di marketing stanno iniziando a utilizzare nelle righe dell'oggetto delle email e che Gmail non converte in immagini HTML. In alcuni browser questi appaiono in grassetto e colorati, il che è dannoso quasi quanto l'animazione. I browser potrebbero anche scegliere di animarli, ma non so se lo fanno. Queste sequenze Unicode vengono visualizzate dal browser come testo Unicode, quindi l'aspetto esatto (colore o meno, animato o meno, ...) dipende dal sistema di rendering del testo utilizzato dal browser. L'aspetto di una determinata emoji Unicode dipende anche da eventuali selettori di variazione Unicode e modificatori di emojiche appaiono accanto ad esso nella sequenza di punti di codice Unicode. A differenza dello spam emoji basato su immagini, queste sequenze possono essere copiate e incollate dal browser e in altre app come testo Unicode.

  • Spero che i molti marketer che leggono questa domanda su StackOverflow diranno semplicemente di no. È un'idea orribile includere queste sequenze nelle righe dell'oggetto delle e-mail e infangerà immediatamente te e il tuo marchio come spammer di basso livello. Non vale "l'attenzione" che riceverà la tua email.

  • Ovviamente la prima domanda che viene in mente a tutti è: "come mi sbarazzo di queste cose?" Fortunatamente esiste questo script utente open-source Greasemonkey / Tampermonkey / Violentmonkey:

Oggetto Gmail Emoji Roach Motel

Questo script utente elimina sia i tipi di immagini HTML (grazie al fantastico lavoro di Alexander O'Mara ) sia i tipi Unicode puro.

Per quest'ultimo tipo, lo userscript include un'espressione regolare progettata per catturare le sequenze Unicode che potrebbero essere utilizzate in modo improprio dai marketer. L' espressione regolare ha questo aspetto in ES6 Javascript (lo script utente lo traduce in una regex pre-ES6 ampiamente supportata utilizzando l'incredibile 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.