Deblan blog

Tag #mail

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 😄


Emails : sécurité et identification

Envoyer et recevoir des emails est quelque chose que quasi tout le monde fait chaque jour. Des informations importantes peuvent transiter dans ces messages. On peut avoir des données sensibles (comme des identifiants de connexion vers un service), mais aussi des demandes qui impliquent des actions importantes (exemple : "Pourrais-tu supprimer cette page du site stp ?").

Comment sécuriser le fait d'envoyer des identifiants ? Comment s'assurer que la demande de modification d'un site émane bien d'une personne légitime ? Comment s'assurer que le message qui a été initialement rédigé n'a pas été modifié en cours de route par des personnes malveillantes ou des services peu scrupuleux ?

Voici donc quelques outils que j'utilise quotidiennement, pour moi mais aussi dans mon boulot.

SPF

Mes noms de domaines sont configurés de telle sorte que seuls certains serveurs sont considérés comme légitimes pour envoyer des messages. Pour se faire, j'utilise la norme de vérification Sender Policy Framework (SPF) qui s'appuie sur une configuration DNS. Si un email est expédié en @deblan.fr depuis des serveurs que je n'ai pas désignés légitimes, alors ils devront être rejetés systématiquement.

DKIM

Sur mon principal serveur de mail, j'ai mis en place un système qui, indépendamment de la manière de rédiger un message, signera l'email et permettra au serveur qui le réceptionnera de s'assurer que c'est bien mon serveur qui l'a expédié. DKIM s'appuie sur configuration spécifique du serveur de mail et le DNS.

OpenPGP et certificat

Lorsque je rédige un email, je signe systématiquement le message avec une clé PGP ou bien un certificat. Cela permet de s'assurer, dès la réception du message, que l'email n'a pas été modifié en cours de route. L'utilisation de mes certificats demande aucun mot de passe. Si une personne envoi un mail en utilisant ma machine (bon courage), la personne qui va réceptionner l'email pourrait avoir un doute. Ainsi, quand il s'agit d'informations importantes, j'utilise la clé PGP qui demande un mot de passe avant de signer le mail. On est à présent certain que c'est moi qui a écrit le message.

Enfin, quand je veux envoyer des données sensibles, je vais chiffrer les messages avec la clé publique (PGP) de mon interlocuteur (si toutefois il en a une). Je peux donc chiffrer mon message que lui seul pourra déchiffrer. Aucun intermédiaire sera en mesure le lire le contenu du mail.