Coin web de Frédéric Péters

Procmail et notifications redmine

8 novembre 2020, 15:12

Le dimanche d’automne, c'est parfait pour préparer des gâteaux et revenir jouer dans le traitement des emails; en plus c’est la sortie de la version 2.0 de mutt, fidèle compagnon.

Mais mutt seulement à la périphérie ici, même si je pars de l’idée qu’il est fantastique de juste pouvoir taper l puis un mot et voilà les messages affichés filtrés sur ce mot. Là il y a mille options pour être fin, filtrer uniquement sur l’expéditeur, ou le destinataire, filtrer sur le contenu des messages, etc. mais par défaut ça va regarder dans l’expéditeur et le sujet et 99% du temps c’est parfait.

Pour des messages générés automatiquement, typiquement des notifications, typiquement les notifications sur des changements dans l’état de tickets, je trouve pratique de tout conserver en local et d’utiliser mutt pour les recherches mais ni bugzilla ni redmine n'incluent le nom de l’auteur dans l’expéditeur (gitlab & github le font). Résultat si j’ai en tête de retrouver un commentaire qu’a récemment fait Machin, je suis obligé de faire une recherche plus coûteuse dans le corps des messages. (recherche qui chez moi va être déléguée à dovecot, qui va la déléguer à solr, qui va répondre rapidement, au prix de pas mal d’espace disque quand même).

De là l’idée du jour de mettre l’auteur en expéditeur et même si pour ce qui m’intéressait au final j’aurais pu faire ça via un plugin à redmine côté serveur, ça aurait demandé trop de copié/collé, et donc l’option de faire ça en local.

Redmine met l’auteur à l’origine d’une notification dans un entête X-Redmine-Sender (bugzilla dans X-Bugzilla-Who, mais je vais arrêter de parler de bugzilla). À la réception des messages, j’aurai juste à prendre cette info et la placer dans le From et le tour sera joué.

Procmail donc, parce que je n’ai pas changé mon fond de configuration depuis vingt ans et qu’aujourd’hui seulement je vois que vingt ans c’est presque le temps passé depuis la dernière version publiée (3.22, packagée dans Debian le 21 novembre 2001).

:0fhw
* ^From: redmine@boulot
* ^X-Redmine-Sender: \/[-a-zA-Z0-9\.]+
| formail -i "From: \"redmine ($MATCH)\" <redmine@boulot>"

Première ligne :0 parce que c’est comme ça, f pour filtrer, h pour s’occuper des entêtes, w pour attendre la fin du filtrage avant de continuer. Ensuite une ligne pour considérer uniquement les messages souhaités et une autre pour extraire la partie utile de l’entête (je prenais initialement tout mais il y a des comptes qui utilisent une adresse comme identifiant et ça faisait long), puis passer ça dans formail (outil distribué avec procmail, utilisé pour modifier un message), pour réécrire l’entête From, et l’affaire est dans le sac.

Avant de refermer le sac, une autre, pourquoi ne pas marquer visuellement les messages des tickets qui me sont assignés ? C’est la même affaire,

:0fhw
* ^From: redmine@boulot
* X-Redmine-Issue-Assignee: fpeters
* ^Subject: \/.*
| formail -i "Subject: ⭐ $MATCH"

On prend le message, on remplace le sujet, en tapant un emoji étoile devant (et en profitant une nouvelle fois de l’énorme travail de Behdad, présenté en 2015 au GUADEC). Ça produit un entête qui formellement n’est pas tout à fait légal côté encodage mais mutt en a vu tellement d’autres qu’il affiche ça parfaitement.

Lazy Lemon, 8 novembre 2020