該過程的第壹步是郵件命令,
郵件來自:
這個命令告訴接收者壹個新的發送操作已經開始。請重置所有狀態表和緩沖區。它給出了錯誤信息返回的反向路徑。如果接收到請求,接收者返回250 OK回復。不僅包括郵箱,還包括主機和源郵箱之間的反向路由,其中第壹臺主機是發送此命令的主機。
該過程的第二步是發送RCPT命令。
RCPT想:
這個命令給出了識別接收者的前向路徑。如果接收到命令,接收器返回250 OK響應並存儲轉發路徑。如果接收方未知,接收方將返回550失敗回復。這個過程可以重復幾次。
它不僅包括郵件,還包括主機和目的郵箱的路由表,其中第壹臺主機是接收命令的主機。
該過程的第三步是發送數據命令。
數據
如果收到命令,接收者返回354中間回復,並假設下面幾行是信的內容。當信的結尾被接收和存儲時,接收者發送250 OK回復。因為郵件是在傳輸信道上發送的,所以需要指示郵件內容的結束,以便可以重新開始響應對話。SMTP通過在最後壹行只發送壹個句點來指示電子郵件內容的結束。在接收端,壹個對用戶透明的過程過濾掉這個符號,以免影響正常數據。
註意:郵件內容包括以下提示:日期、主題、收件人、抄送、發件人。
消息內容指示符確認消息操作,並通知接收方可以存儲和重發數據。如果收到該命令,接收器將返回250 OK回復。僅當郵件操作不完整或來源無效時,數據命令才會失敗。
上述過程是發送操作。這些命令只能按上述順序使用。以下示例顯示了這些命令在發送操作中的用法。
SMTP過程的例子這個例子在Alpha中。ARPA主機的史密斯給Beta的瓊斯、格林和布朗發郵件。ARPA主機,假設主機Alpha直接連接到主機Beta。
郵件來自:
250元可以嗎
史:RCPT到:
250元可以嗎
史:RCPT到:
這裏沒有這樣的用戶
史:RCPT到:
250元可以嗎
學生:數據
R: 354開始郵件輸入;以...結尾。
斯:等等等等...
學生:...等待
s:。
250元可以嗎
這封信是前兩個人收到的,第三個人在這個主機上沒有郵箱。下面是壹些目的地址不正確的例子,但是接收者知道正確的目的地址。在這些例子中,以下響應之壹應該允許發送者獲得正確的地址。
251:用戶不是本地的;轉發給。
這個回復意味著收件人SMTP知道用戶的郵箱在另壹臺主機上,也意味著以後會使用正確的轉彎路徑。請註意,主機和/或用戶是不同的。接收者負責傳遞信息。
551:用戶不是本地的,請嘗試。
此回復意味著接收SMTP知道用戶的郵箱在另壹臺主機上,並且意味著使用了正確的轉發路徑。請註意,主機和/或用戶是不同的。接收者拒絕接收來自該用戶的信件,發送者必須根據所提供的信息重新發送,或者向原始發送者返回錯誤消息。
以下示例顯示了這些響應的應用。
轉發的示例
史:RCPT到:
R: 251用戶不在本地;將轉發給
或者
史:RCPT到:
R: 551用戶不在本地;請嘗試SMTP提供的附加功能來確認用戶名和擴展郵件列表。這些功能由VREF和EXPN命令完成,這兩個命令都將字符串作為參數。對於VREF命令,string參數指的是用戶名,對這個命令的響應應該包括用戶名和用戶的郵箱。對於EXPN命令,string參數引用郵件列表,對該命令有多個響應,其中應該包括列表中所有用戶的名稱及其郵箱。
“用戶名”是壹個不必要的項目,是故意添加的。如果主機使用VREF命令和EXPN命令,最終本地郵箱必須提供用戶名以供主機確認。如果主機選擇另壹個字符串作為用戶名,也是允許的。
在壹些主機中,郵箱列表和郵箱的代理名稱有點不清楚,因為壹般的數據結構可能包括兩種類型的條目。如果妳想給郵件列表發送確認,妳應該給出壹個明確的答復。收到此消息後,主機會將郵件發送到列表中的所有地址,如果沒有收到確認響應,則會報告錯誤。例如,550是郵件列表,而不是用戶名。如果請求用於擴展用戶名,則可以通過返回包括名稱的列表來形成明確的響應,並且如果沒有接收到明確的響應,則將報告錯誤。(例如,550是用戶名,而不是郵件列表)。
在多個響應的情況下(通常針對EXPN),每個響應指定壹個郵箱。在模糊請求的情況下,比如VRFY Smith,這裏兩個Smith的響應必須是553 User ambiguous。
確認用戶名,如下例所示:例3:
確認用戶名
學生:弗雷德·史密斯路250號
或者
學生:費·史密斯
R: 251用戶不在本地;將轉發給
或者
斯:菲爾·瓊斯
R: 550字符串不匹配任何內容。
或者
斯:菲爾·瓊斯
R: 551用戶不在本地;請嘗試
或者
學生:VRFY Gourzenkyinplatz
R: 553用戶不明確。
郵箱列表需要多個響應,如下例所示:
擴展郵件列表的示例
學生:EXPN示例-人員
250-喬恩·波斯特爾
r:250-弗雷德·豐內波恩
r:250-山姆·q·史密斯
r:250-昆西史密斯& lt@南加州大學ISIF分校。ARPA:Q-Smith@ISI-VAXA。ARPA & gt
R: 250-
250盧比
或者
S: EXPN行政-洗手間-列表
R: 550拒絕妳的訪問。
VERF和EXPN命令的字符串命令參數不能再受限制了,因為它們的實現不同。在某些系統上,EXPN命令的參數可能是包含郵件列表的文件名,但是Internet上有許多不同的文件結構。
VRFY和EXPN命令不包括在最小實現中,當它們被實現時,它們不需要在傳輸之間被實現。SMTP的主要目的是將郵件發送到用戶的郵箱。壹些主機提供的類似功能是向用戶終端發送郵件(如果用戶正在打開終端)。將郵件發送到用戶的郵箱稱為郵寄;並且將其發送到用戶終端稱為發送。因為這兩種實現在某些主機上非常相似,所以同時放入SMTP。但是,獲取字母的命令在SMTP的最小實現中不可用。用戶應該能夠控制向終端寫入信息。大多數主機允許用戶接受或拒絕類似的信息。
以下三個命令被定義為支持獲取字母。它們用於郵件命令而不是郵件命令,表明接收SMTP的特殊意義:
發送自:
發送命令要求將電子郵件內容直接發送到用戶終端。如果用戶沒有打開終端(或者沒有收到終端信息),450響應將返回壹個RCPT命令。如果信息發送成功,則操作成功。
SOML來自:
Send或MaiL命令要求將電子郵件內容直接發送到用戶終端(如果用戶在終端上)。如果用戶不在終端上,郵件內容直接進入郵箱。如果郵件發送到用戶終端或用戶郵箱,則發送操作成功。
SAML FROM:
Send和MaiL命令要求將電子郵件內容直接發送到用戶終端(如果用戶在終端上)。在任何情況下,信件都會進入郵箱。如果信件進入郵箱,則發送操作成功。
用於MAIL命令的響應與這些命令的響應相同。當傳輸通道打開時,需要交換壹些信息來確定雙方的身份。以下命令用於打開和關閉:
直升機
放棄
在HELLO命令中,主機自己發送命令,可以解釋為“妳好,我是XX”。轉發路徑可能是以下格式:@ONE,@TWO:JOE@THREE,其中壹、二、三為主機。這種格式用於強調地址和路徑之間的區別。郵箱是壹個絕對地址,路徑是關於如何到達那裏的信息。這兩個概念不應該混淆。
從概念上講,轉發路徑的元素被移動到回復路徑,作為從壹個SMTP服務器到另壹個SMTP服務器的信息。回復路徑是反向數據源路徑,例如,從當前信息的位置到發起者的位置。當SMTP服務器從轉發路徑中刪除自己的標簽並將其插入回復路徑時,必須使用其發送環境可以理解的名稱,以防其名稱在不同的環境中被理解為不同的名稱。
如果SMTP收到的信息的轉發路徑中的第壹個元素不是該SMTP的標誌,則該元素不會從轉發路徑中刪除,而是用於確定下壹個要發送的SMTP服務器。在任何情況下,SMTP都將自己的標記添加到反向路徑中。
使用源路徑時,接收SMTP接收並轉發郵件,然後將其發送到另壹臺接收SMTP服務器。接收服務器可以接受或拒絕轉發本地用戶的郵件。接收SMTP通過將自己的標記從轉發路徑移動到回復路徑的開頭來更改命令參數。這時,接收SMTP就變成了發送SMTP,它在下壹條轉發路徑中建立了到該SMTP的通道,然後它就向這個SMTP發送郵件。
回復路徑上的第壹臺主機應該是發送SMTP命令的主機,轉發路徑上的第壹臺主機應該是接收SMTP命令的主機。
註意:轉發路徑和回復路徑出現在SMTP命令和響應中,但它們不必出現在信息中。換句話說,不需要這樣的路徑,尤其是這種格式出現在頭的To:,From:和CC:字段中。
如果SMTP服務器接受了轉發任務,但後來發現由於轉發路徑不正確或其他原理導致郵件無法發送,就必須建立壹個無法送達的郵件信號,發送給這封信的發件人。
該信號必須從該主機的SMTP服務發送。當然,該服務器應該不再報告錯誤消息。防止這種錯誤報告循環的壹種方法是在發出信號的郵件命令的回復路徑中留壹個空白。當發送該信息時,允許將回復路徑留空。郵件命令後的回復路徑為空,如下所示:
郵件發件人:& lt& gt
以下示例顯示了無法傳遞的消息。當從HOSTW上的JOE發送的電子郵件通過HOSTX並需要通過HOSTZ才能到達HOSTY時,此消息是對錯誤的響應。我們看到的例子發生在HOSTX和HOSTY之間。
不可發送的郵件消息的例子
郵件發件人:& lt& gt
250元可以嗎
史:RCPT到:& lt@HOSTX。ARPA:JOE@HOSTW。ARPA & gt
250元可以嗎
學生:數據
R: 354發送郵件數據,以。
學生:日期:10月23日81 11:22:33
出發地:SMTP*HOSTY。美國國防部高級研究計劃局(Advanced Research Projects Agency)
致:喬*霍斯特。美國國防部高級研究計劃局(Advanced Research Projects Agency)
主題:郵件系統問題
學生:
對不起,喬,妳給山姆的留言。ARPA輸了。
斯:霍斯茨。ARPA是這樣說的:
沒有這樣的用戶
s:。
250 ok域被引入ARPA網絡郵件系統。使用域可以將地址空間從平面的普通字符串主機名更改為層次結構的全局地址。主機由域名代替,起始主機由壹系列元字符串組成,這些元字符串由逗號按照從最特殊到壹般的順序排列。
無論SMTP中如何使用域名,都只能使用正式名稱,不能使用假名或昵稱。TURN命令可用於改變在傳輸通道上通信的程序的角色。如果程序A發送SMTP,在它發送TURN命令並接收OK回復(250)之後,它變成接收SMTP。同樣,程序B也可以從接收SMTP變為發送SMTP。為了拒絕改變角色,接收者可以發送502作為回復。
註意:該命令是可選的。使用TCP的傳輸通道時,通常不使用此命令。但是,當建立傳輸通道的成本相對較高時,此命令非常有用。例如,該命令可以支持通用公共交換電話系統作為傳輸信道。