structure & meta
This commit is contained in:
parent
da6d838193
commit
b25ce65735
284 changed files with 461 additions and 1000 deletions
56
posts/2015/2015-06-09-srmail.md
Executable file
56
posts/2015/2015-06-09-srmail.md
Executable file
|
|
@ -0,0 +1,56 @@
|
|||
<!-- 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue