大猪小猪落玉盘

解决邮件编码无法解析的问题

对于邮件一直是一知半解,从来没好好深入的了解一下邮件服务器的工作原理。
邮件接收后无法查看内容,打开以后都是如下格式:

=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邮件网关。

Email修改邮件白名单,让特定邮箱一路畅通

邮件服务器默认的设置通常都会屏蔽很多招聘网站发过来的邮件,因此对于招聘的邮箱要单独设置一下白名单

/etc/MailScanner/rules/spam.whitelist.rules
From:           @quickmail.51job.com    yes
From:           @quickjobs.51job.com    yes
From:           @51job.com      yes
From:           @zhaopinmail.com        yes
From:           @support150.zhaopinmail.com     yes
From:           @zhaopin.com.cn yes
From:           211.99.198.250  yes

在这里面增加了以后就会彻底不判断spam了,直接通过。 service spamd restart重启一下即可。
可以根据ip、具体地址、地址后缀、*匹配,很灵活。

dig理解DNS的解析过程

    dig理解DNS的解析过程

    关于DNS的常识,可以阅读附录的一些参考资料。

    本文旨在尝试举例用dig命令理解这个过程,并非权威知识,仅供参考.

    测试域名为阿权的书房的域名 www.aslibra.com 和 www.163.com。

    [root@localhost ~]# dig www.aslibra.com

    ; <<>> DiG 9.2.4 <<>> www.aslibra.com

    ;; global options:  printcmd

    ;; Got answer:

    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25746

    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 6

    ;; QUESTION SECTION:

    ;www.aslibra.com.               IN      A

    ;; ANSWER SECTION:

    www.aslibra.com.        900     IN      A       222.76.215.25

    ;; AUTHORITY SECTION:

    aslibra.com.            33024   IN      NS      k8.hkidc.com.

    aslibra.com.            33024   IN      NS      b.hkidc.com.

    aslibra.com.            33024   IN      NS      j6.hkidc.com.

    aslibra.com.            33024   IN      NS      ns8.hkidc.com.

    aslibra.com.            33024   IN      NS      ns5.hkidc.com.

    aslibra.com.            33024   IN      NS      a.hkidc.com.

    ;; ADDITIONAL SECTION:

    k8.hkidc.com.           55596   IN      A       125.65.112.32

    b.hkidc.com.            53594   IN      A       221.122.64.81

    j6.hkidc.com.           54375   IN      A       222.76.219.74

    ns8.hkidc.com.          53598   IN      A       221.122.64.81

    ns5.hkidc.com.          55596   IN      A       222.76.219.81

    a.hkidc.com.            53594   IN      A       125.65.112.32

    ;; Query time: 71 msec

    ;; SERVER: 211.99.25.1#53(211.99.25.1)

    ;; WHEN: Mon Jun  1 12:05:17 2009

    ;; MSG SIZE  rcvd: 268

    如何理解上面的意思?

    QUESTION SECTION:查询的内容

    ANSWER SECTION:相应的内容,一般会得到至少一条A记录,否则就还没定义

    AUTHORITY SECTION:授权信息

    ADDITIONAL SECTION:每个授权服务器的IP地址

    SERVER:查询的dns服务器,可能会被缓存

    过程大体是:

    1 从SERVER查询www.aslibra.com,如果有有效缓存就返回了

    2 如果没有,则找到aslibra.com的授权服务器,下面有例子介绍

    3 从其中一个查询到结果(A记录)

    我们来看看更加具体的解析过程

    “dig www.aslibra.com +trace”可以查看到更加具体的解析过程,阿权的书房比较小,没有那么复杂。

    我们用一个大点的网站看看,比如 www.163.com。

    先看看不加trace的情况得到什么:

    [root@localhost ~]# dig www.163.com

    ; <<>> DiG 9.2.4 <<>> www.163.com

    ;; global options:  printcmd

    ;; Got answer:

    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46550

    ;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 2, ADDITIONAL: 2

    ;; QUESTION SECTION:

    ;www.163.com.                   IN      A

    ;; ANSWER SECTION:

    www.163.com.            51561   IN      CNAME   www.cache.gslb.netease.com.

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.16

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.17

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.18

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.9

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.10

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.11

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.12

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.13

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.14

    www.cache.gslb.netease.com. 1604 IN     A       61.135.253.15

    ;; AUTHORITY SECTION:

    gslb.netease.com.       1604    IN      NS      gslb1.netease.com.

    gslb.netease.com.       1604    IN      NS      gslb2.netease.com.

    ;; ADDITIONAL SECTION:

    gslb1.netease.com.      15896   IN      A       61.135.255.143

    gslb2.netease.com.      15900   IN      A       220.181.28.168

    ;; Query time: 56 msec

    ;; SERVER: 211.99.25.1#53(211.99.25.1)

    ;; WHEN: Mon Jun  1 12:29:51 2009

    ;; MSG SIZE  rcvd: 298

    ANSWER SECTION告诉你:

    www.163.com做了别名到www.cache.gslb.netease.com

    www.cache.gslb.netease.com有这么一系列机器(A记录),你可以随便挑一个访问。

    我们看看加上trace后是什么信息:

    [root@localhost ~]# dig www.163.com +trace

    ; <<>> DiG 9.2.4 <<>> www.163.com +trace

    ;; global options:  printcmd

    .                       223628  IN      NS      e.root-servers.net.

    .                       223628  IN      NS      f.root-servers.net.

    .                       223628  IN      NS      g.root-servers.net.

    .                       223628  IN      NS      h.root-servers.net.

    .                       223628  IN      NS      i.root-servers.net.

    .                       223628  IN      NS      j.root-servers.net.

    .                       223628  IN      NS      k.root-servers.net.

    .                       223628  IN      NS      l.root-servers.net.

    .                       223628  IN      NS      m.root-servers.net.

    .                       223628  IN      NS      a.root-servers.net.

    .                       223628  IN      NS      b.root-servers.net.

    .                       223628  IN      NS      c.root-servers.net.

    .                       223628  IN      NS      d.root-servers.net.

    ;; Received 512 bytes from 211.99.25.1#53(211.99.25.1) in 65 ms

    com.                    172800  IN      NS      A.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      B.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      M.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      F.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      E.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      D.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      C.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      H.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      L.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      I.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      K.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      J.GTLD-SERVERS.NET.

    com.                    172800  IN      NS      G.GTLD-SERVERS.NET.

    ;; Received 501 bytes from 192.203.230.10#53(e.root-servers.net) in 212 ms

    163.com.                172800  IN      NS      ns3.nease.net.

    163.com.                172800  IN      NS      ns4.nease.net.

    ;; Received 106 bytes from 192.5.6.30#53(A.GTLD-SERVERS.NET) in 293 ms

    www.163.com.            86400   IN      CNAME   www.cache.gslb.netease.com.

    gslb.netease.com.       18000   IN      NS      gslb1.netease.com.

    gslb.netease.com.       18000   IN      NS      gslb2.netease.com.

    ;; Received 138 bytes from 61.135.255.138#53(ns4.nease.net) in 47 ms

    这里的过程有点复杂,但其实很好理解,也很重要的内容,需要琢磨清楚。

    要明白,域名都是按等级授权的,比如把www.163.com. 拆分一下:

    . 分配 com. ,com. 分配 163.com. ,163.com. 分配 www.163.com. 。

    根服务器列表是在域名服务器上都有一份的,文档是一样的,文件可以下载

    域名都是从“.”开始授权,域名根服务器是 (a-m).root-servers.net.这系列服务器分配授权

    .com .cn .net各种域名都从这里开始分配授权,比如 .com 授权给 (A-G).GTLD-SERVERS.NET.

    (尝试做一下 dig www.163.org +trace,就会发现 .org 是分配给 a0.org.afilias-nst.info.等服务器 了)

    这批服务器又授权 163.com给另外的机器

    163.com.                172800  IN      NS      ns3.nease.net.

    163.com.                172800  IN      NS      ns4.nease.net.

    于是查询www是哪个ip就落到了ns3.nease.net.和ns4.nease.net.上,他们给的答案是:

    www.163.com.            86400   IN      CNAME   www.cache.gslb.netease.com.

    然后没戏了,没有给出IP,还没有答案,当然了,别名就要重新查询了,我们继续查询。

    我们trace检查www.cache.gslb.netease.com. :

    [root@localhost ~]# dig www.cache.gslb.netease.com. +trace

    ; <<>> DiG 9.2.4 <<>> www.cache.gslb.netease.com. +trace

    …(省略和上面查询一样的信息)

    netease.com.            172800  IN      NS      ns3.nease.net.

    netease.com.            172800  IN      NS      ns4.nease.net.

    ;; Received 121 bytes from 192.12.94.30#53(E.GTLD-SERVERS.NET) in 468 ms

    gslb.netease.com.       18000   IN      NS      gslb1.netease.com.

    gslb.netease.com.       18000   IN      NS      gslb2.netease.com.

    ;; Received 116 bytes from 61.135.255.138#53(ns4.nease.net) in 44 ms

    www.cache.gslb.netease.com. 1800 IN     A       220.181.28.53

    www.cache.gslb.netease.com. 1800 IN     A       220.181.28.54

    www.cache.gslb.netease.com. 1800 IN     A       220.181.28.212

    www.cache.gslb.netease.com. 1800 IN     A       220.181.28.50

    www.cache.gslb.netease.com. 1800 IN     A       220.181.28.51

    www.cache.gslb.netease.com. 1800 IN     A       220.181.28.52

    gslb.netease.com.       1800    IN      NS      gslb2.netease.com.

    gslb.netease.com.       1800    IN      NS      gslb1.netease.com.

    ;; Received 180 bytes from 61.135.255.143#53(gslb1.netease.com) in 20 ms

    gslb.netease.com. 的解析权给了 gslb1.netease.com.

    最终给出了 www.cache.gslb.netease.com. 的一系列A记录,解析就算完成了。

    使用dig命令我们甚至可以给163.com画一个他们的域名分布图了 :) ,结合下图应该很容易理解:

    小结一下:

    1 DNS服务器会按等级授权给别的服务器解析域名

    2 指定的是NS记录,同时会有该NS记录的域名的A记录指定

    3 别名方式会再继续查询,一般本dns服务器不处理cdn应该可以别名到cdn功能的服务器处理

    4 你可以方便的用dig检查dns服务器分配情况

    源文档 <http://www.aslibra.com/blog/post/use_dig_dns_check.php>

Lynx中文支持

lynx中文支持不够完善,有的时候出现乱码都是半行半行的,似乎是中文字符识别有问题。

试试加一个启动选项:

lynx -display_charset=gb2312 http://xxxxx


返回顶部