webentwicklung-frage-antwort-db.com.de

Überprüfen von E-Mails mit Python

Ich bin daran interessiert, eine bestimmte Aktion auszulösen, wenn ich eine E-Mail von einer bestimmten Adresse mit einem bestimmten Betreff erhalte. Dazu muss ich die Überwachung meines Postfachs implementieren und jeden Posteingang überprüfen (insbesondere verwende ich Google Mail). Was ist der einfachste Weg das zu tun?

51
Sasha

Google Mail bietet die Möglichkeit, eine Verbindung über POP herzustellen, die Sie in den Google Mail-Einstellungen aktivieren können. Python kann ziemlich einfach Verbindungen über POP herstellen:

import poplib
from email import parser

pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('username')
pop_conn.pass_('password')
#Get messages from server:
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ["\n".join(mssg[1]) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
    print message['subject']
pop_conn.quit()

Sie müssten dieses Skript nur als Cron-Job ausführen. Ich bin mir nicht sicher, auf welcher Plattform Sie sich befinden, und weiß nicht, wie das gemacht wird.

71
mazelife

Google Mail stellt ein atom feed für neue E-Mail-Nachrichten bereit. Sie sollten dies überwachen können, indem Sie sich mit py cURL (oder einer anderen Netzbibliothek) authentifizieren und den Feed öffnen Wenn Sie eine GET-Anfrage für jede neue Nachricht stellen, sollte diese als gelesen markiert sein, damit Sie nicht nachverfolgen müssen, welche E-Mails Sie gelesen haben.

19
Dana the Sane

Obwohl nicht Python-spezifisch, habe ich procmail immer geliebt, wo immer ich es installieren konnte ...!

Verwenden Sie einfach einige Ihrer Aktionszeilen für Bedingungen Ihrer Wahl | pathtoyourscript (Vertikale Leiste AKA-Pipe, gefolgt von dem Skript, das Sie in diesen Fällen ausführen möchten), und Ihre E-Mails werden unter den Bedingungen Ihrer Wahl an weitergeleitet das Skript Ihrer Wahl, damit es macht, was es will - schwer zu überlegen, wie Sie Aktionen Ihrer Wahl auslösen können, wenn Sie E-Mails erhalten, die Ihren spezifischen Bedingungen entsprechen. Natürlich sind der Anzahl keine Grenzen gesetzt Bedingungen, die Sie überprüfen können, wie viele Aktionszeilen eine einzelne Bedingung auslösen kann (schließen Sie einfach alle gewünschten Aktionszeilen in { } - Klammern ein) usw. usw.

8
Alex Martelli

Die Leute scheinen über Lamson aufgeregt zu sein:

https://github.com/zedshaw/lamson

Es ist ein SMTP-Server, der vollständig in Python geschrieben ist. Ich bin sicher, Sie können das nutzen, um alles zu tun, was Sie brauchen - leiten Sie die Google Mail-Nachrichten einfach an diesen SMTP-Server weiter und tun Sie dann, was Sie wollen.

Ich denke jedoch, dass es wahrscheinlich am einfachsten ist, die obige ATOM feed-Empfehlung auszuführen.

EDIT: Lamson wurde aufgegeben

4
Adam Nelson

Ich habe ein ziemlich gutes Snippet gefunden, als ich dasselbe tun wollte (und das Beispiel verwendet Google Mail). Überprüfen Sie auch die Google-Suchergebnisse auf diese.

1
Kredns

Ich habe dieses Problem kürzlich mit procmail und python gelöst

Lesen Sie die Dokumentation zu procmail. Sie können festlegen, dass alle eingehenden E-Mails an ein python - Skript wie dieses in einer speziellen procmail-Konfigurationsdatei gesendet werden sollen

:0:
| ./scripts/ppm_processor.py

Python bietet ein "E-Mail" -Paket an, das alles kann, was Sie mit E-Mails tun möchten. Lesen Sie die folgenden ...

from email.generator import Generator
from email import Message
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.mime.multipart import MIMEMultipart
0
user122299