56 lines
2.4 KiB
Markdown
Executable file
56 lines
2.4 KiB
Markdown
Executable file
<!-- 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](/supervisor-gestion-de-processus.html) 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.
|