【问题标题】:Retrieve ONLY new message from email仅从电子邮件中检索新消息
【发布时间】:2012-01-12 22:54:04
【问题描述】:

我正在尝试使用 Imaplib 从电子邮件地址检索消息,到目前为止,我已经能够检索消息,但是,我只对原始消息感兴趣,这意味着如果消息是“Re:”,那么我不想要以前的消息,我只想要新的,这可能吗?

这是我从 python 中得到的:

test # 10\r\n\r\nOn Thu, Dec 1, 2011 at 11:17 PM, paulo alvarado\r\n<commonzenpython@gmail.com>wrote:\r\n\r\n> test # 9\r\n>\r\n>\r\n> On Thu, Dec 1, 2011 at 11:15 PM, paulo alvarado <commonzenpython@gmail.com\r\n> > wrote:\r\n>\r\n>> test # 8\r\n>>\r\n>>\r\n>> On Thu, Dec 1, 2011 at 11:14 PM, paulo alvarado <\r\n>> commonzenpython@gmail.com> wrote:\r\n>>\r\n>>> test # 7\r\n>>>\r\n>>> On Thu, Dec 1, 2011 at 10:36 PM, paulo alvarado <\r\n>>> commonzenpython@gmail.com> wrote:\r\n>>>\r\n>>>> test # 6\r\n>>>>\r\n>>>>\r\n>>>> On Thu, Dec 1, 2011 at 10:36 PM, paulo alvarado <\r\n>>>> commonzenpython@gmail.com> wrote:\r\n>>>>\r\n>>>>> test # 5\r\n>>>>>\r\n>>>>>\r\n>>>>> On Thu, Dec 1, 2011 at 9:46 PM, paulo alvarado <\r\n>>>>> commonzenpython@gmail.com> wrote:\r\n>>>>>\r\n>>>>>> this is test # 4\r\n>>>>>>\r\n>>>>>>\r\n>>>>>>\r\n>>>>>> On Thu, Dec 1, 2011 at 7:13 PM, paulo alvarado <\r\n>>>>>> commonzenpython@gmail.com> wrote:\r\n>>>>>>\r\n>>>>>>> this is test # 1\r\n>>>>>>>\r\n>>>>>>\r\n>>>>>>\r\n>>>>>\r\n>>>>\r\n>>>\r\n>>\r\n>\r\n

如你所见,测试 #10 是新消息,其他内容是以前的回复 我正在使用python2.7

编辑

我有一个票务申请,所以基本上,我希望用户能够通过电子邮件提交票证,所以用户的电子邮件是作者,主题是标题,消息正文是描述,我有除了如何处理回复之外,一切都很好,因为此时,如果用户通过电子邮件回复,工单的描述不仅会包含新问题(或响应),还会包含以前的问题,所以我想知道是否有办法删除以前的回复并只保留新回复,这是我的问题的图片。

【问题讨论】:

  • 人们在回复邮件时可以随意使用他们想要的任何主题行。邮件客户端在回复时可能不会使用 In-Reply-To 或 References 标头 - 或者用户可能只是点击“回复”消息以“免费”获取 To: 标头,而没有意识到邮件将被线程化在错误的位置。你到底想完成什么?
  • 编辑了我的问题以包含更多信息
  • 优秀。新问题听起来可以解决。 :)
  • 能否提供一个我可以使用的示例或链接?

标签: python imap imaplib


【解决方案1】:

谷歌提出

import imaplib
conn = imaplib.IMAP4_SSL(host='mail.example.com')
# or conn =imaplib.IMAP4(host='mail.example.com') for no SSL 
try: 
    (retcode, capabilities) = conn.login('user', 'pass') 
except: 
    # cannot login
conn.select(readonly=1) # Select inbox or default namespace 
(retcode, messages) = conn.search(None, '(UNSEEN)') 
if retcode == 'OK': 
    for message in messages[0].split(' '): 
        print 'Processing :', message 
        (ret, mesginfo) = conn.fetch(message, '(BODY[HEADER.FIELDS (SUBJECT FROM)])') 
        if ret == 'OK': 
            # process message here 
conn.close() 

conn.search(None, '(UNSEEN)') 是代码中的重要部分。

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2013-10-15
    • 2017-08-29
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2019-03-01
    • 2019-02-28
    相关资源
    最近更新 更多