deblan.io-gemini/blog/posts/591.gmi

117 lines
4.2 KiB
Plaintext

# Mail RSS : transformer des mails en flux RSS
* 2020-11-12 18:04:42
* Développement, Informatique
```html
<p>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 : <a href="https://gitnet.fr/deblan/mail-rss">Mail RSS</a>.</p>
```
```html
<p><img src="https://upload.deblan.org/u/2020-11/5fad64ef.png" alt="" /></p>
```
```html
<h3>Comment ça marche ?</h3>
```
```html
<p>L'idée est assez simple : en utilisant <a href="https://linux.developpez.com/formation_debian/serveur-mail2.html#AEN7717">les alias de mail dans Postfix</a>,
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 à <strong>Mail RSS</strong> de les lire et de les importer.</p>
```
```html
<p>Prenons la newsletter de <a href="https://www.techtrash.fr/">TechTrash</a> comme exemple.</p>
```
```html
<h4>Configuration du serveur de mail</h4>
```
```html
<p>Il faut ajouter un alias qui va générer des fichiers.</p>
```
```html
<pre><code class="language-bash" data-title="/etc/aliases">techtrash: "| cat &gt; /var/lib/mailrss/techtrash-$(date +%s) &amp;&amp; chmod o+rw /var/lib/mailrss/techtrash-$(date +%s)"
</code></pre>
```
```html
<p>Au préalable, j'ai créé le répertoire <code>/var/lib/mailrss</code> et je me suis assuré que mon application
pouvait lire et écrire dedans, de même que Postfix (<code>nobody:nogroup</code>).</p>
```
```html
<h4>Configuration de l'application</h4>
```
```html
<p>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 (<code>ID</code>). 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.</p>
```
```html
<pre><code class="language-bash" data-title="Configuration du mailing">$ 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
------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- ---------------------
</code></pre>
```
```html
<p>Enfin, il faut un script qui va traiter les fichiers de <code>/var/lib/mailrss</code> en les important
dans le mailing correspondant et qui les supprime du serveur.</p>
```
```html
<pre><code class="language-bash line-numbers" data-title="Script lancé periodiquement">#!/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" &amp;&amp; rm "$MAIL"
done
}
import_mails "techtrash" "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
</code></pre>
```
```html
<p>Quand un mail est importé, les données récupérées sont :</p>
```
```html
<ul>
<li>Le sujet du mail</li>
<li>La date du mail</li>
<li>Le contenu HTML</li>
<li>Le contenu texte</li>
<li>Les pièces jointes</li>
</ul>
```
```html
<p>Toutes ces données seront accessibles à la consultation.</p>
```
```html
<p><a href="https://gitnet.fr/deblan/mail-rss">L'application</a> s'appuie sur Symfony (en version de développement) et <a href="https://gitnet.fr/deblan/mail-rss">le code</a> est
totalement libre 😄</p>
```