📄 00000013.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: ruster (尘埃*星辰*领悟), 信区: Linux <BR>标 题: 第七章 电子邮件(下) <BR>发信站: BBS 水木清华站 (Thu Dec 21 13:46:07 2000) <BR> <BR> <BR>7.4 qmail <BR> <BR> sendmail的功能是足够强大的,然而它的配置和管理也是十分复杂的。有另一个也很 <BR>常用的邮件服务程序称为qmail。 <BR> <BR> 需要注意的是,许多人认为qmail要比sendmail简单一些。就笔者个人的感觉,不能同 <BR>意这种说法。但是,qmail在配置一些稀奇古怪的功能方面确实比sendmail要稍微容易一 <BR>些。另外qmail与sendmail不同之处在于,缺省的时候qmail将在用户的宿主目录中存储 <BR>邮件,而不是像sendmail那样不分青红皂白地放在/var/spool/mail下面,并且qmail不 <BR>需要使用文件锁定,所以可以把用户邮件放在NFS服务器上,这样,可以使用多台服务器 <BR>来提供服务。对于大型邮件系统这是很重要的。(在sendmail也可以这样做,但必须非 <BR>常小心以免造成邮件丢失)。但是这个功能虽然不错,却又产生了一些十分讨厌的后果 <BR>。对于大型的ISP,qmail也很重要,它可以简化虚拟域的设置。我们将试图介绍如何用 <BR>qmail构造一个邮件服务器。当然,这里的介绍不可能像介绍sendmail那样细致,如果要 <BR>使用一些比较高级的功能,你也许必须研究qmail的文档。 <BR> <BR> 7.4.1 下载和编译附加文件 <BR> <BR> 通常我们很少会向读者提出“去某个地方下载xxx软件”,因为这些软件一般从某些大 <BR>的ftp站台上要比从发布者那里下载容易的多。不过,qmail的安装需要一大堆稀奇古怪 <BR>的东西,而且还都不大。因此,我们这里建议你下载全部的qmail附加工具。为了我们这 <BR>里讲的内容,你需要下载下面这些软件: <BR> <BR> ①qmail <BR> <BR> 这个是主程序,可以到<A HREF="http://koobera.math.uic.edu/www/qmail.html去下载,那里">http://koobera.math.uic.edu/www/qmail.html去下载,那里</A> <BR>还有一个qmail分析程序,不过说实话从Linux发行光盘上或者专门的ftp站得到它会容易 <BR>一些。 <BR> <BR> ②ucspi-tcp <BR> <BR> 可以到<A HREF="ftp://koobera.math.uic.edu/www/ucspi-tcp.html">ftp://koobera.math.uic.edu/www/ucspi-tcp.html</A> 去下载,对我们来说主要 <BR>是利用它的TCP包装功能。 <BR> <BR> ③checkpassword <BR> <BR> 一个用来校验pop3用户口令的工具,可以到<A HREF="http://pobox.com/~djb/checkpwd.html去">http://pobox.com/~djb/checkpwd.html去</A> <BR>下载。 <BR> <BR> 另外,如果要强化功能,在qmail的主页上还可以看到一些相关的工具,你可以自己去 <BR>下载研究一下。 <BR> <BR> 接下来,需要编译uscpi-tcp和chheckpassword,其中uscpi-tcp的编译需要用一个参 <BR>数,例如,展开的uscpi-tcp源代码位于ucspi-tcp-0.84: <BR> <BR> $cd ucspi-tcp-0.84 <BR> <BR> $make setup check <BR> <BR> 将生成tcpserver、tcprules程序和一个安装程序,执行安装程序 <BR> <BR> $./install <BR> <BR> 将会完成安装,缺省的安装目录是/usr/local/bin。 <BR> <BR> 编译checkpassword程序则比较简单,只要进入源代码的目录,执行一下make程序,然 <BR>后把文件拷贝到合适的地方就行了,我们假设tcpserver和tcprules安装在/usr/local/ <BR>bin下,checkpassword安装在/bin下。 <BR> <BR> 7.4.2 安装qmail <BR> <BR> 安装qmail要比安装sendmail繁琐,我们把它分成几个段落来解释: <BR> <BR> 建立用户和编译 <BR> <BR> 安装qmail本身不算复杂,但是需要建立多个用户,我们假设使用的是qmail 1.03,它 <BR>要求建立6个用户和两个用户组,这可以使用下面的命令: <BR> <BR> $ groupadd nofiles <BR> <BR> $ useradd -g nofiles -d /var/qmail/alias -s /bin/false alias <BR> <BR> $ useradd -g nofiles -d /var/qmail -s /bin/false qmaild <BR> <BR> $ useradd -g nofiles -d /var/qmail -s /bin/false qmaill <BR> <BR> $ useradd -g nofiles -d /var/qmail -s /bin/false qmailp <BR> <BR> $ groupadd qmail <BR> <BR> $ useradd -g qmail -d /var/qmail -s /bin/false qmailq <BR> <BR> $ useradd -g qmail -d /var/qmail -s /bin/false qmailr <BR> <BR> $ useradd -g qmail -d /var/qmail -s /bin/false qmails <BR> <BR> 然后可以编译安装qmail,假设qmail源代码在qmail-1.03下: <BR> <BR> $cd qmail-1.03 <BR> <BR> $make setup check <BR> <BR> 这个动作将编译qmail源代码并且建立一个/avr/qmail目录,接下来,你需要建立qma <BR>il运行所需要的基本配置: <BR> <BR> $./config <BR> <BR> 如果你的DNS查询已经正常了,本机器的域名也正确,这就是你需要的命令,否则,参 <BR>考qmail的安装文档。 <BR> <BR> 下一步你需要创建用户别名,要注意qmail的用法有些怪异,它会忽略任何发往root的 <BR>邮件,因此除非你建立了一个root用户的邮件别名,否则你无法接受到那些发送给root <BR>的邮件。 <BR> <BR> 邮件别名的用法是这样:对于任何一个用户,定义其别名的办法是在/var/qmail/ali <BR>as下面建立一个文件,文件名是".qmail-"加上用户名。例如,想建立root用户的别名, <BR>让发到root的邮件转移到supervisor用户,你需要建立的是/var/qmail/.qmail-root, <BR>属性设置为644,而内容就是简单地写上一行supervisor就可以了。一般你需要建立root, <BR>和postmaster,mailer-daemon的别名 <BR> <BR> <BR> 替换sendmail <BR> <BR> 有些程序会直接在命令行上使用sendmail来发送电子邮件,最典型的是UNIX的mail程 <BR>序。如果你使用的是qmail,显然你需要替换掉原来的sendmail。qmail提供了一个用来 <BR>从命令行调用的程序,你可以用它替换掉原来的sendmail: <BR> <BR> mv /usr/sbin/sendmail /usr/sbin/srndmail.backup <BR> <BR> mv /usr/lib/sendmail /usr/lib/sendmail.backup <BR> <BR> ln –s /var/qmail/bin/sendmail /usr/sbin/sendmail <BR> <BR> ln –s /var/qmail/bin/sendmail /usr/lib/sendmail <BR> <BR> 使用/usr/lib是因为有些系统将sendmail放在/usr/lib目录下面。 <BR> <BR> 启动本地投递 <BR> <BR> 接下来的任务是启动局部递送,这个功能用来在本地用户之间转发邮件,以及接受由 <BR>smtp服务器传送来的信息。它的工作其实就把信件存储到用户宿主目录下的Mailbox文件 <BR>里面。通常这是通过一个名叫/var/qmail/boot/home的脚本来完成的,不过一般情况下 <BR>我们把它拷贝出来: <BR> <BR> $ cp /var/qmail/boot/home /var/qmail/rc <BR> <BR> 然后执行拷贝版本,这个脚本是csh的,可以直接在csh或者bash下执行: <BR> <BR> $ rc & <BR> <BR> 然后你就可以实验一下在本机的用户之间发送邮件了,注意接受到的邮件都存放在用 <BR>户目录下的Mailbox文件里面。 <BR> <BR> 为了pop3服务的需要,qmail一般在用户的目录下面建立一个Maildir目录专门存放邮 <BR>件,例如,要给用户wanghy建立邮件目录,首先以wanghy用户名登录系统,然后使用命 <BR>令: <BR> <BR> $ /var/qmail/bin/maildirmake $HOME/Maildir <BR> <BR> $ echo ./Maildir/ > ~/.qmail <BR> <BR> 每个邮件用户都必须执行一次,这个过程很烦,而且实际操作也就是建立一个目录和 <BR>它的子目录以及一个说明文件.qmail。所以更好的办法是把设置好的目录和.qmail都拷 <BR>贝到/etc/skel下面,每当adduser的时候会自动将它们拷贝到新用户的目录下,就可以 <BR>省去这样的操作了。 <BR> <BR> 7.4.3 启动smtp投递代理 <BR> <BR> qmail的smtp投递代理是/var/qmail/bin/qmail-smtpd。这个程序通常是在inetd里面 <BR>启动的,问题在于出于某种原因,qmail缺省的情况下不使用投递代理功能,而且它的投 <BR>递代理是基于用户名字的。简单地说,如果一封信的回信地址不是本机器,或者邮件来 <BR>自客户机器,那么它将直接拒绝投递并产生一个错误。解决的办法是在启动qmail-smtp <BR>d的时候提供一个环境变量RELAYCLIENT,这样它将不再作邮件地址检查。问题是从inet <BR>d启动这个功能是困难的,我们一般使用前面提到的tcpserver程序。 <BR> <BR> tcpserver是一个类似inetd的服务程序,但是它可以对连接地址进行检查,并且设定 <BR>服务器进程启动时的参数。详细的介绍我们不作了,在这里,如果要启动投递代理,需 <BR>要首先生成TCP规则,首先要建立一个/etc/tcp.smtp文件。例如你想对192.168.12.*的 <BR>用户启动投递代理的话,这个文件要包括这样的行: <BR> <BR> 192.168.12.:allow,RELAYCLIENT="" <BR> <BR> 注意后面的点号,例如127.代表127.*.*.*,192.168.代表192.168.*.*。 <BR> <BR> 然后执行: <BR> <BR> tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp <BR> <BR> tcprules程序将把tcp.smtp转换成tcpserver使用的数据库形式。 <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -