Avant tout, je tiens à préciser que je l’ai fait sous XAMPP mais qu’il devrait également être possible de le faire sous WAMP (ou autre all-in-one) de façon assez facile je pense.
Je vais donc d’abord expliquer les démarches pour XAMPP et ensuite décrire la façon dont je pense qu’il faudrait le faire avec n’importe quel autre pack.
NOTE 1
Pour pouvoir envoyer un mail via localhost de façon simple, il est préférable de posséder un compte Gmail ou tout du moins un serveur SMTP.
Dans le pire des cas, vous pouvez toujours utiliser le SMTP de votre Fournisseur d’Accès à Internet (comme dans mon cas, Belgacom, dont le serveur SMTP est relay.belgacom.be)
NOTE 2
Je ferai plusieurs fois références à « commenter » et « décommenter » une ligne. Dans les fichiers .ini, les lignes en commentaire sont précédées d’un point-virgule ( ; )
EDIT : 30/06/2021
mailtodisk\mailtodisk.exe est devenu sendmail\sendmail.exe
Via XAMPP
- Ouvrez le fichier de configuration php.ini (normalement: C:\xampp\php\php.ini)
- Cherchez les lignes « SMTP = » et « smtp_port = » et ajoutez-y les infos de votre serveur SMTP
Mon exemple :
SMTP = smtp.gmail.com
smtp_port = 587
- Cherchez la ligne « sendmail_from = « , décommentez-la si elle l’est (normalement oui). Ajoutez-y votre adresse email.
- Cherchez la ligne « sendmail_path = « . Commentez celle qui concerne sendmail => sendmail_path = « D:\xampp\sendmail\sendmail.exe »
- Décommentez celle qui concerne sendmail et vérifier que le chemin est correct (normalement oui)
- Ouvrez à présent le fichier sendmail.ini (normalement C:\xampp\sendmail\sendmail.ini)
- Cherchez les lignes « smtp_server= » et « smtp_port » et mettez-y les informations de votre serveur SMTP (les mêmes que pour le php.ini)
- Cherchez les lignes « auth_username= » et « auth_password= » et mettez les informations relatives à votre compte. Dans le cas d’un compte Gmail, il suffit de mettre votre adresse email et le mot de passe que vous utilisez pour vous connecter à Gmail.
- Cherchez la ligne « force_sender= » et ajoutez-y une fois encore votre adresse Gmail.
C’est fini ! Redémarrez votre serveur Apache et testez dès à présent votre script ! Si ça ne fonctionne pas, vérifier le fichier error.log dans le dossier de sendmail.
Via d’autres packs (WAMP, …)
Concernant le php.ini, les règles restent les mêmes si ce n’est les chemins qui changent. Par exemple dans WAMP, il me semble que le chemin d’accès au php.ini est : C:\wamp\bin\php\php5.3.9\php.ini
Concernant sendmail, il n’existe pas par défaut dans WAMP, vous pouvez le télécharger ici : http://www.sendmail.com/sm/open_source/
Il ne reste plus qu’à vérifier les chemins de chargement de sendmail dans php.ini et ensuite configurer sendmail.ini et normalement, le tour est joué.
Un petit script pour tester l’envoi d’email
if (isset($_POST['action']) && $_POST['action'] == 'envoyer') {
$send_error = "";
$required_fields = array('to', 'subject', 'message');
foreach ($required_fields AS $v) {
if (empty($_POST[$v])) {
$send_error = "Un ou plusieurs champs sont vides, veuillez vérifier le formulaire.";
}
}
if (empty($send_error)) {
extract($_POST);
$headers = "From: Sendmail Tests" . PHP_EOL;
$headers .= 'Content-type: text/html; charset=utf-8' . PHP_EOL;
if (!mail($to, $subject, $message, $headers)) {
$send_error = "Erreur lors de l'envoi de l'email :(";
}
}
}
?>
Test d’envoi d’email au format HTML
Really good site. Thank you so much for your time in writing the posts.
Merci beaucoup!!
Merci beaucoup pour cette aide précieuse, fonctionne aussi bien avec un compte Gmail que orange (port 25).
Bonjour!j’ai suivi toutes vos recommandations et le script avait toujours fonctionné!mais récemment je ne sais pas pourquoi mais ca a arrété de fonctionner!quand je regarde le fichier error.log je recois le message suivant: 14/02/10 07:38:24 : Socket Error # 11003
Pouvez vous m’eclairer svp! Merci
Bonjour !
Vu que tout fonctionnait avant je suppose que la configuration est correcte.
N’avez-vous pas abusé du service ? Ceci est fait pour envoyer un email de temps en temps, mais si vous essayez d’en envoyer plus de 250 (il me semble) d’un seul coup, vous serez ban (de Gmail).
Bonjour,
j’ai des erreurs dans mon fichier logs 🙁
[core:warn] [pid 8272:tid 380] AH00098: pid file C:/xampp/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Wed Apr 09 10:05:34.333292 2014] [mpm_winnt:notice] [pid 8272:tid 380] AH00455: Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 configured -- resuming normal operations
[Wed Apr 09 10:05:34.333292 2014] [mpm_winnt:notice] [pid 8272:tid 380] AH00456: Server built: Aug 18 2012 12:41:37
[Wed Apr 09 10:05:34.333292 2014] [core:notice] [pid 8272:tid 380] AH00094: Command line: 'c:\\xampp\\apache\\bin\\httpd.exe -d C:/xampp/apache'
[Wed Apr 09 10:05:34.336295 2014] [mpm_winnt:notice] [pid 8272:tid 380] AH00418: Parent: Created child process 7408
[Wed Apr 09 10:05:35.174121 2014] [mpm_winnt:notice] [pid 7408:tid 400] AH00354: Child: Starting 150 worker threads.
Bonjour,
Ce ne sont que des warnings. J’ai exactement les mêmes dans mes logs, ça n’empêche pas le bon fonctionnement d’Apache. Je suppose que ces erreurs surviennent lorsqu’on utilise pas Apache en tant que service, et qu’il doit donc kill le processus.
Je ne suis pas spécialiste Apache mais il me semble que c’est comme pour le PHP : aucun warning / notice n’arrête le processus, seules les erreurs fatales le font.
le problème c’est que ça ne marche pas, en utilisant le script j’ai le message « ×Erreur lors de l’envoi de l’email 🙁 » et pas de mail 🙁
Les erreurs affichées sont des erreurs d’Apache et ne concernent pas le soucis d’envoi de l’email. Vu qu’Apache tourne correctement et que seul le script fait défaut, je ne peux que vous conseiller de vérifier que :
– Sendmail est installé correctement
– Sendmail est correctement configuré
– vérifier les chemins d’accès à Sendmail
– vérifier l’URL du SMTP et vos accès à ce dernier
En gros, passer en revue chaque point du post xD
Dnas votre fichier error.log d’Apache, cherchez peut-être plutôt « mail » ou « smtp », peut-être trouverez vous l’erreur appropriée (la fonction mail() retournant simplement TRUE ou FALSE, il est souvent difficile d’identifier le problème)
Bon bah cet article va atterrir sur un site internet
ca marche pas 🙁
Je n’ai pas terminé de regarder par contre je passe dans la semaine
voila l’erreur :
14/06/18 10:21:32 : Must issue a STARTTLS command first. s14sm13224600wij.1 – gsmtp
D’après une recherche rapide sur Google, cette erreur peut provenir de votre antivirus.
Pensez également à vérifier les chemins d’accès à Sendmail dans votre php.ini.
Vous pouvez également chercher sendmail.ini, commenter le compte « Mercury » et le « Free mail service exemple » et ajouter le compte Gmail comme ceci :
account Gmail
tls on
tls_certcheck off
host smtp.gmail.com
from [your_gmail_username]@gmail.com
auth on
account default : Gmail
Si vous modifiez des fichiers .ini, n’oubliez pas de redémarrer votre serveur Apache !
Je finirai de voir ça dans la semaine
Je n’ai paѕ fini de lire cependant je reρasserai dans la soirée
Poste vraiment attrayant !!
Super merci !
Cela fonctionne parfaitement
Bonne journée
il m’indique que mon mail a été envoyé avec succès mais je reçois rien pourtant !!
Bonjour,
Avez-vous regardé les logs ? L’envoi d’email ne renvoi pratiquement jamais d’erreur, il faut vérifier les logs pour savoir réellement ce qu’il s’est passé.
Je tiens aussi à signaler que ce guide date d’il y a quelques temps, et que Gmail a changé sa politique quant aux envois d’emails via leurs serveurs et la vérification de la validation des comptes.
Impeccable + formidable , fonctionne du premier coup
Bonsoir, je suis amateur en PHP et MySQL, et j’ai un souci afin de faire fonctionner ma page ou je propose un formulaire, mais celui-ci ne s’envoie pas, et j’ai une erreur du type : Could not instantiate mail function.
Voilà je suis complètement perdu.
Merci
Bonjour Nabil,
N’hésitez pas à donner plus de détails car c’est compliqué de répondre à une question si vague.
D’après le message, il semblerait que vous utilisiez une libraire pour envoyer vos emails : PHPMailer.
Je vous conseillerais, avant toute chose, de tester avec la fonction native de PHP afin de vous assurer que votre configuration est correcte.
Ensuite, de ce que je peux lire, il semblerait que vous n’ayez pas une bonne utilisation de la librairie.
Pour cela, il faudrait voir le code que vous utilisez. Je vous invite à lire la documentation de PHPMailer pour son utilisation via SMTP.
On peut retrouver énormément de personnes avec la même erreur et des solutions différentes sur le net : voir la recherche Google
Je vous conseillais de tester la fonction native de PHP mais en fait rien à voir.
Votre problème n’est pas en relation avec le sujet de cet article.
Cet article décrit comment configurer son serveur web afin qu’il passe toujours par un SMTP pour envoyer les emails. Alors que dans votre cas, vous faites fi de cette configuration et avez choisi de passer par une librairie.
Il n’y a évidemment pas de mal à ça mais du coup, tester la fonction mail() n’a aucun sens vu que vous ne l’utilisez de toute façon pas.
Je vous invite donc à bien vérifier votre code PHPMailer (si c’est bien le cas) et à suivre la documentation relative à ce dernier.
Bonjour
Serait t’il possible d’avoir la mise à jours 2021 en terme de configuration ! J’essaye depuis ce matin d’envoyer des mails via PHP mail et rien n’y fait !
Quand je suis ce tuto ou que j’adapte les infos smtp Google… le mail semble envoyé mais je ne reçois rien. Error log parle d’un soucis d’authentification Google…
Merci de votre aide
Bonjour,
J’ai refait la manip de mon côté, et les seules choses qui ont changé c’est que mailtodisk\mailtodisk.exe est devenu sendmail\sendmail.exe (je viens d’éditer mon post).
Je pense que le changement majeur depuis l’époque de publication est qu’à présent, il y a beaucoup plus de sécurité du côté de Gmail.
Donc par défaut, il n’est plus possible d’envoyer des mails en localhost sans modifier des préférences du compte.
C’est ce qui est décrit dans cette documentation Google : https://support.google.com/cloudidentity/answer/6260879
Quoi qu’il arrive, votre message d’erreur parle d’authentification Google donc c’est que tout fonctionne sauf le login et cette partie ne concerne pas cet article