Mail RSS : transformer des mails en flux RSS
J'essaye de plus en plus de réduire le volume de mails que je reçois. Du coup, quand une newsletter m'intéresse et que les auteurs ne fournissent pas de flux RSS, cela me donne un prétexte pour écrire un nouveau projet : Mail RSS.
Comment ça marche ?
L'idée est assez simple : en utilisant les alias de mail dans Postfix, on peut faire en sorte qu'un mail qui arrive sur le serveur soit traité par une commande. J'ai décidé de rediriger les mails dans un répertoire précis du serveur et je demande à Mail RSS de les lire et de les importer.
Prenons la newsletter de TechTrash comme exemple.
Configuration du serveur de mail
Il faut ajouter un alias qui va générer des fichiers.
techtrash: "| cat > /var/lib/mailrss/techtrash-$(date +%s) && chmod o+rw /var/lib/mailrss/techtrash-$(date +%s)"
Au préalable, j'ai créé le répertoire /var/lib/mailrss
et je me suis assuré que mon application
pouvait lire et écrire dedans, de même que Postfix (nobody:nogroup
).
Configuration de l'application
On doit générer un mailing pour TechTrash. Quand on va importer les mails de TechTrash,
on pourra les associer au mailing via son identifiant (ID
). On pourra ensuite
accéder au flux RSS via le lien généré à sa création. Évidement, on peut créer
autant de mailing que l'on veut, les modifier et les supprimer.
$ php bin/console mailing:new "TechTrash"
$ php bin/console mailing:list
------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- ---------------------
Label ID Feed Created at Updated at
------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- ---------------------
Tech Trash xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx https://exemple.fr/mailing/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/rss 2020-11-12 13:37:00 2020-11-12 13:37:00
------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- ---------------------
Enfin, il faut un script qui va traiter les fichiers de /var/lib/mailrss
en les important
dans le mailing correspondant et qui les supprime du serveur.
#!/bin/sh
cd "/path/to/exemple.fr"
import_mails() {
LABEL="$1"
MAILING_ID="$2"
find /var/lib/mailrss -name "${LABEL}-*" | while read MAIL; do
php bin/console mail:import "${MAILING_ID}" -f "$MAIL" && rm "$MAIL"
done
}
import_mails "techtrash" "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Quand un mail est importé, les données récupérées sont :
- Le sujet du mail
- La date du mail
- Le contenu HTML
- Le contenu texte
- Les pièces jointes
Toutes ces données seront accessibles à la consultation.
L'application s'appuie sur Symfony (en version de développement) et le code est totalement libre 😄