Поиск IMAP с использованием разобранной даты из другого электронного письма - PullRequest
1 голос
/ 05 сентября 2011

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

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

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

1 Ответ

2 голосов
/ 10 сентября 2011

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

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

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

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

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

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

...