如果想对这一对话有更深刻的了解,可以阅读参考文献RFC821。以-v选项运行sendmail有助于用户理解SMTP对话的工作方式。
像otherdomain.com这样的名字对于用户理解和记忆是十分方便,而计算机采用的却是像123.45.67.1这样的数字化的IP地址。幸运的是,域名系统(DNS)提供了主机名到IP地址的转化以及其他的重要信息。用户没有必要记忆主机的IP地址。
DNS把对主机进行命名和编号的权限分配给自治管理的域,例如,一个称为otherdomain. com的公司可以维护自己域中主机的所有信息。当主机a.otherdomain.com想发送邮件或远程登录(Telnet)到主机b.otherdomain.com时,它会通过网络向otherdomain.com的域名服务器发送一个请示,域名服务器不妨假设是主机ns.otherdomain.com。域名服务器ns.otherdomain.com将把b.otherdomain.com的IP地址(可能还有其他信息)返回给a.otherdomain.com,这样邮件将被发送,或者Telnet将被连接。由于us.otherdomain.com对otherdomian.com域具有管理权,因此它能够回答对otherdomain.com中的主机的任何查询,不管这些查询发自哪里;另外,它还有对域中的主机进行命名的权力。
现在,如果a.otherdomain.com上的某人想给zhang@ somedomain.gov发送邮件会怎么样呢?虽然us.otherdomain.com没有位于somedomain.gov域中的主机的有关信息,但是它却知道如何找到这一信息。当城名服务器收到它不具有此域信息的某个城中的主机的查询请示时,它便向根域名服务器(root nameserver)询问那个域中(在本例中是somedomain.gov)具有管理权限的域名服务器的名字和IP地址。根域名服务器将把对somedomain.gov具有管理权限的域名服务器的名字和IP地址提供给us.otherdomain.com。us.otherdomain.com域名服务器将询问它们并把回复转发给a.otherdomain.com。
从上可知,DNS是一个包含主机名到IP地址映射的大型分布式数据库。另外,它还包含其他信息。当利用像。sendmail这样的程序投递邮件时,它必须把收件人的主机名转化为一个IP地址。这部分DNS数据被称为A(地址)记录,它是关于主机的最基本的数据。主机数据的另一部分是邮件交换器(MX)记录,像a.otherdomain.com主机的MX记录列出的是能够为它接收邮件的一个或多个主机。
也许读者会问:MX记录的作用是什么?为什么a.otherdomain.com不简单地接收它自己邮件并处理这一过程呢?
MX记录的作用如下:
(1)通过MX,不在Internet上的主机(例如,只利用UUCP的用户)能够指定一个Internet主机来接收它们的邮件,从而使它们看起来就像具有Internet地址一样。例如,假定a.
otherdomain.com只是偶尔通过UUCP连接到ns.otherdomain.com。如果us.otherdomain.com为它发布一个MX记录,其他Internet主机就能够向它发送邮件。当ns.otherdomain.com收到邮件时,它把邮件保存起来,直到a.otherdomain.com同它连接。MX记录能够使非Internet主机也可以接收来自Internet的E-mail。
(2)通过MX,使用仅有发送功能MUA客户程序的用户也能接受电于邮件。假设有一台充当一群PC机的文件服务器的UNIX主机pcserv.otherdomain.com。这些PC机都具有可以发送邮件但不能接收邮件的带有内置SATP客户程序的MUA。如果发往外地的邮件具有类似someone@pcl.otherdomain.com的回复地址,那么接收方如何回复信件呢?通过MX记录,问题便迎刃而解:用pcserv.otherdomain.com做为所有PC机的MX主机,寄向它们的邮件都将正确到达。
(3)通过MX可以把用户的电子邮件存储起来。由于一些难以预料的原因,主机可能会长时间地离开Internet。虽然用户的主机离开了Internet,但发往它的邮件可能在其他主机上排队,当经过一段时间后邮件便返回给寄件人。如果用户的主机具有在中断时间里为它保存邮件的MX主机,那么在用户的主机重新启用后邮件将被投递。这些MX主机可以是站点内的(即在用户的域中),也可以是站点外的,或者两者都有。有条件的情况下,最好选择站点外的MX主机。因为某些事故通常会使用户的整个站点与网络断开,在这种情况下,站点内的MX主机也就毫无用处。
(4)MX记录能够隐藏信息并使用户更灵活地重新配置自己的局域网。
收邮件的主机被命名为wang.otherdomain.com还是liang.otherdomain.com并不重要,用户的通信者不会知道其中的差别。
当某个SMTP客户程序向某个主机投递邮件时,它并不只是把主机名转化为IP地址。客户程序首先查找MX记录。如果MX记录存在,它便按照记录中所提供的优先级对这些记录进行排序。例如,otherdomain.com或许就具有MX记录,这些记录把主机mailerl.otherdomain.com、mailer2.otherdomain.com和mailer3.somedomain.gov列为愿意为它们收邮件的主机。注意,“主机”otherdomain.com除作为一个MX记录外可能并不存在,即它没有一个可用的IP地址。虽然这些主机中的任何一个都将为otherdomain.com接受邮件,但MX的优先级确定了SMTP客户程序应首先尝试投递的主机。在这里,系统管理员实际上已经设置了一个主邮件服务器mailer1.otherdomain.com和一个站点内的备用邮件服务器mailer2.otherdomain.com,并且还与mailer3.somedomain.gov的管理员协商,把它作为站点外的一个备用邮件服务器。管理员通过设置MX的优先级,从而使SMTP客户程序将首先试用主邮件代收器,其次是站点内的备用邮件服务器,最后是站点外的备用邮件服务器。
当收集和排序MX记录之后,SMTP客户程序把这些主机的IP地址聚集起来并按照它们的MX优先级的顺序向它们投递。当邮件传送出现问题时,应该清楚这样一个事实:若一封信被投递的地址是zhang@otherdomain.com,这并不能说明主机。otherdomain.com一定存在;即使这一主机存在,或许它也不是直接接收邮件的主机。
另外,很有必要了解邮件头和信封地址之间的差别,因为邮件路由器处理它们的方式是不同的。下面举例说明两者之间的差别。
假定某个用户有一个便笺想寄给一些同事,他们分别是A公司的li和qiu以及B公司的zhang和wang吧。用户把便笺的一个副本交给了用户所信任的邮件收发员xie,他记录了所有的收件人。xie是个非常精明的人,他想为用户的公司节省邮费,因此把便笺复印了两份,然后把每份放进一个写有各自公司地址的信封里(而不是给每个收件人都发送一个副本)。在发往A公司的信封的封面上,他写有h和qiu的名字;在发往B公司的信封的封面上,写有zhang和wang。当xie在A公司和B公司的的同行收到这两个信封时,他们对便笺进行了复印并把它们分别送给了li、qiu和zhang、wang,而并不查看在便笺里面写的地址。对于A公司和B公司的邮件收发员来说,他们所关心的只是信封地址。