用Linux作邮件服务器(2)
来源:中国站长站 时间:2008-07-28 17:30:00
如果somedomain.gov的SMTP客户程序连接到。otherdomain.com邮件发送器来投递zeng的副本,当它准备列出收件人(信封地址)时,它该怎么处理呢?如果像上面To:行(邮件头地址)那样列出两个收件人,li将收到信件的两个副本,因为otherdomain.com的邮件发送器将向somedomain.gov转发一个副本。解决这一问题的方法是:somedomain.gov的SMTP客户程序把信件放在一个信封里,在此信封只包含一个主机上的收件人姓名,虽然所有收件人的名单仍然在信件的头部,但他们在信封之内,因此位于somedomain.gov和otherdomain.com处的SMTP服务程序也就看不到他们。在本例中,寄往otherdomain.com的信封将只列出zeng,寄往somedomain.gov的信封将只列出li。
别名是说明邮件头和信封地址不同的另一个例子。假定要把邮件发送到别名为friends的人,friends包括的人名是Xie、zhang、li和qiu。在信中,用户写的是To:friends,然而。sendmail将扩展这一别名并构造一个包含所有收件人的信封。根据这些名字是否是别名,是否有可能在其他主机上,最初的消息将被装进四个不同的信封并投递到四个不同的主机。在每个信封上将只包含一个收件人的姓名,但在信头中包含的却是同一个别名friends。
sendmail允许在命令行中指定收件人,假定有个名为letter的文件,其内容如下:
To:null recipient〈 〉
Subject:To show the differebce between in header and envelope addresses
This is just a test for E-mail.
利用下面的命令发送这一信件:
$sendmail yourlogin〈letter
即使用户的注册名没有在信件的头部,用户(yourlogin)也将会收到这一信件。因为用户的地址在信封上。除非以别的方式(例如利用-t标志)说明,否则sendmail将根据命令行上指定的收件人构造信封地址,而且邮件头地址和信封地址并不一定要相同。
2.2 sendmail的安装与配置
首先,必须获取sendmail源代码并进行编译。接着,必须选择同用户的站点需求相接近的sendmail.cf文件并对它进行必要的修改。然后,测试sendmail和它的配置文件。最后,必须安装sendmail、sendmail.cf以及其他辅助文件。
上面所述的是基本步骤。但根据sendmail安装位置的不同,可能还需要修改系统登录脚本(/etc/init.d中的一个文件),从而使sendmail在系统引导下能够被正确地启动。此外,如果系统没有别名文件,还必须创建一个,别名文件通常被命名为/usr/lib/aliases或/etc/mail/aliases(别名文件的位置将在sendmail.cf中用到,因此可以把它放在用户想放的任何地方)。需要注意的是,可能还需要对系统的DNS数据库进行修改。
1.获取源代码
RedHat 6.1配备的是sendmail-8.9.3,从www.redhat.com站点上可以得到sendmail-8.9.3的RPM版本。sendmail的这一版本可以从http://www.sendmail.org站点得到,或者通过FTP从ftp://ftp.sendmail.org得到。
注意:下载文件的确切名字依据V8 sendmail当前版本的不同而不同,当前的最新是版本8.9.3。另外,由于文件是被打包压缩的,因此在传输它们之前必须为FTP提供binary命令,即以二进制方式传输。还注意,应该使用自己完整的E-mail地址作为口令,例如username@somedomain.gov。
2.解压源、解包并编译sendmail
在获得了源代码后,必须把它打开。由于它是一个被压缩的tar映像文件,因此必须对它进行解压,然后从tar档案中抽取各个文件。假定文件存放在目录/usr/local/src下面。
[root@lll src]# gzip -d sendmail-8.9.3.tar.gz
[root@lll src]# tar -xvf sendmail-8.9.3.tar
执行上述操作后,将产生子目录sendmail-8.9.3。接下来,运行cd和Is,查看这一源代码 目录中有哪些文件:
[root@lll src]# cd sendmail-8.9.3/stc。
[root@lll src]# ls
Makefile collect.c macro.c parseaddr.c srvrsmtp.c
Makefiles conf.c mailp.0 pathnames.h stab.c
READ_ME conf.h mailp.1 queue.c stats.c
TRACEFLAGS convtime.c mailstats.h redcf.c sysexits.c
alias.c daemon.c main.c recipient.c sysexits.h
aliases deliver.c makesendmail safefile.c trace.c
aliases.0 domain.c map.c savemail.c udb.c
aliases.5 envelope.c mci.c sendmail.0 useful.h
arpadate.c err.c mime.c sendmail.8 usersmtp.c
cdefs.h headers.c newaliases.0 sendmail.h util.c
clock.c ldap_map.h newaliases.1 sendmail.hf version.c
现在可以准备编译sendmail了,但首先要阅读下面的文件,这些文件包含关于用户所下载的sendmail版本的最新消息。
FAQ
RELEASE-NOTES
KNOWNBUGS
READ_ME
另外,还要注意doc/op子目录中的sendmail安装与操作指南(SIOG)。
sendmail的安装过程非常简单。要编译新的sendmail版本,运行下面的命令即可。
[root@lll src]# makesendmail
在RedHat 6.x的2.2内核上,sendmail在编译时不会出现任何警告或错误。如果使用光盘上的RPM软件包文件,安装更简单。仅需执行下面的命令:
[root@lll src]# rpm-ivh sendmail-8_9_3.rpm
在安装新的sendmail时,一定要为被替换的所有文件创建一个备份,特别是原来的sendmail守护程序。如果新的sendmail不能正常工作,在排除新版本的故障时,将需要恢复原来的版本。
要安装新版本的sendmail,首先利用下面的命令停止当前运行的守护进程:
[root@lll src]#/etc/rc.d/init.d/sendmail.init stop
然后把新的二进制文件拷贝到sendmail的正确位置:
[root@lll src]# cp obj.Linux*/sendmail/usr/sbin/sendmail
另外,还必须把新的手册页文件拷贝到正确位置:
[root@lll src]# cp aliases.1/usr/man/man5/aliases.5
[root@lll src]# cp mailq.0/usr/man/man1/mailq.1
[root@lll src]# cp newaliases.0/usr/man/man1/newaliases.1
[root@lll src]# cp sendmail.0/usr/man/man8/sendmail.8
现在可以利用下面的命令重新启动新的sendmail守护进程:
[root@lll src]# /etc/rc.d/init.d/sendmail/init start
3.sendmail的别名文件
sendmail依靠许多辅助文件来执行它的工作。最重要的文件是别名文件和配置文件Sendmail.cf。如果打算把sendmail作为SMTP服务程序运行(大多数站点都这么做),则应该安装SMTP的帮助文件sendmail.hf。这就是关于文件sendmail.st和sendmail.hf所需说明的内容。其他辅助文件包含在sendmail的安装和操作指南(Sendmail Internet and Operating Guide,简称SIOG)中。
sendmail会检查收件人的地址是否为别名。例如,大部分Internet站点都设有一管理员地址Webmaster,遇到问题可以向他报告。然而大多数站点并没有这一名字的实际账号,而是把Webmaster的邮件转移到负责邮件管理的一个或几个人。例如,在假设的站点somedomain.gov上,用户zhang和li共同负责网站管理,因此别名文件会具有下面一项内容:
Webmaster:zhang,li
这行代码告诉sendmail,寄向Webmaster的邮件将被改寄到用户名为zhang和li处。事实上,这些名字还可以是别名,例如:
Webmaster:firstgroup,secondgroup,thirdgroup
firstgroup:zhang,li
secondgroup:liu,deng
thirdgroup:qiu,wang
在所有这些例子中,别名的名字在冒号的左边,这些名字所代替的真实名字在冒号的右边。sendmail将反复地分析别名直到他们被解析为一个真正的用户或一个远程地址为止。在前面的例子中,要解析别名Webrmaster,sendmail首先把它扩展为收件人名单firstgroup、secondgroup和thirdgroup。然后进一步扩展这些别名中的每一个,从而得到最终的名单——zhang、li、liu、deng、qiu和wang。
需要指出的是,别名的右边可以指定为一个远程主机,但左边却不能。别名zhang:zhang@otherdomain.com是合法的,而zhang@otherdomain.gov@otherdomain.com是不合法的。