因特網(wǎng)電子郵件系統(tǒng)(email)
組成部分
- 用戶代理 郵件客戶端嘶摊,允許用戶閱讀,回復(fù)窍仰,轉(zhuǎn)發(fā),保存导匣,撰寫報文(電子郵件)
- 郵件服務(wù)器 每個郵件接收方都在某郵件服務(wù)器上有一個郵箱,郵箱存儲發(fā)給該用戶的Email才菠,郵箱的消息隊列存儲等待發(fā)送的Email
- 簡單郵件傳輸協(xié)議,SMTP 郵件服務(wù)器之間傳遞消息所使用的協(xié)議
- 發(fā)送方代理和發(fā)送方服務(wù)器間贡定,可通過SMTP赋访,HTTP協(xié)議推送報文;
- 發(fā)送方服務(wù)器和接收方服務(wù)器間缓待,通過郵件傳輸協(xié)議SMTP推送報文蚓耽;
- 接收方服務(wù)器和接收方代理間,可通過郵件訪問協(xié)議旋炒,如POP3,IMAP,HTTP等拉取報文步悠;
SMTP簡單郵件傳輸協(xié)議(Simple Mail Transfer Protocol,SMTP)
用于從發(fā)送方郵件服務(wù)器發(fā)送報文到接收方郵件服務(wù)器
參見 [RFC 5321]
古老(1982年有正式RFC文檔,但事實上早在此前出現(xiàn))瘫镇,限制報文的體只能用ASCII表示鼎兽。傳輸現(xiàn)代多媒體附件時,要將多媒體數(shù)據(jù)編碼為ASCII碼汇四,用SMTP傳輸完畢后再解碼還原為多媒體數(shù)據(jù)接奈。
SMTP一般不使用中間郵件服務(wù)器發(fā)送郵件,即使兩服務(wù)器相距甚遠(yuǎn)也會嘗試直接建立連接通孽。
依賴TCP運(yùn)輸層協(xié)議,端口:25睁壁,使用持久性連接
要求消息必須由7位ASCII碼構(gòu)成
SMTP通信雙方在TCP連接建立之后背苦,還會進(jìn)行應(yīng)用層的握手,SMTP客戶端會指示收發(fā)雙方的郵件地址潘明。
SMTP服務(wù)器利用CRLF.CRLF確定消息的結(jié)束行剂。
若SMTP發(fā)送方服務(wù)器有多個發(fā)往同一接收服務(wù)器的報文,它會在同一TCP連接內(nèi)傳輸钳降,但在每個報文發(fā)送前都進(jìn)行應(yīng)用層握手(聲明郵件的收發(fā)雙方)
命令/響應(yīng)交互模式
- 命令(command): ASCII文本
- 響應(yīng)(response): 狀態(tài)代碼和語句
拉協(xié)議(pull protocol)
用戶依據(jù)協(xié)議從服務(wù)器上拉取信息厚宰,連接由文件接收方發(fā)起。如HTTP(的主要功能)
推協(xié)議(push protocol)
用戶依據(jù)協(xié)議把文件推送到服務(wù)器上遂填,連接由文件發(fā)送方發(fā)起铲觉。如SMTP
SMTP對比HTTP
同:都用于主機(jī)間的文件傳輸
異:
- HTTP主要是拉協(xié)議,SMTP主要是推協(xié)議吓坚。
- HTTP無編碼限制撵幽,SMTP要求每個報文(包括報文體)使用7比特的ASCII碼格式。
- 對于由多個對象組成的文檔礁击,HTTP將每個對象封裝到獨立的報文中盐杂,而SMTP把所有報文對象放在一個報文內(nèi)逗载。
Email消息格式
定義郵件消息本身的格式,包括首部行和報文體
參見 [RFC 5322]
頭部行(header)
- To
- From
- Subject 主題链烈,可選的
email頭部行不同于SMTP中的命令厉斟,盡管它們可能冗余了同樣的信息。email from强衡,to頭部行是email報文的一部分捏膨,而SMTP的from,to命令是SMTP握手協(xié)議的一部分。
空行 分隔
消息體(body)
消息本身食侮,只能是ASCII字符
Email消息格式:多媒體擴(kuò)展 MIME
MIME:多媒體郵件擴(kuò)展 RFC 2045, 2056
通過在郵件頭部增加額外的行以聲明MIME的內(nèi)容類型
額外的頭部行包括數(shù)據(jù)編碼方法号涯,多媒體類型,子類型锯七,參數(shù)等链快。
郵件訪問協(xié)議
用于接收方從接收方郵件服務(wù)器上拉取報文。
常用郵件訪問協(xié)議:
- Post Office Protocol-Version 3,POP3
- Internet Mail Access Protocol,IMAP
- HTTP
POP協(xié)議
極為簡單的郵件訪問協(xié)議眉尸。帶有認(rèn)證/授權(quán)和下載功能域蜗。
參見 [RFC 1939]
POP3的包括 特許,事務(wù)處理噪猾,更新三個階段
POP3是無狀態(tài)的
服務(wù)器響應(yīng)
- +OK [可選的數(shù)據(jù)]
- -ERR
認(rèn)證過程
用戶代理以明文形式發(fā)送用戶名和口令以鑒別用戶
客戶端命令
- User:聲明用戶名
- Pass: 聲明密碼
事務(wù)階段
用戶代理拉取報文
獲取服務(wù)器上的報文信息
將報文標(biāo)記為待刪除
- List:列出消息數(shù)量
- Retr:用編號獲取消息
- Dele: 刪除消息
- Quit
更新階段
發(fā)生在用戶發(fā)出quit命令后霉祸,刪除那些被用戶標(biāo)記為待刪除的報文
IMAP協(xié)議
比POP3功能更為強(qiáng)大也更為復(fù)雜的郵件訪問協(xié)議
所有消息統(tǒng)一保存在一個地方:服務(wù)器
允許用戶利用文件夾組織消息
IMAP支持跨會話(Session)的用戶狀態(tài)
HTTP協(xié)議
現(xiàn)今基于Web的電子郵件都使用HTTP協(xié)議,此時用戶代理就是普通的瀏覽器袱蜡。
用戶和郵件服務(wù)器間的報文傳輸都通過HTTP進(jìn)行丝蹭,而郵件服務(wù)器間的報文傳輸仍通過SMTP進(jìn)行。
郵件發(fā)送過程
- 發(fā)送方用戶代理用SMTP(或HTTP)將郵件推送至發(fā)送方郵件服務(wù)器坪蚁;
- 發(fā)送方郵件服務(wù)器用SMTP將郵件推送至接收方郵件服務(wù)器奔穿;具體地,發(fā)送方郵件暫存與發(fā)送方郵件服務(wù)器中敏晤,發(fā)送方郵件服務(wù)器會周期性的嘗試連接接收方服務(wù)器贱田,若多次嘗試失敗,則返回給發(fā)送方一個錯誤信息
- 接收方郵件服務(wù)器分發(fā)郵件給接收方嘴脾;具體地男摧,接收方通過郵件訪問協(xié)議從接收方郵件服務(wù)器上拉取郵件。