我正在使用IMAP处理邮件客户端,我正在寻找接收邮件附件的命令。
答案 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的文件资源快速轻松地获取附件。