Linux作邮件服务器操作(3)

上面的比喻说明了SMTP客户程序和服务程序的工作方式。假定zhang@somedomain.gov向他的同事li@somedomain.govzeng@otherdomain.com发送邮件,信头部的收件人名单如下: 

To:li@somedomain.govzeng@otherdomain.com 

如果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