我有一个电子邮件界面客户端,我正在使用IMAP来处理我的请求。我希望能够实时显示基本电子邮件数据,以获取列表视图。
例如,在GMail列表视图中。为此,我需要做一个IMAP请求,以获取所有电子邮件的主题,所有电子邮件的日期等。这是迄今为止的工作。
问题是,我还要显示正文的第一个字符。如果我使用BODYSTRUCTURE
调用来获取text/HTML
部分的索引需要花费太长时间(对于包含数千个字符的电子邮件,每封电子邮件可能需要超过一秒钟,而仅使用主题/日期/ etc调用最多需要0.02秒
我尝试使用BODY[INDEX]<0.XYZ>
字节,其中XYZ
是我们想要获取的第一个字节的数量,但令我沮丧的是,它需要使用BODY[INDEX]
调用。有时甚至更多。
是否有其他方法可以获得第一个文本字符,但速度很快?如果我想在我的界面上列出300封电子邮件,我不能为每封电子邮件花费1秒钟来获取第一个文本字符。
我正在使用带有imaplib的Python,尽管可能不相关。
答案 0 :(得分:4)
在IMAP RFC中定义了一个原始提取命令。
FETCH 2 (BODY[]<0.size>)
例如,如果要获取前100个字节的邮件,则可以将命令激活为
FETCH 2 (BODY[]<0.100>)
答案 1 :(得分:3)
如果您真的想要获取消息的第一个文本部分的开头,则必须解析BODYSTRUCTURE。获取所需文本部件的部件ID后,请使用BODY[number]<0.size>
语法。
另一个答案中给出的建议在多部分邮件上会失败(例如,如果您有text/plain
和text/html
,这是目前最常见的格式。