使用另一封电子邮件中的分析日期搜索IMAP
题
使用Python和Imaplib,我将连接到2个IMAP服务器(Gmail),并尝试使用其日期时间来匹配它们之间的电子邮件。
我有两个问题。
- 通过解析标题返回的日期在搜索中不直接使用,格式是错误的。
- 我尚不清楚哪种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']
我的目标是在使用Google迁移应用程序传输失败后,在2个服务器之间找到匹配的电子邮件。然后如果传输了旧服务器上的电子邮件。如果您可以提出一种更好的方法,这也将有所帮助。
解决方案
看来问题只是日期格式化。在这种情况下,
a = datetime.strptime(pmsg['Date'],"%a, %d %b %Y %H:%M:%S %z")
将为您提供一个日期时间对象,这将为您提供消息:
searchfor = '(ON "%s")' %(a.strftime("%d-%b-%Y")
请记住,这将从该日期起提供所有消息,因为它忽略了时间和时区信息。
作为替代方案,值得查看您的电子邮件,并查看“ Message-ID:”标题是否有帮助,因为每个帐户在每个帐户上都应该相同,以获取真正重复的电子邮件。
不隶属于 StackOverflow