Contexte
J’ai récemment changé d’hébergeur. Et cette fois ce n’est plus un hébergeur à 2 balles. Mais un à 3 sous !
Bon c’est pas non plus des pages persos, faut pas croire, hein…
Pour ne pas alourdir le serveur, en l’occurrence l’offre Gandi, d’1 part - à l’heure où je commence à écrire l’article…;) – sur Ubuntu Jaunty, je préferais me passer d’un vrai serveur de mail (Sendmail, Postfix) pour m’appuyer sur un service smtp externe. En l’occurrence notre ami GMail.
Le gain attendu est enorme : utiliser la fonction mail() de php de manière transparente (retenez bien, je veux de la transparence) sur un serveur de mail distant.
Et gratuit de surcroit, le serveur de mail.
Avec si possible un webmail qui déchire.
GMail quoi…
Mes première recherche m’amène assez rapidement sur la solution sSmtp. Facile à configurer, des tutos pour le brancher sur Gmail. C’est parti.
Piste 1 : sSMtp

Source de l'image : http://www.igvita.com/2007/08/29/ssmtp-relay-mail-delivery-in-rails/
1- Installation de sSmtp sur Ubuntu
On attaque l’install :
sudo apt-get install ssmtp
2- Edition du fichier de configuration de sSmtp
Voici le fichier de conf à éditer :
sudo nano /etc/ssmtp/ssmtp.conf
En suivant ces indications :
# # Config file for sSMTP sendmail # root= # Your email address AuthUser=your@email.dom AuthPass=your_pass AuthMethod=LOGIN mailhub=smtp.gmail.com:587 # Address and port number to send mail rewriteDomain=domain.ext # So the message appears to come from FAI hostname=youhost # Hostname: use hostname -f in a Terminal UseSTARTTLS=YES UseTLS=YES FromLineOverride=YES # So the message appears to come from # UseTLSCert=YES # TLSCert=/usr/local/etc/ssmtp/ssmtp.pem
2- Configuration des Aliases
Puis ce fichier, remplacer les valeurs dans '/etc/ssmtp/revaliases'
sudo nano /etc/ssmtp/revaliases
3- Edition du fichier php.ini
Enfin, il ne faut pas oublier de prévenir php que l’adresse de sendmail a changé. Il faut éditer '/etc/php5/apache2/php.ini' pour cela.
sudo nano /etc/php5/apache2/php.ini
Pour modifier la valeur sendmail_path :
sendmail_path = /usr/sbin/ssmtp -t
A partir de ce moment, j’ai commencé à pouvoir envoyer des mails via la fonction mail() de php, czmendant impossible de faire apparaître un nom de d’expéditeur de l’email qui proviendrait d’une variable php, la valeur de cette variable n’apparait que dans le champs « Répondre à ».
Tous les mails arrivent invariablement en provenance du compte gmail…
J’ai donc continué mes lectures pour apprendre que le paquet sSmtp n’est plus maintenu… Il faut apparemment autre chose, ce sera le premier que je trouve : NullMailer (voir liste de choix supplémentaires plus bas).
Piste 2 : NullMailer
[EDIT 06/01/10]Et alors oui j’ai réinstallé en moins d’un semaine… (merci les repo à la con…). Alors à ce stade je recommence avec un système « propre ».
1- Installation de NullMailer sur Ubuntu
Grace aux conseils de Jon Springs j’ai pu brancher le tout. Voici les étapes :
On attaque l’install :
sudo apt-get install openssl xinetd nullmailer
Création du SMTP-GMAIL pour communiquer avec Google :
sudo tee /usr/bin/gmail-smtp <<EOF >/dev/null #!/bin/sh # Thanks to http://ubuntuforums.org/showthread.php?t=918335 for this install guide /usr/bin/openssl s_client -connect smtp.gmail.com:465 -quiet 2>/dev/null EOF
Modification des droits d’exécution :
sudo chmod +x /usr/bin/gmail-smtp
Création d’un wrapper pour communiquer avec Gmail SMPT :
sudo tee /etc/xinetd.d/gmail-smtp <<EOF >/dev/null
# default: on
# description: Gmail SMTP wrapper for clients without SSL support
# Thanks to http://ubuntuforums.org/showthread.php?t=918335 for this install guide
service gmail-smtp
{
disable = no
bind = localhost
port = 10025
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/gmail-smtp
type = unlisted
}
EOF
sudo /etc/init.d/xinetd reload
2- Configuration de NullMailer
Modifier les fichier ‘etc/nullmailer/adminaddr’ et ‘remotes’ :
sudo tee /etc/nullmailer/remotes <<EOF >/dev/null 127.0.0.1 smtp --port=10025 --user=your@user.tld --pass=Y0urC0mp3xGM@ilP@ssw0rd EOF
sudo /etc/init.d/nullmailer reload
3- Edition du fichier php.ini
Ici retour à la config de base :
sudo nano /etc/php5/apache2/php.ini
Dé-commenter ou remettre la valeur sendmail_path :
sendmail_path = /usr/sbin/sendmail -t -i
[EDIT 07/01/10] Ok, ça passe bien avec Nullmailer aussi, mais pas encore en 587.
Vérification : utiliser la fonction mail() de php
Voilà un script php pour vérifier que la fonntion mail() agit bien.
<?php
$headers='From:Michel<fbXXXXXX@skynet.be>'."\n"; // remplacez fbXXX par votre FAI
$headers.='Reply-To:fbXXXXXX@skynet.be' ."\n";
$headers.='Content-Type:text/html;charset="iso-8859-1"' ."\n";
$headers.='Content-Transfer-Encoding:8bit';
$to ="fbXXXXXX@skynet.be";
$subject="A test message";
$body="Hello World!";
if (mail($to,$subject,$body,$headers)){
echo 'Mail has been sent' ."\n";
}
else {
echo "Error sending email <bre/>";
}
?>
Le résultat est là!
Sauf que l’adresse d’expediteur ne peut pas être overwritée… Idem pour sSmtp. Je pense que c’est là la limite de ce type d’outil.
Ressources :
http://jonspriggs.posterous.com/use-gmails-smtp-gateway-using-the-command-lin
http://ubuntuforums.org/showthread.php?t=918335
http://forum.ubuntu-fr.org/viewtopic.php?id=183052
Liste de MTA (Mail Transfer Agent)
Autre solluce :
http://kwhitefoot.posterous.com/send-email-from-the-command-line-to-gmail

Intéressant tes tests.
Sache que Gmail te limite à envoyer 500 emails max par jour. Cela signifie que l’utilisation de ce genre de solution est limité. Si tu veux utiliser Gmail pour envoyer une newsletter à tes lecteurs, il te faudra vite passer sur feedburner.
Merci pour ton commentaire Laura.
Oui ce système ne se destine qu’à des besoins ponctuels.
Cela étant rien ne t’empêche d’utiliser un autre SMTP que Gmail, le principe étant de relayer de manière transparente pour ton serveur tous les flux de mail vers un SMTP distant.
Enfin, quel bonheur de ne pas avoir à configurer un SendMail ou Postfix…!
Il ne resterait plus qu’à trouver un SMTP qui autorise plus de volume, et le système serait magnifique…