Envoi d’e-mails depuis Apache avec msmtp

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.

Ressources complémentaires

Apache , , Permalien.

Une réponse pour Envoi d’e-mails depuis Apache avec msmtp

  1. Tomboul says:

    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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">