Question

En utilisant Python et imaplib Je me connecte à 2 serveurs imap (gmail) et essayer de faire correspondre des e-mails entre eux en utilisant la date de leur date et heure.

J'ai 2 problèmes.

  • La date retourné par l'analyse l'en-tête est pas directement utilisable dans la recherche, le format est erroné.
  • Il est pas clair pour moi qui imap recherche à utiliser pour effectuer une recherche par date et l'heure de retour en analysant l'en-tête.

Je Oldmail et NewMail connexions imap.

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

Il suffit de choisir un e-mail au hasard "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'

Mais ce n'est pas dans le formate droit à l'utilisation comme, hargneux il est un moyen facile: -)

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']

Mon but est de trouver des e-mails correspondants entre les 2 serveurs après le transfert a échoué en utilisant l'application de migration de googles. Ensuite, supprimez l'e-mail sur l'ancien serveur si elles ont transféré. Si vous pouvez suggérer une meilleure façon de le faire qui serait utile aussi.

Était-ce utile?

La solution

Il semble que le problème est juste la mise en forme de date. Dans ce cas, ceci:

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

vous donnera un objet date heure et cela vous donnera le message:

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

Gardez à l'esprit que cela donnera tous les messages de cette date, car il ne tient pas compte info temps et le fuseau horaire.

Comme alternative, il est intéressant de regarder vos e-mails et de voir si le « Message-Id: ». En-tête pourrait être utile, car il devrait être le même sur chaque compte des e-mails véritablement double

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top