Я знаю о Data URI, в которых base64
закодированные данные могут использоваться встроенными, например изображения. Сегодня я получил письмо, на самом деле спам, в теме которого был анимированный (gif) значок:
Вот только иконка:
Так что единственное, что мне пришло в голову, это все об URI данных и о том, позволяет ли Gmail вставлять какие-то смайлы в тему. Я увидел полную подробную версию электронного письма и указал на тему на картинке ниже:
Итак, GIF происходит из =?UTF-8?B?876Urg==?=
закодированной строки, которая похожа на схему URI данных, но я не мог извлечь из нее значок. Вот источник HTML элемента:
Короче говоря, существует множество смайлов, в https://mail.google.com/mail/e/XXX
которых XXX
используются шестнадцатеричные числа. Они нигде не задокументированы, или я не смог их найти. Если это касается URI данных, то как можно включить их в тему письма Gmail? (Я переслал это письмо на адрес электронной почты yahoo, [?]
вместо значка видел ), и если нет, то как анализируется эта закодированная строка?
Ответы:
Краткое описание:
Они называются внутри как
goomoji
, и они выглядят нестандартным расширением UTF-8. Когда Gmail встречает один из этих символов, он заменяется соответствующим значком. Мне не удалось найти по ним какую-либо документацию, но я смог реконструировать формат.Что это за значки?
Эти значки на самом деле являются значками, которые появляются на панели «Вставить смайлы».
Хотя я не вижу
52E
значка в списке, есть несколько других, которые следуют тому же соглашению.B0C
4F4
Обратите внимание, что есть также некоторые значки, имена которых имеют префиксы, например . Мне не удалось определить, можно ли использовать эти значки таким образом и как.
gtalk.03C
Что это за URI данных?
На самом деле это не Data URI , хотя у него есть некоторые общие черты. На самом деле это специальный синтаксис для кодирования не-ASCII символов в темах электронной почты, определенный в RFC 2047 . В основном это работает так.
Итак, в нашем примере строки у нас есть следующие данные.
charset
знак равноUTF-8
encoding
=B
(означает base64)data
знак равно876Urg==
Итак, как это работает?
Мы как-то знаем, что
876Urg==
означает значок52E
, но как?Если мы декодируем base64
876Urg==
, мы получим0xf3be94ae
. В двоичном формате это выглядит так:Эти биты соответствуют 4-байтовому символу в кодировке UTF-8.
Итак, соответствующие биты следующие:
Или при выравнивании:
В шестнадцатеричном формате это следующие байты:
Как вы можете видеть, за исключением
FE
префикса, который предположительно предназначен для отличияgoomoji
значков от других символов UTF-8, он совпадает с префиксом52E
в URL-адресе значка. Некоторые тесты доказывают, что это верно и для других иконок.Похоже, много работы, есть ли конвертер ?:
Конечно, это можно сделать в сценарии. Для тестирования я создал следующий код Python. Эти функции могут преобразовывать строку в кодировке base64 в короткую шестнадцатеричную строку, найденную в URL-адресе, и обратно. Обратите внимание, этот код написан для Python 3 и несовместим с Python 2.
Функции преобразования:
Примеры:
Вывод:
И, конечно же, для поиска URL-адреса значка просто требуется создать новый черновик в Gmail, вставить нужный значок и использовать инспектор DOM вашего браузера.
источник
B
в специальном синтаксисе подразумевается, что Base64, могло быть предположением (строка в конце вида выглядит как строка в кодировке Base64, если вы видели это раньше); после чего нетрудно заметить, что четыре байта следуют одному из шаблонов UTF-8 для символов Unicode, особенно потому, что он ищет Unicode. Довольно крутая детективная работа, все равно :)B
- это определено в # 4Если вы используете правильный шестнадцатеричный код (например, fe4f4 для «кучи какашки» ) и если он правильно закодирован в заголовке строки темы, пусть это будет base64 (см. @AlexanderOMara) или quoted-printable (
=?utf-8?Q?=F3=BE=93=B4?=
), тогда Gmail автоматически проанализируйте и замените его соответствующим смайликом.Вот список смайлов Gmail, который можно скопировать и вставить в строки темы или текст сообщения электронной почты. На желтом фоне размещены анимированные смайлы, которые привлекут еще больше внимания во входящих:
источник
Большое спасибо Александру О'Мара за такой хорошо проработанный ответ о HTML-изображениях с тегами goomoji!
Я просто хотел добавить три вещи:
По-прежнему существует множество эмодзи (и других последовательностей Unicode, генерирующих изображения), которые спамеры и другие бывшие маркетологи начинают использовать в строках тем электронной почты и которые Gmail не конвертирует в изображения HTML. В некоторых браузерах они отображаются жирным и цветным шрифтом, что почти так же плохо, как анимация. Браузеры могут также выбрать , чтобы оживить их, но я не знаю , если кто- либо делает. Эти последовательности Unicode отображаются браузером как текст Unicode, поэтому точный внешний вид (цвет или нет, анимированный или нет, ...) зависит от того, какую систему визуализации текста использует браузер. Внешний вид данного смайлика Unicode также зависит от любых селекторов вариантов Unicode и модификаторов смайликов.которые появляются рядом с ним в последовательности кодовых точек Unicode. В отличие от спама с эмодзи на основе изображений, эти последовательности можно скопировать и вставить из браузера в другие приложения в виде текста Unicode.
Я надеюсь, что многие маркетологи, читающие этот вопрос о StackOverflow, просто скажут «нет». Ужасная идея включать эти последовательности в строки темы электронного письма, и это сразу же запятнает вас и ваш бренд как спамеров. Это не стоит того "внимания", которое получит ваша электронная почта.
Конечно, первый вопрос, который приходит в голову каждому: «как мне избавиться от этих вещей?» К счастью, есть пользовательский скрипт Greasemonkey / Tampermonkey / Violentmonkey с открытым исходным кодом:
Gmail Subject Line Emoji Roach Motel
Этот пользовательский скрипт исключает как HTML-изображения (благодаря отличной работе Александра О'Мара ), так и типы чистого Unicode.
Для последнего типа пользовательский сценарий включает регулярное выражение, предназначенное для захвата последовательностей Unicode, которые могут быть использованы маркетологами. Регулярное выражение выглядит так в ES6 Javascript (пользовательский скрипт переводит это в широко поддерживаемое регулярное выражение до ES6 с использованием замечательного ES6 Regex Transpiler ):
источник