158 lines
7.2 KiB
Markdown
158 lines
7.2 KiB
Markdown
# Envoyer un mail à tous les adhérents
|
|
|
|
|
|
:warning: Avant de lire ce qui suit, vérifie auprès de plusieurs personnes, en
|
|
particulier auprès du CA et du ou de la présidence du Cr@ns que tu as _vraiment_ envie d'envoyer un mail_all.
|
|
|
|
Afin de contourner les mesures antispam du Crans pour cet usage légitime
|
|
et aussi afin de t'épargner l'envoi manuel de centaines de mails tout en permettant de les personnaliser,
|
|
des anciens membres du Crans ont écrit un script pour envoyer des mails à tous les adhérents.
|
|
Il se trouve [ici](https://gitlab.crans.org/nounous/scripts/-/blob/master/mail/mail_all.py) (en principe cloné dans `/usr/scripts/mail`).
|
|
|
|
Ce script utilise le moteur de templates Jinja pour personnaliser les mails
|
|
et nécessite une instance de Re2o.
|
|
|
|
|
|
Pour le faire fonctionner, c'est assez simple.
|
|
Tout d'abord, allons lire le menu d'aide.
|
|
|
|
```
|
|
---> ./mail_all.py --help
|
|
usage: mail_all.py [-h] [-f RECIPIENTFILE] [-t TEMPLATE] [-s SENDER] [-a] [-A]
|
|
(--doit | -p)
|
|
|
|
Mail all générique. Prend un template en argument.
|
|
|
|
optional arguments:
|
|
-h, --help show this help message and exit
|
|
-f RECIPIENTFILE, --recipientfile RECIPIENTFILE
|
|
Un fichier contenant un destinataire par ligne. Les
|
|
formats acceptés sont : `Prenom;Nom;Email`,
|
|
`Prenom;Email`, ou tout simplement `Email`. Override
|
|
tous les filtres.
|
|
-t TEMPLATE, --template TEMPLATE
|
|
Un template de mail. Fournir le chemin du dossier
|
|
principal du mail, relatif à
|
|
/usr/scripts/mail/template/
|
|
-s SENDER, --sender SENDER
|
|
Spécifier un expéditeur particulier. Par défaut
|
|
respbats@crans.org
|
|
--doit Lance effectivement le mail
|
|
-p, --prev Prévisualise le mail à envoyer
|
|
|
|
Filtres:
|
|
-a, --allaccess Envoie un mail à toutes les personnes bénéficiant
|
|
d'une connexion valide.
|
|
-A, --alladh Envoie un mail à tous les adhérents.
|
|
```
|
|
|
|
|
|
## Envoyer un mail à une liste prédéfinie
|
|
|
|
Tu peux envoyer un mail à une liste de destinataires précise.
|
|
Pour cela rien de plus simple, il te suffit de remplir les destinaires dans un fichier, une ligne par destinataire et de le donner comme option à `-f`.
|
|
Comme le précise le menu d'aide, trois formats sont disponibles. Par exemple :
|
|
|
|
```
|
|
Prénom;Nom;<pseudo>@crans.org
|
|
```
|
|
|
|
Tu peux aussi préciser des paramètres supplémentaires qui vont être fournis au template du mail.
|
|
Il te suffit de rajouter un JSON contenant dans ses clés les nouvelles variables, cf l'exemple ci-dessous.
|
|
|
|
```
|
|
Prénom;Nom;<pseudo>@crans.org;{"pseudo":"<pseudo>","humeur":"bonne"}
|
|
```
|
|
|
|
Les variables supplémentaires "pseudo" et "humeur" seront disponibles pour être utilisées dans le mail.
|
|
Cas d'usage : on peut de cette manière indiquer le pseudo dans le sujet du mail, utile pour trier les bounces.
|
|
|
|
|
|
Ce format permet de récupérer le prénom dans la variable `Prénom`, le nom dans `Nom` et l'email dans `To`.
|
|
Ces variables sont utilisables dans le remplissage du template.
|
|
Si un autre format est utilisé qui ne permet pas de récupérer le nom ou le prénom du destinataire,
|
|
mais que l'email est bien accessible, le script fonctionnera quand même. Attention tout de même à avoir un mail cohérent.
|
|
|
|
|
|
## Envoyer un mail à tous les adhérents
|
|
|
|
Pour envoyer un mail à tous les adhérents c'est très simple.
|
|
Soit tu récupères toi même cette liste et la colle dans un fichier de destinataires, soit tu utilises l'option `-A`.
|
|
De même tu peux envoyer un mail à tous les adhérents à jour de cotisation avec l'option `-a`.
|
|
|
|
|
|
## Template de mail
|
|
|
|
Il est nécessaire de spécifier un template de mail, via un chemin relatif au dossier courant.
|
|
L'architecture d'un dossier template ressemble à ça :
|
|
```
|
|
Dossier_Template
|
|
├── body
|
|
│ ├── en
|
|
│ └── fr
|
|
├── From
|
|
│ └── fr
|
|
├── Subject
|
|
│ └── fr
|
|
├── To
|
|
│ └── fr
|
|
└── X-Mailer
|
|
└── fr
|
|
```
|
|
Dans le sous-dossier body, tu peux spécifier deux langues : `en` et `fr`.
|
|
Pour rajouter des langues, il faut changer un peu le script coeur, `mail.py`.
|
|
Tous les fichiers sont des templates Jinja, et ont accès aux variables définies dans mail_all.
|
|
* `Prénom` : Le prénom du destinataire, ou la chaîne vide.
|
|
* `Nom` : Le nom du destinataire, ou la chaîne vide.
|
|
* `To` : L'email du destinatire.
|
|
* `mailer` : L'user agent. Par défaut il vaut "Un MA du crans a personalisé ce message à la main pour toi"
|
|
* Toute autre variable que tu aurais envie de définir.
|
|
|
|
Voici un peu plus de détails sur ce dossier de templates.
|
|
|
|
* A priori, `X-mailer` n'est pas à modifier et devrait juste contenir un fichier `fr` contenant `{{mailer}}`.
|
|
* De même, `To` ne devrait pas être modifié et contient `{{To}}`.
|
|
* `From` contient le champ from du mail à envoyer. Tu peux mettre ce que tu veux.
|
|
* `Subject/fr` est comme son nom l'indique le fichier définissant le sujet du mail. Il est aussi personnalisable à l'aide de variables, comme tous les autres fichiers Jinja.
|
|
* `body` est le dossier le plus important. C'est lui le coeur du mail. Il contient deux fichiers `en` et `fr`, qui vont chacun former une version du mail (en anglais, et en français respectivement).
|
|
Tu n'es pas obligé d'avoir un mail en Anglais, il suffit tout simplement de ne pas mettre le fichier `en`.
|
|
Ce sont là aussi des template Jinja, personalisables à l'aide des variables susmentionnées.
|
|
|
|
|
|
## Exemple
|
|
|
|
Pour envoyer un mail_all à tous les adhérents pour les prévenir de la tenue de l'assemblée générale, je crée un dossier `AGO_2026` avec l'architecture précédente, dans le dossier `template`. Puis je lance le script avec les options suivantes :
|
|
|
|
```
|
|
./mail_all.py -s 'bureau@crans.org' -A -t AGO_2020 -p
|
|
```
|
|
|
|
* L'option `-s` permet de préciser une adresse qui va recevoir les bounces. Tu veux ici une mailing list privée, comme respbats (par défaut) ou bureau.
|
|
* L'option `-A` permet de dire que je veux envoyer ce mail à tous les adhérents.
|
|
* L'option `-t` est pour préciser le template du mail.
|
|
* L'option `-p` me permet de faire une prévisualisation et de simuler l'envoi des mails. Cette option est de toute façon nécessaire (sauf si tu forces l'envoi du mail).
|
|
|
|
:warning:
|
|
Les consignes sont répétées pour une bonne raison.
|
|
Prends bien le temps de lire et de faire relire le mail avant qu'il ne parte.
|
|
Il est fortement recommandé de l'envoyer d'abord à une liste restreinte de cobayes presque volontaires
|
|
(à commencer par toi) pour vérifier que le mail rend bien.
|
|
|
|
|
|
:warning:
|
|
Lance le script dans un screen pour que son exécution se passe bien jusqu'au bout.
|
|
Le script va faire tous les envois un par un pour le millier d'adhérents, c'est long
|
|
et le risque d'interruption au milieu n'est pas négligeable.
|
|
|
|
|
|
Une fois que le mail est satisfaisant et que tu as bien vérifié la liste des destinaires concernés
|
|
(tous ceux que tu visais, seulement eux), tu peux utiliser l'option `--doit`.
|
|
|
|
```
|
|
./mail_all.py -s 'bureau@crans.org' -A -t AGO_2020 --doit
|
|
```
|
|
|
|
Le mail_all part alors vivre sa vie de mail_all.
|
|
|
|
_Documentation très largement reprise de contributions du Wiki._
|