組織:中國互動出版網(http://www.china-pub.com/) RFC文檔中文翻譯計劃(http://www.china-pub.com/compters/emook/aboutemook.htm) E-mail:[email protected] 譯者:王安鵬(anpengwang [email protected]) 譯文發佈時間:2001-5-24 版權:本中文翻譯文檔版權歸中國互動出版網所有。可以用於非商業用途自由轉載,但必須 保留本文檔的翻譯及版權信息。 Network Working Group Mark. R. Horton Request for Comments: 976 Bell Laboratories February 1986 UUCP郵件交換格式標準 (RFC976 UUCP Mail Interchange Format Standard) 備忘錄狀態 爲了適應維護ARPA網上不同項目的狀態和進展的當前情況的要求,特爲社區成員發佈 本RFC。本文檔的內容截止到發佈之日是精確的,但目的在於進一步改進。後續的RFC將 會反映這些改進。 本文檔定義了UUCP項目中兩臺機器之間傳遞郵件消息的標準格式。本文沒有涉及單臺 機器上消息的存儲格式,也不包括一臺機器從另一臺機器上獲取數據的底層傳輸機制。本文 講述了UUCP區中的主機應遵循的標準。本備忘錄的分發不受限制。 目錄 1. 簡介 1 2. 基礎 2 2.1 混合地址(Hybrid Addresses) 2 2.2 傳輸 3 2.3 批處理SMTP 3 2.4 信封(Envelope) 4 2.5 郵件路由 5 3. 算法 5 4. 例子 6 5. 結論 7 6. 參考 8 1. 簡介 本文的目的在於定義UUCP項目中主機之間傳遞郵件消息的標準格式,沒有討論消息在 一臺機器上的存儲格式,也不涉及一臺機器從另一臺機器上獲取數據的底層傳輸機制。我們 假定遠程執行rmail(或者等價的)命令是UUCP網絡的基本操作。 一條基本法則是:如果我們試圖發明一種新的標準,通常無法與現有的系統兼容。世界 上已經有太多的(互相矛盾的)標準,引起了混淆,比如[email protected]按照舊的UUCP標準被解 釋爲a!([email protected]),而在Internet世界裏則被解釋爲(a!b)@c.d。(兩個標準都不支持括號,否則 就可以兼容了。外殼(shell)和UUCP傳輸機制同樣存在嚴重的問題)。 ARPA社區已經定義了明確的、具有完善文檔的、可擴展的標準族,我們也選擇這些標 準應用於UUCP區。(UUCP區是使用UUCP連接並註冊到UUCP項目的社區的子集,代表 一個管理實體。)因爲實際的傳輸機制取決於兩臺主機的安排,可能包括UUCP、SMTP、 NMDF或者其它工具,我們選用RFC920(域)和RFC822(郵件格式)作爲UUCP區的標 準。所有系統間的郵件傳輸都應遵循這兩個標準。另外,如果ARPA社區在以後改變了他 們的標準,我們也將修改我們的標準以保證與之兼容,以便提供一個合理的軟件升級時間。 本文詳述了RFC822和RFC920在UUCP世界中的解釋,說明了如何對信封編碼以及在 混合實現環境中如何實現UUCP尋路。 2. 基礎 消息可以分爲兩部分:信封和消息本身。信封包含郵件傳輸服務所需要的信息,消息包 含對收發方有用的信息。消息分爲首部和主體。有時候中間主機會改變消息(如增加Received 行),但除非是網關需要改變傳輸格式,中間主機一般不得修改消息本身。在UUCP世界中, 信封包括“目的地址”(通常表現爲rmail命令的參數)和“源地址”(通常由消息的第一行 或者最初幾行表示,以“From”或者“>From”開始,又稱爲“From行”)。RFC32的報頭 行(包括“From:”和“To:”)作爲消息的一部分是消息體本身的文本。 UUCP在運輸層及以下各層使用短主機名,如“ucbvax”。我們把這種短名稱爲“6字符 名”,因爲任何UUCP的實現都至少把前6個字符視爲有效的。(有一些把前7個或者前14 個字符視爲有效,但我們必須使用最低的通用標準。)UUCP名可以長於6個字符,但其前 6個必須各不相同。RFC920域的名稱,如“ucbvax Berkeley.EDU”稱爲“域名”。這兩個名 是不同的。大小寫對於6字符名被認爲是不同的,但對於域名則認爲是相同的。6字符名後 加上“.UUCP”,如“ubcvax.UUCP”在過去作爲對使用6字符名的主機的域格式的引用。 隨着對組織化的域名如“ucbvax.Berkelry.EDU”的支持,這一類名稱正在逐步淘汰。 2.1 混合地址(Hybrid Addresses) 在UUCP世界中主要使用兩種郵件地址語法:舊式UUCP軟件使用的“a!b!c!user”(完 全路徑)格式指明瞭傳送郵件到目的地址的路線;遵循RFC822的“user@domain”(域)語 法格式。大部分情況下都可以根據給定的地址判定地址的類型。但是對於@左側包含“a!” 的混合地址,如a!b@c就出現了混淆:即可以解釋爲(a!b)@c.d,也可以解釋爲a!([email protected])。這 兩種解釋都有意義,前者用於RFC822,後者是UUCP軟件事實上的標準。 由於混合地址帶來的混亂,我們建議所有的運輸層軟件在任何時候都應該避免使用混合 地址。純粹的完全地址語法可以用來澄清這種混淆,上例中的第一種解釋可以寫爲“c.d!a!b”, 第二種解釋寫爲“a!c.d!b”。我們建議所有的實現都是用這種“完全域”語法,除非他們確 實知道下一臺機器上運行什麼。 按照RFC822和AT&T消息傳輸體系,我們建議所有允許混合地址的主機採用(a!b)@c.d 這種解釋。 2.2 傳輸 因爲許多UUCP域不支持SMTP,我們把用於“遠程執行”的方法定義在傳輸機制的 基礎上。要“遠程執行”的命令與其標準輸出信息應一起讀作:rmail user@domain ...。參數 user@domain必須符合RFC920和RFC822。允許包含多個地址參數,這樣把同一個消息發 往多個接收方時可以節省傳輸時間。 另一種方式是“rmail domain!user”,其中“domain”至少包含一個逗點而且不含“!”。 這種表示可以被準確地解釋爲user@domain,可以通過舊式的UUCP主機傳輸消息而無需擔 心地址被改變。“user”字符串可以包含除“@”之外的任意字符,禁止該字符是因爲無法 確定中間主機如何處理它。(同樣建議避免使用“%”,有些主機把“%”視爲“@”的同義 字。)不過,如果傳輸路徑包含不理解域的主機,下面的格式是可能的: rmail a!b!c!domain!user 域至少要包含一個逗點,因而可以與6字符的UUCP站點名區分開。(單層的域沒有逗 點,應在尾部增加額外的逗點,比如Mark.Horton@att 就成了“att.!Mark.Horton”。把!格式 改爲@格式的解釋器應該刪除尾部逗點——如果有的話。)我們不希望發生此類情況,除非 本地網絡使用類似user@host的地址。 簡單的應用可以只使用domain!user語法(而不是user@domian),因爲這種方式對3類 網關(參見節3.5)也是安全的。 2.3 批處理SMTP 符合標準的實現可能會選擇支持一種稱爲“批處理SMTP”的協議。SMTP(簡單郵件 傳輸協議)是ARPA社區的標準郵件傳輸協議(RFC821),BITNET和Mailnet也使用該協 議。因爲SMTP被設計爲交互式的,把一系列命令組成以批發到遠程機器上成批執行是可 能的。BSMTP的一個優點是UNIX外殼不參與消息的解釋,因而電子信息中可以包含空格 和括號這樣的特殊字符(這些字符在X.400地址中將會非常普遍)。 爲了使UNIX支持BSMTP,符合標準的主機應當把用戶的郵件命令“b-smtp”解釋爲 批處理SMTP(我們使用“b-smtp”而不是“bsmtp”是因爲後者與一個登錄名衝突)。因爲 許多郵件系統把包含單個逗點一行當作“文件尾”的標誌處理,而SMTP把逗點用作必需 的文件尾標誌,爲了區分出報頭,我們在BSMTP的每一行增加一個特殊的“#”。在郵件發 送系統中實現這一點的簡單方法是包括如下別名: b-smtp: "|egrep '^#' | sed 's/^#//' | /usr/lib/sendmail -bs" 這樣就可以把命令輸送給SMTP解釋器。更好的方案還要同時檢查錯誤並把錯誤信息反饋 給發送方。 下面的例子說明了一個從seismo.CSS.GOV發往cbosgd.ATT.COM的BSMTP消息。這 個例子是通過UUCP連接傳遞給命令“rmail b-smtp”的文件。注意RFC- 822 消息位於DATA 行和逗點行(最後一行)之間。信封信息在MAIL FROM和RCPT TO行中傳遞。發送系統 的名稱在HELO行中。實際的信封信息(帶有“#”的行以上的部分)被忽略了,不一定要 出現。 From foo!bar Sun Jan 12 23:59:00 1986 remote from seismo Date: Tue, 18 Feb 86 13:07:36 EST From: [email protected] Message-Id: <8602181807.AA10228@[email protected]> To: [email protected] #HELO seismo.CSS.GOV #MAIL FROM:<[email protected]> #RCPT TO:<[email protected]> #DATA #Date: Tue, 18 Feb 86 13:07:36 EST #From: [email protected] #Message-Id: <8602181807.AA10228@[email protected]> #To: [email protected] # #This is a sample message. #. #QUIT 2.4 信封(Envelope) 命令的標準輸入應該以單獨的一行:From domain!user date remote from system開始,後 面緊跟着RFC822格式的報頭和消息主體。可能在該行前還有其他的FROM行——這些行 是可以增加的,消息途經的每個系統增加一行。“系統字段”也可能堆疊成單獨一行,在 “user”字符串中包含許多“!”。“From”前面可能還會有“>”字符。一般說來,這些“信 封”信息應該與舊式的UUCP郵件一樣遵從相同的約定。主要的區別是當系統名緊湊書寫 時,如果舊式的寫法是a!b!c!mysys!me,新的寫法改爲a!b!c!mysys!domain!me,其中“domain” 至少包含一個逗點符號,“mysys”通常是稱爲“domain”的系統的6字符UUCP名。如果 “domain!”是多餘的,就可以在信封中——源路徑或者目的地址——省略掉。 如果需要把信息包裝成只有一個FROM行,接收系統可能會丟棄多餘的“From_”行。 它把“path!domain!user”和“信封”信息——包括消息發送方的地址,可能還生成新的一 行如Received或Sent-By,其中保存着轉發日期和轉發系統——一起發送出去。(不建議使 用Received,因爲這樣的行可能在真正增加該行的系統之前被其他的系統添加,而其他的系 統可能事實上也包括一個Received行。Sent-By行與Received行類似,但日期不需要改爲 RFC822格式,而且不主張由名稱被提及的系統提前增加該行。) 如果接收系統繼續把消息轉發給另一個系統,它就會在前面增加一個FROM行,給處於 發送方相同的user@domain地址並加上自身的系統名。如果接收系統把消息保存到本地的信 箱內,建議僅在消息前生成一個FROM行並保存日期(使用相同的格式,因爲有些郵件閱 讀程序對這種格式是敏感的),而不是用“remote from system”語法格式。 注意:如果中間系統在user@domain語法格式地址——無論是信封還是消息體中——前 面增加文本如“system!”,都是不符合本標準和RFC822規範的。 2.5 郵件路由 爲了正確地發送郵件,有時候需要了解目的系統或者中間系統運行了什麼軟件或者遵從 什麼樣的約定。我們曾經試圖儘量減少必要的信息量,但是對子域的支持可能需要在不同條 件下使用不同的方法。爲了預報其他系統的行爲方式,我們把主機分爲三類。這三類包括: 一類 僅使用舊式的UUCP“!”路徑。我們設想主機理解本地用戶名:“rmail user”和完 全路徑“rmail host1!host2!user”,但我們不對主機做更多的假定。如果沒有關於某 臺主機的任何信息,我們可以毫無問題地把它作爲第一類處理,因爲我們沒有對 其如何處理混合地址作任何假設。 二類 舊式的UUCP“!”路徑和4.2BSD格式的域解析。我們假設除了具有一類主機的功 能外,還能夠理解“rmail user@domain”,其中“domain”位於UUCP區之外但主 機可以識別。二類主機不必理解“domain!user”,也不需要路由器。符合RFC920 標準的非UUCP域中的主機被認爲是二類主機,即使也可能識別“host!user”。 三類 具有一類和二類主機的全部功能。另外,三類主機還能夠爲相距較遠的主機發送 UUCP郵件,並且能夠理解如前所述的語法“ramil domain!user”。所有連接到UUCP 的網關必須是第三類。 本文檔描述了三類主機必須具有的功能。一類和二類主機已經存在,並將繼續存在相當 長的一段時間,但被視爲“過時的系統”並最終將升級到3類主機的狀態。 3. 算法 通過UUCP連接傳遞消息給地址user@domain的算法可以概述如下: a. 如果地址的實際格式是@domain1:user@domain2,就把“domain1”而不是 “domain2”保留下來作爲“doamin”,完整的格式讀爲“domain1!domain2!user”。 b. 確定本地可以識別的“domain”中的最明確的部分,記作“d:”,該部分應該是 “domain”的後綴。這項工作可以通過掃描一個表來完成,表項按照從特殊到一 般的順序排列,比較表項與“domain”檢查該表項是否與“domain”的尾部匹配。 例如,對於地址[email protected],如果本地主機能夠識別“uucp”和“att.com”, 那麼d就應該是“att.com”。表的最後一項是空字符串,與完全無法識別的域匹配。 c. 查看基本表項(found table entry),尋找網關名(g:)和通往g的UUCP“!”格 式的路徑“r:”。G不一定要與本地主機直接相連,但應視作連接域d的網關。(對 於給定的d,在不同的主機上g和r可能具有不同的值,不過g通常是一樣的) d. 根據r的開始部分查找“下一跳”的主機n,n總是直接與本地主機相連。 e. 如果可能則確定g和n的類型。 f. 建立n能夠解釋的適當的目標字符串s(見下面)。 g. 把消息及目標信息s傳遞給n。 如果環境中包括其它類型的不使用UUCP“!”解析的網絡,表中可能還會有附加的 信息,如使用的連接類型。路徑信息在其他的環境中可能被替換爲那個網絡的特殊信 息。 上述第二步(b)中提到的表中的第一項一般是非常精確的,能夠直接構造知名的路徑 而無需通過域樹尋路。域樹僅保留用於下列情況:沒有更詳盡多的信息;信息量很少;默認 路徑是最佳的選擇。如果存在更好的路徑就可以把該信息寫入表中。如果主機有大量的信息 傳送給第二個主機,一般希望在兩臺主機之間建立直接的UUCP連接併爲它們建立相應的 表項以便直接傳遞郵件,即使兩臺主機位於不同的域中。路徑表的構造應該爲最大的通信量 保持最短最便宜的路徑。 這裏對目標字符串n(上述第六步f)的構造提供幾點提示。如果發送站點確定下一跳是 三類主機,那麼“envelope recipient”信息(rmail的s參數)既可以使用域“!”格式 (host.com!user),也可以採用域“@”格式([email protected])。如果下一跳步不是三類主機, 或者發送站點不能確定,那麼應儘可能使用“!”格式,因爲無法預知下一跳會如何處理混 合地址。 如果已知網關是第三類,可以使用域“!”格式,但是如果發送站點不能確定其類型,或 者查找中目標字符串完全匹配(而不是與某個父域匹配),則應使用6字符“!”格式“r!user”, 如“dumbhost!host!user”。如果網關看來實際上是一個子域的網關,即與一個父域匹配(如 地址[email protected],表中沒有找到host.gateway.com但發現了gateway.com),可以 把它假定爲第三類。這樣在一定程度上可以安全使用如 dumbhost!domain!host.domain.com!user之類的路徑。如果存在到目標主機的直接連接,可以 使用user@domain或者domain!user兩種語法格式。 符合本標準的主機是三類主機,所有的子域網關必須是三類主機。 4. 例子 假設主機A.D.COM 向主機C.D.COM發送郵件。設兩臺主機的6字符名分別爲aname 和dname,途徑中間主機bname。 主機A的用戶輸入: mail [email protected] 用戶界面生成一個文件並使用命令(如sendmail [email protected] < file)把它傳遞給傳輸機 制,文件內容如下: Date: 9 Jan 1985 8:39 EST From: [email protected] (My Name) Subject: sample message To: [email protected] This is a sample message 傳輸機制查找到c.d.com的路徑,但在數據庫中沒有找到;於是尋找d.com,發現其路 徑是bname!dname!%s,而且發現c.cd.com是三類主機。然後加入c.d.com!user,就得到了路 徑bname!dname!c.d.com!user。(如果發現c.d.com的路徑是bname!cname!%s,結果路徑 bname!cname!user中的域將被忽略,因爲無法確認目標主機屬於哪一類。) 傳輸機制預備一個FROM行並把它傳遞給uux: uux - bname!rmail dname!c.d.com!user < file2,file2的內容包括: From A.D.COM!user Wed Jan 9 12:43:35 1985 remote from aname Date: 9 Jan 1985 8:39 EST From: [email protected] (My Name) Subject: sample message To: [email protected] This is a sample message (注意消息尾部的空行——至少需要一個空行。)這將導致B主機執行命令:rmail dname!c.d.com!user。B預備了它自己的FROM行並繼續轉發郵件:uux - dname!rmail c.d.com!user < file3,file3的內容包括: From nuucp Wed Jan 9 12:43:35 1985 remote from bname >From A.D.COM!user Wed Jan 9 11:21:48 1985 remote from aname Date: 9 Jan 1985 8:39 EST From: [email protected] (My Name) Subject: sample message To: [email protected] This is a sample message C主機執行命令:rmail c.d.com!user並壓縮FROM行,然後把消息保存到本地——可能 使用相同的格式: From bname!aname!A.D.COM!user Wed Jan 9 12:43:35 1985 Date: 9 Jan 1985 8:39 EST From: [email protected] (My Name) Subject: sample message To: [email protected] This is a sample message 5. 結論 符合本標準的主機可以接受如下所有的格式: rmail localuser (user中不含“!”、“%”、“@”) rmail hosta!hostb!user (user中不含“!”、“%”、“@”) rmail user@domain (域中只有逗點“.”) rmail domain!user (域中至少包含一個逗點“.”) rmail domain.!user (域中沒有圓點的情形) 消息的信封部分(FROM行)應遵循現有的約定使用“!”路徑。消息的首部(Word: 行,如Date:、From:、To:和Subject:)必須符合RFC822規範。所有首部地址必須採用@格 式。原始站點應確保地址符合RFC822,不能要求轉發站點或者網關把地址轉換爲合法的 RFC822地址。(同樣轉發站點或者網關也不得把合法的RFC822地址user@domain轉化成不 符合RFC822的地址gateway!user@domain,即使要轉發給一類UUCP主機。) 6. 參考 [1] Postel, J., "Simple Mail Transfer Protocol", RFC-821, USC/Information Sciences Institute, August, 1982. [2] Crocker, D., "Standard for the Format of ARPA Internet Text Messages", RFC-822, Department of Electrical Engineering, University of Delaware, August, 1982. [3] Postel, J., and J. K. Reynolds, "Domain Requirements", RFC-920, USC/Information Sciences Institute, October, 1984. RFC976 UUCP Mail Interchange Format Standard UUCP郵件交換格式標準 1 RFC文檔中文翻譯計劃
RFC976 UUCP 郵件互換格式標準
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.