?? 電子郵件概述.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.
221 gingko.dlut.edu.cn closing connection
了解SMTP協(xié)議之實現(xiàn), 請參考RFC 821.
三. DNS與Email之關(guān)系
1. 概述
計算機之間通訊使用IP地址,而用戶為了使用方便通常使用主機名,DNS則提供
主機名與IP之間的相互解釋及其他重要信息.
DNS: 分布式管理系統(tǒng),將主機的命名及編號分發(fā)給各個自治區(qū),如dlut.edu.cn
域只負(fù)責(zé)維護自己域內(nèi)的所有主機的信息,當(dāng)hosta.dlut.edu.cn要向
hostb.dlut.edu.cn發(fā)信或telnet時,只需查詢大工的dns服務(wù)器,dns服務(wù)器會將
hostb.dlut.edu.cn的ip地址返回給主機hosta,并且由于edu.cn已經(jīng)將dlut.edu.cn
域的管理授權(quán)給大工,大工的dns服務(wù)器為dlut.edu.cn之授權(quán)服務(wù)器,因此它可以回答
所有關(guān)于dlut.edu.cn域的dns查詢,而不管查詢請求來自本域還是域外的主機.
當(dāng)兩個域之間的主機發(fā)送電子郵件時情況如何呢? 比gingko.dlut.edu.cn上的
一個用戶向user@pub.dl.lnpta.net.cn發(fā)送郵件,大工的dns服務(wù)器對域
dl.lnpta.net.cn沒有任何了解,但它知道如何找到答案. 當(dāng)域名服務(wù)器收到對非本域
內(nèi)主機的請求時,將會向根域名服務(wù)器(root domain nameserver)請求對應(yīng)域的授權(quán)
服務(wù)器的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是一個大的,分布式的數(shù)據(jù)庫;此數(shù)據(jù)庫含有主機到ip的映
射關(guān)系,此外DNS還含有其他信息,當(dāng)sendmail發(fā)送郵件時,必須將接收者的主機名
翻譯為IP地址,這個由DNS中的A記錄實現(xiàn),A記錄是關(guān)于主機的最基礎(chǔ)數(shù)據(jù);每二個
主機信息則是MX記錄, MX記錄指出愿意為相應(yīng)主機接收郵件的一個或多個郵件主
機列表.
2.郵件交換(MX, Mail Exchange)記錄
MX記錄的意義及用處是什么?主機處理自己的郵件其不足是什么?沒有mx記錄
豈不是更簡單一些? 事實剛好相反, 雖然郵件管理員的日常工作相當(dāng)復(fù)雜,當(dāng)MX
記錄可提供如下功能, 從而將郵件管理的工作簡單化:
. 對于未連接Internet的主機(如UUCP Only Host)可以指明一個Internet主機
為其接收郵件,如同具有一個Internet地址一樣. 如主機hosta.dlut.edu.cn
與cerius.dlut.edu.cn具有uucp連接,如果后者被定義為前者的MX, 則其他
Internet主機仍可向hosta.dlut.edu.cn發(fā)信,當(dāng)ceruis.dlut.edu.cn收到對
hosta.dlut.edu.cn的信件時,會保持到與hosta建立連接,然后通過UUCP將信
件轉(zhuǎn)發(fā)給hosta.
. 如UNIX主機pcsvr.dlut.edu.cn是一組PC的文件服務(wù)器,pc上有集成了SMTP客
戶端的MUA, 可以向外發(fā)信,但不能收信.如果此時發(fā)出的信件中的回信地址是
user@pc1.dlut.edu.cn,接收者如何回信? 這時可以將pcsvr.dlut.edu.cn作為
這些PC的MX.
. 主機因為各種原因而不能正常連接到網(wǎng)絡(luò)上,比如光纜損壞,當(dāng)主機與Internet
的連接斷開后,網(wǎng)絡(luò)上其他主機到此主機的郵件將存在郵件隊列中,如果指定時
時間內(nèi)郵件未能發(fā)送,則郵件信息將返回給發(fā)送者. 此時如果設(shè)置一個MX主機
作為中間環(huán)節(jié),MX主機將暫時接收對此主機的郵件,并在相應(yīng)主機恢復(fù)正常之后
將重新發(fā)送到你的主機, 這些MX主機可以在你的網(wǎng)域內(nèi)或域外,或二者均有,當(dāng)
然后者要更好一些,因為當(dāng)你的主干網(wǎng)(WAN)損壞之后域內(nèi)的主機均不能正常工作.
. MX記錄隱藏了一部分的細(xì)節(jié)信息,允許以更為靈活的方式重新配置你的本地網(wǎng).
如所有的人均知道我的郵件地址為hbwork@dlut.edu.cn, 不論那一臺機器接收
對域dlut.edu.cn的信件都是一樣的,即使更改為主機名也無所謂;發(fā)信者感覺
不到有任何區(qū)別.
. 郵件發(fā)送及MX記錄
當(dāng)一個SMTP Client向主機發(fā)送信件時,需要作的工作不僅是將主機名翻譯為ip
地址,它首先要查看相目標(biāo)主機有無MX記錄,如果有MX記錄的話,將根據(jù)記錄中所
給出的權(quán)值對其進(jìn)行排序,比如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先試權(quán)值較小者,如果失敗再試同網(wǎng)域內(nèi)的備份MX,不行再試域外的
備份MX主機,這種設(shè)置能夠保證EMAIL正常運轉(zhuǎn),即使外界連接不正常.
在收集并對MX記錄排序之后,SMTP Client將取得MX記錄的IP地址,并按其優(yōu)先級高
低進(jìn)行郵件發(fā)送,這一點必須記住! 因為對于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).
. 當(dāng)另外一臺主機連接到本機傳輸郵件時,本機的sendmail將通過DNS查詢對方主機
的正式名稱(FQDN).
. 當(dāng)通過網(wǎng)絡(luò)發(fā)送SMTP郵件時,sendmail通過DNS查詢目標(biāo)主機的主機地址(也可能是
多個地址).
. 當(dāng)sendmail對每個規(guī)則RHS(右邊的規(guī)則)的$[和$]進(jìn)行擴展時,需要查詢$[和$]之間
的主機名或IP地址.
(1)取得本地主機的正式名稱(FQDN)
所有版本的sendmail取得本地主機的正式名稱所采用的方法基本相同,首先是調(diào)作
gethostname(3)取得本地主機名,其返回值根據(jù)在/etc/hosts中的每一項是FQDN
還是短主機名而返回相應(yīng)值.如果gethostname(3)調(diào)作失敗, 則本地主機名設(shè)置
為localhost; 然后再調(diào)用gethostbyname(3)以獲得本地主機的正式名稱以及別名.
如果機器上沒有Bind Library, 或者暫時無法編譯或安裝新版本的sendmail,可以
修改sendmail.cf文件定義變量$j
Dmyour.domain.com
Dj$w.$m
(2)查詢遠(yuǎn)程主機名
當(dāng)sendmail開始作為daemon運行時,sendmail創(chuàng)建一個 ,并將自己bind到此socket上,
監(jiān)聽進(jìn)入的SMTP連接,當(dāng)遠(yuǎn)程主機連接到本地主機時,sendmail再使用accept(2)庫
程序來接收連接. accept過程向sendmail提供遠(yuǎn)程主機的IP地址,sendmail然后通過
gethostbyaddr(2)將IP地址轉(zhuǎn)化為對方的正式主機名.
由于如下原因,sendmail需要知道對方主機的正式名稱:
. 將遠(yuǎn)程主機名與本地主機名進(jìn)行比較,以防止sendmaill連接到自己
. 在 HELP SMTP行中遠(yuǎn)程主機所宣稱的主機名要與查詢得到的主機名相比較,如果二
者不同可以采取一定的處理,如拒收對方的郵件,這樣可以防止郵件炸彈.
. 將此值賦值給宏$s(Send host's name)
. 在很多l(xiāng)og信息中(由loglevel(L)選項確定)及Received:頭中要包括有關(guān)遠(yuǎn)程主機
的信息.
(3) 查詢目標(biāo)地址
當(dāng)sendmail準(zhǔn)備連接到遠(yuǎn)程主機進(jìn)行郵件傳送時,它首先要進(jìn)行一系列的檢查,所檢查
的項目因版本不同而有所差別.
從sendmail 8.1開始, sendmail檢查地址中的主機部分是否包括了方括號,如果有方
括號將忽略MX記錄的查詢.
從v8.8開始, sendmail首先檢查所選定的發(fā)送代理是否設(shè)置了F=0標(biāo)志,如果設(shè)置了
此標(biāo)志,則忽略對MX記錄的查詢.
通常F=0用于Null Client配置,如下mc示例:
define('SMTP_MAILER_FLAGS','0')
FEATURE('nullclient','mail.dlut.edu.cn');
如果sendmail被允許進(jìn)行MX查找(由sendmail.cf確定), 則sendmail使用res_search()
bind庫查找所對應(yīng)的MX記錄,對這些MX記錄進(jìn)行排隊,并選擇值最小的主機,如果V8找到
兩個同值的MX記錄,在排隊時會進(jìn)行隨機排序. 在找到所有的MX記錄或根本沒有MX記錄
時,sendmail加入由FullBackMxHost(v)所指定的主機.
然后sendmail會依次向MX主機表中的每個主機發(fā)送信息,一次一個主機,直到有一個成
功或全部失敗. 從sendmail V8.8開始,當(dāng)此列表中的任一個主機返回5xx STMP代碼(永
久性錯誤), sendmail會對其進(jìn)行特殊處理.
如果未找到MX記錄,則sendmail向指定的主機發(fā)送信息,如果均失敗,sendmail會試
圖向FallBackMxHost選項中所指定的主機發(fā)送信息.
不管有無MX記錄,sendmail通過gethostbyname(2)得到相應(yīng)主機的網(wǎng)絡(luò)地址.
(4)設(shè)置MX記錄
MX記錄只是DNS中將一個主機的郵件轉(zhuǎn)到另外其他機器上的一種方法,具體各項含義請
參考DNS配置部分,其一般形式如下:
hostA IN MX 10 hostB
或:
hostA IN MX 10 hostA
IN MX 20 hostB
應(yīng)該說明的是后者中的第一條記錄并非多余,這種設(shè)置方法有其特定的作用.
記錄MX記錄所應(yīng)注意的問題:
. MX記錄必須指向一個A(地址)記錄
hostA IN MX 10 hostB ; 錯誤設(shè)置!
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的信件不會發(fā)送到hostC上去,
否則會引起MX記錄的循環(huán),如上面的配置加上 hostC IN MX 10 hostA.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -