回覆列表
  • 1 # 南荒北逃

    郵箱名是7-bit的。客戶端實現體不能試圖建立8-bit的郵箱名,應當把LIST或者LSUB返回的任意8-bit郵箱名解釋為UTF-8。伺服器實現體應當禁止8-bit郵箱名的建立,LIST或者LSUB不應當返回8-bit的郵箱名。

    注意:8-bit的郵箱名在本協議的早期版本中並未定義。一些站點使用 一個本地的8-bit字元序列表示非ASCII郵箱名。這種用法是不能有效溝通的,現在而言也是不正規的。

    不區分大小寫的郵箱名INBOX是一個特殊的郵箱名,它被保留下來,表示“該伺服器上該使用者的主郵箱”。所有其它郵箱名的解釋都是依賴於實現體的。

    特別的,本文件未指定是否區分非INBOX郵箱名的大小寫。一些伺服器實現體全部區分大小寫;一些伺服器實現體保留新建立的郵箱名的大小寫狀態,而其它的則是不區分大小寫的;還有一些伺服器實現體則強制命名為特定形式。客戶端實現體必須與其中的任何一種做好互動。如果一個伺服器實現體把非 INBOX郵箱名解釋為不區分大小寫的,則它必須特別使用5.1.3一節中所描述的國際命名約定。

    建立一個新的郵箱名,有一些客戶端的考慮:

    1)原語類(參見正式語法一節)的任意一個字元要求郵箱名錶述為一個引用字 符串或者原義字串。

    2)CTL和其它生僻字元很難表述在使用者介面,所以最好避免。

    3)雖然萬用字元列表字元(“%”和“*”)在郵箱名中是正確的,所以很難把LIST 和LSUB命令用於這樣的郵箱名,因他們與萬用字元的解釋相沖突。

    4)通常,保留一個字元(取決於伺服器實現體)用於層級分隔。

    5)“#”和“&”這兩個字元有約定語上的意義,應當避免以其它意義使用它。

    1、 郵箱層級命名

    如果需要輸出分層的郵箱名,郵箱名必須是從左到右的層級,並使用一個字元分隔不同層級。在一個郵箱名中,所有層級的分層使用同一個層級分隔字元表示。

    2、 郵箱名稱空間的約定

    按照約定,任何郵箱名的第一個分層元素以“#”開頭,它標識剩餘名稱的名稱空間。這使得消除具有各自名稱空間的、不同型別的郵箱儲存間的含糊意義成為可能。

    例如,提供訪問USENET網路組的實現體可以使用“#news”名稱空間把USENET網路組的名稱空間與其它郵箱的網路組名稱空間分割開 來。Comp.mail.misc網路組可能有一個“#news.comp.mail.misc”的郵箱名,而郵箱名“comp.mail.misc”可以指向一個不同的物件(如,一個使用者的本地郵箱)。

    3、郵箱的國際命名約定

    按照約定,IMAP4rev1的國際郵箱名用“UTF-7”中所描述的UTF-7編碼的修訂版本描述。在執行本協議的一個早期版本的伺服器上,修訂版UTF-7同樣是可以用的。

    在修訂版UTF-7中,除“&”外的US-ASCII列印字元都可以表示郵箱名;即八進位制值為0×20-0×25和0×27-0×7e的字元。字元“&”(0×26)表示成兩個八進位制串“&-”。

    所有其它字元(八進位制值為0×00-0×1f和0×7f-0xff)表示成修訂版BASE64,它具有“UTF-7”之後的一個修訂――“,”替代“/”使用。修訂版BASE64不能用來表示任何可以表示自身的US-ASCII列印字元。

    “&”用來轉換至修訂版BASE64,“-”用來轉換回US-ASCII。不存在從BASE64至US-ASCII的隱式轉換,且無效 轉換(BASE64下的“-&”;注意,US-ASCII下的“&-”意為“&”)也是不允許的;就是說,一個以非 ASCII ISO-10646字元結尾的郵箱名必須以一個“-”結尾。

    這些修訂是為了修正與UTF-7的以下錯誤:

    1)UTF-7使用“+”字元實現轉換;這跟郵箱名稱中的“+”,特別是USENET 網路組名稱的一般用法相沖突。

    2)UTF-7的編碼是BASE64,它使用“/”字元;這跟“/”作為層級分隔符 的普遍用法相沖突。

    3)UTF-7禁止“/”的未編碼使用;這跟“/”作為層級分隔符的普遍用法相 衝突。

    4)UTF-7禁止“~”的未編碼合用;這跟一些伺服器將“~”作為根目錄標記 的用法相沖突。

    5)UTF-7允許選擇多種形式表示同樣的字串;特別的,US-ASCII列印字 符可以表示成編碼後的形式。

    雖然修訂版UTF-7是一個約定,它在伺服器建立了用一個嵌入的“&”字元處理任意郵箱名的一些請求。特別的,伺服器實現體必須保留一 個修訂版UTF-7名稱的修訂版BASE64部分的準確形式,並把這些文字視為區分大小寫的,即使郵箱名是不區分大小寫的或者部分割槽分大小寫、部分不區分 大小寫的。

    伺服器實現體應當用一個嵌入的“&”字元――用作CREATE的一個變數,檢驗任意郵箱名:正確修訂版UTF-7語法中,不含有多餘的 轉換符,也不含有可表示自身的任意US-ASCII列印字元的修訂版BASE64編碼。但是,客戶端實現體不能依賴伺服器做這個,也不應當試圖用一個嵌入 的“&”字元建立一個郵箱名,除非它用修訂版UTF-7的語法編譯。

  • 中秋節和大豐收的關聯?
  • 狗嚎叫有什麼預兆?