Variations autour de Postfix (part. 2) : envoi de mails en masse
Après la gestion des domaines virtuels, un autre problème concernant la messagerie s’est posé pour certains des sites web que nous hébergeons : l’envoi de messages en masse, autrement dit les mail-lists.
Or, si l’envoi d’un message ne semble pas poser de gros problème pour un applicatif quelconque (en simplifiant à l’extrême, il suffit d’une liste d’adresses et d’un outil qui permette d’envoyer un mail programmatiquement), la réalité se heurte aux mesures anti-spam éventuellement implémentées sur les MTA gérant les boites des destinataires.
En effet, il n’est pas impossible d’avoir sur une liste de 1000 destinataires 100 ou 200 destinataires sur un même et seul domaine, et le MTA recevant ces nombreux messages en un laps de temps probablement très court (parce que non contrôlé !) peut très bien considérer qu’il s’agit là d’un envoi massifs de spams … et hop : on se retrouve blacklisté !!!
Cet état de fait peut bien évidemment être contourné par l’utilisation d’un applicatif dédié à l’envoi de mailing-lists, le problème étant que je n’en ai pas trouvé correspondant à mes besoins et que certains CMS (tel que WordPress ou Drupal, par exemple) disposent de modules gérant l’envoi de mailing-lists mais, soit ne savent pas gérer cette problématique, soit nécessitent un paramétrage au cas par cas pour pouvoir l’éviter… Donc, gérer le problème en amont, c’est à dire au niveau du MTA chargé d’émettre les mails, me semble être une solution plus appropriée !
Et c’est là, où on en vient à se repencher sur Postfix et, qu’en lisant un peu de documentation, on s’aperçoit que :
- Postfix gère des files de messages (OK, ça c’est pas nouveau, je le savais déjà …), mais que l’une d’entre elles (justement nommée hold) permet de stocker des messages qui ne seront pas envoyés jusqu’à ce que l’on les en sorte manuellement (i.e. en utilisant la commande postsuper ).
- On peut configurer le queue manager de Postfix pour aiguiller les messages entrants (ou sortants) dans l’une des différentes files d’attente.
A partir de là, il semble assez facile de mettre en place la politique de « non-flooding » des MTA destinataires à l’aide de quelques mesures simples :
- Faire en sorte que l’application émettrice des messages position un header totalement arbitraire, disons ‘X-Hold-iConsult-ml‘.
- Faire en sorte que le MTA soit configuré pour déposer dans la file hold tous les mails lui arrivant avec cet en-tête.
- Périodiquement, lister les mails se trouvant dans la file hold, et en sortir un nombre limité (pour chacun des domaines)
Le premier point dépendra de l’application qui est chargée d’envoyer les messages, généralement chez nous c’est du PHP, et ça ne pose pas de problème.
Le second point est d’une simplicité enfantine. La configuration de Postfix se fait en deux temps :
– Créer d’abord un fichier de règles qui contiendra une expression régulière à matcher, la file de destination des messages en correspondance, et éventuellement un commentaire qui sera loggé. Exemple, enregistrer dans un fichier /etc/postfix/header_checks, les lignes suivantes :
/^X-Hold-iConsult-ml:.*$/ HOLD Message en attente de traitement mailing-list par lspfq
Ensuite, indiquer qu’il faut utiliser cette règle dans le fichier principal de configuration /etc/postfix/main.cf avec la ligne suivante :
header_checks = regexp:/etc/postfix/header_checks
Et en dernier lieu, relancer Postfix pour prendre en compte la nouvelle configuration, par un banal /etc/init.d/postfix reload.
de 09/08/2012 à 1:28 pm
Permalink
Bonjour à tous!
j’aimerais savoir comment empêché qu’une adresse bien précise (user1@domain.tld) envoie un mail à une autre adresse bien précise en utilisant le paramètre header_checks de postfix.
j’ai utilisé le :
if /^from:.*…/
/^to:.*…/ reject
endif
mais rien ne marche. Aidez moi svp!!
de 09/08/2012 à 3:58 pm
Permalink
Bonjour Wilfred,
Malheureusement, je crains que ce ne soit pas la bonne méthode …
Primo, pour les mails sortant, il faut utiliser la liste smtp_header_checks
Ensuite, le header_check ne fonctionne que ligne par ligne, et tu ne pourras pas tester 2 lignes d’entête simultanément (l’émetteur et le destinataire), et d’autre part, la méthode REJECT n’est pas supportée par smtp_header_checks
Tu peux regarder du côté de smtpd_sender_restrictions, mais la vérification ne se fera pas simultanément sur l’émetteur et l’expéditeur …
Sinon, il ne te reste plus qu’à écrire un filtre (milter…)
Désolé.
de 02/06/2013 à 11:50 pm
Permalink
Soyez proactif à l’égard des FAI afin de conformer vos serveurs et vos e-mails à leurs règles de filtrage. Eliminez les doublons et les adresses invalides de vos fichiers et surveillez vos statistiques (NPAI, taux de désabonnement, etc). Respectez certaines règles de rédaction : évitez les mots connotés et soyez attentifs au format (taille et couleur des polices, photos). Pour les Webmails, évitez les feuilles de style, le Java script, les tableaux imbriqués et les caractères spéciaux. Testez systématiquement vos envois sur des filtres anti-spam. Actualisez sans cesse les règles de rédaction de vos e-mails et constituez vous une base d’expérience. Traitez rapidement les plaintes et constituez vous une liste de personnes ne voulant plus recevoir d’e-mails. Cette liste devra être déclarée à la Cnil. Si vous figurez sur une blacklist officielle, essayez de contacter les sociétés qui les éditent. Attention, cette démarche n’est pas toujours couronnée de succès. Pour éviter les plaintes et les désabonnements, apportez un contenu utile à vos abonnés.