extmail/emos1.5收取QQ发来的邮件正文乱码

转载自:http://blog.itpub.net/751371/viewspace-759662/#0-qzone-1-54738-d020d2d2a4e8d1a374a433f596ad1440

今天有同事说公司邮箱收QQ邮箱发来的邮件,中文是乱码。

但是,公司邮箱一直用的好好的,中文显示都是正常的。于是,用QQ邮箱给自己发了一封邮件测试---中文真的是乱码。查看邮件编码,发现这封邮件的编码是:gb18030.手动把编码改成:gb2312邮件就可以正常显示。

后来截取部分邮件原结构发现QQ的编码为gb18030,extmail会自动判别编码格式来显示。 


$VAR1 = { 

   ‘body’ => { 

      ‘list’ => [ 

         { 

         'pos_end' => '1596', 

         'pos_start' => 1490, 

         'phead' => { 

             'Content-Type' => 'text/plain', 

             'charset' => 'gb18030', 

             'Content-Transfer-Encoding' => 'base64' 

            }, 

         'idflag' => 'alternative-0', 

         'size' => '106' 

         }, 

         { 

         'pos_end' => '1757', 

         'pos_start' => 1640, 

         'phead' => { 

             'Content-Type' => 'text/html', 

             'charset' => 'gb18030', 

             'Content-Transfer-Encoding' => 'base64' 


EMOS官网解释: 


关于GB18030 

    由thunderbird或某些客户端软件发出的中文邮件编码是GB18030,部分内容甚至全部乱码。经过仔细检查发现是Perl 目前版本(5.8.8或以下)缺少了GB18030码表,因此增加了Encode::HanExtra码表模块的支持,解决了此问题。 


解决方法如下: 


[root@mail ~]# wget -c http://search.cpan.org/CPAN/authors/id/A/AU/AUDREYT/Encode-HanExtra-0.23.tar.gz

--09:40:49--  http://search.cpan.org/CPAN/authors/id/A/AU/AUDREYT/Encode-HanExtra-0.23.tar.gz

Resolving search.cpan.org... 199.15.176.161

Connecting to search.cpan.org|199.15.176.161|:80... connected.

HTTP request sent, awaiting response... 302 Found

Location: http://www.cpan.org/authors/id/A/AU/AUDREYT/Encode-HanExtra-0.23.tar.gz [following]

--09:40:50--  http://www.cpan.org/authors/id/A/AU/AUDREYT/Encode-HanExtra-0.23.tar.gz

Resolving www.cpan.org... 207.171.7.177, 212.117.177.118, 2620:101:d000:8::140:1, ...

Connecting to www.cpan.org|207.171.7.177|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 1566682 (1.5M) [application/octet-stream]

--09:40:53--  (try: 2)  http://www.cpan.org/authors/id/A/AU/AUDREYT/Encode-HanExtra-0.23.tar.gz

Reusing existing connection to www.cpan.org:80.

HTTP request sent, awaiting response... 200 OK

Length: 1566682 (1.5M) [application/octet-stream]

Saving to: `Encode-HanExtra-0.23.tar.gz'


100%[======================================================================================================>] 1,566,682   33.7K/s   in 52s    


09:41:45 (29.6 KB/s) - `Encode-HanExtra-0.23.tar.gz' saved [1566682/1566682]


[root@mail ~]# chmod 755 Encode-HanExtra-0.23.tar.gz

[root@mail ~]# gunzip Encode-HanExtra-0.23.tar.gz

[root@mail ~]# tar xvf Encode-HanExtra-0.23.tar 

Encode-HanExtra-0.23/

Encode-HanExtra-0.23/Changes

Encode-HanExtra-0.23/inc/

Encode-HanExtra-0.23/inc/Module/

Encode-HanExtra-0.23/inc/Module/Install/

Encode-HanExtra-0.23/inc/Module/Install/Base.pm

......

[root@mail Encode-HanExtra-0.23]# perl Makefile.PL 

enc2xs is /usr/bin/enc2xs

encode.h is at /usr/lib/perl5/5.8.8/Encode

Checking if your kit is complete...

Looks good

Writing Makefile for Encode::HanExtra

[root@mail Encode-HanExtra-0.23]# make install

cp lib/Encode/TW/Unisys/SOSI1.pm blib/lib/Encode/TW/Unisys/SOSI1.pm

cp lib/Encode/HanExtra.pm blib/lib/Encode/HanExtra.pm

cp lib/Encode/TW/Unisys/SOSI2.pm blib/lib/Encode/TW/Unisys/SOSI2.pm

/usr/bin/perl "-Iinc"  /usr/bin/enc2xs -"Q" -o Big5_t.c -f Big5_t.fnm

Reading big5-1984 (big5-1984)

Reading big5-2003 (big5-2003)

......

......

Installing /usr/share/man/man3/Encode::TW::Unisys::SOSI1.3pm

Installing /usr/share/man/man3/Encode::HanExtra.3pm

Writing /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/Encode/HanExtra/.packlist

Appending installation info to /usr/lib/perl5/5.8.8/i386-linux-thread-multi/perllocal.pod

[root@mail Encode-HanExtra-0.23]# 


make install完成之后,不需要重启服务,刷新页面即可看到中文显示正常浏览。 


另外,还有一种方法就是在用QQ邮箱写信时,设置编码为Unicode,勾选始终使用Unicode编码发信。后面也给出了解释。 但是,你不可能让所有使用QQ邮箱的人都选用这种方式,而且我发现不止QQ邮箱是用gb18030编码,很多国内论坛也用这种编码,所以还是从根本上解决问题比较好。


PS: 

EMOS1.5中perl版本就是5.8.8,在新版本的emos1.6中版本为5.10.1。


你可能感兴趣的:(编码,乱码,ExtMail,QQ邮箱)