<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      RFC821-容易郵件傳輸協議(SMTP)中文版 - 2

      [摘要]本文出自: 作者: (2001-11-23 08:08:00) 4.1.2. COMMAND語法格式   命令是由命令碼和其后的參數域組成的。命令碼是四個字母組成的,不區別 大小寫。因為下面的命令的...
      本文出自: 作者: (2001-11-23 08:08:00)

      4.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
      F: 550
      E: 500, 501, 502, 504, 421
      HELP
      S: 211, 214
      E: 500, 501, 502, 504, 421
      NOOP
      S: 250
      E: 500, 421
      QUIT
      S: 221
      E: 500
      TURN
      S: 250
      F: 502
      E: 500, 503

      4.4. 狀態圖
        下面狀態圖是一個簡單的SMTP實現,每一組命令都有一個狀態圖。在圖中,
      只使用了響應碼的第一位數字作為響應的代表。命令組是對每個命令建立模式然
      后以結構模式將命令集中起來的。對于每個命令有三種可能的應答:成功(S),
      失。‵)和錯誤(E)。在狀態中,我們使用B代表開始,使用W代表等待應答。


       



        此狀態圖使用了如下命令:HELO, MAIL, RCPT, RSET, SEND, SOML,
      SAML, VRFY, EXPN, HELP, NOOP, QUIT, TURN.
        下面是對于DATA命令的更復雜的狀態圖:


       



       
        注意:這里的郵件內容是多行的,接收者只能收到最后一行時才發出應答。
       
      4.5. 詳細內容
      4.5.1. 最小實現
        為使SMTP能夠工作,對于接收者來說,這是最少應該實現的命令:
      COMMANDS - HELO
      MAIL
      RCPT
      DATA
      RSET
      NOOP
      QUIT

      4.5.2. 透明性
        沒有對數據透明性的保證,在發送類似"<CRLF>.<CRLF>"結束郵件內容時會
      發生錯誤。通常,用戶不關心這個"非法"序列。若要所有用戶能夠透明地使用
      必須使用以下措施:
      1. 在發送郵件之間,發送SMTP必須檢查郵件的每一行,如果是一個句號,就
      在行首再加一個句號。
      2. 當郵件被接收時,接收SMTP必須檢查郵件的每一行,如果發現一行僅有一
      個句號,郵件就此結束,如果一行中有兩個句號,那么這一行中就只應該有一
      個句號,而將第一個句號刪除。
        發送的郵件內容可以包括所有128個ASCII字符。所有字符發送到收信者的
      郵箱,包括格式符號和其它控制字符。如果傳輸信道提供一個8位數據流,7位
      的ASCII碼就可以在其中傳送,而將最高位置為0。一些系統在接收和存儲時需
      要對數據進行格式轉換。對于使用不同于ASCII字符集的主機或不能以串的形
      式而只能以記錄形式存儲的主機更是如此,如果必須進行轉換,必須能夠再次
      轉換回來,對于用于存儲轉發的主機更是如此。
       
      4.5.3. 大小
        一些對象需要最大和最小大小。也就是說,每個實現必須能夠接收大于最
      小大小的對象,不能發送大于最大大小的對象。對于可能的最大大小,實現技
      術上并沒有限制。
      用戶 用戶名的最大長度是64個字節。
      域 域的最大長度是64個字符
      路徑 回復路徑和轉發路徑的最大長度是256個字符
      命令行 命令行的最大長度,包括回車符為512個字符
      應答行 應答行的最大長度,包括回車符為512個字符
      文本行 文本行的最大長度,包括回車符和為透明性增加的字符不得超過1000
      個字符
      接收緩沖區 接收緩沖區最多可以容納100個接收者

      如果出錯,應答如下:
      500 行過長
      501 路徑過多
      552 接收者過多
      552 郵件內容過多


      附錄 A TCP傳輸服務

        傳輸控制協議(TCP)在ARPA Internet中使用,并遵守網絡協議的US DoD標
      準。SMTP傳輸信道連接建立在發送進程的端口U和接收進程的端口L上。一個單一
      的全雙工信道用于傳輸。被指定用于此協議的服務端口為25,也就是說L=25。
      TCP連接支持傳輸8位字節,而SMTP只需要傳輸7位;這樣,每個8位字符的最高
      位被置為0。

      附錄 B NCP傳輸服務

        ARPANET主機-主機協議(由網絡控制程序實現)也可以用于ARPANET。
      SMTP傳輸信道連接建立在發送進程的端口U和接收進程的端口L上;其后,根據
      初始連接協議(ICP)建立一對簡單連接。這一對簡單連接被用作傳輸信道。
      此協議被指定為連接套接字25,也就是說L=25。NCP連接支持傳輸8位字節,而
      SMTP只需要傳輸7位;這樣,每個8位字符的最高位被置為0。

      附錄 C NITS

        也可以使用網絡獨立轉輸服務。通過在NITS在發送進程和接收進程之間建
      立傳輸信道。發送進程執行CONNECT原語,然后等待接收ACCEPT原語。NITS連接
      支持傳輸8位字節,而SMTP只需要傳輸7位;這樣,每個8位字符的最高位被置
      為0。

      附錄 D X.25傳輸服務

        可以直接使用公共數據網絡接收的X.25服務,然而,推薦在其上使用可靠
      的端到端的協議如TCP。

      附錄 E 應答碼構成方法

        三位的應答碼每一位都有特定的意義。每一位應答表示是否是成功的,失敗
      的或未完成的。通過這一位,不復雜的SMTP發送就可以決定下一步的操作,如果
      發送方希望大概了解究竟出了什么問題,它可以檢測第二位,而第三位則保存了
      最后更完整的信息。也就是說,從第一位到第三位,接收方可以一步比一步精
      確地確定接收方的狀態。對于第一位有五種可能的表示代表不同的意義:

        1yz 部分完成應答

        命令被接受,但是要求的操作被中止,原因在應答碼中。發送方應該再次
      發送另一命令指明是否繼續操作,或者放棄操作。

        2yz 全部完成應答

        要求的操作已經完成,可以開始另一個新的請求。

        3yz 需要近一步信息的部分完成應答

        命令被接受,但是要求的操作被中止,需要接收進一步的信息。發送方應
      該發送另一條命令指明進一步的信息。

        4yz 暫時未完成應答

        命令未被接受,要求的操作也未執行,但是發生錯誤的狀態是暫時的,可
      以再一次請求操作。發送者應該返回命令序列的開始命令(如果有的話)。很
      難解釋這個暫時的意義,特別對于兩個不同的站點來說。區別應答是屬于些類
      還是下一類的方法是:如果能夠不加任何改變地重復的再一次發送命令,就是
      本類的,如果不是,就是下一類(5yz)的。

        5yz 永久未完成應答

        命令未被接受,要求的操作未完成。發送對命令的重復不起作用。即使一
      些出錯條件已經改變,但是用戶已經不希望重試,而希望在未來的某個時間再
      進行操作。

        應答的第二位的意義有以下幾類:

      x0z 語法:此類型的應答是針對以下情況的:語法錯誤;符合語法但命令不存
      在功能;未完成或冗余的命令。

      x1z 信息:此類型的應答是用于請求信息的,如狀態或幫助信息。

      x2z 連接:此類型的應答是關于傳輸信道的。

      x3z 未使用。

      x4z 未使用。

      x5z 郵件系統:此類型的應答指明接收方郵件系統關于請求傳送或其它操作
      的狀態的。

        第三位給出了更詳細的說明。列出的應答表說明了這一點。文本應答是
      推薦使用的,而不是必須使用的,它的內容是可以根據不同情況而變化的。
      另一方面,應答碼必須嚴格遵守本節的說明。接收方不應該因為稍稍的不同
      情況而自己創建新的代碼而不使用已經定義的代碼。例如,如NOOP命令的情
      況,如果成功執行它后,不用返回任何新的信息,只用返回250應答。當發送
      的命令要求一個未實現的站點指定操作時,應答應該是502。 應答文本可能
      多于一行;在此情況下,文本必須被標記,接收文本的一方才不致于少讀入
      一行數據。這要求特定的格式說明多行應答。此格式是:每一行,除了最后
      一行外,都以應答碼加一個"-"開始。而最后一行以應答碼加空格<SP>開始。
      如下例:

      123-First line

      123-Second line

      123-234 text beginning with numbers

      123 The last line

        通常情況下,接收的一方只用尋找應答碼加空格的那一行就可以,而忽
      略前面行的內容。在特殊的情況下,發送方必須知道響應文本的內容,這時
      接收應答的一方可以通過當時的情況正確地決定是否需要知道文本的內容。  

      附錄 F 一些例子


      本節提供了一些SMTP會話的完整例子。

      典型的SMTP操作

      此類顯示郵件如何由在USC-ISIF和機上的Smith發送到BBN-UNIX主機上
      Jones,Green和Brown的。這里,我們假設USC-ISIF主機直接和BBN-UNIX主機聯系。
      Jones和Brown接收郵件,而Green在BBN-UNIX上沒有郵箱。

      R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready

      S: HELO USC-ISIF.ARPA

      R: 250 BBN-UNIX.ARPA

       

      S: MAIL FROM:<Smith@USC-ISIF.ARPA>

      R: 250 OK

       

      S: RCPT TO:<Jones@BBN-UNIX.ARPA>

      R: 250 OK

       

      S: RCPT TO:<Green@BBN-UNIX.ARPA>

      R: 550 No such user here

       

      S: RCPT TO:<Brown@BBN-UNIX.ARPA>

      R: 250 OK

       

      S: DATA

      R: 354 Start mail input; end with <CRLF>.<CRLF>

      S: Blah blah blah...

      S: ...etc. etc. etc.

      S: .

      R: 250 OK

       

      S: QUIT

      R: 221 BBN-UNIX.ARPA Service closing transmission channel

      放棄SMTP操作

      R: 220 MIT-Multics.ARPA Simple Mail Transfer Service Ready

      S: HELO ISI-VAXA.ARPA R: 250 MIT-Multics.ARPA

      S: MAIL FROM:<Smith@ISI-VAXA.ARPA>

      R: 250 OK

       

      S: RCPT TO:<Jones@MIT-Multics.ARPA>

      R: 250 OK

       

      S: RCPT TO:<Green@MIT-Multics.ARPA>

      R: 550 No such user here

       

      S: RSET

      R: 250 OK

       

      S: QUIT

      R: 221 MIT-Multics.ARPA Service closing transmission channel



      轉發郵件

      第一步:源主機到轉發主機

       

      R: 220 USC-ISIE.ARPA Simple Mail Transfer Service Ready

      S: HELO MIT-AI.ARPA

      R: 250 USC-ISIE.ARPA

       

      S: MAIL FROM:<JQP@MIT-AI.ARPA>

      R: 250 OK

       

      S: RCPT TO:<@USC-ISIE.ARPA:Jones@BBN-VAX.ARPA>

      R: 250 OK

       

      S: DATA

      R: 354 Start mail input; end with <CRLF>.<CRLF>

      S: Date: 2 Nov 81 22:33:44

      S: From: John Q. Public <JQP@MIT-AI.ARPA>

      S: Subject: The Next Meeting of the Board

      S: To: Jones@BBN-Vax.ARPA

      S:

      S: Bill:

      S: The next meeting of the board of directors will be

      S: on Tuesday.

      S: John.

      S: .

      R: 250 OK

       

      S: QUIT

      R: 221 USC-ISIE.ARPA Service closing transmission channel




      日韩精品一区二区三区高清