Поиск IMAP с использованием разобранной даты из другого электронного письма

1

Используя Python и imaplib, я подключаюсь к 2 серверам imap (gmail) и пытается сопоставить электронные письма между ними, используя дату их даты.

У меня две проблемы.

  • Дата, возвращаемая путем разбора заголовка, непосредственно не используется в поиске, формат неверен.
  • Мне непонятно, какой imap-поиск использовать для поиска по дате и времени, возвращенный путем разбора заголовка.

У меня есть подключения к файлу 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. Затем удалите сообщение электронной почты на старом сервере, если они были перенесены. Если вы можете предложить лучший способ сделать это, это также будет полезно.

Теги:
search
imap
imaplib

1 ответ

2
Лучший ответ

Похоже, проблема заключается только в форматировании даты. В этом случае это:

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

даст вам объект времени даты, и это даст вам сообщение:

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

Помните, что это даст все сообщения с этой даты, так как игнорирует информацию о времени и часовом поясе.

В качестве альтернативы вам стоит посмотреть ваши электронные письма и посмотреть, может ли заголовок "Message-Id:" помочь, так как он должен быть одинаковым для каждой учетной записи для подлинно дублированных писем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню