Envoi de mails depuis son Ubuntu via le SMTP de chez Google

C'est une question assez récurrente je pense quand on veut utiliser la fonction mail de PHP ou qu'on veut utiliser l'envoi de mails depuis son terminal ou par des services tels que cron ou autres.

Alors au lieu d'utiliser du poids lourd tel que Postfix on pourrait utiliser des petites solutions telles que SSMTP (potentiellement abandonné bien qu'il se trouve encore dans les dépôts) ou encore MSMTP.. C'est ce dernier qu'on va justement paramétrer pour qu'il utilise le SMTP de chez Gmail.

Sur un article de la documentation de chez Google on a déjà les paramètres de connexion requis.

Avant de commencer créez un mot de passe d'application sur votre compte Google comme ça vous pouvez utiliser ce mot de passe d'application au lieu de votre mot de passe du compte Google. Ça vous permettra aussi de pouvoir révoquer ce code à tout moment. Pour se faire allez à cette adresse.

Ce qui suit a été testé sous Ubuntu 14.04.. Vous l'aurez compris déjà depuis l'utilisation d'apt au lieu d'apt-get..

Commençons par installer MSMTP et son agent de transfer:

sudo apt install msmtp msmtp-mta

Créons maintenant son fichier de configuration (qui n'existe pas par défaut):

sudo nano /etc/msmtprc

avec comme contenu:

# Les paramètres par défaut que tous les comptes SMTP utilisent.
# Ici je n'utilise que du Gmail alors ça sera ces paramètres pour tous mes comptes.
defaults 
auth  on 
tls   on 
tls_trust_file /etc/ssl/certs/ca-certificates.crt 
host   smtp.gmail.com
# Le port 465 n'a pas fonctionné pour ma part alors j'utilise le 587
port   587
keepbcc  on

# Si vous voulez du log décommentez cette ligne
# syslog on
# Emplacement du fichier log
# logfile  /var/log/msmtp.log

# Votre compte SMTP gmail; ici je n'ai mis qu'un seul mais vous pouvez y mettre autant que vous voulez
account  gmail
from   votre@compte.gmail
user   votre@compte.gmail
password  le_mot_de_passe_d_application_que_vous_avez_créé

# Le compte par défaut que MSMTP utilisera
account default : gmail

Ça se passe de commentaires! Bon bah bref continuons..

Petite Grosse note de sécurité ici: si vous avez vérifié les permissions sur votre fichier de configuration /etc/msmtprc avec:

stat -c "%a" /etc/msmtprc

on vous aurait répondu 644; ce qui donne avec:

ls -l /etc/msmtprc

un beau:

-rw-r--r--

donc en gros bonne lecture pour tout le monde! Y a même un voisin qui l'a lu et qui l'a pas trouvé trop mal.. La vanne de trop... Bref...

Pour palier à ce petit gros souci la méthode que j'utilise pour ma part est de changer les permissions sur le fichier de configuration pour qu'il ne soit lu que par l'utilisateur root et le groupe mail:

# Changement du propriétaire du fichier vers l'utilisateur root et le groupe mail:
sudo chown root:mail /etc/msmtprc
# Changement des permissions vers -rw-r-----
# (lecture/écriture au root et lecture seule au groupe mail).
# Ça donne un chmod 640:
sudo chmod 640 /etc/msmtprc

Puis j'ajoute les utilisateurs que je veux capables d'envoyer des mails (= lire la configuration) à ce groupe mail. Exemple mon utilisateur:

sudo usermod -a -G mail $USER

Vous devez vous déconnecter et vous reconnecter pour que le changement sur votre utilisateur prenne effet.

ou encore l'utilisateur apache ou nginx (www-data):

sudo usermod -a -G mail www-data

Si vous avez activé le log vous devez créer le fichier du log (ici en exemple le fichier /var/log/msmtp.log) avant d'utiliser MSMTP:

sudo touch /var/log/msmtp.log
# Propriétaires l'utilisateur root et le groupe mail
sudo chown root:mail /var/log/msmtp.log
# Lecture/écriture pour l'utilisateur root et le groupe mail (chmod 660)
sudo chmod 660 /var/log/msmtp.log

Pour pouvoir utiliser MSMTP pour envoyer un mail depuis le terminal vous devez installer mailutils (ou heirloom-mailx ou bsd-mailx ou autre paquet fournissant la commande mail; les gouts et les couleurs comme on dit! )

sudo apt install mailutils

Pour envoyer un mail rien de plus facile:

echo 'Mon super texte' | mail -s 'Mon sujet' 'email@du_destinataire.com'

ou encore avec pièce(s) jointe(s):

echo 'Mon super texte' | mail -s 'Mon sujet' -a 'fichier_attaché.doc' -a 'fichier_attaché.jpg' 'email@du_destinataire.com'

Pour la fonction mail de PHP vous devez éditer votre fichier php.ini en modifiant la variable sendmail_path vers:

sendmail_path = "/usr/bin/sendmail -t"

ou

sendmail_path = "/usr/bin/msmtp -t"

En fait le paquet msmtp-mta crée un lien symbolique /usr/bin/sendmail qui pointe vers /usr/bin/msmtp donc autant utiliser /usr/bin/sendmail.

L'option -i de sendmail est acceptée mais ignorée par msmtp; elle est gardée pour des raisons de compatibilité comme vous pouvez lire sur la manpage.

Et puis sinon voilà tout ce que j'avais à dire à ce sujet...

Des questions? Des remarques? N'hésitez pas!


Lire aussi: