Envoyer des mails en SMTP depuis un mutualisé OVH
Depuis la mi-octobre 2016, Orange place les mails envoyés à partir d'un mutualisé OVH (formulaires de contact du site, newsletters…) directement dans le dossier indésirables. Autant dire que ces pauvres emails sont condamnés à ne pas être lus. Parmi les abonnés Orange, combien ont l'habitude de se connecter à l'interface webmail Orange et d'aller regarder dans ce dossier ? La plupart sont habitués à consulter leur mails sur leur Outlook ou leur Thunderbird, à partir de leur ordinateur…
Après deux semaines d'un dialogue de sourds avec le service technique d'OVH (dont la qualité s'est effondrée depuis quelques mois, hélas, et pour qui, du moment que les mails arrivent, même dans les spams, il n'y a aucun problème), j'ai tenté de chercher des solutions de mon côté.
Parmi les solutions, utiliser le SMTP d'OVH au lieu de l'habituelle fonction PHP mail().
Pour votre culture, SMTP signifie Simple Mail Transfer Protocol. C'est un protocole de communication utilisé pour transférer les emails vers les serveurs de messagerie électronique.
Celui-ci est assez mal documenté dans la doc officielle OVH. Le tuto nous fournit les ports (465 si SSL ou sinon 587), l'URL du serveur (SSL0.OVH.NET), et indique que « Il est nécessaire que le serveur sortant soit authentifié afin d'envoyer sans erreur vos e-mails ». Comment faire ? Démerdez-vous…
Pour s'authentifier, il faut créer une boîte mail sur le domaine à partir duquel on envoie les mails. Une vraie boîte mail avec mot de passe, pas une simple redirection. Il faut donc que le domaine soit chez OVH. Si votre domaine est chez Gandi et qu'il redirige vers un hébergement OVH, c'est mort (ou alors, essayez de modifier les champs MX de votre zone DNS pour faire pointer vos e-mails chez OVH… j'ai pas testé). Surtout qu'OVH semble bloquer les ports 25, 465 et 587 quand on tente d'utiliser un SMTP externe. Merci les gars, vraiment.
Il faut que votre offre d'hébergement mutualisé inclue un MX Plan.
Créer une adresse email pour l'authentification
Si vous en aviez déjà créé une, et que vous n'avez pas égaré son mot de passe, vous pouvez sauter cette étape.
Direction l'espace client OVH. Dans la colonne de gauche, déplier l'élément de menu Emails et choisir le domaine qui nous intéresse.
Cliquer sur le bouton « Créer une adresse e-mail ».
Remplir le formulaire et cliquer sur Suivant.
Valider le récapitulatif.
Pour la suite de l'article, mettons que l'adresse mail soit email@mondomaine.com et votre mot de passe motdepasse.
Exemple avec phpMailer
J'utilise l'excellente librairie phpMailer qui permet de créer facilement des mails respectant les normes.
Pensez à faire l'include de PHPMailerAutoload.php au lieu de seulement appeler class.phpmailer.php, sinon vous aurez une erreur « smtp not found ».
A ce propos, afin d'améliorer la « désirabilité » de vos mails, je vous conseille également de les authentifier avec des clés DKIM (c'est le bloc qui commence par $mail->DKIM_domain). Dans le cas d'un hébergement mutualisé, vous pouvez les générer sur le site de phpMailer.
Il vaut mieux mettre une adresse mail comportant le nom de domaine de votre site dans le $mail->SetFrom(). Ce peut être une simple redirection. La vraie adresse mail de la personne qui vous contacte via le formulaire de votre site est à placer dans le $mail->AddReplyTo()
Ah oui, et puis pensez à ajouter un lien de désinscription, c'est la nouvelle mode depuis quelques mois (c'est le rôle de la ligne qui commence par $mail->AddCustomHeader(). Là par contre, l'adresse mail mentionnée peut être une simple redirection).
Cet exemple utilise la version 5.2.16 de phpMailer (les versions datant de quelques années utilisaient des fonctions un peu différentes, telles que IsHTML() et la propriété $mail->Body)
require "phpmailer/PHPMailerAutoload.php";
$mail = new PHPmailer();
$mail->IsSMTP();
$mail->Host='ssl0.ovh.net';
$mail->Port = 465;
$mail->Username = 'email@mondomaine.com';
$mail->Password = 'motdepasse';
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->DKIM_domain = 'mondomaine.com';
$mail->DKIM_private = 'mondomaine.htkeyprivate';
$mail->DKIM_selector = 'phpmailer';
$mail->DKIM_passphrase = '00000000000000';
$mail->AddReplyTo("expediteur@mail.com");
$mail->SetFrom("contact@mondomaine.com", "Nom de l'expéditeur");
$mail->AddAddress("destinataire@mail.com");Â
$mail->Subject="Sujet de mon mail";
$mail->AltBody = "Pour lire ce message, veuillez utiliser un client mail compatible HTML";
$mail->MsgHTML("Contenu du mail");
$mail->AddCustomHeader("List-Unsubscribe: <mailto:unsubscribe@mondomaine.com?subject=Unsubscribe>, <http://www.mondomaine.com>");
if($mail->Send()) {Â
}
unset($mail);
Pour vos premiers tests, afin d'afficher les retours du serveur SMTP, vous pouvez ajouter ceci :
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';
Pour l'instant, les mails envoyés ainsi n'atterrissent plus dans le dossier spam des boîtes Orange. Mais pour combien de temps encore ?
Et pour le VPS classic ? On n'utilisera pas ssl0.ovh.net comme host. Via le port 465 en SSL cela n'a pas fonctionné, mais via le port 587 en TLS, ça passe. Pour l'authentification j'ai utilisé le compte postmaster parce que j'avais le mot de passe sous le main…
$mail->IsSMTP();
$mail->Host='smtp.mondomaine.com';Â
$mail->Port = 587;Â
$mail->Username = 'postmaster@mondomaine.com';
$mail->Password = 'motdepasse';
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';