RFC821-容易郵件傳輸協議(SMTP)中文版 - 1
發表時間:2023-08-19 來源:明輝站整理相關軟件相關文章人氣:
[摘要]3.7. 域 域是最近被引入ARPA Internet郵件系統的。使用域可以使地址空間從一 個平面的普通字符串主機名變成全局地址的一個層次結構。主機由一個域名取 代,起始主機是由一系列元串組成,它...
3.7. 域
域是最近被引入ARPA Internet郵件系統的。使用域可以使地址空間從一
個平面的普通字符串主機名變成全局地址的一個層次結構。主機由一個域名取
代,起始主機是由一系列元串組成,它們由逗號按最特殊到一般的順序排列。
例如,"USC-ISIF.ARPA","Fred.Cambridge.UK"和"PC7.LCS.MIT.ARPA"可
能是主機-域標識符。
無論域名在SMTP中如何使用,只有正式的名稱才可以被使用,不可以使用
假名或昵稱。
3.8. 改變角色
TURN命令可以用來改變在傳輸信道上通信的程序的角色。如果程序A現在是
發送SMTP,它發送TURN命令并接到OK應答(250)后,它就變為接收SMTP了。同
理,程序B也可以從接收SMTP變為發送SMTP。若要拒絕改變角色,接收方可以發
送502作為應答。
注意:此命令是可選的。在使用TCP的傳輸信道時,一般不使用此命令。然
而,當建立傳輸信道的代價比較大時,此命令很有用。例如,此命令可以支持一
般公共交換電話系統作為傳輸信道。
4. SMTP說明
4.1. SMTP命令
4.1.1. 命令語法
SMTP命令定義了郵件傳輸或由用戶定義的系統功能。它的命令是由<CRLF>
結束的字符串。而在帶有參數的情況下,命令本身由<SP>和參數分開,如果
未帶參數可以直接和<CRLF>連接。郵箱的語法格式必須和接收站點的格式一致。
下面討論SMTP命令和應答。
發送郵件操作涉及到不同的數據對象,它們由不同的參數相互連接;
復路徑就是MAIL命令的參數,而轉發路徑則是RCPT命令的參數,郵件日期是
DATA命令的參數。這些參數或者數據對象必須跟在命令后。這種模式也就要
求有不同的緩沖區來存儲這些對象,也就是說,有一個回復路徑緩沖區,一
個轉發路徑緩沖區,一個郵件內容緩沖區。特定的命令產生自己的緩沖區,
或使一個或多個緩沖的內容被清除。
HELLO (HELO)
此命令用于向接收SMTP確認發送SMTP。參數域包括發送SMTP的主機名。
接收SMTP通過連接確認命令來向發送SMTP確認接收SMTP。引命令和OK響應確
認發送和接收SMTP進入了初始狀態,也就是說,沒有操作正在執行,所有狀態
表和緩沖區已經被子清除。
MAIL (MAIL)
此命令用于開始將郵件發送到一個多個郵箱中。參數域包括回復路徑。
返回路徑中包括了可選的主機和發送者郵箱列表。當有主機列表時,它是一
個回復路徑源,它說明此郵箱是由在表中的主機一一傳遞發送(第一個主機
是最后一個接收到此郵件的主機)過來的。此表也有作向發送者返回非傳遞信
號的源路徑。因為每個傳遞主機地址都被加在此表起始處,它就必須使用發送
IPCE而不是接收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信
息的回復路徑可能就是空的。
此命令清除回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區,并且將
此命令的回復路徑信息插入到回復路徑緩沖區中。
RECIPIENT (RCPT)
此命令用于確定郵件內容的唯一接收者;多個接收者將由多個此命令指定。
轉發路徑中包括一個可選的主機和一個必須的目的郵箱。當出現主機列表時,
這就是一個源路徑,它指明郵件必須向列表中的上一個主機發送。如果接收
SMTP未實現郵件的傳遞發送,就會返回如未知本地用戶(550)的信息給用戶。
當郵件被傳遞發送時,傳遞主機必須將自己的名稱由轉發路徑的開始處
移至回復路徑的結束處。當郵件最終到達目的地時,接收SMTP將以它的主機郵
件格式自己的名稱插入目標郵件中。例如,由傳遞主機A接收的帶有如下參
數的郵件時,
FROM:<USERX@HOSTY.ARPA>
TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA>
將會變成如下形式:
FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA>
TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.
此命令導致它的轉發路徑參數加入轉發路徑緩沖區中。
DATA (DATA)
接收者將跟在命令后的行作為郵件內容。此命令導致此命令后的郵件內容
加入郵件內容緩沖區。郵件內容可以包括所有128個ASCII碼字符。郵件內容由只
包括一個句號的行結束,也就是如下的字符序列:"<CRLF>.<CRLF>",它指示了
郵件的結束。
郵件內容的結束指示要求接收者現在就處理保存的郵件內容。此過程將回復
路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區的內容全部清空。如果操作成功,
接收者必須返回OK應答;如果失敗也必須返回失敗應答。
當接收SMTP收到一條信息時,無論是用作轉發還是此郵件已經到達目的地,
它都必須在郵件內容的開始處加上時間戳這一行,這一行指示了接收到郵件主
機和發出此郵件主機的標識,以及接收到郵件內容的時間和日期。轉發的信件
將有多行這樣的時間戳。當接收SMTP作最后一站的傳送時,它將返回路徑信息
行插入郵件中。此行包括了發送命令中的<reverse-path>的信息。在這里,最
后一站的傳送的意思是郵件將被送到目的用戶手中,但在一些情況下,郵件可
能需要更進一步的加工并由另外的郵件系統傳送。
可能在返回路徑中的郵箱與實際發送的郵件不一致,這個情況可能發生在
需要傳送一個特定的錯誤處理信箱而不是信件發送者那里。上面所述說明了,
最后的郵件內容由一個返回路徑行,和在其后的一個或多個時間戳行構成。這
些行后面是郵件內容的頭和體信息。
當處理后面的郵件數據指示部分成功時就需要特定的說明。這種情況可能
發生在發送SMTP發現當郵件需要傳送給多個用戶時,只能夠成功地向其中的一
部分發送信息這種情況下。在這種情況下,必須對DATA命令發送OK應答,而接
收SMTP組織并發送一個"不可傳遞郵件"信息到信息的發送者。在此信息中或者
發送一個不成功接收者的列表,或者每次發送一個不成接收者,而發送多次。
所有不可傳遞郵件信息由MAIL命令發送。
返回路徑和接收時間戳例子
Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA>
Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST
Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST
Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST
Date: 27 Oct 81 15:01:01 PST
From: JOE@ABC.ARPA
Subject: Improved Mailing System Installed
To: SAM@JKL.ARPA
This is to inform you that ...
SEND (SEND)
此命令用于開始一個發送命令,將郵件發送到一個或多個終端上。參數
域包括了一個回復路徑,此命令如果成功就將郵件發送到終端上了。
回復路徑包括一個可選的主機列表和發送者郵箱。當出現主機列表時,
表示這是一個傳送路徑,郵件就是經過這個路徑上的每個主機發送到這里的
(列表上第一個主機是最后經手的主機)。此表用于返回非傳遞信號到發送者。
因為每個傳遞主機地址都被加在此表起始處,它就必須使用發送IPCE而不是接
收IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑
可能就是空的。
此命令清除回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區,并且將
此命令的回復路徑信息插入到回復路徑緩沖區中。
SEND OR MAIL (SOML)
此命令用于開始一個郵件操作將郵件內容傳送到一個或多個終端上,或者
傳送到郵箱中。對于每個接收者,如果接收者終端打開,郵件內容將被傳送到
接收者的終端上,否則就送到接收者的郵箱中。參數域包括回復路徑,如果成
功地將信息送到終端或郵箱中此命令成功。
回復路徑包括一個可選的主機列表和發送者郵箱。當出現主機列表時,表
示這是一個傳送路徑,郵件就是經過這個路徑上的每個主機發送到這里的(列
表上第一個主機是最后經手的主機)。此表用于返回非傳遞信號到發送者。因
為每個傳遞主機地址都被加在此表起始處,它就必須使用發送IPCE而不是接收
IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑可
能就是空的。
此命令清除回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區,并且將
此命令的回復路徑信息插入到回復路徑緩沖區中。
SEND AND MAIL (SAML)
此命令用于開始一個郵件操作將郵件內容傳送到一個或多個終端上,并傳
送到郵箱中。如果接收者終端打開,郵件內容將被傳送到接收者的終端上和接
收者的郵箱中。參數域包括回復路徑,如果成功地將信息送到郵箱中此命令成
功。
回復路徑包括一個可選的主機列表和發送者郵箱。當出現主機列表時,表
示這是一個傳送路徑,郵件就是經過這個路徑上的每個主機發送到這里的(列
表上第一個主機是最后經手的主機)。此表用于返回非傳遞信號到發送者。因
為每個傳遞主機地址都被加在此表起始處,它就必須使用發送IPCE而不是接收
IPCE(如果它們不是一個IPCE的話)清楚的名稱。一些出錯信息的回復路徑可
能就是空的。
此命令清除回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區,并且將
此命令的回復路徑信息插入到回復路徑緩沖區中。
RESET (RSET)
此命令指示當送郵件操作將被放棄。任何保存的發送者,接收者和郵件內
容應該被拋棄,所有緩沖區和狀態表應該被清除,接收方必須返回OK應答。
VERIFY (VRFY)
此命令要求接收者確認參數是一個用戶。如果這是(已經知道的)用戶名,
返回用戶的全名和指定的郵箱。此命令對回復路徑緩沖區,轉發路徑緩沖區和郵
件內容緩沖區沒有影響。
EXPAND (EXPN)
此命令要求接收者確認參數指定了一個郵件發送列表,如果是一個郵件發送
列表,就返回表中的成員。如果這是(已經知道的)用戶名,返回用戶的全名和
指定的郵箱。此命令對回復路徑緩沖區,轉發路徑緩沖區和郵件內容緩沖區沒有
影響。
HELP (HELP)
此命令導致接收者向HELP命令的發送者發出幫助信息。此命令可以帶參數,
并返回特定的信息作為應答。此命令對回復路徑緩沖區,轉發路徑緩沖區和郵件
內容緩沖區沒有影響。
NOOP (NOOP)
此命令不影響任何參數和已經發出的命令。它只是說明沒有任何操作而不是
說明接收者發送了一個OK應答。此命令對回復路徑緩沖區,轉發路徑緩沖區和郵
件內容緩沖區沒有影響。
QUIT (QUIT)
此命令指示接收方必須發送OK應答然后關閉傳送信道。接收方在接到QUIT命
令并做出響應之前不應該關閉通信信道。發送方在發送QUIT命令和接收到響應之
前也不應該關閉信道。即使出錯,也不應該關閉信道。如果連接被提前關閉,接
收方應該象接收到RSET命令一樣,取消所有等待的操作,但不恢復原先已經做過
的操作。而發送方應該象接收到暫時錯誤(4XX)一樣假定命令和操作仍在支持
之中。
TURN (TURN)
此命令指定接收方要么發送OK應答并改變角色為發送SMTP,要么發送拒絕信
息并保持自己的角色。如果程序A現在是發送SMTP,它發出TURN命令后接收到
OK(250)應答,它就變成了接收SMTP。程序A就進入初始狀態,好象通信信道剛
打開一樣,這時它發送220準備好服務信號。如果程序B現在是接收SMTP,它發
出TURN命令后接收到OK(250)應答,它就變成了發送SMTP。程序A就進入初始狀
態,好象通信信道剛打開一樣,這時它準備接收220準備好服務信號。
若要拒絕改變角色,接收方可以發送502應答。
對于這些命令的順序有一定的限制。對話的第一個命令必須是HELLO命令,
此命令在此后的會話中也可以使用。如果HELLO命令的參數不可接受,必須由返
回一個501失敗應答,同時接收到的SMTP必須保持在與剛才一致的狀態下。
NOOP,HELP,EXPN和VRFY命令可以在會話的任何時候使用。MAIL,SEND,SOML或
SAML命令開始一個郵件操作。一旦開始了以后就要發送RCPT和DATA命令。郵件操
作可以由RSET命令終止。在一個會話中可以有一個或多個操作。
如果在操作開始參數不可接受,必須返回501失敗應答,同時接收到的SMTP
必須保持在與剛才一致的狀態下。如果操作中的命令順序出錯,必須返回503失
敗應答,同時接收到的SMTP必須保持在與剛才一致的狀態下。
會話的最后一個命令必須是QUIT命令。此命令在會話的其它時間不能使用。 (http://www.fanqiang.com)