PHP : comment envoyer simplement des e-mails en local sous Linux ?
Si comme tout bon développeur vous développez votre site en local avant de le passer en production, il peut vous arriver d'avoir besoin d'envoyer un e-mail en local. Que ce soit pour tester une procédure de mot de passe oublié ou expérimenter votre dernière application de newsletter, on peut se retrouver face à la fameuse erreur :
PHP Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in W:\\var\\www\\test.php on line 8
Généralement, cette erreur survient lorsque vous n'avez pas de serveur e-mail d'installé en local. La solution ? En installer un, comme PostFix par exemple.
Ce n'est qu'un exemple. Car pour tout ceux qui ont goûtés aux joies de l'administration système et de l'installation d'un serveur mail plus particulièrement, PostFix s'avère être une véritable usine à gaz, relativement complexe à installer. Pour éviter de "prendre un bazooka pour tuer une mouche", nous allons choisir un autre serveur, bien plus simple à configurer, à savoir esmtp. Et pour cause, il ne s'agit pas réellement d'un serveur SMTP, mais plus d'un "routeur" de mails : il se contentera d'acheminer tous les messages à envoyer vers un vrai serveur, qui lui les enverra à bon port.
On commence par l'installer :
# apt-get install esmtp
Puis, on le configure :
# nano /etc/esmtprc
Et c'est là que nous voyons la simplicité enfantine de ce serveur SMTP.
# Config file for ESMTP sendmail
# The SMTP host and service (port)
hostname=smtp.myserver.com:587# The user name
username=jonathan@petitcolas.com# The password (not very secure)
password=azerty# Whether to use Starttls
starttls=disabled# The certificate passphrase
#certificate_passphrase=# The Mail Delivery Agent
#mda=""
Et c'est tout. Il n'y a même pas besoin d'expliciter les commentaires, tant tout ceci est simple. :)
Mais, il manque une dernière étape à tout cela : faire un lien pour faire croire à PHP (très têtu) qu'il s'agit de sendmail. Pour ce faire, nous allons simplement faire un lien symbolique. Il ira chercher sendmail, il trouvera esmtp. :)
# cp /usr/sbin/sendmail /usr/sbin/sendmail.old # rm /usr/sbin/sendmail # ln -s /usr/bin/esmtp /usr/sbin/sendmail
Et c'est tout ! Fini donc les allers-retours incessants entre votre serveur de prod et votre machine locale pour tester qu'un mail arrive bien à destination.
