电子邮件主题中的animation图标
我知道数据URI ,其中base64
编码的数据可以内联使用,如图像。 今天我收到一封电子邮件,其实是一封垃圾邮件,其中有一个animation(gif)图标在其主题中:
这是单独的图标:
所以,我唯一想到的就是数据URI,如果Gmail允许在主题中插入某种表情符号。 我看到了电子邮件的详细版本,并在下面的图片中指出主题行:
所以GIF来自=?UTF-8?B?876Urg==?=
编码的string,它类似于数据URIscheme,但我无法从中获得图标。 这里是元素HTML源代码:
长话短说, https://mail.google.com/mail/e/XXX
中有很多表情符号,其中XXX
是hex数字。 他们被logging在任何地方或我无法find它。 如果这涉及到数据URI,那么如何将它们包含在Gmail的电子邮件主题中呢? (我转发该电子邮件到雅虎的电子邮件帐户,看到[?]
而不是图标),如果不是,那么如何编码的string被parsing?
简短的介绍:
他们在内部被称为goomoji
,他们似乎是一个非标准的UTF-8扩展。 当Gmail遇到其中一个字符时,会被相应的图标replace。 我没有find任何文件,但我能够逆向工程的格式。
这些图标是什么?
这些图标实际上是“插入表情符号”面板下的图标。
虽然在列表中看不到52E
图标,但还有其他几个遵循相同的约定。
-
B0C
-
4F4
请注意,也有一些图标的名称前缀,如gtalk.03C
。 我无法确定是否或如何以这种方式使用这些图标。
什么是这个数据URI的东西?
它实际上不是一个数据URI ,尽pipe它有一些相似之处。 这实际上是一个特殊的语法,用于编码RFC 2047中定义的电子邮件主题中的非ASCII字符。 基本上,它是这样的。
=?charset?encoding?data?=
所以,在我们的示例string中,我们有以下数据。
=?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
或者当alignment时:
00001111 11100101 00101110
在hex中,这些字节如下所示:
FE52E
正如您所看到的,除了FE
前缀(可能用于区分其他UTF-8字符的goomoji
图标)外,它与图标URL中的52E
相匹配。 一些testingcertificate,这适用于其他图标。
听起来像很多工作,有没有一个转换器?
这当然可以编写脚本。 我为我的testing创build了以下Python代码。 这些函数可以将base64编码的string转换为在URL中find的短hexstring。 请注意,这段代码是为Python 3编写的,与Python 2不兼容。
转换function:
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==
当然,find一个图标的URL只需要在Gmail中创build一个新的草稿,插入你想要的图标,并使用浏览器的DOM检查器。
如果你使用正确的hex代码点(例如fe4f4代表'poo poo' ),并且如果它在主题行标题中正确编码,让它为base64(请参阅@AlexanderOMara)或quoted-printable( =?utf-8?Q?=F3=BE=93=B4?=
),Gmail会自动parsing并replace相应的表情符号。
这里有一个Gmail表情符号列表,用于复制和粘贴到主题行或邮件主体。 在收件箱中抓取更多注意力的animation表情符号被放在黄色的背景上: