[转]SMTP协议
SMTP 協(xié)議簡介
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,是一種提供可靠且有效電子郵件傳輸?shù)膮f(xié)議。SMTP是建立在FTP文件傳輸服務上的一種郵件服務,主要用于傳輸系統(tǒng)之間的郵件信息并提供與來信有關的通知。
SMTP目前已是事實上的在Internet傳輸E-Mail的標準,是一個相對簡單的基于文本的協(xié)議。在其之上指定了一條消息的一個或多個接收者(在大多數(shù)情況下被確定是存在的),然后消息文本就傳輸了。可以很簡單地通過Telnet程序來測試一個SMTP服務器,SMTP使用TCP端口25。要為一個給定的域名決定一個SMTP服務器,需要使用MX(Mail eXchange)DNS。
在20世紀80年代早期SMTP開始被廣泛地使用。當時它只是作為UUCP的補充,UUCP更適合于處理在間歇連接的機器間傳送郵件。相反SMTP在發(fā)送和接收的機器始終都聯(lián)網(wǎng)的情況下工作得最好。
SMTP獨立于特定的傳輸子系統(tǒng),且只需要可靠有序的數(shù)據(jù)流信道支持。SMTP重要特性之一是其能跨越網(wǎng)絡傳輸郵件,即“SMTP郵件中繼”。通常,一個網(wǎng)絡可以由公用因特網(wǎng)上TCP可相互間訪問的主機、防火墻分隔的TCP/IP網(wǎng)絡上TCP可相互訪問的主機,以及其他LAN/WAN中的主機利用非TCP傳輸層協(xié)議組成。使用SMTP,可實現(xiàn)相同網(wǎng)絡上處理機之間的郵件傳輸,也可通過中繼器或網(wǎng)關是實現(xiàn)某處理機與其他網(wǎng)絡之間的郵件傳輸。
在這種方式下,郵件的發(fā)送可能經(jīng)過從發(fā)送端到接收端路徑上的大量中間中繼器或網(wǎng)關主機。域名服務系統(tǒng)(DNS)的郵件交換服務器可以用來識別出傳輸郵件的下一跳IP地址。
Sendmail是最早實現(xiàn)SMTP的郵件傳輸代理之一。到2001年至少有50個程序?qū)MTP 實現(xiàn)為一個客戶端(消息的發(fā)送者)或一個服務器(消息的接受者)。一些其他的流行的SMTP服務器包括Philip Hazel 的exim,IBM的Postfix,D.J.Bernstein的Qmail,以及Microsoft Exchange Server.
由于這個協(xié)議開始是基于純ASCⅡ文本的,在二進制文件上處理得并不好。后來開發(fā)了用來編碼二進制文件的標準,如MIME,以使其通過SMTP來傳輸。今天,大多數(shù)SMTP服務器都支持8位MIME擴展,它使二進制文件的傳輸變得幾乎和純文本一樣簡單。
( 注意:SMTP是一個"推"的協(xié)議,它不允許根據(jù)需要從遠程服務器上“拉”來消息。要做到這點,郵件客戶端必須使用POP3或IMAP上。另一個,SMTP服務器可以使用ETRN(Extended Turn,擴展回車)命令在SMTP上觸發(fā)一個發(fā)送。)
垃圾郵件仍然是個重要的問題。原始的SMTP協(xié)議的局限之一在于它沒有為發(fā)送方進行認證的功能。因此定義了SMTP-AUTH 擴展。由于SMTP 巨大安裝基礎的網(wǎng)絡效應,廣闊地修改SMTP或者完全替代它被認為是不現(xiàn)實的。Internet Mail 2000 就是這樣一個為替換而做的建議。IRTF 的反垃圾郵件研究小組正在研究一些提供簡單、靈活、輕量級的、可升級的源端認證的建議。最有可能被接受的建議是Sender Policy Framework 協(xié)議。
SMTP協(xié)議命令和工作原理
SMTP命令是發(fā)送于SMTP主機之間的ASCⅡ信息,可能使用到的命令如下表所示。
SMTP基本命令集:
命令 描述
------------------------------
HELO 向服務器標識用戶身份發(fā)送者能欺騙,說謊,但一般情況下服務器都能檢測到。MAIL 初始化郵件傳輸
mail form :
RCPT 標識單個的郵件接收人;常在MAIL命令后面 可有多個rcpt to:
DATA 在單個或多個RCPT命令后,表示所有的郵件接收人已標識,并初始化數(shù)據(jù)傳輸結(jié)束。
VRFY 用于驗證指定的用戶/郵箱是否存在;由于安全方面的原因,服務器常禁止此命令
EXPN 驗證給定的郵箱列表是否存在,擴充郵箱列表,也常被禁用
HELP 查詢服務器支持什么命令
NOOP 無操作,服務器應響應OK
QUIT 結(jié)束會話
RSET 重置會話,當前傳輸被取消
SMTP是工作在兩種情況下:一是電子郵件從客戶機傳輸?shù)椒掌鳎憾菑哪骋粋€服務器傳輸?shù)搅硪粋€服務器。SMTP也是個請求/響應協(xié)議,命令和響應都是基于ASCⅡ文本,并以CR和LF符結(jié)束。響應包括一個表示返回狀態(tài)的三位數(shù)字代碼。SMTP在TCP協(xié)議25號端口監(jiān)聽連續(xù)請求。
連接和發(fā)送過程如下:
(1)建立TCP 連接。
(2)客戶端發(fā)送HELO命令以標識發(fā)件人自己的身份,然后客戶端發(fā)送MAIL命令;服務器端正希望以OK作為響應,表明準備接收。
(3)客戶端發(fā)送RCPT命令,以標識該電子郵件的計劃接收人,可以有多個RCPT行;服務器端則表示是否愿意為收件人接收郵件。
(4)協(xié)商結(jié)束,發(fā)送郵件,用命令DATA發(fā)送。
(5)以“.”號表示結(jié)束輸入內(nèi)容一起發(fā)送出去,結(jié)束此次發(fā)送,用QUIT命令退出。
SMTP協(xié)議的郵件路由過程。
smtp服務器基于‘域名服務dns中計劃收件人的域名來路由電子郵件。smtp服務器基于dns中的mx記錄
來路由電子郵件,mx記錄注冊了域名和相關的smtp中繼主機,屬于該域的電子郵件都應向該主機發(fā)送。若smtp服務器mail.abc.com收到一封信要發(fā)到shuser@sh.abc.com:
a.sendmail請求dns給出主機sh.abc.com的cname記錄,如有,假若cname到shmail.abc.com,則再次
請求shmail.abc.com的cname記錄,直到?jīng)]有為止
b.假定被cname到shmail.abc.com,然后sendmail請求@abc.com域的dns給出shmail.abc.com的mx記錄,
shmail mx 5 shmail.abc.com
10 shmail2.abc.com
c. sendmail最后請求dns給出shmail.abc.com的a記錄,即ip地址,若返回值為1.2.3.4
d. sendmail與1.2.3.4連接,傳送這封給shuser@sh.abc.com的信到1.2.3.4這臺服務器的smtp后臺程序補充說明:
1. mail from命令中指定的地址是稱作 envelope from地址,不需要和發(fā)送者自己的地址是一致的。
rcpt to 與之等同,指明的接收者地址稱為envelope to地址,而與實際的to:行是什么無關。
2.為什么沒有rcpt cc和rcpt bcc:?
所有的接收者協(xié)商都通過rcpt to命令來實現(xiàn),如果是bcc,則協(xié)商發(fā)送后在對方接收時被刪掉信封接收者
3.郵件被分為信封部分,信頭部分和信體部分
envelope from, envelope to 與message from:, message to:完全不相干。
evnelope是由服務器主機間smtp后臺提供的,而message from/to是由用戶提供的。有無冒號也是區(qū)別。4. 怎樣由信封部分檢查是否一封信是否是偽造的?
a. received行的關聯(lián)性。
現(xiàn)在的smtp郵件傳輸系統(tǒng),在信封部分除了兩端的內(nèi)部主機處理的之個,考慮兩個公司防火墻之間
的部分,若兩臺防火墻機器分別為a和b,但接收者檢查信封received:行時發(fā)現(xiàn)經(jīng)過了c.則是偽造的。
b. received:行中的主機和ip地址對是否對應如:
receibed: from galangal.org (turmeric.com [104.128.23.115] by mail .bieberdorf.edu....
c. 被人手動添加在最后面的received行:
received: from galangal.org ([104.128.23.115]) by mail .bieberdorf.edu (8.8.5)
received: from lemongrass.org by galangal.org (8.7.3)
received: from graprao.com by lemongrass.org (8.6.4)
本篇文章來源于 中國協(xié)議分析網(wǎng)|www.cnpaf.net 原文鏈接:http://www.cnpaf.net/Class/SMTP/200810/23042.html
作者:chhuic
出處:http://chhuic.cnblogs.com
本文版權歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
總結(jié)
- 上一篇: 前端框架:layui
- 下一篇: 伽利略发明了什么?(关于伽利略)