除了在另一个StackOverflow问题中提到的奇怪的消失标记问题之外,我还注意到一些字符被随机字母替换的奇怪编码问题。这似乎发生在标记中有很长的行时。以下是示例:
在处理GmailAPI之前
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Email Title</title>
</head>
<body>
<p style="font-size: 16px; line-height: 24px; margin-top: 0; margin-bottom: 0; font-family: 'ff-tisa-web-pro, Georgia, serif;">Pinterest mumblecore authentic stumptown, deep v slowcarb skateboard Intelligentsia food truck VHS. Asymmetrical swag raw denim put a bird on it Echo Park. Pinterest four loko lofi forage gentrify cray.</p>
</body>
</html>
处理完Gmail后API(通过在Gmail中打开邮件,并选择显示原件
)。
--001a1133f016eff52804ff2a2885
Content-Type: text/html; charset=ISO-8859-1
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Email Title</title>
</head>
<body>
<p style>Pinterest mumblecore authentic stumptown, deep v slowcarb skateboard Intelligentsia food truck VHS. Asymmetrical swag raw denim put a bird on it Echo Park. Pinterest four loko lofi forage gentrify cray.</p>
</body>
</html>
--001a1133f016eff52804ff2a2885--
在上面的示例中,发生的事情是我们所期望的。然而,一旦p
元素的行长变长,我们就会得到异常行为。
在处理GmailAPI之前
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Email Title</title>
</head>
<body>
<p style="font-size: 16px; line-height: 24px; margin-top: 0; margin-bottom: 0; font-family: 'ff-tisa-web-pro, Georgia, serif;">Pinterest mumblecore authentic stumptown, deep v slowcarb skateboard Intelligentsia food truck VHS. Asymmetrical swag raw denim put a bird on it Echo Park. Pinterest four loko lofi forage gentrify cray. Pinterest mumblecore authentic stumptown, deep v slowcarb skateboard Intelligentsia food truck VHS. Asymmetrical swag raw denim put a bird on it Echo Park. Pinterest four loko lofi forage gentrify cray.</p>
</body>
</html>
处理完Gmail后API(通过在Gmail中打开邮件,并选择显示原件
)。
--001a1133547278e12e04ff2a28d8
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta name=3D"viewport" content=3D"width=3Ddevice-width, initial-scale=
=3D1.0">
<title>Email Title</title>
</head>
<body>
<p style>Pinterest mumblecore authentic stumptown, deep v slowcarb skat=
eboard Intelligentsia food truck VHS. Asymmetrical swag raw denim put a bir=
d on it Echo Park. Pinterest four loko lofi forage gentrify cray. Pinterest=
mumblecore authentic stumptown, deep v slowcarb skateboard Intelligentsia =
food truck VHS. Asymmetrical swag raw denim put a bird on it Echo Park. Pin=
terest four loko lofi forage gentrify cray.</p>
</body>
</html>
--001a1133547278e12e04ff2a28d8--
在上面的示例中,p
元素中的字符数增加了一倍。不知何故,这会触发各种奇怪的编码问题。请注意,在标记中添加了Content-Transtrans-Encode: quoted-printable
。还要注意,3D
出现在每个=
之后。此外,p
元素中添加了硬换行符。每行末尾都有一个=
符号。
我如何防止这种情况发生?
Google使用标准RFC822存储电子邮件,在这种情况下,正如您在Content-Type text/html旁边的标头上看到的那样,您可以找到标头Content-Transtrans-Encode: quoted-printable(https://en.wikipedia.org/wiki/Quoted-printable)。
因此,您需要解析RFC822消息以获取实际的html。
>
找到正确的块(消息的格式就像使用您将在第一个标头中找到的边界的多部分
解析Chunk的标头并获取encode-type(并不总是可引用打印,所以要小心)
使用上一步的编码解码chunk的主体
我希望这能回答你的问题