电子邮件主题中的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任何文件,但我能够逆向工程的格式。

这些图标是什么?

这些图标实际上是“插入表情符号”面板下的图标。

Gmail插入表情符号

虽然在列表中看不到52E图标,但还有其他几个遵循相同的约定。

  • B0C B0C
  • 4F4 4F4

请注意,也有一些图标的名称前缀,如gtalk.03C 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检查器。

DOM检查器

如果你使用正确的hex代码点(例如fe4f4代表'poo poo' ),并且如果它在主题行标题中正确编码,让它为base64(请参阅@AlexanderOMara)或quoted-printable( =?utf-8?Q?=F3=BE=93=B4?= ),Gmail会自动parsing并replace相应的表情符号。

这里有一个Gmail表情符号列表,用于复制和粘贴到主题行或邮件主体。 在收件箱中抓取更多注意力的animation表情符号被放在黄色的背景上:

emailmarketingtipps.de上的Gmail表情符号