qmail配置文件

qmail配置文件
来源: ChinaUnix博客  日期: 2007.07.20 15:20 (共有0条评论) 我要评论

qmail的配置文件是由多个文件组成的,不是集中在一个文件中,每个文件控制相应部分的功能和属性,一个可执行程序可能有多个配置文件控制,所有的配置文件共同决定了qmail运行的实现和模式。这些配置文件都在qmail的control目录中,一般位于位于/var/qmail/control目录中。
1. badmailfrom
这个配置文件是控制邮件系统拒绝接收的邮件地址和邮件域,主要是为了防止垃圾邮件。如果一个邮件地址或者邮件域被列入到这个文件中,系统就会拒绝接收这个邮件地址发来的邮件,或者拒绝邮件域下所有邮件地址发来的邮件。不过这个配置文件只是一般的垃圾邮件防范手段,对于比较全面的垃圾邮件过滤技术还要靠第三方软件来实现。该文件的格式如下:
[email protected] //拒绝这个地址发来的邮件
[email protected]
@33.com //拒绝这个邮件域下的所有帐号发来的邮件
@44.com
2. boucefrom
bouceform是定义当邮件投递失败时系统返回给发送者一个包含失败信息的邮件时的发送者。如果不存在这个文件,默认的发送者是MAILER-DAEMON。比如本文的
echo postmaster >; /var/qmail/control/bouncefrom
就是定义投递者为postmaster,这样所有投递失败的返回邮件的发送者就成了postmaster。
3. concurrencylocal
这个文件定义了qmail可以同时投递的本地邮件的个数。这个参数的缺省值是10,也就是说系统允许同时有10个邮件在本地投递。concurrencylocal这个参数的最大值是由编译时的conf-spawn参数来决定的,缺省值是120,最大值是255。
4. concurrencyremote
这个参数定义了qmail可以同时投递的远端邮件的个数,这个参数的缺省值是20。这个参数的最大值也是由conf-spawn来决定的。
5. defaultdomain
它主要用于邮件用户在投递给同一邮件服务器的邮件用户时的邮件投递处理,比如邮件服务器cnunix.com.cn用户user发送邮件给另一个邮件用户user1@cnunix,这实qmail-inject会将defaultdomain中定义的邮件域名加入到这个邮件的目标地址中,qmail会自动认为这个邮件的目标地址是[email protected],并按照这个地址进行投递。当这个文件不存在的时候,qmail会从配置文件me中读取这个参数。如果系统变量QMAILDEFAULTDOMAIN已经设置,defaultdomain定义的参数将被忽略。
6. defaulthost
它和defaultdomain类似,当邮件系统接收到没有目标主机名的邮件时,这个设置文件定义了系统往这个邮件中加入的目标主机名名称。在缺省情况下,qmail-inject会将defaulthost中定义的名称加入到没有定义投递邮件地址的邮件的目标主机名中,如果defaulthost不存在,加入的目标主机名将时字符串“defaulthost”,defaulthost主要用于邮件用户在投递给同一邮件服务器的邮件进行投递处理。如果系统变量QMAILDEFAULTHOST已经设置,defaulthost定义的参数将被忽略。
7. databyes
它定义了qmail-smtpd所允许接收的邮件的最大字节数。这个参数的缺省值为0,表示对接收邮件的字节数没有限制。如果要限制最大的接收为10M,操作如下:
echo 10485760 >; /var/qmail/control/databytes
这是任何大于10M的邮件都会被拒绝。这个参数最好设置上,以避免恶意的对你服务器发送大量的超大邮件,产生邮件服务器负荷过大,甚至系统崩溃的危险。
8. doublebouncehost
这个配置文件定义了出现“双重反弹”的时候,系统转发的邮件的主机名称。“双重反弹”就是当系统因为投递失败将邮件返回给发送者时,发送者又将此邮件返回,这个时候qmail将会把这个邮件转发到另一个邮件地址,一般这个地址就是管理员的地址。doublebouncehost就是定义这个转发的邮件地址的主机名部分,而这个邮件地址的用户名部分是由doublebouceto来定义的,因此这两个配置文件一般都是结合起来使用的。当doublebouncehost不存在的时候,系统将会从配置文件me中读取这个参数
9. doublebounceto
这个参说是结合blebouncehost来使用的,当这个参数不存在的时候,系统缺省值是postmaster用户。
10. helohost
这个配置文件定义了当程序qmail-remote和远程邮件系统建立连接时所使用的主机名。如果这个配置文件不存在,系统将会从配置文件me中读取这个参数值,如果me不存在,qmail-remote将不能正常运行工作。
11. locals
这个配置文件是定义本地邮件域的,在qmail-send处理邮件投递时,将会使用locals定义的值和邮件的目标地址进行比较,如果相同,系统就会将这个邮件投递到本地交给qmail-lspawn来处理。如果一个邮件的目标主机名在locals找不到,系统将会把这个邮件投递到远端邮件服务器系统,即使这个邮件的目标地址可能是本地邮件系统的。如果locals不存在,系统将会从配置文件me中读取这个参数,如果me不存在,qmail-send将不能正常运行。
12. me
这个配置文件是qmail系统十分重要的一个文件,如果这个文件不存在,qmail系统将无法运行。me是用来定义本地邮件服务器的主机名的,上面已经介绍到了,有多个配置文件是和me有关联的,如果那些配置文件不存在系统默认会从me中读取参数值的。me这个配置文件一般都是在qmail系统安装时使用configure-fast来创建的,在上面qmail系统安装的时候已经使用过了这个参数。
13. queuelifetime
这个配置文件是定义一个邮件在邮件队列中存活的时间,缺省值为7天(604800s),这个期限掉了以后qmail-send将会进行最后一次的投递尝试,如果投递失败,该邮件将会从邮件队列中删除。
14. rcphosts
这个配置文件也是qmail一个十分重要的文件,这个文件是定义系统允许转发邮件的邮件域,如果这个文件不存在或者为空,你的系统将会接收Internet上所有的域的邮件转发,即你的系统是Open relay。配置文件rcpthosts最多可以支持50个主机名和域名,如果超个这个数字,就需要保存到他的扩充配置文件morercphosts中,然后使用qmail的命令程序qmail-newmrh(在本系统中,该文件在/var/qmail/bin目录下)来生成二进制的morercpthosts.cdb文件,这样qmail-smtpd才可以从这个二进制文件中读取信息。
15. virtualdomains
这也是qmail的一个非常重要的配置文件,它定义了qmail的虚拟邮件域,qmail结合vpopmail的虚拟域管理功能可以定义多个虚拟邮件域。
16. smtproutes
这个配置文件是定义qmail邮件系统的静态SMTP路由表信息的,他的格式应该是:
HOST: targetHOST //HOST可以是主机名或者域名。这行所表示的是意思是将所有目标是HOST的邮件转发到targetHOST邮件服务器中,这个是最常规的表示方式。
下面给一些例子和一些特殊的表示方法:
cnunix.com.cn:cnunix.com //这行表示的意思是将所有发往cnunix.com.cn的邮件全部转发到cnunix.com这个邮件服务器。qmail不会在cnunix.com.cn邮件服务器中投递时查询DNS中的MX记录,直接投递到cnunix.com邮件服务器中,加快了投递的速度。
.cnunix.net: //这行表示强迫qmail对DNS的MX记录进行查询,因为没有定义转发的主机名,qmail将在DNS中查询任何以.cnunix.net结尾的邮件服务器
:mail.cnunix.com.cn:2525 //这行定义表示所有发往该机器的所有邮件都将会转发到mail.cnunix.com.cn这个邮件服务器,并且转发到对方的2525端口,这个方式一般都是做邮件网关时用的到的。

注意:smtproutes如果设置不正确或者DNS的变动会产生邮件的循环投递。
17. timeoutconnect
这个配置文件定义了qmail-remote在和远端SMTP服务器在SMTP连接断开以前接受一个新的连接等待的最大时间(单位为秒s),默认值为一分钟(60s)。如果你的网络连接速率比较低,就需要相应的调整这个参数到一个适合的值。
18. timeoutremote
这个配置文件定义了qmail-remote等待远端的SMTP服务器相应时等待的最大时间,默认值为20分钟(1200s),如果到达这个最大值没有相应,qmail才和对方断开连接并且把失败的记录写到qmail的日志中。
19. smtpgreeting
这个配置文件定义了用户在登录SMTP服务时显示的系统欢迎信息。修改这个信息可以掩盖一些你的系统的本身的信息,可以相对的迷惑一下登录者。:)

(三)qmail的工作原理和配置文件的设置
作者:peng
论坛ID:peng www.chinaunix.net
QQ: 螃蟹 16360544
前言
在这章里,我们主要是介绍qmail的工作原理和配置文件的设置。通过这一节,让我们
更好的分析问题和设施qmail。
3.1 qmail是什么?
qmail包是在unix系统上的一个邮件程序。qmail程序是由dan bernstein开发出来的
为标准的unix服务器提供邮件传输代理的(mail transfer agent,mta)功能的,用来替代sendmail。qmail因特网主页http://www.qmail.org。
3.2 qmail和相关的服务
qmail提供了mta功能,但是客户要能看到自己的信件,还需要其他协议和软件。两种
常见的远程用户取回他们消息的机制是邮政协议(post office protocal,pop3)和互交邮件访问协议(interactive mail access protocol,imap)。
综述:
qmail系统包括几个可执行程序、配置文件、qmail工具和环境变量,这些彼此互相影响,共同提供邮件服务。
3.3 qmail投递邮件进程流程

qmail系统中有9个核心程序,这里简单的介绍一下。qmail-smtpd负责接收来自远程主机的邮件消息并将它们传送给qmail-queue处理。qmail-inject程序是用来接收本地产生的邮件消息并传送给qmail-queue程序。qmai-queue程序处理他们发来的邮件,移进邮件队列以便发送。一旦消息被成功的放在邮件队列中,就调用qmail-send程序来处理他。qmail-send检查邮件队列中每一个消息状态,前一次邮件请求失败的消息被识别,并决定它是临时失败还是永久的,临时失败会再次投递,永久失败将被送递到qmail-clean程序,被删除掉。也就是说,qmail-clean实用来清除永久失败的的邮件消息的。
qmail-send调用了qmail-lspawn 和qmail-rspawn程序。qmail-send判断邮件是发给谁的,发给本地的,就交给qmail-lspawn程序,再由qmail-local投送到本地邮件服务器。要是确定为远程主机,就调用qmail-rspawn程序,qmail-rspawn为每一个邮件消息的接受方决定目的的邮件服务器,再调用qmail-remote程序发送。
2.2qmail的进程
qmail-send
splogger qmail
qmail-lspawn
qmaiil-rspawn
qmail-clean
qmail在任何时候都要求有五个程序在后台运行。这些核心的程序允许qmail扫描新邮件,并将他们发送到适当的目的地。
3.4 qmail实用工具程序
除了以上五个qmail进程外,进程和本地用户在处理和传输消息的过程中,都还会用到几个其他的qmail实用工具程序。如下:
bouncesaying 允许用户将消息转发给程序或者程序不可用时反弹回信息
condredirect 允许用户将消息转发给程序,然后把消息转发到另一个地址
except 过去常用来修改一个调用程序的退出编码
forward 将消息转发给一个备用的邮件地址
maildir2mbox 将在maildir格式邮箱中的消息转换到一个标准的sendmail邮箱中
maildirwatch 产生一个maildir格式的邮箱
maildirwatch 监控一个用户的邮件目录并报告所有的新消息
preline 在将消息转发给相关程序前预处理这些消息
qbiff 当新消息到达后向用户终端显示器上写一个通知
qmail-clean 从qmail邮件队列中永远的移出无法到达的消息
qmail-inject 将新消息插入到qmail邮件队列中
qmail-local 向本地邮件系统上的用户投递消息
qmail-lspawn 由qmail-send调用以便向qmail-local程序转发消息
qmail-newmrh 用来从morercpthosts文件中创建qmail数据库
qmail-newn 从一个包含系统用户名和邮件名的ASCII文件表建立一个qmail用户文件
qmail-pop3d 接受pop3连接以便让用户阅读他们的邮箱
qmail-popup 用来验证pop3连接中的用户ID和密码
qmail-pw2u 将UNIX系统的用户id和密码转换成qmail-newn能用的一个表结构
qmail-qmtpd 接受远程主机发来的qmtp连接请求
qmail-qread 产生一个显示当前qmail邮件队列里消息的报告
qmail-qstat 产生一个报告来显示当前处在qmail投送状态下等待发送的消息数目
qmail-queue 将邮件消息排队等待投送
qmail-remote 将消息投送给远程邮件用户
qmail-rspawn 由qmail-send调用来向qmail-remote转发消息
qmail-send 尝试投送qmail邮件队列里的邮件消息
qmail-showctl 显示当前的qmail系统配置情况
qmail-smtpd 接收来自远程主机的smtp连接请求
qmail-start 初始化qmail的启动脚本
qmail-tcpok 用来清空qmail-remote中用到的tcp超时记录表
qmail-tcpto 显示当前的tcp超时记录表
qreceipt 用来会应对要求受到进行确认的消息
sendmail 用来将sendmail程序的功能复制到mta程序中
splogger 将消息插入系统登陆程序中
tcp-env 将网络连接的信息转换成unix环境变量
每一个qmail实用工具程序都在正确的处理和投递邮件消息中扮演不同的脚色。其中有一些只能qmail内核程序调用,其他的就可以由qmail的系统管理员用来处理消息并得到统计信息。还有一些可以被单个普通邮件用户来制定自己的邮件消息处理。
3.5 qmail环境变量
除了控制文件之外,qmail程序还能使用unix环境变量来控制他们的动作。多数的控制文件的值都能被一个相应设定的环境变量重载。如果该环境变量没有设定,就使用控制文件的值。qmail的环境变量是在qmail程序运行前就被设置好的。这是由一个包装程序完成的。常见的是tcpwrapper和tcpserver。本文就是用的tcpserver。在以后的《(四)ucspi-tcp的原理和设置》内容中,再详细讨论。
3.6 qmail控制文件
这一部,对于管理好qmail,非常重要的。控制文件是qmail配置中的中心环节,它控制了qmail的操作性为。它位于/var/qmail/control目录下。每一个文件包含一个值,这个值定义了相应的qmail可执行程序的变量。qmail控制文件是定义了qmail参数的ASCII文本文件。大多数控制文件要求一个单一的文本值,该值可以在一行中输入。也有一些控制文件能包含多个值。在这种情况下,每一个值被输入到单独的一行中,每一行以一个标准的UNIX换行符(LF)结尾。还有一个要重点注意,就是控制文件的权限问题,推荐root可读写,其他只读。
#chmod 644/var/qmail/control/*
以下将逐一介绍个控制文件:
--------badmailfrom
这个控制文件实现拒收邮件功能的,每一个地址遵循前面说的规则,要单独一行。而且,不用重起qmail就能生效。
例如:
[email protected] -----限制一个特定的用户
@jp.yahoo.com -----限制一台远程主机上的所有主机上的所有用户
@sina.com ----限制整个域中的邮件
------bouncefrom
用来定义用户名的,该用户名是出现在那些被退回给原始发件人的消息中,一般都是永久的投递失败消息。Bouncefrom默认值是MAILER-DAEMON,它通常是一个虚拟用户名,是一个真实用户的别名。你要是想给用户的退信消息中用另一个名字,可以用一下命令:
# echo postmaster >; /var/qmail/control/bouncefrom---给改为postmaster,我习惯的。
-------bouncehost
制定了退信消息中的主机名,默认的值是me文件的主机名。
--------concurrencylocal
定义了qmail能够同时运行的本地投送进程数。对于大型的邮件主机,非常重要。他的默认参数是10。就是允许多达10个本地邮件投递进程同时运行。这个控制文件的最大值是由qmail源代码中的conf-spawn变异参数设置的,这个编译参数默认值是120,他的最大值是255。
-------- concurrencyremote
定义了qmail可以同时运行的远程投递进程数,默认值是20。它也是由conf-spawn设置的,默认值是120,最大可设255。但是要根据你的实际情况,因为运行进程要需要内存和硬盘的,设太大了小心你的服务器负载!
------- defaultdomain
默认域名,如果给本地的邮件用户发信,没有加上域名,qmail-inject会给他添加defaultdomain文件中的域名。如果设置了QMAILDEFAULTDOMAIN环境变量,他就会重载defaultdomain控制文件的值。
---------defaulthost
默认主机名,同一邮件服务器上,给本地用户发邮件,如果收信的用户地址没加域名,就会添加主机名。例如:邮件主机mail.chinaunix.net,给本地用户[email protected]发邮件,from:peng ,那么qmail就会给这个消息扩充为[email protected],qmail-send识别更容易了。通常,大家希望只看到域名@chinaunix.net,不看到主机名@mail.chinaunix.net,因而qmail就只让你看到了域名。
------databytes
定义由qmail-smtpd接受到的邮件消息所允许的最大字节数,也就是发送和接受邮件的大小(本机上给本机用户出发和接受除外)。就是说,远程邮件主机和你用outlook、foxmail等远程的mua工具发信,都受他的限制。默认值是0,表示不限制。无法理解的是,默认没有这个文件,一定要加上。假想以下,有个电信的哥们给你使坏,在骨干网机房,写个定时任务,没事就给你发几个100m的信件,嘿嘿。。。
# echo 10000000 >;/var/qmail/control/databyte ---设置为10m,超过10m,将得到code 552,告知:其邮件大小超出了该邮件主机所能容忍的限度
----doublebouncehost
用来为那些经历了两次反弹后的消息指定主机名。默认是me文件的值
----doublebounceto
用来为那些经历了两次反弹后的消息指定用户名,默认是postmaster。
----envnoathost
是qmail-send用来为没有指定主机名的邮件接受方指定他的主机名的,默认是没有这个控制文件的,qmail-send使用me文件定义的
----helohost
指定在qmail-remote与远程邮件服务器的smtp会话中用到的主机名。如果helohost控制文件没有给出,qmail-remote使用me文件的值。
----idhost
指定了用来在消息中产生message-ID:头字段得主机名,默认qmail-inject用me文件的值。
----localiphost
用来为邮件消息指定本地地址的,内容是邮件主机的ip地址。但是它用在dns上就会有问题。建议不要设置。
----locals
指定邮件本地地址,不存在,qmail-send就假定me文件的值为邮件主机的唯一可用本地邮件主机。
----me
用来指定本地邮件服务器的主机名,最重要的控制文件,如果没有,qmail将不会运行。
me控制文件通常是靠运行qmail配置子目录下的config脚本文件来建立的,config脚本自动判断邮件服务器的dns域名,并产生一个适当的控制文件(me ,locals,rcpthhosts)。如果某种原因你的邮件服务器无法连通dns服务器,可以手工运行configfast来指定邮件服务器主机名:
# /var/qmail/configure/config-fast mail.chinaunix.net
----plusdomain
用来将一个域名指定成任何一个以一个加号(+)结尾的地址。缺省的情况下,出现在me文件的域名被添加到任何一个以加号结尾的邮件地址中。
----queuelifetime
用来指定一个消息在他被删除前,可以在邮件列表中保存的时间秒数。默认是604800,当投递失败的消息超过规定的时间,将被从邮件队列中删除。
----rcphosts
定义了qmail可以接收消息的主机和域名。 不过因为rcpthosts中的域名最好不要超过50行,多出的添加到morercpthosts中。
----morercpthosts
用来指定qmail将要为其接受消息的额外的主机和域名。
----smtpgreeting
用来指定SMTP连接的欢迎标志 ,默认是用me文件的主机名。
例如:smtpgreeting值为 welcome connect to out open relay mail server –mail.chinaunix.net
那么建立一个smtp连接的时候将会看到如下信息:
Trying 198.160.x.x...
Connected to mail.96633.net
Escape characteris ^].
220 welcome connect to out open relay mail server –mail.chinaunix.net ESMTP
----smtproutes
用来指定能够被用来将邮件投送给特定目的地的静态smtp连接的。
smtprouter行格式如下:
host : relay
其中host可以是一个主机名或者域名,这个值将被重定向到有relay所定义的一个特定的邮件主机上。
举例:
beijing.chinaunix.net :shanghai.chinaunix.net
chinaunix.net :
:tianjin. chinaunix.net :2000
第一行,定义了任何到beijing. chinaunix.net的消息重定向到shanghai. chinaunix.net
第二行,强制qmail对任何以chinaunix.net结尾的地址进行dns查询。
第三行,通过不指定第一个参数,任何不在前两行范围内的消息都会被转发到邮件服务器tianjin.96633.net。同时,还用2000端口替代标准的smtp tcp的25端口。这个技术常常用在通过一个防火墙连接到internet邮件中继中。
注意:smtproutes可定义许多特定的smtp路由。需要主机的是他的地址列表,qmail会按照smtproutes文件中出现的顺序,来处理这些地址。有时顺序不对,会引起邮件循环,切记!
----timeoutconnect
用来指定qmail-remote将要等待的一个时间秒数。也就是说等待远程smtp服务器接受本地的一个smtp请求响应的时间,默认是60秒。对于质量不好的网络,可以适当调节。
----timeoutremote
用来指定qmail-smtpd等待远程SMTP主机发送数据的时间线。默认的情况下,如果连接建立后1200秒内没有 接受到远程SMTP主机的任何信息,那么将关闭这个连接。
----timeoutsmtpd
用来指定qmail-smtpd等待远程smtp客户端连接的时间秒数。默认是1200,超过这个时间,连接取消。
----virtualdomains
让qmail接受本地邮件以外,还接受该文件中指定的域或者邮件地址,就是常说的虚拟域支持。
以上说的一些控制文件,qmail默认不是都有的,只有一些必须要得。根据你的mail不同的使用情况,自己选择来建立和设置。
3.6 系统别名
qmail的系统别名和sendmail不太一样,没有用一个大文件来包含所有的。而是建立了许多独立的别名文件。
在/var/qmail/alias中,格式如下:
。qmail-alias ---alias是要建立的别名。
举例:我要给postmaster建立一个别名文件,使寄给postmaster的邮件都给peng
echo peng >; /var/qmail/alias/.qmail-postmaster
3.7用户别名
除了系统文件,。Qmail还可以支持独立的用户系统配置文件。在用户的家目录中。
例如,在用户peng目录下,建立一个peng-sales的邮件列表,就可以建立 .qmail-sales文件,在文件中添加邮件地址,每个一行。这样发给peng-sales的邮件,就会给任何一个地址copy一份。
3.8改变MUA程序接口
qmail程序包含了一个可执行程序,该程序替代了unix标准的sendmail程序。你要想用qmail作为你的mail服务器,必须用qmail的sendmail包装程序替代现有的sendmail程序。
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# chmod 0 /usr/sbin/sendmail.bak
# ln –s /var/qmail/bin/sendmail /usr/sbin/sendmail
3.9建立qmailsmtp功能
传统上使用inetd程序来监听网络,但是缺点很多。本文中用ucspi-tcp包的tcpserver服务来代替它。参考了iceblood的qmail-setup.1.5.3的脚本文件,我是这样完成的:
1、 建立/etc/qmail目录,建立了smtp.sh and pop3.sh启动脚本
2、 建立了tcp.smtp 和tcp.smtp.cdb文件。
具体我是这样做的:
#echo “/etc/qmail/start” >;>; /etc/rc.d/rc.locad --- 开机执行/etc/qmail/start
# touch /etc/qmail/start --- 建立执行文件
# touch /etc/qmail/smtp --- 建立smtp脚本文件
# touch /etc/qmail/pop --- 建立pop脚本文件
# touch /etc/qmail/tcp.smtp ---建立tcpserver的连接规则文件
# echo "csh -cf '/var/qmail/rc &'">;/etc/qmail/start -- 开机启动qmail
# echo "/etc/qmail/smtp.sh">;>;/etc/qmail/start -- 开机执行smtp.sh
smtp脚本内容:
/usr/local/bin/tcpserver -H -R –l chinaunix.net -t 1 -c 100 -v -p -x/etc/qmail/tcp.smtp.cdb
-u 502 -g 501 0 smtp /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true | /var/qmail/bin/splogger &
(注:502 and 501换成系统上的qmaild与nofiles的uid and gid的值。)
pop脚本内容:
/usr/local/bin/tcpserver -c 100 -v -l chinaunix.net -U -H -R 0 pop3 /var/qmail/bin/qmail-popup chinaunix.net /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>;&1
| /var/qmail/bin/splogger &
tcp.smtp脚本内容
127.0.0.1:allow,RELAYCLIENT=" "
:allow
# /var/qmail/bin/tcprules /etc/qmail/tcp.smtp.cdb /etc/qmail/tcp.smtp.tmp

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/34583/showart_343577.html

你可能感兴趣的:(mail)