获取部分IMAP文本部分

时间:2013-04-03 15:54:25

标签: python imap imaplib

我有一个电子邮件界面客户端,我正在使用IMAP来处理我的请求。我希望能够实时显示基本电子邮件数据,以获取列表视图。

例如,在GMail列表视图中。为此,我需要做一个IMAP请求,以获取所有电子邮件的主题,所有电子邮件的日期等。这是迄今为止的工作。

问题是,我还要显示正文的第一个字符。如果我使用BODYSTRUCTURE调用来获取text/HTML部分的索引需要花费太长时间(对于包含数千个字符的电子邮件,每封电子邮件可能需要超过一秒钟,而仅使用主题/日期/ etc调用最多需要0.02秒

我尝试使用BODY[INDEX]<0.XYZ>字节,其中XYZ是我们想要获取的第一个字节的数量,但令我沮丧的是,它需要使用BODY[INDEX]调用。有时甚至更多。

是否有其他方法可以获得第一个文本字符,但速度很快?如果我想在我的界面上列出300封电子邮件,我不能为每封电子邮件花费1秒钟来获取第一个文本字符。

我正在使用带有imaplib的Python,尽管可能不相关。

2 个答案:

答案 0 :(得分:4)

IMAP RFC中定义了一个原始提取命令。

FETCH 2 (BODY[]<0.size>)

例如,如果要获取前100个字节的邮件,则可以将命令激活为

FETCH 2 (BODY[]<0.100>)

答案 1 :(得分:3)

如果您真的想要获取消息的第一个文本部分的开头,则必须解析BODYSTRUCTURE。获取所需文本部件的部件ID后,请使用BODY[number]<0.size>语法。

另一个答案中给出的建议在多部分邮件上会失败(例如,如果您有text/plaintext/html,这是目前最常见的格式。