Анимированная иконка в теме письма


Я знаю, о данные URI, в котором base64 закодированные данные могут быть использованы встроенные, такие как изображения. Сегодня я получил письмо на самом деле спам, в котором был анимированный значок (gif) в его теме:

вот только значок:

так что единственное, что пришло мне в голову, это все о данных URI, и если Gmail позволяет вставлять какие-то смайлики в тему. Я видел полную детальную версию электронной почты и указал на строку темы на рисунке ниже:

так GIF происходит от =?UTF-8?B?876Urg==?= закодированная строка, которая похожа на схему URI данных, однако я не мог получить значок из нее. Вот элемент HTML source:

короче говоря, есть много смайликов от https://mail.google.com/mail/e/XXX здесь XXX - это шестнадцатеричные цифры. Они нигде не задокументированы, или я не мог найти его. Если это касается URI данных, то как их можно включить в теме электронной почты Gmail? (Я отправил это письмо в учетную запись электронной почты yahoo, увидев [?] вместо значка) и если это не так, то как эта закодированная строка анализируется?

3 99

3 ответа:

краткое описание:

они называются внутренне как goomoji, и они кажутся нестандартным расширением UTF-8. Когда Gmail встречает один из этих символов, он заменяется соответствующим значком. Я не смог найти никакой документации по ним, но я смог перепроектировать формат.


что это за значки?

эти значки на самом деле значки, которые появляются под "вставить смайлики" панель.

Gmail Insert Emoticons

пока я не вижу 52E в списке, есть несколько других, которые следуют той же Конвенции.

обратите внимание, что есть также некоторые значки, имена которых имеют префикс, например gtalk.03Cgtalk.03C. Я не смог определить, могут ли или как эти значки используйте таким образом.


что это за данные URI вещь?

на самом деле это не данные URI, хотя у него есть некоторые сходства. На самом деле это специальный синтаксис для кодирования символов, отличных от ASCII, в темах электронной почты, определенных в RFC 2047. В принципе, это работает так.

=?charset?encoding?data?=

Итак, в нашем примере строки, у нас есть следующие данные.

=?UTF-8?B?876Urg==?=
  • charset = UTF-8
  • encoding= B (означает base64)
  • data= 876Urg==


Итак, как это работает?

мы это как-то знаем, 876Urg== означает значок 52E, но как?

если мы base64 декодировать 876Urg==, мы получим 0xf3be94ae. Это выглядит следующим образом в двоичном виде:

11110011 10111110 10010100 10101110

эти биты согласуются с 4-байтовой кодировкой UTF-8 характер.

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

таким образом, соответствующие биты следующие.:

     011   111110   010100   101110

или при выравнивании:

00001111 11100101 00101110

в шестнадцатеричном формате эти байты следующие:

FE52E

Как видите, кроме FE префикс, который предположительно должен отличать goomoji значки из других символов UTF-8, он соответствует 52E в URL значка. Некоторые тесты доказывают, что это справедливо для других иконы.


звучит как много работы, есть конвертер?:

это, конечно, может быть по сценарию. Я создал следующий код Python для моего тестирования. Эти функции можно преобразовать в base64 закодированная строка и из коротких шестигранных строку в URL-адрес. Обратите внимание, что этот код написан для Python 3 и не совместим с Python 2.

преобразование функции:

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

примеры:

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

выход:

52E
876Urg==

и, конечно же, поиск URL-адреса значка просто требует создания нового проекта в Gmail, вставки значка, который вы хотите, и использования инспектора DOM Вашего браузера.

DOM Inspector

Если вы используете правильную шестнадцатеричную кодовую точку (например, fe4f4 для 'куча какашек') и если он правильно закодирован в заголовке строки темы, пусть это будет base64 (см. @AlexanderOMara) или quoted-printable (=?utf-8?Q?=F3=BE=93=B4?=), то Gmail будет автоматически анализировать и заменить его на соответствующий смайлик.

вот список смайликов Gmail для копирования и вставки в строки темы - или тела электронной почты. Анимированные смайлики, которые привлекут еще больше внимания в почтовом ящике, размещены на желтом фоне:

Gmail emojis on emailmarketingtipps.de

большое спасибо Александр О'Мара для такого хорошо изученного ответа о goomoji-помеченных HTML-изображениях!

Я просто хотел добавить три вещи:

  • есть еще много много смайликов (и других последовательностей Unicode, генерирующих изображения), которые спамеры и другие бывшие маркетологи начинают использовать в строках темы электронной почты и что gmail не преобразуется в HTML-изображения. В некоторых браузерах они отображаются жирным и цветным шрифтом, что почти так же плохо, как анимация. Браузеры может также Выберите, чтобы оживить их, но я не знаю, если таковые имеются. Эти последовательности Юникода отображаются браузером как текст Юникода, поэтому точный внешний вид (цвет или нет, анимированный или нет,...) зависит от того, какую систему визуализации текста использует браузер. Внешний вид данного Unicode emoji также зависит от любого селекторы вариаций Юникода и модификаторы эмодзи, которые появляются рядом с ним в последовательности кодовых точек Юникода. В отличие от изображения на основе emoji спама, эти последовательности могут быть скопированы и вставлены из браузера и в другие приложения в виде текста Unicode.

  • Я надеюсь, что многие маркетологи, читающие этот вопрос StackOverflow, просто скажут "нет". Это ужасная идея, чтобы включить эти последовательности в вашей электронной почте тематические строки, и это сразу же запятнает вас и ваш бренд, как lowlife спамеров. Это не стоит того "внимания", которое получит ваша электронная почта.

  • конечно, первое вопрос, который приходит на ум каждому: "как мне избавиться от этих вещей?"К счастью, есть этот открытый исходный код Greasemonkey / Tampermonkey / Violentmonkey userscript:

Gmail Subject Line Emoji Roach Motel

этот userscript устраняет оба HTML-изображения (благодаря удивительной работе Александр О'Мара) и чистые типы Юникода.

для последнего типа userscript включает регулярное выражение, предназначенное для захват последовательностей Unicode, которые могут быть использованы маркетологами. Регулярное выражение выглядит так в ЕС6 на JavaScript (в пользовательский скрипт переводит это с широкой поддержкой предварительно ES6 в регулярное выражение, используя удивительные 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