我有一个问题与Microsoft Exchange服务器上的编码有关。我已经构建了一个在Exchange上处理消息的应用程序,其中一个选项是强制编码始终为" US-ASCII"。
只要邮件直接通过Exchange协议,就没有问题。我注意到这个问题与第三方邮件客户端(例如Thunderbird)通过SMTP协议发送的邮件有关。
虽然charset在源代码中可见为US-ASCII,但我可以找到" 3D" near = character,因此源代码已损坏,部分消息未正确显示(例如图像)。
要解决此问题,我尝试强制使用7位内容传输编码,但问题仍然存在。
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
<html><head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
</head>
<body bgcolor=3D"#FFFFFF" text=3D"#000000">
dsadsadsadsdsdsadasdsadasdsad<b>dsa</b>
<p style=3D"FONT-FAMILY: Arial" id=3D"c1-id-6">Some signature with image.=
</p><p style=3D"FONT-FAMILY: Arial" id=3D"c1-id-7"><img alt=3D"" src=3D"cid=
:img1.jpg" id=3D"c1-id-8"></p><p style=3D"FONT-FAMILY: Arial" id=3D"c1-id-9=
"> </p></body>
</html>
只要消息由我的应用处理,&#34; 3D&#34;即使在更改字符集后也不会出现。
答案 0 :(得分:3)
您选择的内容传输编码导致:Content-Transfer-Encoding: quoted-printable
Quoted printable uses the equals sign as an escape character,所以邮件服务器已尽职尽责地逃脱了所有“原始”等号。
Quoted-Printable或QP编码是使用可打印ASCII的编码 字符(字母数字和等号“=”)传输8位 数据通过7位数据路径,或者通常是在不是的介质上 8位清洁。[1]它被定义为MIME内容传输编码 在电子邮件中使用。
QP使用等号“=”作为转义字符。
如果您想正确处理此问题,请在内容(不是标题)中查找所有“=”字符,阅读接下来的两个字符,然后将“= XX”三元组替换为您读取的十六进制的ascii值。 “= 3D”用上述方案替换为“=”。
有关内容传输编码的详细信息,请参阅RFC 1341的第5部分和至少RFC 1521部分;考虑阅读废弃上述RFC的RFC。