📄 电子邮件概述.htm
字号:
因此如果hostC作HostA和HostB的MX,可配置dns如下:
hostA IN MX 0 hostB
IN MX 10 HostC
hostB IN MX 0 HostB
IN MX 10 HostC
. 广义符MX记录
*.dom.com. IN MX 10 hostA
不建议使用,因为容易引起混乱:
;domain is domain.com
*.domain.com. IN MX 10 hostB
hostA IN MX 10 hostC
hostC IN A 123.45.67.89
在Internet上广义符MX记录基本上没有任何作用.
(5) MX记录之缓存作用
虽然并不要求所有的主机均需要指定MX记录,但最好对每个主机指定一个MX记录。
假设有下面这样一个DNS记录(只有A记录):
HostA IN A 123.45.67.89
当sendmail第一次查找此主机时,它将会查询本地的DNS服务器以得到HostA的所
有记录,由于只有一个A记录,sendmail只得到HostA的主机地址。
但是应该知道的是请求所有的记录会使本地DNS服务器将这些信息cache起来,当
下一次sendmail查询同一主机时,DNS将从其cache中返回一个A记录,这要比重新查找
快并且能够减少Internet上的网络流量。这个cache信息是一个非权威(noauthoritative)
数据,因为它只是一个拷贝,并且不包含任何MX记录。
当sendmail接收到一个没有MX记录的非权威数据时,sendmail会强制进行一次DNS
查找,这次它指定查找MX记录,此时仍然没有MX记录,因此sendmail也得不到相应的
MX记录。
由于HostA没有MX记录,每当向此主机发送信件时都需要进行一次DNS查找,如果
HostA是一个邮件任务非常繁忙的邮件主机,由于没有DNS数据中的MX记录,在Internet
上会导致很多sendmail因为请求这种无意义的MX查询而浪费很多带宽。
因此强烈建议对于Internet上的每个邮件主机(最好所有主机)至少有一个MX记录,
这时你可以将MX记录指向主机本身,如:
HostA IN A 123.45.67.89
IN MX 0 HostA
上面的配置不会影响HostA的邮件接收,但可以减少DNS的查询数量。
(6)含糊的MX记录(RFC974)
对于如下DNS配置:
foo IN MX 10 HostA
IN MX 20 HostB
IN MX 30 HostC
如果主机B向foo发信时,将会丢弃DNS记录中所有权值等于或大于自身权值的MX记录,
也就是说信件将发信较HostB的权值小的主机, 这样可以防止HostB错误的将信件发送
给自己。
可以配置HostB将foo作为本地主机的一个别名,但这种配置会导致HostB对foo将不
作任何MX记录的查找,因为它认为到foo的邮件是本地邮件。
问题是如果HostB的配置认为foo为非本地邮件时,如果存在如下DNS配置:
;<- no HostA
IN MX 20 HostB ;<- Mail from HostB to foo
IN MX 30 HostC
按照RFC974的解释,这时将会出现问题,因为没有MX记录,sendmail对此可以使用
选项TryNullMXList(w)进行控制(具体说明略).
4. 邮件头地址(Head Address)和信封(envelope)地址
二者的区分相当重要,因为Mail Router对其处理不同,这与邮局对普通信件的处
理很相似,邮局只关心信封上的地址,而不管信封内复印件中的标头地址。
在这一点上SMTP Client与邮局工作极为相似。示例如下:
To: betty@gznet.edu.cn, webmaster@sun.com
发信时只复制一个地址到信封,而不是二者均复制;否则会造成重复发送
(gznet.edu.cn会发送一份到sun.com).
解决方法:
在邮件信封中只列出一个主机的接收者地址,如同邮局寄信一样,一封信可以寄
给一个办公室的两个人,但接收者收到的邮件头中会列出所有收信人的地址,但MTA
不对其作任何处理。
此外邮件别名的使用也是影响对两个地址分别处理的一个原因,假如aliasuser含有
4个用户: user1, user2,user3,user4, 向aliasuser发信时sendmail会将此别名进行展
开,并建立一个包含所有接收者的信封。根据这些名字是否还是别名或者是否有可能在
其他主机上,原始信息可能展开为4个不同的信封并发往4个不同的主机,而每个信封只
含有接收者名字,但原始信息将没有任何变化,含有aliasuser(当然,为了能够正确回
信,邮件地址改为aliasuser@your.dost.domain)。
下面的一个示例将以另一种方式显示信封地址可能与信件头地址不同,sendmail
允许你在命令行上指定接收者地址,假设有如下信息内容:
$cat letter
To: null recipient <>
Subject: Head and Envelope address
Testing
通过如下命令发送此邮件(请使用自己的真实login).
$sendmail hbwork < letter
这时虽然在邮件头中没有收信人地址,但你同样可以收到信件,因为在信封上含有
你的地址,除非你使用了-t标志,sendmail将用你在命令行上指定的地址构造信封。
信封地址与邮件头地址不一定要完全一样。
四. sendmail所完成的工作
为了更好地理解如何设置sendmail, 需要搞清楚sendmail所完成的各种任务,以
及sendmail是如何与其他MUA一起协调工作的.(MUA,MTA,Mail Router, Delivery Agent,
SMTP Client, SMTP Server). sendmail可以作为一个Mail Router, SMTP Client以及
SMPT Server, 但并不完成最后的邮件发送.
1. sendmail作为邮件路由(Mail Router)
首先, sendmail是一个Mail Router, 完成邮件收集,检查收信人地址,并确定发送的
最佳方式. sendmail是通过如下方式完成这一工作的:
sendmail自身可以得到一些它所需要的信息,比如当前时间以及它所运行的主机名,
但大多数信息则需要由管理员提供;这些信息主要是通过其配置文件sendmail.cf文件
提供. sendmail.cf文件的使用使得对sendmail的配置极为灵活,同时也具有了相当强
大的功能,但sendmail.cf文件对于大多数用户而言相当难懂, 格式及其复杂.此文件
描述了如何对各种邮件进行处理, 从sendmail v8开始,其源代码发行中包含了一些
低层的模块化配置文件,用户可以通过这些模块化的配置文件较为方便的定制自己的
sendmail.cf.
大多数情况下可以利用sendmail所提供的模块化配置很容易地建立自己的配置
文件; 同时sendmail.cf也提供了很多示例文件,在进行sendmail配置时完全可以在
这些示例文件的基础上完成.
对于绝大多数管理员而言,从头开始写自己的sendmail.cf文件是几乎不可能实现也
是一件非常可怕的任务,应尽可能避免这种情况.
2. sendmail作为MTA - 客户端(发送者)和服务器(接收者)
邮于sendmail能够处理SMTP(V8同时可以处理ESMTP),因此它可以作为MTA. 由于SMTP
是一个面向连接的协议,因此总是由客户端和服务器组成(与就是一个发送者和一个接收
者). SMTP Client向SMTP Server发送邮件,SMTP Server不断地监听相应主机的SMTP
端口. sendmail可以作为SMTP Client和SMTP Server,当作为MUA运行时, sendmail
成为一个SMPT Client, 可以和SMTP Server(运行的不一定是sendmail)进行SMTP对话.
当系统启动时sendmail以守护进程启动,保持连续运行,监听SMTP端口以接收进行
的邮件,这时sendmail成为SMTP Server.
3.sendmail不是最终的发送代理
sendmail并不完成最终的投递工作, sendmail会很聪明地将这些任务留给其他程序
去完成.作为一个庞大而又复杂的程序,为了完成对所有用户的邮件发送,sendmail通常
需要以root身份运行,在一定程度上这会给系统的安全带来威胁(事实上sendmail过去
一直存在安全方面的问题),如果最后的邮件发送也由sendmail完成的话,将会额外增加
sendmail的复杂性及安全问题.
五. sendmail的其他辅助文件
sendmail依靠多个辅助文件来完成其工作,最重要的是配置文件sendmail.cf和别名
文件aliases; 统计文件sendmail.st可有可无, 当然这取决于你是否需要这些统计资料;
sendmail.hf是SMTP帮助文件,当sendmail作为SMTP Server时需要这个文件(大多数站点
也确实是这样作的).当然此外还有其他一些辅助文件,具体请参考SIOG.下面我们对别名
文件和sendmail.cf文件进行讨论.
1. 别名文件
sendmail在进行邮件发送之前首先检查接收者地址是否为别名,如每个Internet站点
应该有一个邮件管理员postmaster,以方便在邮件故障时与其联系,但实际上大多数站点
上并没有postmaster这个用户帐号,而是将postmaster的信件转给邮件管理员个人,比如
albin与hbwork两个个负责管理Email,则在别名文件中应含有如下一行:
postmaster: albin,hbwork
事实上别名文件可以嵌套,sendmail在进行别名替换时会重复处理直到找到最后的接
收者.
在别名文件中,左边必须是本地上的邮件别名,因此不能使用@主机,只能列出帐号,
右边则可以使用完全的邮件地址.
此外邮件别名文件中可以包含另外一个文件,如:
alises::include:/etc/mail/filealiases
文件/etc/mail/filealiases中每行为一个邮件地址. 通常文件用于保存经常变化
的邮件列表用户,可者是其他管理所管理的帐号.
其他两种邮件别名记录:
使用管道将邮件转到其他程序处理:
list-request:|/usr/local/bin/auto_reply
转到其他文件:
nobody: /dev/null
相关命令:
更改别名文件后使用newaliases或sendmail -bi建立邮件别名文件的二进制数
据文件.
2. 本地主机名文件
定义类$w,即本主机所要接收邮件的主机名列表,如希望邮件服务器接收如下形式的
邮件:user@hosta.dlut.edu.cn, user@dlut.edu.cn, user@dlrin.edu.cn, 则类$w应该
包包含hosta.dlut.edu.cn, dlut.edu.cn, dlrin.edu.cn, 通常此文件名为
sendmail.cw,可通过如下查找:
$egrep "^Fw" sendmail.cf
Fw/etc/mail/sendmail.cw
如上所述情况的sendmail.cw文件内容如下(每行一个记录):
hosta.dlut.edu.cn
dlut.edu.cn
dlrin.edu.cn
3. 邮件服务器允许中断的域或主机(hosts that will permit relaying).
从sendmail 8.9开始加强了对出件中继的控制,默认情况下不对第三方进行邮件转发,
需要指定服务器所接受的客户端(PC?)域名或ip地址,以允许本网内的其他用户通过此
邮件服务器向外发信.
$egrep "^FR" /etc/mail/sendmail.cf
FR-o /etc/mail/relay-domains
此文件内容为邮件服务器同意对其进行邮件转发的主机地址或域名,如同一局域网内
的用户或同网域内的用户通过此邮件服务器向外发信(Netscape Mail/Microsoft Outlook
Express 配置中的SMTP Server), 则在此文件中应该加入本网络用户的域名或IP地址,
如:
dlut.edu.cn
202.118.66
具体说明请参考sendmail SIOG.
4.常用文件及目录属性
从sendmail 8.9以后对目录的权限检查更为严格,下面是常见目录的属性:
路径 类型 Owner Group Mode
/ 目录 root root 0755
/etc 目录 root root 0755
/etc/mail 目录 root root 0755
/etc/mail/sendmail.cf 文件 root root 0644 or 0640
OS/etc/mail/sendmail.st 文件 root root 0644
OH/etc/sendmail.hf 文件 root root 0444
OA/etc/mail/aliases 文件 root root 0644
/etc/mail/aliases.* 文件 root root 0644
F/path 目录 root root 0755
F/path/file 文件 n/a n/a 0444 or 0644
/var 目录 root root 0755
/var/spool 目录 root root 0755
OQ/var/spool/mqueue 目录 root root 0700
:include:/path 目录 root root 0755
:include:/path/list 文件 n/a n/a 0644
--
[m[1;34m※ 来源:.碧海青天 bbs.dlut.edu.cn.[FROM: helius.dlut.edu.][m
</PRE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -