Подтвердить что ты не робот

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

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

4b9b3361

Ответ 1

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

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


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

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

Gmail Insert Emoticons

Пока я не вижу значок 52E в списке, есть несколько других, которые следуют тому же соглашению.

Обратите внимание, что есть также некоторые значки, имена которых имеют префикс, например gtalk.03C gtalk.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

Ответ 2

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

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

Gmail emojis on emailmarketingtipps.de