Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Écrire un message en IMAP avec Python

Première rédaction de cet article le 22 septembre 2010


La bibliothèque imaplib du langage Python permet d'accéder à un serveur de courrier IMAP et est surtout utilisée pour lire des messages. Mais elle peut aussi être utilisée pour écrire.

Attention, j'ai bien dit « écrire des messages dans une boîte », pas « envoyer un courrier à un destinataire », chose que IMAP ne permet pas. La méthode est simple, utilisant la méthode append(), et je peux mettre le code directement ici (le message est lu sur l'entrée standard mais il pourrait venir de n'importe où) :

connection = imaplib.IMAP4_SSL(hostname)
connection.login(username, password)
message_first = sys.stdin.readline() # Drop the mbox separator line
message = sys.stdin.read()
result = connection.append(mailbox, '', imaplib.Time2Internaldate(time.time()), \
                           message)
print result
connection.logout()

Et voilà, le programme, si tout s'est bien passé, mettra le message dans la boîte mailbox. En cas de problème, la première chose à vérifier est que le message est bien un message à la syntaxe du RFC 5322, avec une ligne vide entre les en-têtes et le corps.

Un bon article de plusieurs exemples de programmes Python utilisant cette bibiothèque est « imaplib - IMAP4 client library ».

Si, une fois qu'on a ce programme, on veut l'intégrer dans mutt, par exemple pour transmettre des messages de hameçonnage à la base du CRU, il suffit d'avoir le programme report-phishing.py, un fichier de configuration comme :

[default]
hostname: XXX.ensmp.fr
username: YYY
password: ZZZ
mailbox: INBOX.UUU

et de mettre dans son ~/.muttrc :


macro index,pager \ep "<enter-command>set pipe_decode=no\n<enter-command>set wait_key\n<pipe-entry>report-phishing\n<enter-command>set wait_key\n<enter-command>set pipe_decode=yes\n" "Report phishing"

Désormais, en regardant un message de hameçonnage, il suffira d'un ESC-p pour transmettre le message au dépôt.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)