Objectif
Afin de pouvoir utiliser simplement la fonction mail() PHP sous Ubuntu et envoyer des e-mails depuis Apache, intéressons nous au client SMTP msmtp (licence GNU GPL v3).
La finalité de ce programme est de transmettre un e-mail à un serveur SMTP (ici le service GMail) qui se charge de le délivrer.
Ce client possède de nombreux avantages, dont :
- la compatibilité avec sendmail ;
- de nombreuses méthodes d’authentification ;
- l’utilisation de TLS/SSL ;
- le support de plusieurs comptes.
Installer msmtp
Via le gestionnaire de paquets :
nico@laptop:~$ sudo apt-get install msmtp
Configurer msmtp
Créer le fichier de configuration :
nico@laptop:~$ cd /etc/apache2/ nico@laptop:/etc/apache2/$ sudo vim .msmtprc
Dans ce fichier, définir les options du compte GMail :
# valeurs par défaut pour les différents comptes defaults tls on logfile /tmp/msmtp.log # serveur smtp Gmail account gmail host smtp.gmail.com from mon_compte@gmail.com auth on user mon_compte@gmail.com password mon_mot_de_passe tls_starttls off tls_certcheck off # autres comptes # ... # définir le compte par défaut account default : gmail
Rendre le serveur Apache propriétaire du fichier de configuration et en changer les droits :
nico@laptop:/etc/apache2/$ sudo chown www-data:www-data .msmtprc nico@laptop:/etc/apache2/$ sudo chmod 600 .msmtprc
Configurer PHP
Editer le fichier php.ini :
nico@laptop:/etc/apache2$ sudo vim /etc/php5/apache2/php.ini
Décommenter et compléter la ligne suivante :
sendmail_path = "/usr/bin/msmtp -t -C /etc/apache2/.msmtprc"
Redémarrer Apache :
nico@laptop:/etc/apache2$ sudo /etc/init.d/apache2 restart
Tester
Placer le script suivant dans le répertoire /var/www et le lancer via votre navigateur web favori à l’adresse http://localhost/nomduscript.php (par défaut) :
<?php $name = "Prénom Nom"; $email = "monadresse@gmail.com"; $recipient = "monadresse@gmail.com"; $body = "Le contenu de l'email"; $subject = "Mon sujet"; $header = "From: ". $name . " <" . $email . ">rn"; ini_set('sendmail_from', 'monadresse@gmail.com'); $ret = mail($recipient, $subject, $body, $header); if($ret) echo 'envoi ok'; else echo 'envoi ko'; ?>
Conclusion
Vous pouvez désormais tester l’envoi d’e-mails à partir de diverses applications web PHP, comme Joomla, en vous passant d’installations et configurations plus ou moins fastidieuses.
Merci pour ce tuto !!
J’ai utilisé cette solution sur FREENAS afin de rendre compatible la fonction php mail()
FREENAS utilise lighttpd avec msmtp
mais sans indication dans le fichier php.ini la fonction mail utilise sendmail.
Pour utiliser msmtp avec son fichier de configuration initialisé par l’interface de FREENAS, dans le fichier php.ini il faut ajouter cette ligne :
sendmail_path = /usr/local/bin/msmtp -t -C /var/etc/msmtp.conf