欧阳俊曦精通 Solaris / I

来源:互联网 发布:avtaobao淘宝com最新 编辑:程序博客网 时间:2024/05/16 00:33

文章来源: http://download.csdn.net/source/149097

第一部分 邮 件 服 务

如果需要设置新的邮件服务或扩展已有的服务,参阅本部分的章节。本部分用 4章描述Solaris 2.x邮件服务。第 1章描述邮件服务组件、定义邮件服务术语,以及解释程序在邮件服务中的相互作用。第 2章描述几种通用的邮件配置,并提供设置每种配置的策略。第 3章描述如何设置和管理邮件服务。第 4章描述sendmail配置文件,并解释在邮件系统中需要更复杂的配置时,如何进行自定义。

第1章 了解邮件服务

SUNOSTM5.x邮件服务使用略作修改的 SUNOS 4.x的sendmail邮件路由程序,该程序来自 4.3版本的BSD UNIX?。SunOS 5.x不使用AT&T的邮件路由程序。如果对 SunOS 4.x的邮件服务比较熟悉,则设置和管理 SunOS 5.x 系统的邮件服务十分容易。而且如果网络上有一些系统运行 SunOS 4.x 系统软件而其他的系统运行 SunOS 5.x系统软件,则邮件服务的设置和管理也十分容易。为了便于发现这些修改, SunOS 5.x sendmail程序的新信息描述旁边有图标,并标记为 SVR4。作为系统管理员,可能需要扩展已有的邮件服务或设置新的邮件服务。为完成这些任务,本章定义了邮件服务术语,而且描述了邮件服务组件。

1.1   邮件服务术语

本节定义以下术语以及其在邮件服务中的使用: ■ 在邮件配置中的系统。 ? 中继主机。 ? 网关。 ? 邮件主机。 ? 邮件服务器。 ? 邮件客户。 ■ 用户代理 (UA)。 ■ 邮件传输代理 (MTA)。 ■ 域。 ■ 邮件地址。 ■ 信箱。 ■ 别名。

1.1.1   在邮件配置中的系统

邮件配置最少需要三个要素,它可以在同一个系统上,也可以由分离的系统提供:邮件

2 第一部分 邮 件 服 务

下载

主机、不少于一个邮件服务器以及邮件客户。如果希望用户能够与域之外的网络通讯,则还需要一个中继主机或网关。图1-1显示了使用所有 4个要素的标准的电子邮件配置。每个要素在后面的章节都进行了标识和描述。 1. 中继主机中继主机是运行至少一种邮件相关协议 (称为邮件处理程序 )的系统。每个邮件处理程序指定用来发送邮件的策略和机制。中继主机处理无法决定的邮件— 这些邮件的地址在域中找不到接收者。如果有中继主机,则 sendmail使用它接收和发送域以外的邮件。发送中继主机上的邮件处理程序必须与接收系统中的邮件处理程序兼容,如图 1-2 所示。在send-mail.cf文件中指定邮件处理程序,默认的 send-mail.cf文件指定好几种邮件处理程序,如smartuucp、ddn、ether和uucp,也可以定义其他的。其他域

延时主机A

邮箱

延时主机或网关

邮件主机

邮件服务器 邮件服务器

邮箱

延时主机B

邮件发送程序A

客户

客户邮件发送程序A

图1-2   在中继主机和接收系统上的图1-1   标准电子邮件配置兼容的邮件处理程序

中继主机和邮件主机可以是同一个系统,或者将另一个系统配置为中继主机,如图 1-4所示。事实上,如果站点与外界有多个连接,在域中可以配置多个中继主机。如果有 uucp或因特网连接,配置有那些连接的系统为中继主机。 2. 网关网关是处理运行不同通信协议的网络连接的系统,如图 1-3所示。中继主机和它连接的系统必须使用匹配的邮件处理程序。网关可以处理具有不同邮件处理程序的系统的连接。在网关系统中必须自定义 sendmail.cf文件,这是一件困难而且费时的工作。

下载

延时主机邮件发送程序

延时主机第1章 了解邮件服务3

邮件主机

图1-3   网关可以处理不同通讯协议之间的连接

如果必须设置网关,查找一个与所需的配置近似的网关配置文件并修改以匹配当前情形。例如,可以修改默认的/etc/mail/main.cf文件以便在网关系统中使用。 3. 邮件主机邮件主机是指定为网络中主邮件系统的系统。邮件主机是这样的一个系统,其他系统将无法发送的邮件前传到该系统。通过在主机数据库中的该系统的 Aliases行添加 mailhost,或者在该系统的 /etc/hosts文件的 IP地址行添加 m a i l h o s t可以指定邮件主机。在邮件主机系统中还使用 main.cf文件作为邮件配置文件。邮件主机最好选择连接到以太网和电话线的系统或者配置为互连网路由器的系统。如果有一个单机系统没有连网但是是一个分时配置,则可以视为单系统网络的邮件主

网关B

网关A 邮件发送程序A 机。与此类似,如果在以太网中有几个系统但是都没有电话,则可以指定一个系统为邮件主机。 4. 邮件服务器邮件服务器是在 /var/mail目录存储信箱的任意系统。邮件服务器负责路由从邮件客户来的所有邮件。当客户发邮件发送程序B

图1-4   中继主机和邮件主机可以在同一个系统或不同系统送邮件,则邮件服务器将邮件放入发送队列。一旦邮件进入队列,无论客户重新引导系统或关闭系统都不会丢失邮件。当接收者收到客户发送的邮件时,该消息的“从:”行中的路径包含邮件服务器名称。如果接收者选择回复,则回复到用户在服务器上的信箱中。当信箱在邮件服务器上时,消息发送到服务器上,而不是直接到客户系统。当信箱在用户本地系统中时,如果没有从其他系统加载 /var/mail,本地系统充当自己的邮件服务器。如果邮件服务器不是用户本地系统,使用 N F S的用户可以在 / e t c / v f s t a b   文件中加载 /var/mail、使用自动加载程序或登录到服务器阅读邮件。注意 如果自动加载/var/mail目录,可能产生在有SunOS 4.x客户的异构网络上收发邮件的问题。最好选用提供用户主目录的系统或经常备份的系统作为邮件服务器。表1-1显示一个有大约 12 000名雇员的计算机公司中邮件大小和邮件流量的一些采样统计数据。

4 第一部分 邮 件 服 务

下载

注意 表1-1中的信息仅适用于ASCII消息。如果有多媒体邮件,它允许用户传输任何类型的数据(不仅仅是 ASCII 文本),则一个邮件的大小可能急剧增长。将来系统管理员需要分配更多的多媒体邮件的缓冲空间。

表1-1   邮件消息和流量的采样统计数据统计数据(字节) 6500

邮件平均大小描 述 140K 15K 40M 18000M 55000M 2M

5. 邮件客户一个用户一天接收的平均邮件量小信箱大小(用户定期阅读并在其他地方存储邮件 ) 大信箱大小(用户在 /var/mail 目录存储长期邮件) 公司一天发送出去的平均消息量公司一天接收进来的平均消息量推荐分配给每个用户信箱的缓冲空间,基于本表的指数邮件客户是接收在服务器上的邮件且没有本地 /var/mail目录,使用 NFS加载/var/mail的任何系统。必须确认邮件客户在 /etc/vfstab文件中有合适的项目而且有从邮件服务器加载信箱的加载点。

1.1.2   用户代理

用户代理是作为用户和 sendmail程序之间接口的程序。 SunOS 5.x系统软件的用户代理是 /usr/bin/mail、/usr/bin/mailx、$OPENWINHOME/bin/mailtool和/usr/dt/bin/dtmail。

1.1.3   邮件传输代理

传输代理负责消息的实际接收和发送。 SunOS 5.x 系统软件的传输代理是 sendmail。传输代理执行以下功能: ■ 从用户代理接收消息。 ■ 了解目的地址。 ■ 如果信箱在本地,则发送本地系统中产生的邮件到正确的信箱,否则发送到发送代理。 ■ 从其他代理接收传入邮件并发送到本地用户。

1.1.4   邮件处理程序

邮件处理程序是一个协议—sendmail在发送邮件时所使用的策略和机制。邮件处理程序在中继主机的 sendmail.cf文件中指定。中继主机中的邮件处理程序必须与域外系统中的相匹配。网关是一个更复杂的中继主机 (也可以将中继主机视为一个简单的网关 ),可以与多种邮件处理程序通讯。 SunOS 5.x系统软件提供的邮件处理程序如下: ■ smartuucp(默认的转发邮件处理程序 ),使用uux(UNIX到UNIX命令执行 )发送消息,但是以域风格的地址作为头格式。“To:”和“CC:”行为域格式。例如,如果neg.sun.com 域中的winsor使用smartuucp发送邮件给auspex的guy,则头格式如下:

下载第1章 了解邮件服务5

使用smartuucp命令发送 uucp邮件到可以处理和解决域风格名称的邮件的系统。发送者也需要能够处理域风格名称的邮件和接收互连网来的应答。 ■ uucp使用uux发送邮件,但是在头中使用基于路由的地址。在头中部分或所有路由地址由 发 送 者 指 定 。 详 细 的 信 息 , 请 参 阅 本 章 后 面 “ 基 于 路 由 的 地 址 ”。例如,如果 neg.sun.com 域中的winsor使用uucp发送邮件给 guy@auspex,则头格式如下:

地址中的感叹号表示基于路由。在基于 uucp连接的系统之间使用 uucp 时需要感叹号风格的路径。 ■ ddn使用SMTP(简单邮件传输协议 )在TCP端口25连接到远程主机。 ddn颠倒别名并添加域名。例如,如果 neg.sun.com域中的 winsor发送邮件给 paul@phoenix.princeton.edu,则头格式如下:

如果winsor发送邮件给 irving@sluggo(neg.sun.com域中的用户 )并使用 main.cf配置文件,则头格式如下:

在向域外发送邮件时,特别是需要通过转发才能达到的邮件处理程序要使用 ddn。 ■ ether在端口25使用SMTP协议连接到远程主机。 ether不颠倒别名也不添加域名。在 dns 域中用户可以直接访问的系统使用 ether。在sendmail.cf文件中指定邮件处理程序可以定义其他邮件处理程序。详细的信息请参阅第 4章“自定义sendmail配置文件”。

1.1.5   域

域是一个目录结构,用于电子邮件地址定位和网络地址命名。域地址格式如下:

在@符号左边的部分地址是本地地址,如图 1-5所示。本地地址可能包含使用另一传输的路由信息(如,bob::vmsvax@gateway 或smallberries% 本地地址域地址 mill.uucp @physics.uchicago.edu)、一个别名,或图1-5   域地址结构表征信箱名的符号 (ignatz→/var/mail/ignatz)。接收端的邮件处理程序负责确定地址的本地部分的含义。在@符号右边的部分地址是本地地址所在的域的域地址。域地址各部分之间用点号 (.)分开。一个域可以是一个公司、一个物理区域或地理范围。域地址是大小写无关的。在地址中使用大写或者小写或混合二者都没有差别。域中的信息是层次结构,离 @符号越近则表示的位置越接近特定的位置和本地 (但是英国和新西兰的某些网络为反序 )。

注意 大多数网关自动将英国和新西兰域名顺序反序为通常的顺序。子域的个数越多则目的信息提供得越多。正如子目录或文件系统层中的文件包含在上一级目录中一样,

6 第一部分 邮 件 服 务

每个子域包含在它右边的域中。表1-2显示美国顶级域。

 域 .com .edu .gov .mil .net .org

表1-2   美国顶级域

描 述商业站点教育站点政府部门军队部门网络组织非赢利性组织

下载

由于WWW的迅速增长,由广泛的 Internet团体参与者组成的 IAHC,提议并实现在已有的域中添加 7类新的通用顶级域 (gTLD)。新的gTLD列表如下:

表1-3   新的通用顶级域域 .arts .firm .info .nom .rec .web 描 述着重文化和娱乐活动的实体商务或公司提供信息服务的实体个人或私人命名的实体着重休闲和娱乐活动的实体着重与 WWW 相关活动的实体

除了新的 gTLD以外,还将建立 28个新的注册点授予二级域名的注册。为了指导注册以后的发展,将建立瑞士法律之下的注册委员会 (CORE)组织,产生和增强注册操作所需设备。 IAHC报告的全文在 http://www.iahc.org可以找到。表1-4显示美国和欧洲各国的顶级域。由 Donnalyn Frey和Rick Adams写的《 !%@::电子邮件地址和网络目录》,包含域地址的全部列表并定期更新。

表1-4   国家顶级域域 .au .be .de .es .fr .ie .it .nl .pt .tr .us 描 述澳大利亚比利时西德西班牙法国爱尔兰意大利荷兰葡萄牙土耳其美国域 .at .ch .dk .fi .gr .is .lu .no .se .uk 描 述奥地利瑞士丹表芬兰希腊冰岛卢森堡挪威瑞典英国

以下是教育、商业和政府域地址:

下载

 

下面是一个法国域地址:

下面是一个英国域地址:第1章 了解邮件服务7

注意英国和新西兰的某些网络编写邮件地址时从顶级地址到低级地址,但是许多网关自动将其转换为通常使用的顺序 (即从低到高 )。

1.1.6   邮件地址

邮件地址包含邮件将发送到的接收者和系统的名称。如果管理不带有名服务的小型邮件系统,则邮件地址很简单:逻辑名唯一指定用户。但是如果所管理的小型邮件系统包含一个以上由信箱的系统或多个域,则邮件地址十分复杂。当使用 uucp(或其他 )邮件连接与外部相连时,变得更为复杂。邮件地址可以基于路由、独立于路由或者二者的混合。 1. 基于路由的地址定位基于路由的地址定位要求邮件消息的发送者不仅指定本地地址 (通常为用户名)和最终目的地址,还要指定该消息到达最终目的地的路由。基于路由的地址,在 uucp网络十分常见,格式如下:

只要见到邮件地址中有感叹号作为一部分,则所有 (或一些 )路由由发送者指定。基于路由的地址通常从左至右解读。例如下面的电子邮件地址:

发送到名为 ucbvax的系统中的用户 winsor。先从 castle到地址 sun,然后到 sierra,然后到 hplabs,最后到 ucbvax(注意这是个例子,不是实际的路由 )。如果这四个邮件处理程序中的任何一个无法使用,则消息被延时或者因无法发送而返回。 2. 独立于路由的地址定位独立于路由的地址定位需要邮件消息的发送者指定接收者的名称和目的地址。独立于路由的地址通常表明使用高速网络,如互连网。此外,新的 uucp连接经常使用域风格的地址。独立于路由的地址格式如下: user@host.domain 在国内计算机中域层次命名规则的日益推广使得独立于路由的地址更为通用。事实上,最通用的独立于路由的地址忽略地址的主机名,并依赖于域名服务正确标识该邮件消息的最终目的: user@domain 独立于路由的地址解读时搜索 @符号,然后从右到左 (最确定的地址与 @符号右边相邻 )读取地址层。例如,电子邮件地址 winsor@Eng.sun.com解读时从 .com商业域开始,然后是 sun公司名域,最后是Eng部门域。

1.1.7   信箱

信箱是邮件服务器上的一个目录,是电子邮件的最终目的地。信箱名可以是用户名或为

8 第一部分 邮 件 服 务

下载

具有特定功能的程序 (如信使)放置邮件的地点。信箱可以在用户本地系统的 /var/mail/username 目录或者在邮件服务器上。警告 不要使用NFS加载的文件系统作为用户信箱的目的地。如果服务器故障,则 NFS 加载的文件系统产生邮件发送和处理的问题。别名数据库、/etc/mail/aliases文件和如 NIS 或 NIS+ 有名服务提供为电子邮件生成别名的机制。这样用户无需知道用户信箱准确的本地名称。邮件别名在 @符号的左边提供其别名。因为DNS只提供系统和域 (在@符号的右边 )的别名,所以不能使用DNS申明用户或邮件列表别名。某些特殊应用的信箱命名的通用约定显示如表 1-5。

表1-5   信息命名格式约定格 式 username

用户名经常与信箱名相同描 述 Firstname. Lastname, Firstname_Lastname, Firstinitial.Lastname, Firstinitial_Lastname postmaster

MAILER-DEAMON x-interest x-interest-request owner-x-interest local%domain

usenet

1.1.8   别名用户名可以定义为全名,第一名字和第二名字之间用点号 (.) 或下划线隔开,或者在第一初始名和最后名之间用点号 (.)或下划线隔开

互连网标准需要每个站点和域具有 postmaster信箱。用户可以使用邮件系统将疑问和问题报告给邮递员信箱任何发送到 MAILER-DEAMON的邮件由 sendmail自动路由到 postmaster 带破折号的名字可能是分布列表或者邮件列表。该格式通常用于网络邮件组以-request 结尾的名字是分布列表的管理地址以owner-开始的名字是分布列表的管理地址百分号(%)显示当邮件到达目的地时的本地扩展地址。大多数邮件系统将带 %的邮件名解读为整个邮件地址。 %被@号代替,因而邮件重定向。注意尽管许多人使用%约定,它不是一个正式标准。在电子邮件团体中代表 %hack 任何处理或接收UseNet新闻的域或系统的互连网标准需要

别名是一个可选的名字。对于电子邮件,可以使用别名给用户分配其他名字、路由邮件到特定的系统或定义邮件列表。可以为站点上每个用户创建一个邮件别名,指定邮件的存放位置。提供邮件别名类似于提供一个邮件结束标志作为大公司某人地址的一部分。如果不提供邮件结束标志,邮件发送到一个集中的地方。需要通过其他努力决定邮件发送到建筑物何处,并使错误可能增长。例如,如果在一个建筑物中有两个 Kevin Smith,则每个 Kevin Smith接收到对方消息的可能性极大。创建别名文件时尽量使用域以及与位置无关的地址。为了增强别名文件的移植性和稳定性,尽量使别名项目通用并且独立于系统。例如,如果在域 Eng.sun.com中的系统 oak上有名为ignatz的用户,则创建ignatz作为别名而不是ignatz@Eng或ignatz@oak。如果用户 ignatz更改系统名,但是仍然在工程域中 (Eng),则无需修改任何别名文件以反映系统名的变化。当创建包括域以外的用户的别名时,使用用户名和域名创建别名。例如在 Crop.sun.com 域的privet系统中有名为 smallberries的用户,则创建的别名为 smallberries@Crop。

下载第1章 了解邮件服务9

注意 在sendmail.cf文件中可以设置选项,当邮件向用户域之外发送时,转换电子邮件地址为完全的域名地址—域名包含确定电子邮件消息发送目的地的所有要素或 NIS+ 表的位置。详细的信息请参阅第4章。 1. 使用别名文件可以在NIS+mail_ailases 表中,在 NIS ailases 映射中,或者如果没有使用有名服务,则在本地/etc/mail/aliases文件中,创建全局使用的邮件别名。使用同一个别名文件还可以创建和管理邮件列表。根据邮件服务配置的不同,可以使用 NIS或NIS+有名服务保持一个全局别名数据库或更新所有本地的/etc/mail/aliases文件使之保持一致来管理别名。关于创建别名的详细信息,请参阅第3章“设置和管理邮件服务”。用户也可以创建和使用别名。可以在本地的 .mailrc文件 (只有用户可以使用 )或系统本地的 /etc/mail/aliases文件(任何人都可以使用 )中创建别名。用户不能创建或管理 NIS或NIS+别名文件。除非在系统中有超级用户权限,用户不能管理本地的 /etc/mail/aliases文件。 2. 别名文法以下各小节描述 NIS+、NIS 和 .mailrc 别名的文法。 NIS+别名 NIS+别名表包含系统或个人所知的所有名字 (不包括在用户本地 .mailrc文件中列出的私人别名 )。sendmail程序可以使用 NIS+别名数据库而不是本地 /etc/mail/aliases文件决定邮件地址。详细的信息请参阅 aliasadm(8)和nsswitch.conf(4)参考页。 NIS+别名表有4列,如表 1-6所示。

表1-6   NIS+别名数据库的列列 alias

别名名字描 述 expansion options comments

别名使用NIS+别名表的格式:别名在sendmail/etc/aliases文件中显示的值保留可用于添加别名的特别说明

NIS+别名数据库包含所有邮件客户的项目。使用 aliasadm命令在NIS+别名数据库中列表、创建、修改和删除项目。如果正在创建一个新的 NIS+别名表,在创建项目之前必须初始化该表。如果该表已经存在,则不需要初始化。在创建项目时,每行输入一个别名。包含用户系统名的项目只能有一个项目。例如,名为winsor的用户可以创建如下项目:

 

可以为本地名或域创建别名。例如在 Trees域中的用户 fred在系统 oak上有一个信箱,在 NIS+别名表中可以有如下项目:

要使用aliasadm命令必须是超级用户、拥有别名数据库的 NIS+组成员或创建数据库的人。

10 第一部分 邮 件 服 务

NIS别名 在NIS别名映射中的别名使用如下格式:

.mialrc别名 在.mialrc文件中的别名使用如下格式:

/etc/mail/aliases别名 在本地/etc/mail/aliases文件中的分布列表使用如下格式:

下载

在/etc/mail/aliases文件中的别名以文本的形式存储。当编辑 /etc/mail/aliases文件时,运行 newaliases程序重新散列数据库,使之可以被 sendmail程序以二进制方式访问。关于如何创建NIS+别名表的详细信息请参阅第 3章。

1.2   邮件服务器组件

邮件服务由许多程序、后台进程组成,彼此交互作用。以下各小节介绍这些程序,以及与管理电子邮件相关的术语和概念。

邮件服务程序

表1-7列出了邮件服务程序。

表1-7   邮件服务器组件命 令 /usr/bin/mailx /usr/bin/mail $OPENWINHOME/bin/mailtool /usr/lib/sendmail /usr/lib/sendmail.mx /etc/mail/main.cf /etc/mail/sendmail.subsidiary.cf /etc/mail/sendmail.cf /etc/mail/aliases /etc/mail/sendmailvars . sendmailvars.org_dir /usr/bin/newaliases /usr/bin/mailq /usr/bin/mailstats /usr/bin/mconnect /usr/sbin/in.comsat /usr/sbin/syslogd /usr/dt/bin/dtmail① /usr/dt/bin/dtmailpr① ① CDE邮件程序描 述交互作用的邮件消息处理系统,描述见 mailx(1)参考页发送邮件到信箱中的邮件处理程序 sendmail程序基于窗口的界面邮件路由程序和域名服务解读程序相连的邮件路由程序主系统的样本配置文件辅助系统的样本配置文件邮件路邮配置文件邮件前传信息存储用于从sendmail.cf文件中查找宏和类定义的表 sendmailvars表的NIS+版本与/usr/lib/sendmail的符号连接,用于重建邮件别名文件数据库与/usr/lib/sendmail的符号连接,用于打印邮件队列的消息头用于存储由/etc/mail/sendmail.st(如果有)产生的邮件统计数据的文件允许用户连接到邮件处理程序验证地址和调试的命令邮件通知精灵程序 sendmail程序使用的错误消息记录器 CDE sendmail程序基于窗口的界面 CDE 电子邮件传递消息的打印过滤程序邮件服务由这些程序的组合提供,图 1-6所示的简化图显示了它们的交互作用。用户使用 /bin/mailx这样的程序或mailtool发送邮件。由产生邮件并将其传送到 sendmail精灵程序的程序调度消息。 sendmail精灵程序解读消息中的地址(分成可以识别的段 )。该程序使用配置文件 /etc/mailsendmail.cf中的信息决定网络命

下载第1章 了解邮件服务11

名文法、别名、前传信息和网络拓扑。使用这些信息, sendmail决定发送到接收者必须使用的路由。

用户发送消息

 

汇集消息

 

路由消息

 

发送消息

 

用户接收消息

 

图1-6   邮件程序如果交互作用

sendmail精灵程序传送该消息到合适的系统。本地系统的 /bin/mail程序发送邮件到消息接收者/var/mail/username目录中的信箱。通知用户邮件到达,用户可以使用 /bin/mail、/bin/mailx、mailtool、dtmail 或类似的程序获取邮件。 1. sendmail程序 SunOS 5.x系统软件使用 sendmail程序作为邮件路由程序。 sendmail程序负责接收和发送电子邮件消息。它是在邮件阅读程序 ( 如mail、mailx、mailtool、dtmail)和邮件传输程序 (如 uucp)之间的接口。sendmail程序执行以下功能: ■ 控制用户发送的邮件消息。 ■ 了解接收者地址。 ■ 选择合适的发送程序。 ■ 以发送代理知道的格式重写地址。 ■ 按要求重新格式化邮件头。 ■ 传递经过变换的消息到发送代理发送。图1-7显示sendmail如何使用别名。邮件阅读程序如 /usr/bin/mailx有自己的别名。在消息到达sendmail之前别名已经展开。作为系统管理员必须选择更新别名和前传邮件消息的策略。可以设置一个别名信箱作为用户发送邮件前传请求的地方并更改为默认的邮件别名。如果系统使用 NIS或NIS+,则可以管理消息前传而无需强制用户自己进行管理。用户通常会犯的错误是在主机 A的主目录中放置一个.forward文件将邮件前传到 user@host-b。当邮件到达主机 B之后, sendmail在NIS或NIS+

12 第一部分 邮 件 服 务

别名表中查找用户将其发送回 user@host-a,从而导致循环和更多无用的邮件。

 

 

别名

邮件工具

解析给本地

下载其他邮件传输程序邮件处理程序

 

 

 

 

 

 

 

 

 

 

本地发送机制

图1-7   sendmail如何使用别名

2. sendmail配置文件 (sendmail.cf) 配置文件控制sendmail执行其功能的方式。配置文件决定发送代理、地址重写规则和邮件头格式的选择。 sendmail程序使用 /etc/mail/sendmail.cf文件中的信息执行其功能。每个系统的 /etc/mail目录中有其默认的 sendmail.cf文件。不需要编辑或更改邮件服务器或者邮件客户的默认配置文件。只有邮件主机、中继主机或网关才需要自定义的配置文件。关于这几类系统的详细描述请参阅“邮件服务术语”或本书最后的术语表。 SunOS 5.x系统软件提供两个默认的配置文件,也在 /etc/mail目录中: ■ 在指定为邮件主机、中继主机或网关的系统中名为 main.cf的配置文件。 ■ 名为subsidiary.cf的配置文件 (默认的 sendmail.cf文件的复制 )。在某个系统中使用哪个配置文件依赖于该系统在邮件服务中所负责的工作。

下载第1章 了解邮件服务13

■ 对于邮件客户或邮件服务器,不需要对默认的配置文件作任何设置或编辑。 ■ 要设置一个邮件主机、中继主机或网关,则复制 main.cf并将其重命名为 sendmail.cf(在 /etc/mail目录)。然后编辑 sendmail.cf文件设置邮件配置所需参数:转发处理程序和中继主机。关于编辑 sendmail.cf文件的详细信息,请参阅第 4章。下述列表描述了可能需要更改的一些配置参数 (依赖于系统的需求 ): ■ 时间值 ? 指定sendmail多长时间处理一次队列。通常该间隔时间为 15分钟到1小时。 ? 指定读取超时。 ? 指定邮件在返回发送者之前在队列中的最长时间。 ■ 发送模式指定邮件发送的速度。 ■ 装载限制可以防止在装载期间浪费时间,因为它不发送大邮件、到多个接收者的邮件或者到已经关闭很长时间的站点。 ■ 日志记录级别指定记录何种类型的问题。 ■ 文件模式。 ? sendmail的setuid。 ? 临时文件模式。 ? /etc/mail/aliases权限。关于sendmail.cf文件的设置,请参阅第 3章。关于这些参数的详细描述,请参阅第 4章。 3. sendmail配置表 sendmail程序通过查找 sendmailvars配置表,可以定义宏和类以响应 sendmail.cf文件的命令。sendmail.cf文件可以包含以下两个命令: ■ 以关键字母 L开头的行为宏定义,给指定的变量分配从配置表中获取的值。 ■ 以关键字母G开头的行为类定义,给指定的变量分配从配置表中获取的值。 L命令文法如下:

例如,在 Lm maildomain中,搜索关键字 maildomain用于在配置表中查找分配给变量 m的值。大多数单字符变量通常是大写,但是内部变量 (如表示邮件域名的 m)是小写。注意 小写变量保留给sendmail使用,对于sendmail程序可能有特定的含义。 G命令设置一个类,允许多个项目。文法如下:

例如,在Gvuucp-list中,搜索关键字 uucp-list用于在配置表中查找分配给变量 V的值。在两种情况中搜索关键字的匹配都区分大小写。两条命令在 sendmail文件中都有宏和类定义的副本,而不是使用查找表。 D是L的副本,C是G的副本。如果NIS+用于管理网络,可以保持表 sendmailvars.org_dir的全局版本。除了 NIS+表(或作为可选项 ),该表还可以存储在 /etc/mail/sendmailvars文件中。 sendmail搜索这些资源的顺序由 /etc/nsswitch.conf文件的 sendmailvars项目控制。默认的搜索顺序为:文件、 nis+,这表明 sendmail 在搜索NIS+表之前先在本地表查找信息。在/etc/mail/sendmailvars文件中的项目格式如下:

14 第一部分 邮 件 服 务

搜索关键字之后为 Tab键或一些空格,值与值之间为单个空格。

下载 NIS+sendmailvars表有两栏:关键字栏和值栏。值一栏可能包含一个到多个值,彼此以空格隔开,如表1-8所示。

表1-8   NIS+sendmailvars表关键字栏和值栏举例关 键 字 栏 maildomain uucp-list 值 栏 Eng.Sun.COM castle oak cinderella

值栏中的名字是 uucp可以访问的系统。在 NIS+ 表中可以定义大多数非默认的邮件变量。但是在特定的情况下,如系统有本地的 uucp连接或在两个互连网之间有网关,则可以覆盖系统中一个变量的全局设置,即在系统本地的 /etc/mail/sendmailvars文件中包含该变量。 4. .forward文件用户在主目录中可以创建 .forward文件, sendmail用于临时重定向邮件或发送邮件自定义程序集,无需系统管理员频繁更改别名。当解决邮件问题时,特别是邮件没有发送到正确的地址时,记住检测用户主目录的 .forward文件。

1.3   邮件服务综述

以下各小节描述邮件服务的目录结构和文件,并解释 sendmail 程序和邮件地址定位如何工作。

1.3.1   邮件服务剖析

邮件服务文件在三个目录中: /bin、/etc/mail和/usr/lib。用户的信箱在/var/mail目录。表1-9显示邮件服务使用的 /bin目录的内容。

表1-9   邮件使用的/bin目录的内容名 称 mail 类 型文件

用户代理描 述 mailcompat mailq mailstats

mailx newaliases 文件链接文件

文件链接以SunOS 4.x信箱格式存储邮件的过滤程序链接到/usr/lib/sendmail 用于存储由/etc/mail/sendmail.st文件(如果有)产生的邮件统计数据的文件用户代理链接到/usr/lib/sendmail,用于重新构件邮件别名文件的数据库

表1-10显示/etc/mail目录内容。

表1-10   /etc/mail目录内容名 称 mail.rc aliases aliases.dir aliases.pag mailx.rc main.cf 类 型文件文件文件文件文件文件描 述 mailtool用户代理默认设置邮件前传信息邮件前传信息的二进制形式(运行newaliases创建) 邮件前传信息的二进制形式 (运行newaliases创建) mailx用户代理的默认设置主系统的样本配置文件

下载第1章 了解邮件服务15

(续) 名 称 sendmail.cf 类 型文件

邮件路由的配置文件描 述 sendmail.hf sendmail.pid sendmail.st

sendmailvars sendmailvars.org_dir subsidiary.cf① 文件文件文件

文件表文件 SMTP HELP 命令使用的帮助文件包含/usr/lib/sendmail -b -q1h命令的文件 sendmail统计数据文件(如果有该文件,则 sendmail记录通过每个邮件处理程序的流量 ) 存储从sendmail.cf文件查找宏和类定义的表 sendmailvars表的NIS+版本 subsidiary系统的样本配置文件 ① 本版进行了修正。注意subsidiary.cf文件以前称为 sendmail.subsidiary.cf。表1-11显示的是 /usr/lib目录内容。

表1-11   /usr/lib目录内容名 称 newaliases① sendmail 类 型文件文件描 述创建aliases文件二进制形式的命令路由程序,也称为邮件传输代理 ① 以前newaliases命令在/etc/mail目录。发送邮件的缓冲目录在 /var/mail 目录中,如表 1-12所示。没有发送的邮件存储在 /var/ spool/mqueue目录。

表1-12   /var/mail目录内容名 称 mailbox1 mailbox2 mailbox3

1.3.2   邮件服务如何工作类 型文件文件文件描 述发送邮件的信箱发送邮件的信箱发送邮件的信箱

图1-8显示sendmail如何与其他程序在邮件系统中交互作用。用户和称为用户代理的邮件

邮件处理程序

 

 

 

 

 

 

 

图1-8   邮件服务如何工作

16 第一部分 邮 件 服 务

下载

产生和邮件发送程序交互作用。当邮件提交以后,用户代理调用 sendmail,它将该消息发送到正确的邮件处理程序。

1.3.3   sendmail如何工作

sendmail程序接收如 mailx、mailtool或dtmail这些程序来的消息,当目的邮件处理程序需要时编辑消息头,并调用合适的邮件处理程序进行发送或网络传输排队。注意 sendmail程序从不编辑或更改消息体。它解译电子邮件地址时所作的所有修改只在消息头中进行。 1. 参数处理和地址解析当sendmail处理消息时,它获取接收者名称 (从命令行或 SMTP协议 )并产生两个文件。一个是信包,包含接收者列表和发送信息。另一个文件包含消息头和消息体。 sendmail程序展开别名,包括邮件列表,并验证尽可能多的远程接收者。 sendmail检测文法和验证本地接收者。主机名的详细检测推迟到发送时进行。当本地接收者验证完成以后,前传消息给他们。接收者列表解析以后, sendmail将每个名字添加到信包和消息头。当名字为别名或前传名字时,在列表中保持旧名字,设置一个标志位通知在发送阶段忽略该接收者。该列表可以自由复制,防止“别名循环”以及复制消息发送到同一个接收者 (当接收者在两个不同的别名组中时)。注意 当多个别名列表包含同一用户(使用不同的文法)的电子邮件地址时,用户可能接收同一邮件消息的多个复制。sendmail程序不可能总是能够匹配电子邮件地址的彼此复制。 2. 消息调度 sendmail程序接下来调度消息。消息开始处有消息头。消息的头和体之间必须用空行隔开。在消息体中的唯一格式要求是文本行长度不超过 1024个字节。 sendmail程序在内存中存储消息头,在临时文件中存储消息体。为了简化接口,即使没有有效的名字 (在这种情况下该消息带错误退回 ),也进行消息调度。注意 直到现在,sendmail程序不能将二进制数据作为消息的一部分传送。随着多媒体 mailtool的出现,用户现在可以传送二进制数据。但是必须由用户代理编码。 sendmail 并不对二进制数据作任何自动编码。关于如何对电子邮件消息进行编码和解码的信息,请参阅“Mail Tool”的文档或dtmail。 3. 消息发送对于接收者列表中的每个唯一的邮件处理程序和主机,sendmail调用合适的邮件处理程序。邮件处理程序每次都希望发送邮件给一个主机上的所有用户,但是,邮件处理程序每次只接受一个接收者才能正确处理。 sendmail程序发送消息给邮件处理程序,使用与提交消息到 sendmail同样的接口 (使用约定的UNIX参数向量和返回状态、基于 UNIX管道对通讯和基于 TCP连接进行SMTP通讯 )。该消息的每个复制在开始处有一个自定义的头。邮件处理程序捕获并检测状态码,并在适当的时候给出适当的错误消息。退出码必须和系统标准一致。如果使用了非标准的退出码,则使用 “Services unavailable”消息。

下载

4. 重传排队第1章 了解邮件服务17 当邮件处理程序返回一个状态,显示可能稍后处理邮件 (例如下一个主机停机或电话忙于进行uucp时),则sendmail将该邮件存储在队列中,以后再重试。 5. 退回发送者如果在处理过程中产生错误, sendmail将邮件消息返回给发送者重传。邮件可能送回,或者写入发送者主目录的 dead.letter文件。

1.3.4   邮件寻址如何工作

假定使用的是 sendmail.cf 文件中使用的默认规则集,下例显示一个邮件可能采取的路由。该路由由电子邮件的地址指定方式决定。 ■ 在一个域中的邮件,地址只有用户的登录名时,它查找邮件主机 (或Aliases数据库 )的 aliases文件,并被发送到从数据库中找到的地址。在图 1-9所示的例子中,地址为用户 winsor的邮件到达邮件主机并前传到 castle主机。

 邮件主机

中继主机

 

图1-9   邮件的地址只有用户名时的发送路径

■ 在一个域中的邮件,地址有用户的登录名和主机名时,无需其他处理,直接到达主机系统。在图 1-10所示的例子中,地址为 castle主机上的用户 winsor的邮件直接到达名为 castle的主机。 ■ 在一个域中的邮件,地址有用户的登录名和域名时,它查找邮件主机 (或Aliases数据库)的aliases文件。如果该邮件主机有别名,则重定向该邮件到主机系统。如图 1-11所示的例子中,发送到地址为 winsor@Eng的邮件到达邮件主机然后前传到名为 castle的主机。

 

 

邮件主机中继主机

 

图1-10   邮件的地址有用户名和主机名时的发送路径

18 第一部分 邮 件 服 务

邮件主机

中继主机

下载

 

图1-11   邮件的地址有用户名和域名时的发送路径

■ 地址为用户名和完整域名的邮件到达邮件主机,然后送到中继主机。中继主机发送该消息到主机系统。但是,当邮件来自接收者域时,邮件主机识别域名,不将该消息发送到中继主机。在图 1-12所示的例子中,从工程域以外发送来的地址为 ignatz@Eng. sun.com邮件到达发送者的邮件主机然后到达发送者的中继主机。它前传到接收者的中继主机、接收者的邮件主机,最后到达名为 oak的主机。

邮件主机A

中继主机A

邮件主机A

中继主机A

图1-12   邮件的地址有用户名和完整域名时的发送路径

http://johnoyoung.blog.sohu.com/90691910.html http://blog.sina.com.cn/s/blog_51e1d40e0100aadc.html http://blog.21cn.com/johnoyoung/article/51468 http://hi.baidu.com/johnoyoung/blog/item/76c5be6008c1e0da8cb10d00.html http://johnoyoung.bokee.com/viewdiary.32408821.html http://blog.yesky.com/blog/junhay/archive/2008/06/21/1855338.html

http://tieba.baidu.com/f?kz=416118784