Используя Python и imaplib, я подключаюсь к 2 серверам imap (gmail) и пытается сопоставить электронные письма между ними, используя дату их даты.
У меня две проблемы.
У меня есть подключения к файлу Oldmail и NewMail.
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']
Моя цель - найти соответствующие письма между двумя серверами после неудачной передачи, используя приложение миграции googles. Затем удалите сообщение электронной почты на старом сервере, если они были перенесены. Если вы можете предложить лучший способ сделать это, это также будет полезно.
Похоже, проблема заключается только в форматировании даты. В этом случае это:
a = datetime.strptime(pmsg['Date'],"%a, %d %b %Y %H:%M:%S %z")
даст вам объект времени даты, и это даст вам сообщение:
searchfor = '(ON "%s")' %(a.strftime("%d-%b-%Y")
Помните, что это даст все сообщения с этой даты, так как игнорирует информацию о времени и часовом поясе.
В качестве альтернативы вам стоит посмотреть ваши электронные письма и посмотреть, может ли заголовок "Message-Id:" помочь, так как он должен быть одинаковым для каждой учетной записи для подлинно дублированных писем.