Jquery中文網 www.prqmtc.live
Jquery中文網 >  服務器技術  >  郵件服務器  >  正文 郵件系統基本的網絡協議

郵件系統基本的網絡協議

發布時間:2014-07-20   編輯:www.prqmtc.live
郵件系統基本的網絡協議

(1)SMTP
發送方建立起與接收方SMTP的通信。在傳輸郵件之前,兩個SMTP實體可以交換口令或其他鑒別信號,然后發送方發出一個特殊命令,稱為MAIL,該命令給出了發送方的標識及一些有關郵件交換的其他信息。接收方必須返回一個對MAIL命令的確認。在SMTP中,該確認可寫為250,在另一些文檔中,該確認為250 OK。不管是哪一種格式,確認表示所要求的郵件操作完成了。 

 郵件傳輸過程的下一步是傳輸RCPT命令以標識報文的目的端,接收方仍必須給出對該命令的一個確認。
 第三步是發送DATA命令。發送方SMTP發出該命令提醒接收方一個報文就要到達了。在發送了該命分之后,發送方SMTP便一行接一行地發送數據,直到發送方發出了一個特殊的控制字符序列,表示報文結束了。這時,服務器使用QUIT命令終止該過程。
 (1.1)地址段格式
 發送方SMTP使用了一個標準的送地址和接收地址格式,它們的形式如下:
[email protected]
因此SMTP名字遵從了域名系統(DNS)的概念,一些系統使用一個服務器,將該名字映射成IP地址。實際應用中,這種格式可能出現為:
[email protected]
其中本地用戶名為Jones,beta.aus.edu是Jones的域標識符。[email protected]還可能采取其他形式以表示如下含義:
2 一個直接的連接([email protected])
 2 郵件接收方位于一臺非SMTP主機,通過一個郵件網關接收郵件(user%[email protected])
 2 多臺主機間的應答(@[email protected]@hostd)

(2)POP3
首先,P O P 3服務器啟動P O P 3服務,并監聽110端口。當客戶機要僅用P O P 3服務時,它先與 POP3服務器建立一條TCP連接。若連接成功建立,POP3服務器向客戶端發送一條歡迎消息,然后客戶機與POP3服務器之間就可以進入命令交互和響應狀態,直到連接關閉或異常中斷。
 每個POP3會話總是處于一系列的狀態變化中。一旦客戶機與POP3服務器之間的TCP連接建立起來并且POP3服務器的歡迎言息傳到客戶端。POP3會話過程就進入認證狀態。在該狀態下,客戶機必須進行身份驗證。一旦驗證通過,并且POP3服務器獲得足夠的資源打開用戶的郵箱。這時POP3會話過程進入“命令交互狀態”。在“命令交互狀態”下,客戶端可以向POP3服務器提出各科服務請求,由POP3服務器完成該服務并返回成功或失敗的響應信息。當客戶端發出“QUIT’命令后,POP3會話過程進入“更新狀態”。在“更新狀態”下,POP3服務器釋放在“命令交互狀態”下獲得的資源,更新用戶郵箱,然后關閉TCP連接。
 (2.1)POP3的基本命令
2 USER
這個命令以用戶的帳號名稱作為參數。
2 PASS
這個命令以用戶的口令作為參數,缺省情況下用戶的口令將以明文在網絡上傳輸。
2 STAT
該命令無參數,僅用于“命令交互狀態”。
 獲取當前用戶郵件總數和郵件總大小。POP3服務器返回一個成功的響應,以“+OK”開頭,后跟一個空格字符,然后是當前用戶郵箱內郵件的總數,之后又是一個空格字符,最后是用戶郵件的總大小(BYTES)。
C: STAT
 S: +OK 2320
 2 LIST
該命令可以沒有參數也可以有一個參數,該參數代表郵件的序
 號,但該序號不能是已刪除郵件。
 該命令僅用于“命令交互狀態”。
C: LIST
 S: +OK 2 messages( 320 octets)
 S: 1 120
 S: 2 200
 S: .
 ......
 C: LIST 2
 S: +OK 2 200
 ......
 C: LIST 3
 S: -ERR no such mesage, only 2 message in maildrop.
 2 RETR
該命令必須帶有一個郵件序號,該郵件序號不能是已刪除郵件。
 該命令僅用于“命令交互狀態”。
 若POP3服務器返回一個成功響應,則隨后的響應屬于多行響應。在首行“+OK”響應之后,POP3服務器把對應于該郵件序號的郵件發送到客戶端。
C: RETR 1
 S: +OK 120 octets
 S: < The PoP3 server sends the entire message here>
 C: RETR 5
 S: -ERR no such message.
 2 DELE
該命令必須帶一個郵件序號參數。僅用于“命令交互狀態”
POP3服務器把該郵件標志為“已刪除”,之后,任何對該郵件的操作都將返回錯誤。POP3服務器并不實際刪除該郵件,除非POP3會話進“更新狀態”。
C: DELE 1
 S: +OK message 1 deleted
......
 C: DELE 1
 S: -ERR message 2 already deleted
 2 NOOP
該命令不待參數,實際上也不做任何事情。僅用于“命令交互狀態”。
C: NOOP
 S: +OK
 2 RSET
該命今不帶參數。僅用于“命令交互狀態”。
POP3服務器將所有已被標志為刪除的郵件的刪除標志取消,并返回成功響應。
C: RSET
 S: +OK maildrop has 2 messages ( 320 octets)
 2 QUIT
該命令無參數,僅用于“命令交互狀態”。
POP3服務器把所有已標志為刪除的郵件刪除,并釋放在“命令交互狀態”中獲得的資源,然后關閉TCP連接,POP3會話結束。

2.SMTP
 1、概述
SMTP被用來在因特網上傳遞電子郵件。文件RFC821規定了該協議的所有細節。
 協議的原理很簡單。無非是一個客戶端計算機向服務器發送命令,然后服務器向客戶端計算機返回一些信息。客戶端發送的命令以及服務器的回應都是字符串。
 首先要與郵件服務器連接,服務器將返回文本。該文本包含一個三位數的代碼及描述,例如:
220-ns.cinfo.ru Sendmail 8.6.12/8.6.9 ready at Wed, 22 Apr 1998 22:54:41 +0300
 220 ESMTP spoken here
這些描述可能會因服務器而異。只須要知道代碼所代表的意思就行了。代碼220表示成功建立連接,服務器等待你的第一個命令。
 向服務器傳遞的第一個命令是HELO. 該命令包含一個參數,即你的郵箱名。
HELO oleg
注意: 在RFC821中,HELO是一個可選擇性命令,如果服務器不要求該命令的話,你可以把它忽略掉。
 如果命令成功,服務器會返回一個代碼為250的回應。
 下一步用MAIL FROM命令告訴服務器你想發一封郵件。該命令以發信人的郵件地址為參數。
MAIL FROM: [email protected]
發完命令后,如果服務器返回一個代碼為250回應,你就可以向服務器發送RCPT TO命令了。
RCPT TO命令以收信人地址為參數,是告訴服務器你想將郵件發到收信人地址處。
RCPT TO: [email protected]
如果你想將郵件發給多個收件人的話。你需要多次使用RCPT TO命令,對每個命令,服務器都會返回代碼為250的回應。
 現在可以向服務器發送郵件正文了。
 用DATA命令告訴服務器以下的內容為郵件正文。在你從服務器收到代碼為354的回應后,你就可以發送郵件正文了。郵件按行發送,每行郵件以一個無回車的換行符結束,只須按回車鍵就行了。下面是一個例子:
Subject: My first e-mail message.
 First line of a message.
 Second line.
注意上面最后一行的最后一個字符是一個小數點。這是正文結束的標志。 服務器收到這個標志后,就會立即返回一個代碼為250的回應以及該郵件的唯一ID號。
250 WAA10568 Message accepted for delivery
任務完成了,可以繼續發送下封郵件,也可以斷開同服務器的連接。如果要斷開同服務器的連接就用QUIT命令。在這種情況下,服務器會返回一個代碼為221的回應并斷開連接。
QUIT
 221 ns.cinfo.ru closing connection

2、工作機制
SMTP設計基于以下通信模型:針對用戶的郵件請求,發送SMTP建立與接收SMTP之間建立一個雙向傳送通道。接收SMTP可以是最終接收者也可以是中間傳送者。SMTP命令由發送SMTP發出,由接收SMTP接收,而應答則反方面傳送。
 一旦傳送通道建立,SMTP發送者發送MAIL命令指明郵件發送者。如果SMTP接收者可以接收郵件則返回OK應答。SMTP發送者再發出RCPT命令確認郵件是否能接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發出拒絕接收應答(但不中止整個郵件操作),雙方將如此重復多次。當接收者收到全部郵件后會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應答
SMTP提供傳送郵件的機制,如果接收方與發送方連接在同一個傳送服務下時,郵件可以直接由發送方主機傳送到接收方主機;或者,當兩者不在同一個傳送服務下時,通過中繼SMTP服務器傳送。為了能夠對SMTP服務器提供中繼能力,它必須擁有最終目的主機地址和郵箱名稱。
MAIL命令參數是回復路徑,它指定郵件從何處來;而RCPT命令的參數是轉發路徑的,它指定郵件向何處去。向前路徑是源路徑,而回復路徑是返回路徑(它用于發生錯誤時返回郵件)。

3、基本命令(所有的命令都是四個字母組成)
 發送郵件操作涉及到不同的數據對象,它們由不同的參數相互連接。回復路徑就是MAIL命令的參數,而轉發路徑則是RCPT命令的參數,郵件日期是DATA命令的參數。這些參數或者數據對象必須跟在命令后。這種模式也就要求有不同的緩沖區來存儲這些對象,也就是說,有一個回復路徑緩沖區,一個轉發路徑緩沖區,一個郵件內容緩沖區。特定的命令產生自己的緩沖區,或使一個或多個緩沖的內容被清除
 (0)HELO(HELLO)
 HELO〈SP〉〈domain〉〈CRLF>
通知服務器客戶的身份。 
 此命令用于向接收SMTP確認發送SMTP。參數域包括發送SMTP的主機名。接收SMTP通過連接確認命令來向發送SMTP確認接收SMTP。引命令和OK響應確認發送和接收SMTP進入了初始狀態,也就是說,沒有操作正在執行,所有狀態表和緩沖區已經被子清除。
 (1)MAIL
 MAIL FROM:
此命令用于開始將郵件發送到一個多個郵箱中。參數域包括回復路徑。返回路徑中包括了可選的主機和發送者郵箱列表。當有主機列表時,它是一個回復路徑源,它說明此郵箱是由在表中的主機一一傳遞發送(第一個主機是最后一個接收到此郵件的主機)過來的。此表也有作向發送者返回非傳遞信號的源路徑。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑可能就是空的。
 此命令清除回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區,并且將此命令的回復路徑信息插入到回復路徑緩沖區中。
 (2)RCPT(recipient)
 RCPT TO:
此命令用于確定郵件內容的唯一接收者;多個接收者將由多個此命令指定。轉發路徑中包括一個可選的主機和一個必須的目的郵箱。
 此命令給出向前路徑標識接收者,如果命令被接收,接收方返回一個250 OK應答,并存儲向前路徑。如果接收者未知,接收方會返回一個550 Failure應答。此過程可能會重復若干次。
 不僅包括郵件,它是主機和目的郵箱的路由表,在其中的第一個主機就是接收命令的主機。
(3)DATA
 DATA
如果命令被接收,接收方返回一個354 Intermediate應答,并認定以下的各行都是信件內容。當信件結尾收到并存儲后,接收者發送一個250 OK應答。因為郵件是在傳送通道上發送,因此必須指明郵件內容結尾,以便應答對話可以重新開始。SMTP通過在最后一行僅發送一個句號來表示郵件內容的結束,在接收方,一個對用戶透明的過程將此符號過濾掉,以不影響正常的數據。
 注意:郵件內容包括如下提示:Date, Subject, To, Cc, From。
 郵件內容指示符確認郵件操作并告知接收者可以存儲和再發送數據了。如果此命令被接收,接收方返回一個250 OK應答。DATA命令僅在郵件操作未完成或源無效的情況下失敗。
 (4)RSET
 RSET
此命令指示當送郵件操作將被放棄。任何保存的發送者,接收者和郵件內容應該被拋棄,所有緩沖區和狀態表應該被清除,接收方必須返回OK應答。
 (5)SEND
SENDFROM:〈reverse-path>
此命令用于開始一個發送命令,將郵件發送到一個或多個終端上。參數域包括了一個回復路徑,此命令如果成功就將郵件發送到終端上了。
回復路徑包括一個可選的主機列表和發送者郵箱。當出現主機列表時,表示這是一個傳送路徑,郵件就是經過這個路徑上的每個主機發送到這里的(列表上第一個主機是最后經手的主機)。此表用于返回非傳遞信號到發送者。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發送IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑可能就是空的。
 此命令清除回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區,并且將此命令的回復路徑信息插入到回復路徑緩沖區中。
 (6)SOML(send or mail)
 SOMLFROM:〈reverse-path>
此命令用于開始一個郵件操作將郵件內容傳送到一個或多個終端上,或者傳送到郵箱中。對于每個接收者,如果接收者終端打開,郵件內容將被傳送到接收者的終端上,否則就送到接收者的郵箱中。參數域包括回復路徑,如果成功地將信息送到終端或郵箱中此命令成功。
 回復路徑包括一個可選的主機列表和發送者郵箱。當出現主機列表時,表示這是一個傳送路徑,郵件就是經過這個路徑上的每個主機發送到這里的(列表上第一個主機是最后經手的主機)。
 此命令清除回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區,并且將此命令的回復路徑信息插入到回復路徑緩沖區中。
 (7)SAML(send and mail)
 SAMLFROM:〈reverse-path>
此命令用于開始一個郵件操作將郵件內容傳送到一個或多個終端上,并傳送到郵箱中。如果接收者終端打開,郵件內容將被傳送到接收者的終端上和接收者的郵箱中。參數域包括回復路徑,如果成功地將信息送到郵箱中此命令成功。
 回復路徑包括一個可選的主機列表和發送者郵箱。當出現主機列表時,表示這是一個傳送路徑,郵件就是經過這個路徑上的每個主機發送到這里的(列表上第一個主機是最后經手的主機)。
 此命令清除回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區,并且將此命令的回復路徑信息插入到回復路徑緩沖區中。
 (8)VRFY(verify vt.證實,查證;證明)
VRFY〈string〉
 此命令要求接收者確認參數是一個用戶。如果這是(已經知道的)用戶名,返回用戶的全名和指定的郵箱。此命令對回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區沒有影響。
 (9)EXPN(expand vt.擴大;使膨脹)
EXPN〈string〉
 此命令要求接收者確認參數指定了一個郵件發送列表,如果是一個郵件發送列表,就返回表中的成員。如果這是(已經知道的)用戶名,返回用戶的全名和指定的郵箱。此命令對回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區沒有影響。
 (10)NOOP
 NOOP
此命令不影響任何參數和已經發出的命令。它只是說明沒有任何操作而不是說明接收者發送了一個OK應答。此命令對回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區沒有影響。
(11)QUIT
 QUIT
此命令指示接收方必須發送OK應答然后關閉傳送信道。接收方在接到QUIT命令并做出響應之前不應該關閉通信信道。發送方在發送QUIT命令和接收到響應之前也不應該關閉信道。即使出錯,也不應該關閉信道。如果連接被提前關閉,接收方應該象接收到RSET命令一樣,取消所有等待的操作,但不恢復原先已經做過的操作。而發送方應該象接收到暫時錯誤(4XX)一樣假定命令和操作仍在支持之中。

4、 SMTP響應
 對SMTP命令的響應是多樣的,它確定了在郵件傳輸過程中請求和處理的同步,也保證了發送SMTP知道接收SMTP的狀態。每個命令必須有且只有一個響應。
SMTP響應由三位數字組成,其后跟一些文本。數字幫助決定下一個應該進入的狀態,而文本對人是有意義的。三位的響應已經包括了足夠的信息,不用再閱讀文本,文本可以直接拋棄或者傳遞給用戶。特別的是,文本是與接收和環境相關的,所以每次接收到的文本可能不同。在附錄E中可以看到全部的響應碼。正規的情況下,響應由下面序列構成:三位的數字,,一行文本和一個,或者也可以是一個多行響應。只有EXPN和HELP命令可以導致多行應答,然而,對所有命令,多行響應都是允許的。
 三位的應答碼每一位都有特定的意義。每一位應答表示是否是成功的,失敗的或未完成的。通過這一位,不復雜的SMTP發送就可以決定下一步的操作,如果發送方希望大概了解究竟出了什么問題,它可以檢測第二位,而第三位則保存了最后更完整的信息。也就是說,從第一位到第三位,接收方可以一步比一步精確地確定接收方的狀態。
 (1)對于第一位有五種可能的表示代表不同的意義:
1yz 部分完成應答
 命令被接受,但是要求的操作被中止,原因在應答碼中。發送方應該再次發送另一命令指明是否繼續操作,或者放棄操作。
2yz 全部完成應答
 要求的操作已經完成,可以開始另一個新的請求。
3yz 需要近一步信息的部分完成應答
 命令被接受,但是要求的操作被中止,需要接收進一步的信息。發送方應該發送另一條命令指明進一步的信息。
4yz 暫時未完成應答
 命令未被接受,要求的操作也未執行,但是發生錯誤的狀態是暫時的,可以再一次請求操作。發送者應該返回命令序列的開始命令(如果有的話)。很難解釋這個暫時的意義,特別對于兩個不同的站點來說。區別應答是屬于些類還是下一類的方法是:如果能夠不加任何改變地重復的再一次發送命令,就是本類的,如果不是,就是下一類(5yz)的。
5yz 永久未完成應答
 命令未被接受,要求的操作未完成。發送對命令的重復不起作用。即使一些出錯條件已經改變,但是用戶已經不希望重試,而希望在未來的某個時間再進行操作
 (2)應答的第二位的意義有以下幾類:
x0z 語法:此類型的應答是針對以下情況的:語法錯誤;符合語法但命令不存在功能;未完成或冗余的命令。
x1z 信息:此類型的應答是用于請求信息的,如狀態或幫助信息。
x2z 連接:此類型的應答是關于傳輸信道的。
x3z 未使用。
x4z 未使用。
x5z 郵件系統:此類型的應答指明接收方郵件系統關于請求傳送或其它操作的狀態的。
 (3)第三位給出了更詳細的說明。

3.POP3
 POP的全稱是 Post Office Protocol ,即郵局協議,用于電子郵件的接收,現在常用的是第三版 ,簡稱為 POP3。通過POP協議,客戶機登錄到服務器上后,可以對自己的郵件進行刪除,或是下載到本地,下載后,電子郵件客戶軟件就可以在本地對郵件進行修改、刪除等。
POP服務器一般使用的是TCP的110號端口,
 以下對幾個常用的POP3命令作一個簡單的介紹 :
 命令    參數    狀態    描述
------------------------------------------
USER    username  認可    此命令與下面的pass命令若成功,將導致狀態轉換
PASS    password  認可
APOP    Name,Digest 認可    Digest是MD5消息摘要
------------------------------------------
STAT    None    處理    請求服務器發回關于郵箱的統計資料,如郵件總數和總字節數
UIDL    [Msg#]   處理    返回郵件的唯一標識符,POP3會話的每個標識符都將是唯一的
LIST    [Msg#]   處理    返回郵件數量和每個郵件的大小
RETR    [Msg#]   處理    返回由參數標識的郵件的全部文本
DELE    [Msg#]   處理    服務器將由參數標識的郵件標記為刪除,由quit命令執行
RSET    None    處理    服務器將重置所有標記為刪除的郵件,用于撤消DELE命令
TOP    [Msg#]    處理    服務器將返回由參數標識的郵件前n行內容,n必須是正整數
NOOP    None    處理    服務器返回一個肯定的響應,不做任何操作。
------------------------------------------
QUIT    None    更新 退出
POP3協議的基本操作:
1. 服務器通過偵聽tcp端口110開始POP3服務。
2. 當客戶需要服務時,它與服務器建立連接,連接建立后,POP3服務器發送確認消息
3. 客戶與服務器相互交互命令和響應,持續到連接終止。
POP3命令由一個命令和一些參數組成
POP3響應由一個狀態碼和一個可能跟有附加信息的命令組成。
 兩種狀態碼:確定(+OK)和錯誤(-ERR)
POP3在生命周期中經歷的狀態:“確認”—“操作”—“更新”
基礎的POP3命令有:USER name 在確認狀態下有效 可選的命令:APOP name digest
 PASS string
 QUIT
STAT 在操作狀態下有效 TOP msg n
 LIST [msg] UIDL [msg]
 RETR msg
DELE msg
 NOOP
 REST
 QUIT 在更新狀態下有效
POP3響應有:+OK -ERR
注意:除了STAT,LIST,UIDLD的響應外,其他命令的響應都為+OK和-ERR。響應后的所有文件將被客戶略去。

您可能感興趣的文章:
讀懂電子郵件頭部信息
學習郵件服務器之內網、公網、NAT
《Perl編程24學時教程》筆記第22課 CGI發送電子郵件
INTERNET郵件系統
Email郵件頭結構及原理詳解
linux網絡及防火墻配置相關命令
postfix的main.cf參數說明
郵件系統基本的網絡協議
RHEL4下建立sendmail服務器
批處理重置TCP/IP協議的腳本

[關閉]
一分赛车计划app 14场胜负 球探比分即时足球比分一 黑龙江十一选五 加盟股票配资公司 恒捷配资 任选9场 网上炒黄金怎么炒 股份公司注册 pc蛋蛋 七星彩 河南22选5 体彩20选5