解决邮件编码无法解析的问题
对于邮件一直是一知半解,从来没好好深入的了解一下邮件服务器的工作原理。
邮件接收后无法查看内容,打开以后都是如下格式:
=D0=B3=A1=CD=C6=B9=E3 | =C3=F1=D3=AA | =B9=E6=C4=A3:20-99=C8=CB | 4001-=
6000=D4=AA/=D4=C2<br>=D6=F7=D2=AA=B8=BA=D4=F0=D2=C0=CD=D0=D3=DA=D2=F8=D0=
=D0=BC=B6=CA=FD=BE=DD=BF=E2=B5=C4=B2=FA=C6=B7=CF=FA=CA=DB=B9=A4=D7=F7=A3=
=AC=CD=D8=D5=B9=D2=D4=D6=D0=B8=DF=B6=CB=C8=CB=C8=BA=CE=AA=C4=BF=B1=EA=BF=
看了一下,html代码和数字显示正常,只是所有的汉字都没有显示,应该是编码的问题。仔细看了一下邮件头
Subject: =?gb2312?B?KFpoYW9waW4uY29tKSDTpsa4ILjf?=
=?gb2312?B?vLa/zbunvq3A7S2xsb6pLcH1vaP=?=
Date: Fri, 22 Jan 2010 13:24:04 +0800
Importance: High
X-Priority: 1
Message-ID: <20100122-13240404-a64@*.com.cn>
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary=”–=6830148FF84F4186BA34_DC66_4CC4_F18C”
X-Spam-Status: No—-=6830148FF84F4186BA34_DC66_4CC4_F18C
Content-Type: text/html;charset=”gb2312″
Content-Transfer-Encoding: Quoted-Printable<html><head><title></title><META http-equiv=3D”Content-Type” content=3D=
“text/html; charset=3DGB2312″></head><body><style type=3D”text/css”>
td,p,div,span {font-size:12px;color:#000000;font-family:=CB=CE=CC=E5;}
</style>
一打眼上去看不出有什么区别,该有的参数都有了,编码也正常,内容正本样式也正常,比对了一个没有问题的邮件,发现还是有所区别的,Quoted-Printable大小写的问题,别的都是quoted-printable,改了一下,页面刷新没问题了,剩下就好办了,找到具体的解析程序,修改之。include/prev_inc.php里面处理一下$Content_Transfer_Encoding=strtolower($Content_Transfer_Encoding);
具体参考了http://bbs.igenus.org/discuz/viewthread.php?tid=1456
相关资料:
Content-Transfer-Encoding:
它说明了对数据所执行的编码方式,客户/MUA将用它对附件进行解码。对于每个附件,可以使用7bit,8bit,binary ,quoted-printable,base64和custom中的一种编码方式。7bit编码是用在US ASCII字符集上的常用的一种编码方式。8bit 和binary编码一般不用。对可读的标准文本,如果传输要经过对格式有影响的网关时对其进行保护,可以使用quoted printable 。Base64是一种通用方法,在需要决定使用哪一种编码方法时,它提供了一个不用费脑子的选择;它通常用在二进制,非文本数据上。注意,任何非7bit 数据必须用一种模式编码,这样它就可以通过Internet邮件网关。