Imap使用fetch指令接收郵件服務器上的郵件,fetch指令的參數很多,特將其總結如下:
參數:序列集,郵件數據項名稱或者宏
響應:非標簽化響應:FETCH
結果:OK-fetch完成
NO-fetch錯誤:不能獲取該數據
BAD-未知命令,或者無效參數
FETCH命令獲取郵箱中的一個郵件的相關數據。被獲取的數據項可以是一個原語,或者一個組合列表。
在正式語法中基於msg-att-static規則確認的大部分數據項,是靜態的,並且不能因為任意特定郵件而改變。在正式語法中msg-att-static規則確認的其它數據項,可以改變,或者作為一個STORE命令的一個結果,或者因為外部事件。
例如,如果一個客戶端接收到它已經知道的、一個郵件的一個信封,它可以安全地忽略新傳送的信封。
有三種宏,它們指明數據項的普遍使用集,並能代替數據項使用。一個宏必須被自身所用,並且不能與其它宏或者數據項連接。
ALL
等效於:(FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)
FAST
等效於:(FLAGS INTERNALDATE RFC822.SIZE)
FULL
等效於:(FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)
現在已經定義的、可以被獲取的數據項有:
BODY
BODYSTRUCTURE的不可擴展形式。
BODY[<section>]<<partial>>
特定主體塊的文本。塊聲明是一個零的集合,或者根據時間分隔開的更多塊聲明。一個塊聲明或者是一個塊號,或者是以下的一個:HEADER,HEADER.FIELDS,HEADER.FIELDS.NOT,MIME,及TEXT。一個空的塊聲明指向整個郵件,包括頭部。
每個郵件有至少一個塊號。Non-[MIME-IMB]郵件,及不帶內嵌郵件的non-multipart[MIME-IMB]郵件,只有一個塊1。
郵件簇被分配連續的塊號,如果它們出現在郵件中。如果一個特定塊的類型是郵件或者郵件簇,則這個塊后面必須跟着它在塊簇中的塊號的時間。
一個類型為MEEAGE/RFC822類型的塊也有塊號,指向MESSAGE塊域的塊集。
HEADER,HEADER.FIELDS,HEADER.FIELDS.NOT,及TEXT塊聲明可能是單個塊聲明,也可能是以一個或者多個 數字型的塊聲明為前綴――其前提是該數字型的塊聲明指向一個MESSAGE/RFC822類型的塊。MIME塊聲明必須以一個或者多個數字型的塊聲明為前 綴。
HEADER,HEADER.FIELDS,及HEADER.FIELDS.NOT塊聲明指向郵件的[RFC-2822]頭部,或者一個內嵌 [MIME-IMT] MESSAGE/RFC822郵件。HEADER.FIELDS和HEADER.FIELDS.NOT其后跟着field- name([RFC-2822]中有定義)名稱的一個列表,並返回頭部的一個子集。HEADER.FIELDS返回的子集只包括那些帶有與列表中的名稱之 一相符的一個field-name的頭部域;類似地,HEADER.FIELDS.NOT返回的子集只包含帶有一個不匹配域名稱的頭部域。域匹配是不區分 大小寫的,除非用別的方法強制。子集化並不把[RFC-2822]定義的、頭部和主體之間的空行排除在外;空行包含在所有頭部獲得中,除非一個郵件沒有主 體也沒有空行。
MIME塊聲明指向該塊的[MIME-IMB]頭部。
TEXT塊聲明指向郵件的文本主體,不包括[RFC-2822]頭部。
這是一個帶有它的一些塊聲明的復雜郵件的一個例子:
HEADER ([RFC-2822] header of the message)
TEXT ([RFC-2822] text body of the message) MULTIPART/MIXID
1 TEXT/PLAIN
2 APPLICATION/OCTET-STREAM
3 MESSAGE/RFC2822
3.HEADER ([RFC-2822] header of the message)
3.TEXT ([RFC-2822] text body of the message) MULTIPART/MIXED
3.1 TEXT/PLAIN
3.2 APPLICATION/OCTET-STREAM
4 MULTIPART/MIXED
4.1 IMAGE/GIF
4.1.MIME ([MIME-IMB] header for the IMAGE/GIF)
4.2 MESSAGE/RFC822
4.2.HEADER ([RFC-2822] header of the message)
4.2.TEXT ([RFC-2822] text body of the message) MULTIPART/MIXID
4.2.1 TEXT/PLAIN
4.2.2 MULTIPART/ALTERNATIVE
4.2.2.1 TEXT/PLAIN
4.2.2.2 TEXT/RICHTEXT
獲取指定文本的一個子串是可能的。這是通過添加一個開的角符(“〈”),請求的第一個字節位置,一個時間,請求的字節的最大數,及一個閉的角符(“〉”)到塊聲明,來實現的。如果起始字節超出了文本的末尾,則返回一個空的字符串。
試圖讀取超出文本末尾內容的任何局部獲取都會被適當截斷。從第0字節開始的一個局部獲取都返回局部獲取,即使這種截斷發生。
注意:這意味着一個1500字節的郵件的BODY[]<0.2048>將返回帶有一個大小1500的原義的BODY[]<0>,而不是BODY[]。
注意:一個HEADER.FIELDS或者HEADER.FIELDS.NOT塊聲明的一個子串獲取,在子集化頭部之后計算。
/Seen標記是隱含標記;如果這導致標記改變,它們應當作為FETCH響應的一部分被包含進來。
BODY.PEEK[<section>]<<partial>>
BODY[<section>]的一個替代形式,它不會暗暗設置/Seen標記。
BODYSTRUCTURE
郵件的[MIME-IMB]主體結構。它的計算是由服務器把[MIME-IMB]頭部域解釋為[RFC-2822]頭部和[MIME-IMB]頭部。
ENVELOPE
郵件的信封結構。它的計算是由服務器把[RFC-2822]頭部解釋為組件塊,默認為所需要的多個域。
FLASG
為該郵件設置的標記。
INTERNALDATE
郵件的實際日期。
RFC822
功能上等效於BODY[],不同的是,其結果的非標簽化FETCH數據(返回RFC822)的語法。
RFC822.HEADER
功能上等效於BODY.PEEK[HEADER],不同的是,其結果的非標簽化FETCH數據(返回RFC822.HEADER)的語法。
RFC822.SIZE
郵件的[RFC-2822]大小。
RFC822.TEXT
功能上等效於BODY[TEXT],不同的是,其結果的非標簽化FETCH數據(返回RFC822.TEXT)的語法。
UID
郵件的唯一標識符。
例子:
C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])
S: * 2 FETCH ….
S: * 3 FETCH ….
S: * 4 FETCH ….
S: A654 OK FETCH completed
目前市場上的郵件安全產品大都是一套封閉郵件系統,部署上存在使用戶放棄原來的賬戶使用新賬戶的問題,這就導致在部署時存在一定困難。在郵件透明加密產品中,天御雲安的隱秘郵很新穎,使用安全郵件網關對郵件透明加密,用戶完全感知不到郵件網關的存在,但是郵件在服務器上卻穿上了盔甲,任你黑客攻破服務器,看到的郵件卻是一堆亂碼。