2011-01-20 68 views

回答

23

所有消息信息使用FETCH command檢索。不過,您有兩種選擇如何使用它。

首先,你可以檢索整個電子郵件消息,一字不差。在這種情況下,您需要在您的客戶端中包含一個MIME解析器來計算消息的結構。 (每個平臺至少有一個或兩個流行的MIME解析器;因爲你沒有告訴我們你在編碼什麼,所以我不能爲你推薦一個。)一旦你從你的MIME解析器得到消息結構,需要一些客戶端邏輯來確定哪些部分是附件。這是值得看看RFC 2183讓你開始。一般而言,以「attachment」開頭的Content-Disposition部分將成爲附件,但所有郵件客戶端作者都需要經歷一段反覆試驗才能正確完成的過程。爲了下載整個電子郵件,你會發出命令IMAP

$ UID FETCH <uid> BODY.PEEK[] 

其次,你可以有IMAP服務器通過發出FETCH BODYSTRUCTURE解析報文結構爲你(注:無方括號)。你必須自己解析返回的BODYSTRUCTURE數據; IMAP RFC explains the format並給出了幾個例子。

# message, no attachments: 
("TEXT" "PLAIN" ("CHARSET" "ISO-8859-1" "FORMAT" "flowed") NIL NIL "7BIT" 1469 50 NIL NIL NIL NIL) 

# message, one attachment 
(("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "QUOTED-PRINTABLE" 56 1 NIL NIL NIL NIL)("AUDIO" "X-WAV" ("NAME" "voicemail.wav") NIL NIL "BASE64" 152364 NIL ("attachment" ("FILENAME" "voicemail.wav")) NIL NIL) "MIXED" ("BOUNDARY" "----_=_NextPart_001_01C4ACB3.5AA7B8E2") NIL NIL NIL) 

一旦你已經確定你是哪部分感興趣,你可以發出可顯示郵件正文中FETCH。然後,您的客戶端可以列出消息附件(解析出BODY響應),然後可以返回並返回FETCH,如果用戶點擊它們。所以IMAP命令,你會發出將沿着線:

$ UID FETCH <uid> (BODY ENVELOPE) # get structure and header info 
$ UID FETCH <uid> (BODY[1])   # retrieving displayable body 
$ UID FETCH <uid> (BODY[2])   # retrieving attachment on demand 
1

我相信你正在尋找的是IMAP v4 FETCH command

+0

確定,但事情是,我曾經什麼都電子郵件是我選擇畢竟郵件已經被下載,然後,這個郵件我想下載附件。現在一旦我的郵件被下載,然後我嘗試下載附件;它會說$ OK UID FETCH已完成,所以我能做些什麼? – 2011-01-20 10:11:32