Blog

Comment forcer le renvoi des mails sous sendmail

Écrit le 29 12 2012 par Kévin MET _

Pour relancer l'envoie des mails sous sendmail, c'est très simple. Non, en vrai c'est très chiant et c'est très long ! Déjà, on commence par compter le nombre de mails en provenance de l'adresse mail qui pose problème. Dans notre exemple on va dire que c'est commande@vendredestrucs.com, ça permet de voir si on va pas trop galérer. Évidemment, avant de relancer votre mailq il faut avoir régler le problème qui bloquait ces mails au préalable sinon ça n'a pas de sens...


mailq | grep -c commande@vendredestrucs.com

Si vous êtes dans le cas d'un serveur mail avec une tripotée de mail en queue, genre 30 000 ou 100 000 voire plus pour les plus aventureux qui ne monitorent pas la mailq avec nagios (c'est pas bien la gars !) je propose une autre astuce à base de find à la fin du billet mais ça ne vas surement pas plaire à votre client. Enfin si vous êtes monté jusqu'à autant de mails c'est sûrement que ceux-ci n'était pas franchement nécessaires ou que la newsletter est vraiment spammy.

Pour la relance on fait comme ça :


sendmail -v -qScommande@vendredestrucs.com -O timeout.queuereturn=1s -O timeout.connect=1s -O forkeachjob

Une petite explication sur ce que tu viens de copier/coller et de balancer sur ton serveur en prod sans savoir ce que ça faisait ? Oui, je sais, pas toi, tu es consciencieux tu as déjà lu le man sendmail. Mais juste pour faire un petit rappel :

  • -v : Mode verbeux pour savoir ce qu'il se passe
  • -qS : Attention à bien spécifier le S. Cela permet de limiter la tâche à l'expéditeur.
  • -O timeout.queuereturn= : le temps avant que le message timeout et soit renvoyé à l'expéditeur. Par défaut c'est 5 jours mais là on veut expédier le problème rapidement ;)
  • -O timeout.connect= : le timeout avant le premier connect()
  • -O forkeachjob : Ça peut servir si le serveur est léger en RAM.

A noter qu'il suffit d'utiliser l'option -qR pour spécifier un destinataire plutôt qu'un expéditeur.

Si on veut relancer la mailq au complet sur tous les mails il suffit de faire :


sendmail -v -q -O Timeout.connect=5s timeout.queuereturn=1s -O timeout.connect=1s -O forkeachjob

Et y'a plus qu'à attendre sagement que ça avance. (Ça peut prendre pas mal de temps, si vous avez beaucoup de mail en queue, pensez à utiliser screen si c'est le cas)

Maintenant l'astuce qui permet de supprimer ces mails à tout jamais :) Pour cela, il faut commencer par identifier le dossier qui contient les mails en queue. Généralement il s'agit de /var/spool/mqueue. Il ne reste plus qu'à envoyer cette bien belle commande :


find . -name "[d,q,Q,D]f*" -exec grep -nil "commande@vendredestrucs.com" {} \; | xargs rm

Attention, dans ce cas, ça marche pour l'expéditeur ou le destinataire.

♥ Partage sur tes réseaux sociaux ♥
Kévin MET
Kévin MET

Auteur de ce blog et gérant de la société MNT-TECH, je publie sur ce blog lorsque le temps me le permet et lorsqu'un sujet qui me parait intéressant n'a pas encore été abordé en français. Toutes les informations techniques présentes sur cette page peuvent être réutilisées moyennant le fait de citer la source.