Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

sendmail大全

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

第7章 电子邮件

7.1 sendmail 和SMTP

7.1.1 smtp和邮件传输代理

  sendmail是最重要的邮件传输代理程序。理解电子邮件的工作模式是非常重要的。一 
般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。

  用户代理用来接受用户输入的指令,将用户给出的信件报文传送至信件传输代理。而 
投递代理则从信件传输代理取得信件传送至最终用户的邮箱。显然,最终用户只能看到 
用户投递代理。

  当用户试图发送一封电子邮件的时候,他并不能直接将信件发送到对方的机器上,用 
户代理必须试图去寻找一个信件传输代理,把邮件提交给它。

  信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的 
目标地址,信件传输代理程序将找到应该对这个目标地址负责的邮件传输代理服务器, 
并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地, 
直到电子邮件的接收者察看自己的电子信箱。

  显然,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的 
空间(称为信箱)才能接受邮件。(发送邮件不受这个限制)

  可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目 
标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者 
提交给最终投递程序。

  有许多的程序可以作为信件传输代理,但是sendmail是其中最重要的一个,事实证明 
它可以支持数千甚至更多的用户,而且占用的系统资源相当少。不过,sendmail的配置 
十分复杂,因此,也有人使用另外的一些工具,如qmail。当然,基 
于Windows NT的Exchange Server和NetScape Message Server也是这种产品的例子。

  无论什么产品,它们必须支持同样的规范,如信件传输的报文格式,监听的端口等等 
。一般来说,系统管理员并不需要了解信件传输的命令标准,用户代理会生成正确的命 
令。但是,了解其他一些信息是重要的。

  信件传输代理运行在25端口接受请求,当接受用户的请求时,它不需要了解用户的真 
实身份,或者说不需要身份验证。因此用户不需要提交用户口令就可以发出电子邮件, 
这意味着任何用户都可以冒充成另外一个用户发出假的电子邮件,这是电子邮件设计的 
一个基础,无法消除。(关于这一点目前有一点说明。许多基于UNIX的系统运行indent 
d,可以记录客户机器上的用户的登录名字。不过,这个功能实际上用处不大,毕竟大部 
分人不会用UNIX/Linux作为他的个人机器)。

  当sendmail程序得到一封待发送的邮件的时候,它需要根据目标地址确定将信件投递 
给那一个服务器,这是通过DNS服务实现的。例如,有一封邮件的目标地址是someone@y 
ahoo.com,那么,sendmail首先确定这个地址是用户名(someone)+机器名(yahoo.co 
m)的格式,然后,通过查询DNS来确定需要把信件投递给某个服务器。

  DNS数据中,与电子邮件相关的是MX记录,这可以在查询DNS时设置查询类型为mx来得 

[wanghy@mail ~]$ nslookup

Default Server: www.asnc.edu.cn

Address: 202.199.248.2

> set q=mx

> yahoo.com

Server: www.asnc.edu.cn

Address: 202.199.248.2

Non-authoritative answer:

yahoo.com preference = 0, mail exchanger = mx1.mail.yahoo.com

yahoo.com preference = 1, mail exchanger = mx2.mail.yahoo.com

mx1.mail.yahoo.com internet address = 128.11.68.225

mx2.mail.yahoo.com internet address = 128.11.68.217 

  显然,在DNS中说明yahoo.com有两个信件交换(MX)服务器,于是,sendmail试图将 
邮件发送给两者之一。一般来说,排在前面的的MX服务器的优先级别比较高,因此服务 
器将试图连接mx1.mail.yahoo.com的25端口,试图将信件报文转发给它。如果成功,你 
的smtp服务器的任务就完成了,在这以后的任务,将由mx1.mail.yahoo.com来完成。在 
一般的情况下,mx交换器会自动把信件内容转交给目标主机,不过,也存在这样的情况 
,目标主机(比如yahoo.com)可能并不存在,或者不执行smtp服务,而是由其mx交换器 
来执行信件的管理,这时候,最终的信件将保存在mx机器上,直到用户来察看它。

  可以简单地在DNS记录中用MX关键字设置信件交换,例如,在我们的设置中:

@ IN SOA openlab.asnc.edu.cn. wanghy.openlab.asnc.edu.cn.

(

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS openlab.asnc.edu.cn.

IN MX 10 mail.asnc.edu.cn.

IN MX 20 mail2.asnc.edu.cn.

openlab IN A 202.199.248.6

openlab IN MX 10 mail2.asnc.edu.cn.

mail IN A 202.199.248.11

www IN A 202.199.248.2

mail2 IN A 202.199.248.177

  这里面定义了三个MX记录,MX记录的规则是[机器名/域名] IN MX [优先级] [服务 

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:SSH使用指南   下一篇:SSL中间人攻击

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号