?? rfc821-簡單郵件傳輸協議(smtp)中文版.txt
字號:
1. 介紹
簡單郵件傳輸協議(SMTP)的目標是可靠高效地傳送郵件,它獨立于傳
送子系統而且僅要求一條可以保證傳送數據單元順序的通道。附錄A,B,C
和D描述了不同傳送服務下SMTP的使用。在名詞表中還定義了本文檔中使用
的術語。
SMTP的一個重要特點是它能夠在傳送中接力傳送郵件,傳送服務提供了
進程間通信環境(IPCE),此環境可以包括一個網絡,幾個網絡或一個網絡
的子網。理解到傳送系統(或IPCE)不是一對一的是很重要的。進程可能直
接和其它進程通過已知的IPCE通信。郵件是一個應用程序或進程間通信。郵
件可以通過連接在不同IPCE上的進程跨網絡進行郵件傳送。更特別的是,郵
件可以通過不同網絡上的主機接力式傳送。
2. SMTP模型
SMTP設計基于以下通信模型:針對用戶的郵件請求,發送SMTP建立與接
收SMTP之間建立一個雙向傳送通道。接收SMTP可以是最終接收者也可以是中
間傳送者。SMTP命令由發送SMTP發出,由接收SMTP接收,而應答則反方面傳
送。
一旦傳送通道建立,SMTP發送者發送MAIL命令指明郵件發送者。如果
SMTP接收者可以接收郵件則返回OK應答。SMTP發送者再發出RCPT命令確認郵件
是否接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發出
拒絕接收應答(但不中止整個郵件操作),雙方將如此重復多次。當接收者收
到全部郵件后會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應
答。
SMTP提供傳送郵件的機制,如果接收方與發送方連接在同一個傳送服務下
時,郵件可以直接由發送方主機傳送到接收方主機;或者,當兩者不在同一個
傳送服務下時,通過中繼SMTP服務器傳送。為了能夠對SMTP服務器提供中繼能
力,它必須擁有最終目的主機地址和郵箱名稱。
MAIL命令參數是回復路徑,它指定郵件從何處來;而RCPT命令的參數是轉
發路徑的,它指定郵件向何處去。向前路徑是源路徑,而回復路徑是返回路徑
(它用于發生錯誤時返回郵件)。
當同一個消息要發往不同的接收者時,SMTP遇到了向不同接收者發送同一
份數據的復制品的問題,郵件命令和應答有一個比較奇怪的語法,應答也有一
個數字代碼。在下面,例子中可以看到哪些使用實際的命令和應答。完整的命
令和應答在第四節。
命令與應答對大小寫不敏感,也就是說,命令和應答可以是大寫,小寫或
兩者的混合,但這一點對用戶郵件名稱卻不一定是對的,因為有的主機對用戶
名大小寫是敏感的。這樣SMTP實現中就將用戶郵箱名稱保留成初始時的樣子,
主機名稱對大小寫不敏感。
命令與應答由ASCII字母表組成,當傳送服務提供8位字節傳送通道,每7
位字符正確傳送,而最高位被填充為0。當指定一般的命令或應答格式后,參
數會由一些類似于語言的字符串表示出來,如"<string>"或"<reverse-path>",
這里尖括號表示這是一種類似于語言的變量。
3. SMTP過程
本節提供了SMTP中的一些過程。頭一個說明的是基本發送過程(定義為
發送操作)。下來描述向前傳送郵件,確認郵箱名稱和擴展郵件列表,發送到終
端和打開關閉交換。在本節的最后是對中斷,郵件域的說明。本節的例子只是一
部分命令和應答的序列,完整的例子見附錄F。
3.1. MAIL
在SMTP發送操作中有三步,操作由MAIL命令開始給出發送者標識。一系列或
更多的RCPT命令緊跟其后,給出了接收者信息,然后是DATA命令列出發送的郵件
內容,最后郵件內容指示符確認操作。
過程中的第一步是MAIL命令,< reverse-path >包括源郵箱。
MAIL <SP> FROM:<reverse-path> <CRLF>
此命令告訴接收者新的發送操作已經開始,請復位所有狀態表和緩沖區。
它給出反向路徑以進行錯誤信息返回。如果請求被接收,接收方返回一個
250 OK應答。<reverse-path>中不止包括了郵箱,它包括了主機和源郵箱的反
向路由,其中的第一個主機就是發送此命令的主機。
過程中的第二步是發送RCPT命令。
RCPT <SP> TO:<forward-path> <CRLF>
此命令給出向前路徑標識接收者,如果命令被接收,接收方返回一個
250 OK應答,并存儲向前路徑。如果接收者未知,接收方會返回一個550 Failure
應答。此過程可能會重復若干次。
<forward-path>不僅包括郵件,它是主機和目的郵箱的路由表,在其中的
第一個主機就是接收命令的主機。 過程中的第三步是發送DATA命令。
DATA <CRLF>
如果命令被接收,接收方返回一個354 Intermediate應答,并認定以下的
各行都是信件內容。當信件結尾收到并存儲后,接收者發送一個250 OK應答。
因為郵件是在傳送通道上發送,因此必須指明郵件內容結尾,以便應答對話可
以重新開始。SMTP通過在最后一行僅發送一個句號來表示郵件內容的結束,在
接收方,一個對用戶透明的過程將此符號過濾掉,以不影響正常的數據。
注意:郵件內容包括如下提示:Date, Subject, To, Cc, From。
郵件內容指示符確認郵件操作并告知接收者可以存儲和再發送數據了。如
果此命令被接收,接收方返回一個250 OK應答。DATA命令僅在郵件操作未完成
或源無效的情況下失敗。
上面所述的過程是一個發送操作。這些命令只能以上面的順序使用。下例
表示了在一個發送操作中這些命令的使用。
SMTP過程例子 此例是在Alpha.ARPA主機的Smith發送郵件給Beta.ARPA主機
的Jones,Green和Brown的,這里假定主機Alpha與主機Beta直接相連。
S: MAIL FROM:<Smith@Alpha.ARPA>
R: 250 OK
S: RCPT TO:<Jones@Beta.ARPA>
R: 250 OK
S: RCPT TO:<Green@Beta.ARPA>
R: 550 No such user here
S: RCPT TO:<Brown@Beta.ARPA>
R: 250 OK
S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF>
S: Blah blah blah...
S: ...等等
S: <CRLF>.<CRLF>
R: 250 OK
此信被前兩個人接收,而第三個人在此主機上沒有郵箱。
3.2. 轉發
下面是一些<forward-path>中目的地址不正確的,但接收者知道正確的目
的地址的例子。在這些例子中,下列應答之一應該允許發送方與獲得正確地址。
251:用戶不在本地;將向前發送到<forward-path>。
這個應答意味著,接收方SMTP知道用戶的郵箱在另外的主機上,而且意味
著將在未來使用正確的轉向路徑。請注意,主機或者用戶,或者它們兩者是不
同的。接收方負責傳送消息。
551 :用戶非本地,請嘗試<forward-path>
這個應答意味著接收SMTP知道用戶的郵箱在另外的主機上,并意味著使用
了正確的轉發路徑。注意請注意,主機或者用戶,或者它們兩者是不同的。接
收方拒絕接收此用戶的信件,發送者必須根據提供的信息重新發送或者向原發
送者返回錯誤信息。 下例顯示了這些響應的應用。
轉發的例子
S: RCPT TO:<Postel@USC-ISI.ARPA>
R: 251 User not local; will forward to <Postel@USC-ISIF.ARPA>
或者
S: RCPT TO:<Paul@USC-ISIB.ARPA>
R: 551 User not local; please try <Mockapetris@USC-ISIF.ARPA>
3.3. 確認和擴展
SMTP提供了另外的確認用戶名和擴展郵件列表的功能。這些功能由VREF和
EXPN命令完成,它們都以字符串為參數。對于VREF命令,字符串參數指的是用
戶名,對此命令的響應要包括用戶的命名和用戶的郵箱。對于EXPN命令,字符
串參數指的是郵件列表,對此命令的響應多于一個,它們要包括所有列表中用
戶的命名和他們的郵箱。
“用戶名”是一個多余的項目,它是故意被加上的。如果主機采用VREF命
令和EXPN命令,最后本地郵箱必須提供用戶名使它被主機確認。如果主機選擇
由另外的字符串作為用戶名,也是允許的。
在一些主機中,郵箱列表和一個郵箱的代名有一點不清楚,因為一般的數
據結構可能包括兩種類型的入口。如果要發出對郵件列表的確認,應該給出確
定響應。在接收到這個消息后,主機將把郵件傳送到列表上所有的地址上去,
如果沒有接收到確定響應,就會報告錯誤。例如,
"550 That is a mail list, not a user name"。如果請求用于擴展一個用戶名,
可能通過返回包括一個名字的列表來形成確定響應,如果沒有接收到確定響應,
就會報告錯誤。(例如, "550 That is a user name, not a mailing list")。
在多個響應的情況下(通常是對于EXPN而言的),每個應答指定一個郵箱。
在模糊請求的情況下,例如"VRFY Smith",這里兩個Smith的響應必須是
"553 User ambiguous"。
確認用戶名的情況如下例所示:例3:
確認用戶名
S: VRFY Smith R: 250 Fred Smith <Smith@USC-ISIF.ARPA>
或者
S: VRFY Smith
R: 251 User not local; will forward to <Smith@USC-ISIQ.ARPA>
或者
S: VRFY Jones
R: 550 String does not match anything.
或者
S: VRFY Jones
R: 551 User not local; please try <Jones@USC-ISIQ.ARPA>
或者
S: VRFY Gourzenkyinplatz
R: 553 User ambiguous.
郵箱列表要求多個響應的情況如下例所示:
S: EXPN Example-People
R: 250-Jon Postel <Postel@USC-ISIF.ARPA>
R: 250-Fred Fonebone <Fonebone@USC-ISIQ.ARPA>
R: 250-Sam Q. Smith <SQSmith@USC-ISIQ.ARPA>
R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>
R: 250-<joe@foo-unix.ARPA>
R: 250 <xyz@bar-unix.ARPA>
或者
S: EXPN Executive-Washroom-List
R: 550 Access Denied to You.
VERF和EXPN命令的字符串命令參數因為具體實現的不同而不能再加以限
制了。在一些系統上,EXPN命令的參數可能是一個包含郵件列表的文件名,
但是在Internet上有許多不同的文件結構。
VRFY和EXPN命令在最小實現中并不包括,當它們實現時,它們也不要求
被在傳送間實現?!?
3.4. 發送信件(mailing)和獲得信件(sending)
SMTP的主要目的是將郵件發送到用戶的郵箱中。由一些主機提供的類似
的功能是把郵件送至用戶的終端(如果用戶正打開終端)。將郵件送到用戶
的郵箱中稱為發送信件(mailing);而送至用戶終端則稱之為獲得信件
(sending)。因為在一些主機上,這兩者的實現十分類似,所以它們同時
被放入了SMTP中。然而,獲得信件命令在SMTP的最小實現中是沒有的。用戶
應該具有控制向終端上寫信息的能力。大部分主機允許用戶接受或者拒絕類
似的信息。
下面三個命令被定義來支持獲得信件。它們被用于郵件命令而不是MAIL
命令,指示接收SMTP這種操作的特殊意義:
SEND <SP> FROM:<reverse-path> <CRLF>
SEND命令要求郵件內容直接傳送到用戶終端。如果用戶未打開終端(或
者未接收終端信息),450響應將返回一個RCPT命令。如果信息被成功發送,
此操作成功。
SOML <SP> FROM:<reverse-path> <CRLF>
Send或者MaiL命令要求將郵件內容直接發送到用戶的終端上(如果用戶
在終端上)。如果用戶不在終端上,郵件內容直接進入郵箱。如果郵件被發送
到用戶終端或者用戶信箱,發送操作成功?!?
SAML <SP> FROM:<reverse-path> <CRLF>
Send和MaiL命令要求郵件內容直接發送到用戶終端上(如果用戶在終端上)。
不管怎么樣,信件都會進入信箱。如果信件進入信箱,發送操作成功。
用于MAIL命令的響應和這些命令的響應相同。
3.5. 打開和關閉
當打開傳送通道時,要交換一些信息以確定雙方的身份。以下的命令是
用于打開和關閉的:
HELO <SP> <domain> <CRLF>
QUIT <CRLF>
在HELLO命令中,主機自己發送命令,此命令可以被解釋為:“你好,
我是XX”。
打開聯結的例子
R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
S: HELO USC-ISIF.ARPA
R: 250 BBN-UNIX.ARPA
關閉聯結的例子
S: QUIT
R: 221 BBN-UNIX.ARPA Service closing transmission channel
3.6. 轉發
轉發路徑可能是如下格式:"@ONE,@TWO:JOE@THREE",在這里,ONE,TWO
和THREE是主機。這種格式用于強調地址和路徑的區別。郵箱是絕對地址,路
徑是關于如何到達的信息。這兩個概念不應該被混淆。
概念上,轉發路徑的元素被移動到回復路徑作為從一個SMTP服務器到另一
個SMTP服務器的信息?;貜吐窂绞且粋€反向數據源路徑,例如從當前信息的位
置到發起者的位置。當一個SMTP服務器從轉發路徑中刪除自己的標記并將它插
入到回復路徑中時,它必須使用它發送環境能夠理解的名稱來進行,以防它的
名稱在不同的環境中被理解為不同的名字。
如果當SMTP接收到信息的轉發路徑的第一個元素不是此SMTP的標記時,此
元素不從轉發路徑中刪除,而被用來決定下一個應該發送到的SMTP服務器。在
任何情況下,SMTP都將自己的標記加入反向路徑中。
使用源路徑時,接收SMTP接收轉發的郵件并發送到另一接收SMTP服務器上。
接收服務器可以接受或拒絕轉發本地用戶的郵件。接收SMTP通過將它自己的標記
從轉發路徑移至回復路徑的開始處來改變命令參數。這時,接收SMTP變成了發
送SMTP,也就建立了到下一個轉發路徑中SMTP的通道,然后,它向這個SMTP發
送郵件。
在回復路徑上的頭一個主機應是發送SMTP命令的主機,在轉發路徑上第一個
主機應是接收SMTP命令的主機。
注意:轉發路徑和回復路徑出現在SMTP命令和應答中,但不一定要出現在信
息中。也就是說,沒有必須要這樣的路徑特別這種格式出現在信息頭的"To:",
"From:"和"CC:"等域中。
如果SMTP服務器接受了轉發任務,但后來它發現因為轉發路徑不正確或者
其它原理無法發送郵件,它必須建立一"undeliverable mail"信號,將它此信號
送到此信的發主者那里。
此信號必須是從此主機的SMTP服務上發出的,當然了,此服務器不應該再報
告出錯信息的錯誤。一種阻止這種出錯報告循環的情況是在信號的郵件命令的回
復路徑上置空。在傳送此信息時,允許將回復路徑也置為空。一個MAIL命令后的
回復路徑為空表現為如下形式:
MAIL FROM:<>
下例中顯示了不可傳送的郵件信息。此信息是對從HOSTW上的JOE發出的郵件
經過在HOSTX需要經過HOSTZ到達HOSTY時出錯的回應。我們看到的例子是在HOSTX
和HOSTY之間發生的。
不可傳送郵件信息的例子
S: MAIL FROM:<>
R: 250 ok
S: RCPT TO:<@HOSTX.ARPA:JOE@HOSTW.ARPA>
R: 250 ok
S: DATA
R: 354 send the mail data, end with .
S: Date: 23 Oct 81 11:22:33
S: From: SMTP@HOSTY.ARPA
S: To: JOE@HOSTW.ARPA
S: Subject: Mail System Problem
S:
S: Sorry JOE, your message to SAM@HOSTZ.ARPA lost.
S: HOSTZ.ARPA said this:
S: "550 No Such User"
S: .
R: 250 ok
.1.2. COMMAND語法格式
命令是由命令碼和其后的參數域組成的。命令碼是四個字母組成的,不區別
大小寫。因為下面的命令的作用是相同的:
MAIL Mail mail MaIl mAIl
這對于引導任何參數值的標記也是適用的,如TO和to就是一樣的。命令碼和
參數由一個或多個空格分開。然而在回復路徑和轉發路徑中的參數是區別大小寫
的。特別是在一些主機上,"smith"和"Smith"就根本不是一個用戶。
參數域由不定長的字符串組成,它由<CRLF>結束,接收方在完全接收到此序列前
不會采取任何行動。方括號代表可選的參數域。如果不選擇的話,系統選擇默認
的設置。
下面是SMTP命令:
HELO <SP> <domain> <CRLF> MAIL <SP> FROM:<reverse-path> <CRLF>
RCPT <SP> TO:<forward-path> <CRLF>
DATA <CRLF>
RSET <CRLF>
SEND <SP> FROM:<reverse-path> <CRLF>
SOML <SP> FROM:<reverse-path> <CRLF>
SAML <SP> FROM:<reverse-path> <CRLF>
VRFY <SP> <string> <CRLF>
EXPN <SP> <string> <CRLF>
HELP [<SP> <string>] <CRLF>
NOOP <CRLF>
QUIT <CRLF>
TURN <CRLF>
上面參數域的格式在下面給BNF的格式給出,其中的"..."代表對于一個
域的一次或多次的重復。
<reverse-path> ::= <path>
<forward-path> ::= <path>
<path> ::= "<" [ <a-d-l> ":" ] <mailbox> ">"
<a-d-l> ::= <at-domain> | <at-domain> "," <a-d-l>
<at-domain> ::= "@" <domain>
<domain> ::= <element> | <element> "." <domain>
<element> ::= <name> | "#" <number> | "[" <dotnum> "]"
<mailbox> ::= <local-part> "@" <domain>
<local-part> ::= <dot-string> | <quoted-string>
<name> ::= <a> <ldh-str> <let-dig>
<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
<let-dig> ::= <a> | <d>
<let-dig-hyp> ::= <a> | <d> | "-"
<dot-string> ::= <字符串> | <字符串> "." <dot-string>
<字符串> ::= <字符> | <字符> <字符串>
<quoted-string> ::= """ <qtext> """
<qtext> ::= "\" <x> | "\" <x> <qtext> | <q> | <q> <qtext>
<字符> ::= <c> | "\" <x>
<dotnum> ::= <snum> "." <snum> "." <snum> "." <snum>
<number> ::= <d> | <d> <number>
<CRLF> ::= <CR> <LF>
<CR> ::= 回車符(ASCII碼13) <LF> ::= (ASCII碼10)
<SP> ::= 空格(ASCII碼32) <snum> ::=由一個,兩個或三個數字組成的介
于0-255之間的數字
<a> ::= 所有A-Z的52個大小寫英文字母
<c> ::= 128個ASCII字符,但不包括空格和特殊字符
<d> ::= 0-9數字
<q> ::=不包括<CR>,<LF>,"或\的128個ASCII字符
<x> ::=所有128個ASCII字符
<special> ::= "<" | ">" | "(" | ")" | "[" | "]" | "\" | "." | "," | ";" | ":" | "@" """
或控制字符
注意: "\"是一個轉意字符,它表示在其后的字符代表另外的意義。
例如"Joe\,Smith"用于表示單獨一個由逗號分隔的用戶名。主機通常由轉化為
地址的名稱代表。注意:域的名稱元素是正式的名稱,不能夠使用昵稱或假名。
有時候名稱的轉變機制可能不知道主機,這就造成了通信的阻塞。為了解決這
個問題,可以采取兩種方法:一種方法是:在"#"后加入一個十進制數表示主機地址;
另一種方法是在其后加入32位的IP地址,IP地址的形式是由句號分隔的四個介于
0-255之間的十進制數。時間戳行和返回路徑行的格式通常由下面定義:
<return-path-line> ::= "Return-Path:" <SP><reverse-path><CRLF>
<time-stamp-line> ::= "Received:" <SP> <stamp> <CRLF>
<stamp> ::= <from-domain> <by-domain> <opt-info> ";" <daytime>
<from-domain> ::= "FROM" <SP> <域> <SP>
<by-domain> ::= "BY" <SP> <域> <SP>
<opt-info> ::= [<via>] [<with>] [<id>] [<for>]
<via> ::= "VIA" <SP> <連接> <SP>
<with> ::= "WITH" <SP> <協議> <SP>
<id> ::= "ID" <SP> <字符串> <SP>
<for> ::= "FOR" <SP> <路徑> <SP>
<連接> ::= 在網絡信息中心注冊的連接的標準名稱
<協議> ::= 在網絡中心注冊的協議的名稱
<daytime> ::= <SP> <日> <SP> <時間>
<日期> ::= <日> <SP> <月> <SP> <年>
<時間> ::= <小時> ":" <分> ":" <秒> <SP> <時區>
<dd> ::= 由一個或兩個數字組成的每月1-31日
<月> ::= "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" | "JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC"
<年> ::= 由兩位數字表示本世界的年代00-99
<小時> ::= 每天的24小時,由0到24
<分> ::= 每小時的分鐘數0-59
<秒> ::= 每分鐘的秒數0-59
<時區> ::= 全球標準時區
返回路徑例子
Return-Path: <@CHARLIE.ARPA,@BAKER.ARPA:JOE@ABLE.ARPA>
時間戳行例子
Received: FROM ABC.ARPA BY XYZ.ARPA ; 22 OCT 81 09:23:59 PDT
Received: from ABC.ARPA by XYZ.ARPA via TELENET with X25
id M12345 for Smith@PDQ.ARPA ; 22 OCT 81 09:23:59 PDT
4.2. SMTP響應
對SMTP命令的響應是多樣的,它確定了在郵件傳輸過程中請求和處理的
同步,也保證了發送SMTP知道接收SMTP的狀態。每個命令必須有且只有一個
響應。
SMTP響應由三位數字組成,其后跟一些文本。數字幫助決定下一個應該
進入的狀態,而文本對人是有意義的。三位的響應已經包括了足夠的信息,
不用再閱讀文本,文本可以直接拋棄或者傳遞給用戶。特別的是,文本是與
接收和環境相關的,所以每次接收到的文本可能不同。在附錄E中可以看到
全部的響應碼。正規的情況下,響應由下面序列構成:三位的數字,<SP>,
一行文本和一個<CRLF>,或者也可以是一個多行響應。只有EXPN和HELP命令
可以導致多行應答,然而,對所有命令,多行響應都是允許的。
4.2.1. REPLY CODES BY FUNCTION GROUPS 500 格式錯誤,命令不可識別
(此錯誤也包括命令行過長)
501 參數格式錯誤
502 命令不可實現
503 錯誤的命令序列
504 命令參數不可實現
211 系統狀態或系統幫助響應
214 幫助信息
220 <domain> 服務就緒
221 <domain> 服務關閉傳輸信道
421 <domain> 服務未就緒,關閉傳輸信道(當必須關閉時,此應答可以作
為對任何命令的響應)
250 要求的郵件操作完成
251 用戶非本地,將轉發向<forward-path>
450 要求的郵件操作未完成,郵箱不可用(例如,郵箱忙)
550 要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可訪問)
451 放棄要求的操作;處理過程中出錯
551 用戶非本地,請嘗試<forward-path>
452 系統存儲不足,要求的操作未執行
552 過量的存儲分配,要求的操作未執行
553 郵箱名不可用,要求的操作未執行(例如郵箱格式錯誤)
354 開始郵件輸入,以<CRLF>.<CRLF>結束
554 操作失敗
4.3. 命令和應答序列
發送者和接收者之間的通信是一問一答的交替對話形式,由發送者控制。
這樣,發送發出一條命令,接收者發出一個響應。接收者在發送下一條指令
前必須等應答。一個重要的應答是連接應答。在連接完成時,接收者通常會
發送220"服務就緒"。發送者在繼續發送指令前會等待此應答。注意:每個連
接應答必須擁有服務主機的正式名稱作為第一部分,其后跟響應碼。例如:
220 <SP> USC-ISIF.ARPA <SP> Service ready <CRLF>
下面列出了成功和失敗應答,這些應答必須遵守嚴格的次序,接收者可以
不理會應答中的文本,但是由數字指定的意義和操作和命令應答序列不能更改。
命令響應序列:
每個命令列出了它可能的應答。使用在可能應答前的前綴"P"表示預備的
(未用在SMTP中),"I"表示中間的,"S"表示成功,"F"表示失敗,"E"表示錯
誤。如果STMP接收者必須關閉信道,可以對任何命令作出421(服務不可用,
關閉傳輸信道)響應。此表基于下面要講述的狀態圖:
CONNECTION ESTABLISHMENT(建立連接)
S: 220
F: 421
HELO
S: 250
E: 500, 501, 504, 421
MAIL
S: 250
F: 552, 451, 452
E: 500, 501, 421
RCPT S: 250, 251 F: 550, 551, 552, 553, 450, 451, 452 E: 500, 501, 503, 421
DATA
I: 354 -> data -> S: 250
F: 552, 554, 451, 452
F: 451, 554
E: 500, 501, 503, 421
RSET
S: 250
E: 500, 501, 504, 421
SEND
S: 250
F: 552, 451, 452
E: 500, 501, 502, 421
SOML
S: 250
F: 552, 451, 452
E: 500, 501, 502, 421
SAML
S: 250
F: 552, 451, 452
E: 500, 501, 502, 421
VRFY
S: 250, 251
F: 550, 551, 553
E: 500, 501, 502, 504, 421
EXPN
S: 250
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -