6.1 电子邮件系统基础


电子邮件系统是目前Internet上通用的标准,由于具有完善的设计架构,因此可兼容来自不同平台、服务器或应用程序间的信息交换。因此在讨论邮件服务器的架设与管理前,我们必须对其基本概念有充分的了解,因此本节先行介绍有关电子邮件系统的专有名词、电子邮件传递流程与Sendmail安装等主题。
6.1.1   专有名词
本节将从与电子邮件系统有关的名词开始介绍,之后再讨论整个电子邮件传递的流程,希望能帮助读者建立清楚和正确的概念。
电子邮件
电子邮件Electronic Mail,E-mail)是通过网络连接来相互传递的信息,也是目前Internet中最常用的服务之一,它的主要优点有:
ナ快速:电子邮件寄出后,收件人能在短时间内得到这份邮件。
ナ经济:它不需要使用信封和信纸,也不需邮资。
ナ多样性:除了文本之外,电子邮件还可传送图片、声音、影像和其他类型的数据。
基本上E-mail包含两个部分:邮件信封与邮件内容。邮件信封是指保留给邮件服务器的信息,它并不提供用户浏览之用,其中包括Received、Message ID、From、Subject、Date等。
而邮件内容又包含报头与邮件体两个部分,如果有附件也会出现于此。
邮件传输代理
邮件传输代理Mail Transfer Agent,MTA)是一种在服务器端执行的软件,也就是邮件服务器,它可在服务器间传送电子邮件。一般而言,每个系统只有一个MTA保持在运行状态,而在UNIX系统中使用最为广泛的MTA程序有Sendmail、Postfix、Qmail与Fetchmail等,本章将以Sendmail的内容介绍为主。
邮件用户代理
邮件用户代理Mail User Agent,MUA)是一种客户端软件,它可提供用户读信、回信、写信及处理邮件等功能,但和MTA不同的是,一个系统中可以同时存在多个MUA程序。一般常见的MUA程序包括Linux平台上的mail、mailx、elm和mh等,以及Windows操作系统中的Outlook Express或Netscape Messenger。
邮件传递代理
邮件传递代理Mail Delivery Agent,MDA)通常与MTA一同运行,将MTA接收的邮件,按照目的位置做出判断,以决定将该邮件放在本机账户下的邮箱,或是再经过MTA将此邮件转发到下个MTA,而MDA一般都在后台执行。
如果此封邮件的目的地为本机用户邮箱,则MDA除了将邮件放在正确的邮箱外,同时还具有邮件过滤的功能,例如丢弃某些特定主题的广告或色情邮件,或者自动回复发件人等。
邮件传递系统
由MTA和MUA组合而成的系统称为邮件传递系统Mail Transfer System,MTS),如图6-1所示。例如目前Internet就是一个大型的MTS。

图6-1   简单的邮件传递系统
邮局协议
邮局协议Post Office Protocol,POP)是MTS上负责“接收”电子邮件的通信协议,也就是说,POP不具有传送邮件到用户或其他邮件主机的功能。
在提供此项服务的主机中,当邮件发送时会先保存在服务器上,然后在POP客户端连接到服务器时,POP服务器会将用户邮箱中的邮件下载到客户端计算机,并由服务器上删除这些信件。
所以用户可以在不连接服务器的情形下进行脱机阅读,因此特别适用于拨号连接的用户,这也是POP主要的优点。
但如果用户邮箱中存在大量的邮件,在下载时可能会引起网络流量的增加,特别是在带宽不足的情形下更为严重,所以在使用POP服务器前,需先考虑目前企业的现况以及用户的需求。
注意:所谓脱机阅读是指用户在登录邮件服务器后,将属于他的邮件利用下载的方式保存在本机硬盘中,然后即可中断连接,待空闲时再进行阅读。
因为POP是采用“拉”邮件的方式,所以当使用支持POP的MUA读取电子邮件时,就可执行用户命令或是固定时间间隔的方式,将MTA上的新邮件“拉”到客户端的计算机上并加以保存。这种脱机读信的工作,很显然都是由MUA主动完成而非MTA,所以客户端拥有主动权,可以弹性决定取信的时间。
两种POP最普遍的版本是:POP2以及POP3,但两者之间彼此不兼容,POP2在连接端口109执行,而POP3则在连接端口110执行。在Fedora Core 5中同时支持二者,目前POP3的使用率较高,可由/etc/services文件中查看以下的内容:
pop2 109/tcp  pop-2  postoffice # POP version 2
pop2 109/udp  pop-2 
pop3 110/tcp  pop-3    # POP version 3
pop3 110/udp  pop-3
Internet信息访问协议
Internet信息访问协议Internet Message Access Protocol,IMAP)是Internet上一项常见的通信协议,它符合RFC的标准,其中包含连接方式、客户端验证以及Client/Server的会话等定义,因此可支持所有兼容RFC 2060的IMAP客户端。
与POP一样,IMAP主要用来读取服务器上的电子邮件并非是传递),但客户端需先登录服务器,然后才可进行资源的访问。用户在登录后可根据授予的权限来读取或修改信件内容,并不是将服务器中的邮件直接下载到客户端计算机与POP最大的不同),这样可避免重要数据在下载过程中遗失。
由于IMAP没有将邮件实际下载到客户端,因此用户必须确定和服务器间存在网络连接才可读取信件内容,所以通常在局域网中才使用IMAP来进行信件的接收。
IMAP是一个逐渐崭露头角的邮件通信协议,因为它比POP更具弹性,两者在访问邮件方式上的差别如图6-2所示。但目前仍然有较多人使用POP作为电子邮件接收的通信协议。IMAP支持的操作模式有:
图6-2   POP与IMAP访问邮件的方式
?脱机模式Offline)
MUA会先将电子邮件从服务器下载到客户端计算机,之后删除主机上的信件。
?在线模式Online)
MUA在远程执行服务器上的邮件处理,例如删除和修改,并把这些邮件保留在服务器上。只要一接收新邮件,客户端可以立即得到最新的E-mail邮箱情况。
?中断连接模式Disconnected)
MUA先连接到服务器选择所要处理的邮件,然后复制一份缓存到计算机中,接着就中断连接。稍后如果再次恢复连接时,客户端可将缓存邮件与服务器执行同步化。
目前在Fedora Core 5中支持IMAP第二版的IMAP2与IMAP3当前最新版为IMAP4),可由/etc/services文件中查看以下的内容:
imap 143/tcp  imap2  #Interim Mail Access Proto v2
imap 143/udp  imap2
imap3 220/tcp    # Interactive Mail Access
imap3 220/udp    # Protocol v3
imaps 993/tcp    # IMAP over SSL
imaps 993/udp    # IMAP over SSL
表6-1中是有关POP与IMAP两种通信协议的比较。
表6-1   两种通信协议的比较
通 信 协 议 优    点 缺    点
POP ?适合脱机阅读可节省拨号连接费用 ?设置较为繁琐
?不需保持网络的持续连接 ?信件下载到客户端计算机上保密性差
IMAP ?不用设置服务器等相关信息 ?服务器的负担较重
?可通过浏览器收发E-mall ?需要限制用户邮箱容量
?信件保存于服务器上保密性高 ?需要连接才能访问邮件
简单邮件通信协议
简单邮件通信协议Simple Mail Transfer Protocol,SMTP)是一种在Internet中“传递”电子邮件的通信协议,它和POP与IMAP一样都是用来控制信息或邮件的传输与接收。最重要的一点是,SMTP只负责电子邮件的传递,而POP与IMAP则是负责接收信件。
它取代了传统RPCRemote Procedure Call)和X.400的传输机制,而且可以在Internet上和不同的邮件系统交换信息。许多管理员习惯将SMTP与POP或IMAP服务建立在同一台机器内,但也可利用不同的主机来处理SMTP与POP或IMAP邮件。
当MUA或MTA要将E-mail传送出去时,就是使用SMTP来彼此通信,才能使E-mail在Internet上流通并送达目的地。而SMTP是一种“推”方式的E-mail通信协议,它会将不属于本身网络的E-mail传送到远程网络,让此信息离目的地主机越来越近,如图6-3所示。
图6-3   电子邮件的传送与接收
注意:目前有一种叫“ESMTP”的标准,它是“Extended SMTP”的缩写,属于SMTP的扩展格式,许多邮件服务器也支持这一通信协议。
6.1.2   电子邮件传递流程
在了解有关电子邮件系统的重要名词后,本小节我们将探讨电子邮件的传递流程。因为传递的方式不同,所以我们将内容分为两个部分来讨论:本地与远程网络邮件传递。
本地网络邮件传递
如果电子邮件的发件人和收件人邮箱都位于同一台邮件服务器中,它会利用以下的方式进行邮件传递,如图6-4所示。
1) MUA先利用TCP连接端口25,将电子邮件传送到邮件服务器MTA),此时发件人必须正确定义本身与收件人的电子邮件地址,然后这些邮件会先保存在队列中。
2) 经过服务器的判断,如果收件人属于本地网络的用户,则此邮件就会交由MDA进行处理,之后直接传送到收件人邮箱。
3) 收件人利用POP或IMAP软件MUA),连接到邮件服务器下载或直接读取电子邮件,整个邮件传递过程也随之完成。
图6-4   本地网络邮件传递流程
注意:如果网络中断或拥塞,信件会一直暂存在系统的队列/var /spool/mqueue目录),等一段时间后再尝试传送。
由于发件人与收件人位于同一网络中,而且双方的电子邮件邮箱也都在同一台邮件服务器上,因此不一定需要通过主机名称或域名来查找收件人,惟一需要的是用户的账号名称,因为在同一台服务器上不会存在两个相同的账号名称。
例如同一网络中的用户要寄一封电子邮件给另一用户caroline,则可以使用的收件人地址类型有:

?caroline@mail.fc5linux.com
?caroline@mail
?caroline@localhost
?caroline@
?caroline
上述的第一种电子邮件地址类型是最完整的表示法,caroline表示用户账号名称,mail表示邮件服务器的别名,而fc5linux.com则是已向InterNIC注册的域名。
远程网络邮件传递
如果电子邮件的发件人和收件人位于不同的网络中,例如台湾和美国,它的邮件传递较为复杂,远程网络邮件传递流程如图6-5所示。一般的步骤如下:
1) MUA先利用TCP连接端口25,将电子邮件传送到MTA,此时发件人必须正确定义本身与收件人的电子邮件地址,然后这些邮件会先保存在队列中。
2) 经过服务器的判断,如果收件人属于远程网络的用户,则此服务器会先向DNS服务器要求解析远程邮件服务器的IP地址。
3) 如果名称解析失败,则无法进行邮件的传递。如果成功解析远程邮件服务器的IP地址,则本地的邮件服务器将利用SMTP将邮件传送到远程这就是邮件转发功能)。
4) SMTP将尝试和远程的邮件服务器连接,如果远程服务器目前无法接受邮件,则这些信件会继续停留在队列中,然后在指定的重试间隔再次尝试连接,直到成功或放弃传送为止。
5) 如果传送成功,则远程MTA就会将此邮件交由MDA进行处理,并放入用户邮箱。之后收件人即可利用POP或IMAP软件,连接到邮件服务器下载或读取电子邮件,而整个邮件传递过程也随之完成。
图6-5   远程网络邮件传递流程
综合以上两种不同形式的电子邮件传递方式,笔者在此以一流程图来归纳所有的邮件传递过程,希望读者能得到最清楚的概念。图6-6是完整的电子邮件传递流程。
图6-6   完整的电子邮件传递过程
6.1.3   Sendmail安装
在Linux平台中最为有名的邮件服务器应该非Sendmail莫属了,它原来是由一位柏克利大学学生—Eric Allman所开发,但由于采用Open Source的公开发行方式,因此目前版本的功能也大为提升。由于Sendmail可提供多样及稳定的特色,所以它是Linux操作系统中最常被采用的MTA软件,目前由Sendmail协会负责维护。有关sendmail的详细信息,可参考以下的网站内容:
http://www.sendmail.org/
在Fedora Core 5安装时,默认会自动安装Sendmail服务器,其内置的Sendmail服务器版本为sendmail-8.13.5-3,如果不知道是否已安装此版本的软件,可以使用以下方法来判断:
[root@ns1 ~]# rpm -qa sendmail
sendmail-8.13.5-3
如果需自行安装Sendmail服务器,请参考之前章节的安装步骤,利用“软件包管理者”程序进行安装,如图6-7所示。
图6-7   安装Sendmail服务器

在安装Sendmail服务器后,最简单的启动方法如下:
[root@ns1 ~]# /etc/rc.d/init.d/sendmail restart
正在关闭 sendmail:确定  ]
正在关闭 sendmail:确定  ]
正在启动 sendmail:确定  ]
正在启动 sm-client:确定  ]
可以利用以下的方法重新启动Sendmail服务器:
[root@ns1 ~]# /etc/rc.d/init.d/sendmail restart
正在关闭 sendmail:确定  ]
正在关闭 sendmail:确定  ]
正在启动 sendmail:确定  ]
正在启动 sm-client:确定  ]
可以利用以下的方法停止Sendmail服务器:
[root@ns1 ~]# /etc/rc.d/init.d/sendmail stop
正在关闭 sendmail:确定  ]
正在关闭 sm-client:确定  ]
可以利用以下的方法查看Sendmail服务器目前执行的状态:
[root@ns1 ~]# /etc/rc.d/init.d/sendmail status
sendmail (pid 3011 3002) 正在执行...
因为E-mail服务是系统中相当重要的工作,所以在一般情形下,应该在引导时自动启动Sendmail,以节省每次手动启动的时间。要在引导时自动启动Sendmail服务器,可以使用以下方法:
[root@ns1 ~]# chkconfig --level 5 sendmail on
[root@ns1 ~]# chkconfig --list | grep sendmail
sendmail  0:关闭1:关闭2:打开3:打开4:打开5:打开6:
以上表示如果系统执行Run Level 2、3、4、5时,就会自动启动Sendmail服务器sendmail),也可配合“--list”参数的使用,显示每个Run Level是否自动执行Sendmail服务器。
注意:有关其他Sendmail在引导时自动启动的方法,请参考之前章节说明。
测试Sendmail服务器
在完成以上的安装、启动及设置步骤后,接下来可以通过telnet命令登录到Sendmail服务器上的25连接端口,测试Sendmail服务器是否正确启动,以下是一个简单的示例:
[jack@ns1 jack]$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 ns1.fc5linux.com ESMTP Sendmail 8.13.5/8.13.5; Mon, 27 Mar 2006 11:37:04 +0800

^]
# 按Ctrl + ]可以中断连接
telnet> q
# 按q可以退出
Connection closed

回书目   上一节   下一节

相关内容