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!