📄 电子邮件概述.htm
字号:
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250 HELP
>>> MAIL From:<hbwork@helius.dlut.edu.cn> SIZE=11795
250 <hbwork@helius.dlut.edu.cn>... Sender ok
>>> RCPT To:<hbwork@dlut.edu.cn>
250 <hbwork@dlut.edu.cn>... Recipient ok
>>> DATA
354 Enter mail, end with "." on a line by itself
>>> .
250 KAA13174 Message accepted for delivery
hbwork@dlut.edu.cn... Sent (KAA13174 Message accepted for delivery)
Closing connection to gingko.dlut.edu.cn.
>>> QUIT
221 gingko.dlut.edu.cn closing connection
了解SMTP协议之实现, 请参考RFC 821.
三. DNS与Email之关系
1. 概述
计算机之间通讯使用IP地址,而用户为了使用方便通常使用主机名,DNS则提供
主机名与IP之间的相互解释及其他重要信息.
DNS: 分布式管理系统,将主机的命名及编号分发给各个自治区,如dlut.edu.cn
域只负责维护自己域内的所有主机的信息,当hosta.dlut.edu.cn要向
hostb.dlut.edu.cn发信或telnet时,只需查询大工的dns服务器,dns服务器会将
hostb.dlut.edu.cn的ip地址返回给主机hosta,并且由于edu.cn已经将dlut.edu.cn
域的管理授权给大工,大工的dns服务器为dlut.edu.cn之授权服务器,因此它可以回答
所有关于dlut.edu.cn域的dns查询,而不管查询请求来自本域还是域外的主机.
当两个域之间的主机发送电子邮件时情况如何呢? 比gingko.dlut.edu.cn上的
一个用户向user@pub.dl.lnpta.net.cn发送邮件,大工的dns服务器对域
dl.lnpta.net.cn没有任何了解,但它知道如何找到答案. 当域名服务器收到对非本域
内主机的请求时,将会向根域名服务器(root domain nameserver)请求对应域的授权
服务器的ip地址,如:
cn:
cn nameserver = NS.UU.NET
cn nameserver = IRAUN1.IRA.UKA.DE
cn nameserver = NS.EU.NET
cn nameserver = NS.SESQUI.NET
cn nameserver = NS.CNC.AC.cn
cn nameserver = DNS.EDU.cn
cn nameserver = NS.CN.NET
Authoritative answers can be found from:
NS.UU.NET internet address = 137.39.1.3
IRAUN1.IRA.UKA.DE internet address = 129.13.10.90
NS.EU.NET internet address = 192.16.202.11
NS.SESQUI.NET internet address = 128.241.0.84
NS.CNC.AC.cn internet address = 159.226.1.1
DNS.EDU.cn internet address = 202.112.0.35
NS.CN.NET internet address = 202.97.16.195
net.cn:
Server: helius.dlut.edu.cn
Address: 202.118.66.81
Non-authoritative answer:
net.cn nameserver = ns.cnc.ac.cn
net.cn nameserver = ns.cn.net
net.cn nameserver = ns.bta.net.cn
Authoritative answers can be found from:
ns.cnc.ac.cn internet address = 159.226.1.1
ns.cn.net internet address = 202.97.16.195
ns.bta.net.cn internet address = 202.96.0.133
lnpta.net.cn:
Non-authoritative answer:
lnpta.net.cn nameserver = ns.dcb.ln.cn
lnpta.net.cn nameserver = ns.lnsyptt.net.cn
Authoritative answers can be found from:
ns.dcb.ln.cn internet address = 202.96.75.68
ns.lnsyptt.net.cn internet address = 202.96.64.68
dl.lnpta.net.cn:
dl.lnpta.net.cn nameserver = ns.lnpta.net.cn
ns.lnpta.net.cn internet address = 202.96.64.68
pub.dl.lnpta.net.cn
Name: pub.dl.lnpta.net.cn
Address: 202.96.69.81
由上可以看出,dns是一个大的,分布式的数据库;此数据库含有主机到ip的映
射关系,此外DNS还含有其他信息,当sendmail发送邮件时,必须将接收者的主机名
翻译为IP地址,这个由DNS中的A记录实现,A记录是关于主机的最基础数据;每二个
主机信息则是MX记录, MX记录指出愿意为相应主机接收邮件的一个或多个邮件主
机列表.
2.邮件交换(MX, Mail Exchange)记录
MX记录的意义及用处是什么?主机处理自己的邮件其不足是什么?没有mx记录
岂不是更简单一些? 事实刚好相反, 虽然邮件管理员的日常工作相当复杂,当MX
记录可提供如下功能, 从而将邮件管理的工作简单化:
. 对于未连接Internet的主机(如UUCP Only Host)可以指明一个Internet主机
为其接收邮件,如同具有一个Internet地址一样. 如主机hosta.dlut.edu.cn
与cerius.dlut.edu.cn具有uucp连接,如果后者被定义为前者的MX, 则其他
Internet主机仍可向hosta.dlut.edu.cn发信,当ceruis.dlut.edu.cn收到对
hosta.dlut.edu.cn的信件时,会保持到与hosta建立连接,然后通过UUCP将信
件转发给hosta.
. 如UNIX主机pcsvr.dlut.edu.cn是一组PC的文件服务器,pc上有集成了SMTP客
户端的MUA, 可以向外发信,但不能收信.如果此时发出的信件中的回信地址是
user@pc1.dlut.edu.cn,接收者如何回信? 这时可以将pcsvr.dlut.edu.cn作为
这些PC的MX.
. 主机因为各种原因而不能正常连接到网络上,比如光缆损坏,当主机与Internet
的连接断开后,网络上其他主机到此主机的邮件将存在邮件队列中,如果指定时
时间内邮件未能发送,则邮件信息将返回给发送者. 此时如果设置一个MX主机
作为中间环节,MX主机将暂时接收对此主机的邮件,并在相应主机恢复正常之后
将重新发送到你的主机, 这些MX主机可以在你的网域内或域外,或二者均有,当
然后者要更好一些,因为当你的主干网(WAN)损坏之后域内的主机均不能正常工作.
. MX记录隐藏了一部分的细节信息,允许以更为灵活的方式重新配置你的本地网.
如所有的人均知道我的邮件地址为hbwork@dlut.edu.cn, 不论那一台机器接收
对域dlut.edu.cn的信件都是一样的,即使更改为主机名也无所谓;发信者感觉
不到有任何区别.
. 邮件发送及MX记录
当一个SMTP Client向主机发送信件时,需要作的工作不仅是将主机名翻译为ip
地址,它首先要查看相目标主机有无MX记录,如果有MX记录的话,将根据记录中所
给出的权值对其进行排序,比如dns记录如下:
dlut.edu.cn. IN MX 0 gingko.dlut.edu.cn.
IN MX 10 hazel.dlut.edu.cn.
IN MX 20 saint.synet.edu.cn.
SMTP Client先试权值较小者,如果失败再试同网域内的备份MX,不行再试域外的
备份MX主机,这种设置能够保证EMAIL正常运转,即使外界连接不正常.
在收集并对MX记录排序之后,SMTP Client将取得MX记录的IP地址,并按其优先级高
低进行邮件发送,这一点必须记住! 因为对于user@domain.com来说,并不意味着有
一台主机domain.com,即使有也不一定是接收邮件的主机.
3. sendmail如何利用DNS
Sendmail如通过以下4个方面使用DNS
. 启动时sendmail要通过dns来得到本地的正式主机名,然后将此值赋值给宏$j(The
canonical hostname),如果dns还返回了其他名字,则这些别名将赋值给类(class)
$=w(sendmail所有版本均支持此类,list of our other names).
. 当另外一台主机连接到本机传输邮件时,本机的sendmail将通过DNS查询对方主机
的正式名称(FQDN).
. 当通过网络发送SMTP邮件时,sendmail通过DNS查询目标主机的主机地址(也可能是
多个地址).
. 当sendmail对每个规则RHS(右边的规则)的$[和$]进行扩展时,需要查询$[和$]之间
的主机名或IP地址.
(1)取得本地主机的正式名称(FQDN)
所有版本的sendmail取得本地主机的正式名称所采用的方法基本相同,首先是调作
gethostname(3)取得本地主机名,其返回值根据在/etc/hosts中的每一项是FQDN
还是短主机名而返回相应值.如果gethostname(3)调作失败, 则本地主机名设置
为localhost; 然后再调用gethostbyname(3)以获得本地主机的正式名称以及别名.
如果机器上没有Bind Library, 或者暂时无法编译或安装新版本的sendmail,可以
修改sendmail.cf文件定义变量$j
Dmyour.domain.com
Dj$w.$m
(2)查询远程主机名
当sendmail开始作为daemon运行时,sendmail创建一个 ,并将自己bind到此socket上,
监听进入的SMTP连接,当远程主机连接到本地主机时,sendmail再使用accept(2)库
程序来接收连接. accept过程向sendmail提供远程主机的IP地址,sendmail然后通过
gethostbyaddr(2)将IP地址转化为对方的正式主机名.
由于如下原因,sendmail需要知道对方主机的正式名称:
. 将远程主机名与本地主机名进行比较,以防止sendmaill连接到自己
. 在 HELP SMTP行中远程主机所宣称的主机名要与查询得到的主机名相比较,如果二
者不同可以采取一定的处理,如拒收对方的邮件,这样可以防止邮件炸弹.
. 将此值赋值给宏$s(Send host's name)
. 在很多log信息中(由loglevel(L)选项确定)及Received:头中要包括有关远程主机
的信息.
(3) 查询目标地址
当sendmail准备连接到远程主机进行邮件传送时,它首先要进行一系列的检查,所检查
的项目因版本不同而有所差别.
从sendmail 8.1开始, sendmail检查地址中的主机部分是否包括了方括号,如果有方
括号将忽略MX记录的查询.
从v8.8开始, sendmail首先检查所选定的发送代理是否设置了F=0标志,如果设置了
此标志,则忽略对MX记录的查询.
通常F=0用于Null Client配置,如下mc示例:
define('SMTP_MAILER_FLAGS','0')
FEATURE('nullclient','mail.dlut.edu.cn');
如果sendmail被允许进行MX查找(由sendmail.cf确定), 则sendmail使用res_search()
bind库查找所对应的MX记录,对这些MX记录进行排队,并选择值最小的主机,如果V8找到
两个同值的MX记录,在排队时会进行随机排序. 在找到所有的MX记录或根本没有MX记录
时,sendmail加入由FullBackMxHost(v)所指定的主机.
然后sendmail会依次向MX主机表中的每个主机发送信息,一次一个主机,直到有一个成
功或全部失败. 从sendmail V8.8开始,当此列表中的任一个主机返回5xx STMP代码(永
久性错误), sendmail会对其进行特殊处理.
如果未找到MX记录,则sendmail向指定的主机发送信息,如果均失败,sendmail会试
图向FallBackMxHost选项中所指定的主机发送信息.
不管有无MX记录,sendmail通过gethostbyname(2)得到相应主机的网络地址.
(4)设置MX记录
MX记录只是DNS中将一个主机的邮件转到另外其他机器上的一种方法,具体各项含义请
参考DNS配置部分,其一般形式如下:
hostA IN MX 10 hostB
或:
hostA IN MX 10 hostA
IN MX 20 hostB
应该说明的是后者中的第一条记录并非多余,这种设置方法有其特定的作用.
记录MX记录所应注意的问题:
. MX记录必须指向一个A(地址)记录
hostA IN MX 10 hostB ; 错误设置!
IN MX 20 hostC
hostB IN MX 10 hostC
hostC IN A 1.2.3.4
. MX记录指向CNAME记录会引起额外的dns查找
hostA IN MX 0 mailHub
mailHub IN CNAME nfsmast
nfsmast IN CNAME hostB
hostB IN A 123.45.67.89
. MX记录是非递归的
hostA IN MX 0 hostB
hostB IN MX 0 hostB
IN MX 10 hostC
如上示例中如hostA/hostB全部down掉时,hostA的信件不会发送到hostC上去,
否则会引起MX记录的循环,如上面的配置加上 hostC IN MX 10 hostA.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -