Rechercher imap par date analysable d'un autre e-mail
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.
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