转发文章来源地址http://dev.veryer.com/server/mail/mail-35287.html
1、Linux邮件软件
1.1 邮件系统的组成部件
Linux中的电子邮件系统包括两个组件:MUA(Mail User Agent,邮件用户代理)和MTA(Mail Transport Agent,邮件传送代理)
。MUA是邮件系统为用户提供的可以读写邮件的界面;而MTA试运行在底层,能够处理邮件的收发工作的程序。简单的说,用户可以使用MUA写信、读信、而通过MTA收信、发信。
1.2 常用的MTA程序
最通用的电子邮件MTA系统是sendmail,他最初被集成在加州大学开发的电子邮件系统中。Linux系统中有几个版本的sendmail,这些版本中的差别不是很大。另一个常见的MTA程序是smail,他是有Curt Noll和Ronald Kart共同开发的。
由于这两种程序在Linux发布光盘中都可以找到,对小型的应用来说,任意一种都是很好的选择。由于smail是比较现代的产品,它在配置和使用上稍微方便一些。对大型系统或有特殊配置要求的应用来说,sendmail更灵活一些,可以获得更好的性能。它们的基本功能除了最基本的信件递送, 还有信件转递处理、 积存 (待送) 信件处理、 不同传输工具判断及退信处理等等。
当我们需要使用sendmail或者smail时,就需要通过配置文件来定制程序包,以便完成我们需要的各种操作。sendmail的配置非常复杂,它有一个复杂的配置文件,这个文件复杂到用手工很难进行配置的程度。所以在进行配置时通常需要运行另外一个应用程序来达到简化的目的。相比较而言,smail的配置则非常简单。
1.3 MUA与MTA协同运行
当使用一个MUA程序写信(例如elm,pine或mail)时,应用程序把信件传给sendmail或smail这样的MTA程序(实际上,MUA程序将信件传给一个叫做rmail的普通服务器,它通常是系统中的MTA程序的别名)。尽管大多数的系统只使用一个MTA程序,然而实际上可以同时运行几个这样的程序,比如运行一个MTA程序处理局域网信件,而运行另一个MTA程序来处理UUCP信件。
如果信件是寄给局域网或本地主机的,那么MTA程序应该从地址上就可以确定这个信息。MTA程序还支持别名机制,使得用户能够方便的用不同的名字与其他用户、主机或网络通信。如果信件是发给远程系统用户的,那么MTA程序必须能够选择路由,与远程邮件服务器建立连接并发送邮件。这种远程连接可以建立在UUCP或TCP之上。如果是后者,那么就要采用SMTP协议(Simple Mail Transfer Protocol,简单邮件传输协议)。MTA程序还必须能够处理发送邮件时产生的问题,并且能向发信人报告出错信息,例如,当邮件没有填写地址或收信人不存在时,MTA程序要向发信人报错。
1.4 不同地址的识别
邮件系统要能够识别各种不同格式的地址(收信人和发信人的)。最常见的格式是UUCP格式和域名格式。UUCP格式的地址(带感叹号)清楚的列出了从收信人到发信人的路径,例如地址"bill!bird!keyanbu.com!paul"说明这封新药经过bill,经过bird,然后经过keyanbu.com,最后到达收信人paul手中。而域名格式(例如)则通过专门的地址解析系统找出从收信人到发信人的路径。尽管这两种格式是最常见的,但是其他地址系统也是存在的。
1.5 邮件系统的路由选择
选择路由是MTA程序提供给用户的一个重要功能,并且这项功能随着地址格式的变化而变化,因为UUCP格式的地址已经确定了路由,而域名格式的地址需要选择路由。对于基于TCP协议的连接来说,MTA程序根据IP地址将邮件传给目的主机,让IP协议来选择路由。
为了简化邮件传送过程,可以在局域网中采取发布MX(Mail eXchange)路的方法。这种MX纪录有DNS解释说明。它可以指导邮件选择路由。这种情况是用于大规模网络或只有一个接口连接到Internet的网络。这种MX纪录可以是一个并不总是连到Internet的主机能够收到被邮件服务器接收到的邮件。下面就是一条MX纪录:
abc.zgjsyh.com IN MX 3 mallserver.zgjsyh.com
这一项告诉DNS系统任何发给abc.zgjsyh.com的邮件都要传给系统mailserver.zgjsyh.com。纪录中的"IN"是资源纪录类型,"MX"表明这条纪录是MX纪录。例子中的数字"3"是优先序列号,它用来确定服务器的优先级。一个网络中可以有几台邮件服务器,每个服务器都由一个优先序列号。传送邮件的软件先选择向序列号较小的服务器传,如果小序列号服务器没有相应,在向序列号大一点的服务器传。
UUCP网络处理邮件的方法与TCP网络的完全不同。在UUCP网络发展的早期,由于从源地址到目的地址的每一跳(hop)都必须确定下来,所以整个路径都很清楚明了。随着网络规模的扩大,确定地址几乎是不可能的、因此映射系统应运而生。UUCP映射系统维护着一个表格,表中包括了所有正式UUCP站点名字和与它们相邻的站点。映射系统接收基于UUCP的MTA程序传来的请求,为MTA程序搜索到达目的地的路径。这些映射被称为USENET映射,他们定期向Internet发布UUCP站点的信息。
2、 电子邮件结构
2.1 基本组成
为了深入了解邮件系统是如何工作的,我们首先分析一下邮件的结构
。邮件由两部分组成,一部分是邮件正文,另一部分是标题,即位于邮件头部的一段包含发信人地址等信息的数据。通常,邮件正文与标题用空行隔开。许多邮件在尾部还加有签名。签名是发信人写的加在每封信后面的一小段ASCII数据,形式类似于写信时的签名,内容一般是发信人的情况介绍,或者发信人喜欢的一小段文字。
2.2 标题
标题由两个部分组成,前一部分包含了发信人和收信人的地址信息。这部分常称为信封,后一部分是处理邮件的有关信息,包括邮件主题、传送邮件的MTA程序、抄送地址以及日期等。标题的信息由回车符隔开。每一行的开头都是域的名字,后面是冒号和域的内容。代码清单如下:
X-Sieve: cmu-sieve 2.0
Return-Path:
Received: from (unknown [202.109.249.77])
by linuxaid.com.cn (Postfix) with ESMTP id 91B5B123A0C
for ; Wed, 13 Jun 2001 16:45:40 +0800 (CST)
Received: from XuFeng ([192.9.204.211])
by (8.11.0/8.11.0) with SMTP id f5D8Y1O05804
for ; Wed, 13 Jun 2001 16:34:01 +0800
Message-ID: <>
From: "XuFeng"
To: "hilinux"
Subject: =?gb2312?B?udjT2kUtTWFpbNeozOI=?=
Date: Wed, 13 Jun 2001 16:45:27 +0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_00C2_01C0F428.403ECAA0"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2615.200
X-MIMEOLE: Produced By Microsoft MimeOLE V5.00.2615.200
邮件标题开始几行的内容表明了发信人是谁,以及传送邮件经过的路径。其他内容包括日期、邮件标识号(每个邮件都由一个唯一的标识号)、主题和抄送地址列表。每一行都遵循"域:值"的格式,下面的域是邮件中常见的:
--两个From域:第一个From域的内容是邮件经过的最后一台主机的地址,第二个From域的内容是发信人地址(有时是发信人在/etc/passwd文件中的名字),From域的值可以是不同的格式地址,如UUCP格式和域名格式。
--Received域:邮件每经过一台主机时,就产生一个Received域,用来记录所经过主机的地址和经过时间,这样,回复的信件就可以按原路返回,而不必去选择路由。
--Date域:记录邮件发送日期(本地主机的日期和时间)
--Message-Id域:邮件唯一的标识号。
--To域:记录收信人地址。
--Subject域:改域描述邮件正文的主题。
--Cc域:记录抄送地址。
有些邮件系统还包括下面的域:
--Reply-to域:列出回复的地址。当发信人有几个邮件帐号,并且向要恢复的地址不是发信地址时,可以使用这个域。
--Organization域:列出拥有发信主机的组织的名称。这个选项可以置空。
--由"X"打头的域:这些域以字母"X"为标记,是在基本邮件系统的基础上添加的属性。在源和目的双方邮件服务器都要支持这些属性的情况下,使用这些属性才有意义。例如,
2.3 邮件功能的扩展
尽管所有的邮件系统都是根据RFC 822文档设计的,当许多系统都在RFC 822文档的基础上又扩展出象多媒体、加密和专用字符集这样的功能。为了正确的收发邮件,源和目的两端的邮件服务器必须支持扩展功能。
综上所述,电子邮件有复杂的格式和传输系统,但不必担心,它的大部分技术细节都被隐藏起来了。一旦系统配置好了,系统管理员的工作已经基本完成,除非是检查功能是否正常或删除日志。 |