📄 00000012.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: ruster (尘埃*星辰*领悟), 信区: Linux <BR>标 题: 第七章 电子邮件(上) <BR>发信站: BBS 水木清华站 (Thu Dec 21 13:44:24 2000) <BR> <BR> <BR>第7章 电子邮件 <BR> <BR> 本章要点: <BR> <BR> 本章讨论电子邮件服务的基本概念及其配置、管理。 <BR> <BR> 本章具体包括以下内容。 <BR> <BR> 邮件传送的基本过程 <BR> <BR> sendmail的配置 <BR> <BR> 邮件服务的一些特殊功能 <BR> <BR> qmail的简单介绍 <BR> <BR> 7.1 sendmail 和SMTP <BR> <BR> 7.1.1 smtp和邮件传输代理 <BR> <BR> sendmail是最重要的邮件传输代理程序。理解电子邮件的工作模式是非常重要的。一 <BR>般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 <BR> <BR> 用户代理用来接受用户输入的指令,将用户给出的信件报文传送至信件传输代理。而 <BR>投递代理则从信件传输代理取得信件传送至最终用户的邮箱。显然,最终用户只能看到 <BR>用户投递代理。 <BR> <BR> 当用户试图发送一封电子邮件的时候,他并不能直接将信件发送到对方的机器上,用 <BR>户代理必须试图去寻找一个信件传输代理,把邮件提交给它。 <BR> <BR> 信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的 <BR>目标地址,信件传输代理程序将找到应该对这个目标地址负责的邮件传输代理服务器, <BR>并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地, <BR>直到电子邮件的接收者察看自己的电子信箱。 <BR> <BR> 显然,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的 <BR>空间(称为信箱)才能接受邮件。(发送邮件不受这个限制) <BR> <BR> 可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目 <BR>标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者 <BR>提交给最终投递程序。 <BR> <BR> 有许多的程序可以作为信件传输代理,但是sendmail是其中最重要的一个,事实证明 <BR>它可以支持数千甚至更多的用户,而且占用的系统资源相当少。不过,sendmail的配置 <BR>十分复杂,因此,也有人使用另外的一些工具,如qmail。当然,基 <BR>于Windows NT的Exchange Server和NetScape Message Server也是这种产品的例子。 <BR> <BR> 无论什么产品,它们必须支持同样的规范,如信件传输的报文格式,监听的端口等等 <BR>。一般来说,系统管理员并不需要了解信件传输的命令标准,用户代理会生成正确的命 <BR>令。但是,了解其他一些信息是重要的。 <BR> <BR> 信件传输代理运行在25端口接受请求,当接受用户的请求时,它不需要了解用户的真 <BR>实身份,或者说不需要身份验证。因此用户不需要提交用户口令就可以发出电子邮件, <BR>这意味着任何用户都可以冒充成另外一个用户发出假的电子邮件,这是电子邮件设计的 <BR>一个基础,无法消除。(关于这一点目前有一点说明。许多基于UNIX的系统运行indent <BR>d,可以记录客户机器上的用户的登录名字。不过,这个功能实际上用处不大,毕竟大部 <BR>分人不会用UNIX/Linux作为他的个人机器)。 <BR> <BR> 当sendmail程序得到一封待发送的邮件的时候,它需要根据目标地址确定将信件投递 <BR>给那一个服务器,这是通过DNS服务实现的。例如,有一封邮件的目标地址是someone@y <BR>ahoo.com,那么,sendmail首先确定这个地址是用户名(someone)+机器名(yahoo.co <BR>m)的格式,然后,通过查询DNS来确定需要把信件投递给某个服务器。 <BR> <BR> DNS数据中,与电子邮件相关的是MX记录,这可以在查询DNS时设置查询类型为mx来得 <BR>到: <BR> <BR> [wanghy@mail ~]$ nslookup <BR> <BR> Default Server: www.asnc.edu.cn <BR> <BR> Address: 202.199.248.2 <BR> <BR> <BR> > set q=mx <BR> <BR> > yahoo.com <BR> <BR> Server: www.asnc.edu.cn <BR> <BR> Address: 202.199.248.2 <BR> <BR> <BR> Non-authoritative answer: <BR> <BR> yahoo.com preference = 0, mail exchanger = mx1.mail.yahoo.com <BR> <BR> yahoo.com preference = 1, mail exchanger = mx2.mail.yahoo.com <BR> <BR> mx1.mail.yahoo.com internet address = 128.11.68.225 <BR> <BR> mx2.mail.yahoo.com internet address = 128.11.68.217 <BR> <BR> 显然,在DNS中说明yahoo.com有两个信件交换(MX)服务器,于是,sendmail试图将 <BR>邮件发送给两者之一。一般来说,排在前面的的MX服务器的优先级别比较高,因此服务 <BR>器将试图连接mx1.mail.yahoo.com的25端口,试图将信件报文转发给它。如果成功,你 <BR>的smtp服务器的任务就完成了,在这以后的任务,将由mx1.mail.yahoo.com来完成。在 <BR>一般的情况下,mx交换器会自动把信件内容转交给目标主机,不过,也存在这样的情况 <BR>,目标主机(比如yahoo.com)可能并不存在,或者不执行smtp服务,而是由其mx交换器 <BR>来执行信件的管理,这时候,最终的信件将保存在mx机器上,直到用户来察看它。 <BR> <BR> 可以简单地在DNS记录中用MX关键字设置信件交换,例如,在我们的设置中: <BR> <BR> @ IN SOA openlab.asnc.edu.cn. wanghy.openlab.asnc.edu.cn. <BR>( <BR> <BR> 1997022700 ; Serial <BR> <BR> 28800 ; Refresh <BR> <BR> 14400 ; Retry <BR> <BR> 3600000 ; Expire <BR> <BR> 86400 ) ; Minimum <BR> <BR> IN NS openlab.asnc.edu.cn. <BR> <BR> IN MX 10 mail.asnc.edu.cn. <BR> <BR> IN MX 20 mail2.asnc.edu.cn. <BR> <BR> openlab IN A 202.199.248.6 <BR> <BR> openlab IN MX 10 mail2.asnc.edu.cn. <BR> <BR> mail IN A 202.199.248.11 <BR> <BR> www IN A 202.199.248.2 <BR> <BR> mail2 IN A 202.199.248.177 <BR> <BR> 这里面定义了三个MX记录,MX记录的规则是[机器名/域名] IN MX [优先级] [服务 <BR>器]。优先级是一个整数,数值越小优先级越高。第一个IN MX 10 mail.asnc.edu.cn.因 <BR>为没有机器名,使用来自named.conf的缺省后缀,就是asnc.edu.cn,这个定义也就是让 <BR>所有<A HREF="mailto:some@asnc.edu.cn的信件传送到mail.asnc.edu.cn。IN">some@asnc.edu.cn的信件传送到mail.asnc.edu.cn。IN</A> MX 20 mail2.asnc.edu.cn <BR>.的概念差不多,只是其优先数为20,也就是说只有当mail.asnc.edu.cn拒绝接受(比如 <BR>,服务器忙或者当机)的时候,信件才会投递到mail2.asnc.edu.cn。openlab IN MX 1 <BR>0 mail2.asnc.edu.cn.定义凡是<A HREF="mailto:someone@openlab.asnc.edu.cn的信件要发送到mail2.a">someone@openlab.asnc.edu.cn的信件要发送到mail2.a</A> <BR>snc.edu.cn,以此类推。 <BR> <BR> MX记录可以使得整个子域内的用户使用同样的邮件主机和传输代理,另外,如果你的 <BR>主机不幸瘫痪了,那么信件可以暂时存储在你的信件交换主机上,直到你自己的机器恢 <BR>复为止。比如说,mail.yourdomain.com是一台smtp主机,而mx2.yourdomain.com是另外 <BR>一个smtp主机,你希望在mail.yourdomain.com正常的时候直接由其自身收发邮件,而万 <BR>一mail崩溃,mx2为它暂时存储一段时间的邮件直到mail恢复正常工作-这是常见的设置 <BR>,那么,你需要把mail以比较高的优先数设置成自己的信件交换主机,而mx2作为一个优 <BR>先数较低的信件交换主机,也就是,在你的DNS配置文件中,应该这样配置: <BR> <BR> mail IN MX 0 mail <BR> <BR> IN MX 10 mx2 <BR> <BR> 如果DNS查询无法找出对某个地址的MX记录(通常因为对方没有信件交换主机),那么 <BR>sendmail将是试图直接与对方的主机(来自邮件地址)对话并且发送邮件。例如,test@ <BR>openlab.asnc.edu.cn在DNS中没有对应的MX记录,因此sendmail在确定MX交换器失败后 <BR>,将从DNS取得对方的IP地址并直接和对方对话试图发送邮件。 <BR> <BR> sendmail发送邮件时,如果经过设定的时间后仍然未能将信件投递到目的主机,它将 <BR>返回一个错误信息并且休息一段时间,然后重新试图投递,如果连续多次失败,sendma <BR>il最终将放弃投递并将错误信息投递给postmaster用户。在许多机器上,postmaster用 <BR>户是root用户的一个别名(参考下面关于别名的内容),你应该将它设置为邮件的实际 <BR>管理员的用户名。 <BR> <BR> 上面说的基本就是sendmail的工作方式,然而仍然有一个很让人迷惑的东西,就是所 <BR>谓“信封地址”。简单地说,当sendmail向目标地址发信的时候,它并不是直接用你的 <BR>信件内容发送,相反,它依赖于你给它的命令。例如,你可能会用mail程序向某个地址 <BR>这样发信: <BR> <BR> $mail <A HREF="mailto:someone@somedomain.com">someone@somedomain.com</A> <BR> <BR> To:<A HREF="mailto:other@otherdomain.com">other@otherdomain.com</A> <BR> <BR> Subject:test mail <BR> <BR> test <BR> <BR>. <BR> <BR> 那么,当sendmail发信的时候,它是向<A HREF="mailto:someone@somedomain.com发信而不是other@ot">someone@somedomain.com发信而不是other@ot</A> <BR>herdomain.com。相应地,如果你想向两个人发信,例如你在outlook里面写上:“投递 <BR>给<A HREF="mailto:user1@a.com,抄送user2@b.com”,那么sendmail应该怎么做?直接同时向两个地址">user1@a.com,抄送user2@b.com”,那么sendmail应该怎么做?直接同时向两个地址</A> <BR>发信吗?否,它试图构造两个包装(称为信封),每个包装上只列出一个投递地址,各 <BR>投递一次。虽然邮件正文的头部仍然包含两个地址,但是sendmail不会看它。 <BR> <BR> 7.1.2 sendmail的配置 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -