IMAP附件检索命令

时间:2011-01-20 09:47:46

标签: imap

我正在使用IMAP处理邮件客户端,我正在寻找接收邮件附件的命令。

3 个答案:

答案 0 :(得分:24)

使用FETCH command检索所有消息信息。但是,您有两种选择如何使用它。

首先,您可以逐字检索整个电子邮件。在这种情况下,您将需要在客户端中包含MIME解析器以确定消息的结构。 (每个平台至少有一个或两个流行的MIME解析器;因为你还没有告诉我们你编写的是什么,我不能为你推荐一个。)一旦从你的MIME解析器中获得了消息结构,你就'我需要一些客户端逻辑来确定哪些部分是附件。值得一看RFC 2183让你入门。一般来说,Content-Disposition以“attachment”开头的部分将成为附件,但所有邮件客户端作者都会经历一个试错阶段,并将其设置为正确。要下载整个电子邮件,您需要发出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 :(得分:1)

我相信你要找的是IMAP v4 FETCH command

答案 2 :(得分:0)

您可以使用Context.IO的文件资源快速轻松地获取附件。

http://context.io/docs/2.0/accounts/files#get