<!-- title: SRmail -->
<!-- category: Développement -->
<!-- tag: planet -->

J'ai développé un petit bout de logiciel nommé, sans grande inspiration, SRmail
pour "Simple Rest Mail"<!-- more --> 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](https://github.com/kianby/srmail).  Ç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 :

```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 :

```shell
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](/2014/supervisor-gestion-de-processus) 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.
