PHP sous Windows : envoyer des mails via un serveur SMTP avec authentification

Classé dans : Web, Windows | 4 commentaires

vendredi 07 octobre 2011

Par défaut, sous Windows on peut utiliser le paramètre SMTP du fichier php.ini pour envoyer des mails à l'aide de la fonction mail(). Le seul inconvéniant est que l'on ne peut pas utiliser un serveur SMTP qui nécessite une authentification.

On peut utiliser des classes php telles que phpMailer, mais quand on a juste besoin d'une simple fonction mail, c'est peu pratique. La solution consiste à utiliser sendmail sous Windows.

Si, si, c'est possible, la preuve !

Le paramétrage ci-dessous a été testé sur une distrib XAMPP mais je pense qu'elle doit fonctionner quelque soit la solution retenue.

Nous considérons que le dossier d'installation de XAMPP se trouve dans C:\xampplite. Aadaptez les chemins au besoin.

1/ Installation de sendmail sous Windows

Sendmail est déjà livré avec Xampp (dans le dossier C:\xampplite\sendmail) mais ne fonctionne pas correctement.

Nous allons donc télécharger la dernière version et remplacer la version actuelle dans C:\xampplite\sendmail

2/ Paramétrage de php.ini

Le fichier php.ini se trouve dans le dossier C:\xampplite\php

Rendez-vous dans la section [mail function] et modifiez-la comme suit :

[mail function]
; For Win32 only.
; http://php.net/smtp
;SMTP = localhost

; http://php.net/smtp-port
;smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = frederic@lesprost.fr

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = "\"C:\xampplite\sendmail\sendmail.exe\" -t"

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = Off

; Log all mail() calls including the full path of the script, line #, to address and headers
;mail.log = "C:\xampplite\apache\logs\php_mail.log"

(Pensez à adapter le chemin de sendmail)

3/ Paramétrage de sendmail.ini

Le fichier sendmail.ini se trouve dans le dossier C:\xampplite\sendmail

Il faut éditer les paramètres suivants :

[sendmail]

smtp_server=<adresse de votre serveur SMTP>
smtp_port=<port du serveur SMTP (25 par défaut)>

auth_username=<login de connexion>
auth_password=<mot de passe de connexion>

Vous pouvez en profiter pour jeter un oeil aux autres paramètres qui pourront vous être utiles (expéditeur par défaut, activation des logs,...)

4/ Faisons un test

N'oubliez pas de redémarrer Apache pour prendre en compte les changements.

Ensuite, créez un script mail.php dans votre dossier source et lancez-le:

<?
$to = "<email destinataire>";
$subject = "Essai de mail";
$body = "Coucou";
$headers = "From: <email expéditeur>" . "\r\n";
if (mail($to, $subject, $body, $headers)) {
    echo ("Message envoyé !");
} else {
    echo ("Message non envoyé...");
}
?>


Commentaires

Le 20 mars 2012 Mathieu a dit :

Très intéressant. C'est ce que je cherchais. Merci :)

Le 29 décembre 2013 lef a dit :

Intéressant, mais le paramètrage UNIX dans une config windows me laisse perplexe.
A l'exécution j'ai un message
E-mail non envoyé.
Could not execute: /usr/sbin/sendmail
ce qui me semble cohérent, puisque je suis sous windows. Auriez-vous une idée ?
Merci d'avance
Leonfort

Le 19 février 2014 Latorre antoine a dit :

Bonjour,
après de longues semaines pour trouver la solution à l'envoie de mail en PHP depuis un serveur de chez 1and1, et un SMTP avec AUTH.
Le soleil est de retour :-)))
Le service hotline de 1and1 n'a jamais voulu dire un soupçon de piste.
Exemple parfaitement clair et précis.
Merci encore.
Très Cordialement,

Antoine LATORRE

Le 03 novembre 2017 Squale a dit :

Nickel, ça fonctionne effectivement sous Windows !! Cependant, il y a le chemin de sendmail dans le PHP.ini qui n'est plus bon (évolution des versions de XAMPP ?). A ce jour (XAMPP with PHP 7.1.10), dans PHP.ini, il faut saisir :

sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

et non pas

sendmail_path = "\"C:\xampplite\sendmail\sendmail.exe\" -t"

Merci beaucoup !

Cordialement

Fil RSS des commentaires de cet article