SRmail
J'ai développé un petit bout de logiciel nommé, sans grande inspiration, SRmail pour "Simple Rest Mail" avec les technos que j'apprécie : le langage Python et le framework Web Flask. Le but de SRmail est de fournir un service local de récupération et d'envoi de courriels à d'autres applications. En gros, c'est une brique logicielle à l'écoute sur l'interface localhost qui permet de lire et d'envoyer des messages à travers une API Restful. J'insiste sur le terme local car l'API n'est absolument pas sécurisée : un fichier de configuration donne les pleins pouvoirs à SRmail pour gérer un compte par les protocoles IMAP et SMTP. L'intérêt c'est de centraliser la complexité de gestion des e-mails et de mutualiser un service entre plusieurs applications en plaçant la barre au niveau applicatif et non pas système.
Le code et la documentation sont sur mon GitHub. Ça s'installe facilement à la sauce Python dans un virtualenv de préférence, avec le gestionnaire de paquets pip pour récupérer les dépendances.
Voici un exemple d'envoi d'e-mail en Python :
import requests
headers = {'Content-Type': 'application/json; charset=utf-8'}
msg = {
'to': 'bill@phoenix.com',
'subject': 'Got it',
'content': 'See you soon!\\n\\n-- John'
}
r = requests.post('http://localhost:8000/mbox', data=json.dumps(msg), headers=headers)
if r.status_code == 200:
logger.debug('Email for %s posted' % to_email)
else:
logger.warn('Cannot post email for %s' % to_email)
Et voici le même exemple en ligne de commande avec CURL :
curl -X POST -H "Content-Type: application/json; charset=utf-8"
-d '{"to":"bill@phoenix.com", "subject":"Got it",
"content":"See you soon!\\n\\n-- John"}'
http://localhost:8000/mbox
Plutôt que de faire du polling pour voir si de nouveaux messages sont arrivés, on peut définir la fréquence de polling au niveau de SRmail ainsi que des URL de notification vers lesquelles seront postés les messages au format JSON.
Pour le déploiement de mes applications Python j'utilise Supervisor qui permet de s'abstraire du système d'init (SysV, OpenRC, systemd).
Voilà c'est sans prétention un outil qui peut vous être utile.