【问题标题】:Search imap using parsed date from another email使用来自另一封电子邮件的解析日期搜索 imap
【发布时间】:2011-11-10 17:17:03
【问题描述】:

使用 Python 和 imaplib 我正在连接到 2 个 imap 服务器 (gmail) 并尝试使用日期时间来匹配它们之间的电子邮件。

我有 2 个问题。

  • 解析头部返回的日期不能直接用于搜索,格式错误。
  • 我不清楚使用哪个 imap 搜索来按解析标头返回的日期和时间进行搜索。

我有 Oldmail 和 NewMail imap 连接。

NewMail.select("[Gmail]/All Mail", readonly=True)
OldMail.select("[Gmail]/All Mail")

随便选一封邮件“6001”

typ, msg = NewMail.fetch('6001', '(BODY[HEADER])')
parser = HeaderParser()
pmsg = parser.parsestr(msg[0][1])

>>> pmsg['Date']
'Tue, 28 Dec 2010 21:56:00 -0700'

但这不是正确使用的格式,当然有一个简单的方法:-)

searchfor = '(ON "' + pmsg['Date'] + '")'
>>> searchfor
'(ON "Tue, 28 Dec 2010 21:56:00 -0700")'
OldMail.search(None, searchfor)

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py", line 620, in search
    typ, dat = self._simple_command(name, *criteria)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py", line 1060, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/imaplib.py", line 895, in _command_complete
    raise self.error('%s command error: %s %s' % (name, typ, data))
error: SEARCH command error: BAD ['Could not parse command']

我的目标是在使用谷歌迁移应用程序传输失败后在 2 台服务器之间找到匹配的电子邮件。然后删除旧服务器上的电子邮件,如果他们已经转移。如果您能提出更好的方法,那也会很有帮助。

【问题讨论】:

    标签: python search imap imaplib


    【解决方案1】:

    看起来问题只是日期格式。在这种情况下:

    a = datetime.strptime(pmsg['Date'],"%a, %d %b %Y %H:%M:%S %z")
    

    会给你一个日期时间对象,这会给你消息:

    searchfor = '(ON "%s")' %(a.strftime("%d-%b-%Y")
    

    请记住,这将给出该日期的所有消息,因为它会忽略时间和时区信息。

    作为替代方案,值得查看您的电子邮件并查看“Message-Id:”标题是否有帮助,因为对于真正重复的电子邮件,每个帐户的标题应该相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多