Verschieben Sie eine E-Mail in Google Mail mit Python und imaplib
Ich möchte in der Lage sein zu verschieben eine E-Mail in Google Mail aus dem Posteingang in einen anderen Ordner mit Python. Ich bin mit imaplib und kann nicht herausfinden, wie es zu tun.
InformationsquelleAutor der Frage Dan | 2010-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine explizite move-Befehl für IMAP. Sie haben zum ausführen einer
COPY
gefolgt von einemSTORE
(mit passender Flagge, um anzuzeigen, löschen) und schließlichexpunge
. Das Beispiel unten arbeitete für das verschieben von Nachrichten von einem label zum anderen. Sie werden wahrscheinlich wollen, um hinzuzufügen mehr Fehler überprüfen obwohl.InformationsquelleAutor der Antwort Manoj Govindan
Als für Gmail, basierend auf seiner api mit labels arbeitendas einzige, was für Sie zu tun ist das hinzufügen von dest label und löschen von src-label:
InformationsquelleAutor der Antwort scraplesh
Ich vermute, man hat eine uid der E-Mail, die gehen, um die verschoben werden soll.
InformationsquelleAutor der Antwort Avadhesh
Keiner der bisherigen Lösungsvorschläge für mich gearbeitet. Ich war nicht in der Lage zu löschen eine Nachricht aus dem ausgewählten Ordner, und nicht in der Lage zu entfernen die Beschriftung der Ordner, wenn das Etikett der ausgewählten Ordner. Hier ist, was schließlich für mich arbeiten:
InformationsquelleAutor der Antwort Neal Young
Ich weiß, dass dies eine sehr alte Frage, aber keiner Weise. Die vorgeschlagene Lösung von Manoj Govindan wahrscheinlich funktioniert perfekt (ich habe es nicht getestet aber es sieht aus wie es. Das problem, dass ich begegnen und die ich zu lösen hatte, ist so kopieren/verschieben Sie mehrere E-Mail!!!
So kam ich auf die Lösung, vielleicht jemand anderes in der Zukunft vielleicht das gleiche problem haben.
Die Schritte sind einfach, ich eine Verbindung zu meinem E-Mail (GMAIL) Konto - "Ordner auswählen" zu verarbeiten (z.B. "POSTEINGANG") fetch all uids anstelle von E-Mail(s) Liste Anzahl. Dies ist ein entscheidender Punkt, hier zu bemerken. Wenn wir holten in der Liste Anzahl der E-Mails und dann haben wir verarbeitet der Liste, die wir würden am Ende mit einem problem. Wenn wir uns bewegen, eine E-Mail der Prozess ist einfach (Kopie im Ziel-Ordner und löschen Sie E-Mails von jedem aktuellen Standort). Das problem erscheint, wenn Sie haben eine Liste von z.B. E-Mails 4 E-Mails in den Posteingang und verarbeiten wir die 2. E-Mail in der Liste dann Nummer 3 und 4 sind unterschiedlich, Sie sind nicht die E-Mails, dass wir dachten, Sie wären, was in einer Fehlermeldung, weil die Liste Punkt Nummer 4 ist es nicht vorhanden, da die Liste eine position nach unten verschoben, weil 2-position leer war.
Also die einzige mögliche Lösung für dieses problem war der Einsatz von UIDs. Das sind eindeutige Nummern für jede E-Mail. Also, egal wie die E-Mail wird diese Zahl ändern, wird verknüpft mit der E-Mail.
So, in dem Beispiel unten, ich hol die UIDs auf den ersten Schritt,prüfen, ob Ordner leer ist, wird keine Stelle für die Verarbeitung der Ordner sonst die Iteration für alle E-Mails in den Ordner gefunden. Nächste fetch jede E-Mail-Header. Der Header wird uns helfen, zu Holen, das Thema und vergleichen Sie die Betreffzeile der E-Mail mit der, die wir suchen. Wenn das Thema passt, dann weiter, um das kopieren und löschen der E-Mail. Dann sind Sie fertig. So einfach ist das.
Nützliche Informationen über imaplib Python — imaplib IMAP-Beispiel mit Google Mail und die imaplib Dokumentation.
InformationsquelleAutor der Antwort Thanos