【问题标题】:Obtain partial IMAP text part获取部分 IMAP 文本部分
【发布时间】:2013-03-25 09:37:41
【问题描述】:

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

例如,在 GMail 列表视图中。为此,我需要执行 IMAP 请求以获取所有电子邮件的主题、所有电子邮件的日期等。到目前为止,此方法有效。

问题是,我还想显示正文的第一个字符。如果我使用BODYSTRUCTURE 调用来获取text/HTML 部分的索引,则需要很长时间(对于具有数千个字符的电子邮件,每封电子邮件可能需要一秒钟以上,而仅使用主题/日期/等调用需要最多约 0.02 秒。

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

还有其他方法可以快速获取第一个文本字符吗?如果我想在我的界面上列出 300 封电子邮件,我无法为每封电子邮件花费 1 秒钟的时间来获取第一个文本字符。

为此,我将 Python 与 imaplib 一起使用,尽管可能不相关。

【问题讨论】:

    标签: python imap imaplib


    【解决方案1】:

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

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

    例如,如果你想获取前 100 个字节的邮件,那么你可以触发命令

    FETCH 2 (BODY[]<0.100>)
    

    【讨论】:

      【解决方案2】:

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

      另一个答案中给出的建议将在多部分消息上失败(例如,如果您有 text/plaintext/html,这是当今最常见的格式。

      【讨论】:

      • 是的。这就是我对上述答案的假设。使用 BODY[INDEX] 代替 BODY[],其中 INDEX 是文本/HTML 文本部分的索引。
      猜你喜欢
      • 1970-01-01
      • 2011-03-11
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多