Accueil du site > INFORMATIQUE > PHP > Nullmailer : envoyer des mails en PHP simplement sous Linux

Nullmailer : envoyer des mails en PHP simplement sous Linux

Où comment ne pas installer une usine à gaz pour envoyer 3 mails...

mercredi 1er août 2007, par Thierry Bothorel

Sur un poste de développement PHP sous Windows, lorsqu’on utilise la fonction mail(), les binaires PHP supportent directement l’envoi de mails pourvu qu’on renseigne correctement les paramètres d’un serveur SMTP dans PHP.INI.

Depuis que je suis passé sous Linux je ne m’étais pas occupé de cet aspect lorsque récemment je me suis demandé “bêtement” pourquoi les mails n’arrivaient pas. Dans les logs d’Apache on trouve un message du genre « /usr/sbin/sendmail not found » .
L’installation par défaut d’une distribution Ubuntu ne contient rien pour envoyer les mails, ni sendmail ni Exim qui est le serveur de mails pourtant installé par défaut sur Debian.

Qu’à cela ne tienne, en deux ou trois clics ou commandes j’installe l’un ou l’autre. Mais je me méfie, ce n’est pas parce que tout est facile à installer que c’est la meilleure solution.

Sendmail et Postfix sont de vrais “gros” serveurs de messagerie robustes et puissants. Sendmail doit probablement envoyer 90 % des emails des sites web de la planète. Est-ce que j’ai vraiment besoin d’une telle usine à gaz sur mon poste de travail juste pour envoyer quelques mails ? Définitivement non, d’autant plus qu’il faut bien le paramétrer et du coup mettre en place un pare-feu si on ne veut pas se retrouver avec un serveur de mail piraté.

Après quelques recherches (voir en fin d’article), j’ai trouvé quelques solutions, mais il semble que Nullmailer soit avec esmtp les plus simples à utiliser. Mon choix s’est porté sur Nullmailer simplement parce que c’est le 1er que j’ai installé et il fonctionne !

Nullmailer est un “Mail Transfer Agent” simplifié destiné à remplacer des MTA complets comme sendmail/qmail/postfix etc. En effet il a été conçu pour être extrêmement simple à configurer et sa fonction est limitée à relayer les mails qu’il reçoit à d’autres MTA complets comme le serveur SMTP de votre Fournisseur d’accès à Internet.

J’ai du chercher un peu avant d’envoyer des mails car la configuration par défaut ne fonctionne pas. Voici les étapes de l’installation sur une distribution Ubuntu pour un poste de bureau isolé n’ayant aucun serveur de mail installé :

- Installer le paquet nullmailer à partir de Synaptic (il est dans les dépôts officiels).
- A la fin de l’installation, debconf se lance pour la saisie des réglages
- Sur le premier écran on vous demande le nom de courrier de votre système :

Le commentaire indique que c’est me par défaut mais en fait c’est le nom de votre poste de travail qui est repris par défaut. Vous pouvez laisser la valeur où la changer, çà n’a aucune importance pour ce qu’on veut faire (si vous voulez la changer ultérieurement, il faut éditer le fichier /etc/mailname).

- Sur l’écran suivant, on vous demande de renseigner la machine relais :

Renseignez ici l’adresse du serveur smtp de votre FAI (cas typique) suivi du protocole, smtp le plus souvent, bien que si vous ne le précisez pas c’est smtp qui sera utilisé par défaut. Par exemple :

Si votre FAI exige une identification, il suffit de l’ajouter dans la ligne comme sur la photo d’écran. Si voulez le changer ultérieurement, il suffit d’éditer le fichier /etc/nullmailer/remotes.

- Pour tester le bon fonctionnement dans une console : echo "Subject: Email-test..." | sendmail email@domaine

L’installation est terminée, mais si vous essayez d’envoyer un mail par PHP, vous verrez Apache crier dans ses logs que le serveur relais smtp.free.fr (par exemple) a rejeté le mail car le domaine de l'email de l'expéditeur est inconnu : root@me.me (ou root@<nom de votre machine><nom de votre machine>). En effet beaucoup de serveur de mail font ce test pour diminuer les spams.

On voit que l’utilisateur dans l’adresse email correspond au compte linux qui envoie le mail. Dans mon cas c’est root, mais selon votre distribution et installation d’Apache cela pourrait être un autre compte. Pour le domaine, en résumé il met le nom du hostname (voir plus haut), et si celui-ci ne contient pas de point dans son nom, il rajoute le contenu d’un autre fichier mais s’il n’est pas présent, rajoute encore le hostname, d’où le doublon.

J’ai essayé de faire quelques tests en changeant le nom du hostname et/ou celui de ma machine, au mieux on arrive à un émail root@free.fr, qui permet aux mails d’être envoyés. Mais cela présente deux inconvénients :

- C’est quand même bizarre de devoir appeler sa machine free.fr, quelque part ce n’est pas normal d’avoir à le faire et peut poser un problème sur un réseau local.

- Le plus embêtant est de ne pas pouvoir recevoir les emails système en retour. Si vous avez une faute dans une adresse émail, les serveurs smtp renvoient à l’expéditeur l’information. Avec une adresse en root@free.fr, vous ne risquez pas d’être averti !

Deux solutions :

- Soit vous ne voulez envoyer des emails QUE à partir de PHP. Editez votre fichier PHP.INI et dans la section [mail function], modifier la ligne :
;sendmail_path =
en :

- Si vous voulez que n’importe quelle application puisse envoyer des émails, ouvrez le fichier /etc/environment et ajoutez les lignes suivantes à la fin du fichier :

Et voilà !

Répondre à cet article | RétroLiens :0


6 Messages de forum

Répondre à cet article