web-dev-qa-db-fra.com

Vérification des e-mails avec Python

Je suis intéressé à déclencher une certaine action lors de la réception d'un e-mail d'une adresse spécifique avec un sujet spécifique. Pour pouvoir le faire, je dois implémenter la surveillance de ma boîte aux lettres, en vérifiant chaque courrier entrant (en particulier, j'utilise gmail). quelle est la façon la plus simple de procéder?

51
Sasha

Gmail offre la possibilité de se connecter via POP, que vous pouvez activer dans le panneau des paramètres de gmail. Python peut établir des connexions via POP assez facilement:

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()

Il vous suffirait d'exécuter ce script en tant que tâche cron. Vous ne savez pas sur quelle plateforme vous êtes, alors YMMV quant à la façon dont cela est fait.

71
mazelife

Gmail fournit un atom feed pour les nouveaux e-mails. Vous devriez pouvoir le surveiller en vous authentifiant avec py cURL (ou une autre bibliothèque réseau) et en tirant vers le bas le flux Faire une demande GET pour chaque nouveau message doit le marquer comme lu, vous n'aurez donc pas à suivre les e-mails que vous avez lus.

19
Dana the Sane

Bien que n'étant pas spécifique à Python, j'ai toujours aimé procmail partout où je pouvais l'installer ...!

Utilisez simplement certaines de vos lignes d'action pour les conditions de votre choix | pathtoyourscript (barre verticale AKA pipe suivie du script que vous souhaitez exécuter dans ces cas) et votre courrier est canalisé, dans les conditions de votre choix, vers le script de votre choix, pour qu'il fasse ce qu'il veut - difficile à pensez à une approche plus générale pour "déclencher des actions de votre choix à la réception de mails qui répondent à vos conditions spécifiques !! Bien sûr, il n'y a pas de limites au nombre de conditions que vous pouvez vérifier, au nombre de lignes d'action qu'une seule condition peut déclencher toutes les lignes d'action que vous souhaitez dans { } accolades), etc., etc.

8
Alex Martelli

Les gens semblent excités à propos de Lamson:

https://github.com/zedshaw/lamson

Il s'agit d'un serveur SMTP écrit entièrement en Python. Je suis sûr que vous pouvez en tirer parti pour faire tout ce dont vous avez besoin - transférez simplement les messages gmail vers ce serveur SMTP et faites ce que vous voulez.

Cependant, je pense qu'il est probablement plus facile de faire la recommandation de flux ATOM ci-dessus.

EDIT: Lamson a été abandonné

4
Adam Nelson

J'ai trouvé un assez bon extrait quand je voulais faire la même chose (et l'exemple utilise gmail). Consultez également les résultats de recherche Google à ce sujet.

1
Kredns

J'ai récemment résolu ce problème en utilisant procmail et python

Lisez la documentation de procmail. Vous pouvez lui dire d'envoyer tous les e-mails entrants à un script python comme celui-ci dans un fichier de configuration procmail spécial

:0:
| ./scripts/ppm_processor.py

Python a un package "email" disponible qui peut faire tout ce que vous pourriez vouloir faire avec le courrier électronique. Lisez les informations suivantes ....

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