Envoyer des emails en localhost avec XAMPP (Windows) 26

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 :(";
        }
    }
}
?>

 

 

 

 

 

 

 

 

 

 

 

 

Sources : http://www.daniweb.com/web-development/php/threads/347696/sending-email-from-localhost-in-xampp-windows

26 thoughts on “Envoyer des emails en localhost avec XAMPP (Windows)

  1. Reply Isaura Amadi Oct 23,2012 20:34

    Really good site. Thank you so much for your time in writing the posts.

  2. Reply Baye Oct 21,2013 13:51

    Merci beaucoup!!

  3. Reply meche Oct 22,2013 10:44

    Merci beaucoup pour cette aide précieuse, fonctionne aussi bien avec un compte Gmail que orange (port 25).

  4. Reply fil Fév 10,2014 16:43

    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

    • Reply Pierre Mar 17,2014 16:47

      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).

  5. Reply david Avr 9,2014 10:12

    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.

    • Reply Pierre Avr 9,2014 10:17

      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.

  6. Reply david Avr 9,2014 10:24

    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 🙁

    • Reply Pierre Avr 9,2014 10:32

      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)

  7. Reply Gwen Mai 14,2014 19:04

    Bon bah cet article va atterrir sur un site internet

  8. Reply asmaa Mai 19,2014 00:40

    ca marche pas 🙁

  9. Reply Chara Mai 25,2014 15:40

    Je n’ai pas terminé de regarder par contre je passe dans la semaine

  10. Reply php Juin 18,2014 12:29

    voila l’erreur :
    14/06/18 10:21:32 : Must issue a STARTTLS command first. s14sm13224600wij.1 – gsmtp

    • Reply Pierre Juin 19,2014 09:23

      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 !

  11. Reply Maritza Juin 22,2014 02:10

    Je finirai de voir ça dans la semaine

  12. Reply http://www.cassie-cruz.com/ Juin 26,2014 01:42

    Je n’ai paѕ fini de lire cependant je reρasserai dans la soirée

  13. Reply chagasse minette Juil 12,2014 01:38

    Poste vraiment attrayant !!

  14. Reply Origami Juil 21,2014 13:03

    Super merci !
    Cela fonctionne parfaitement
    Bonne journée

  15. Reply Asma Mai 13,2015 19:41

    il m’indique que mon mail a été envoyé avec succès mais je reçois rien pourtant !!

    • Reply Pierre Mai 18,2015 12:04

      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.

  16. Reply Jean-Paul Juin 14,2017 16:32

    Impeccable + formidable , fonctionne du premier coup

  17. Reply Nabil Mar 10,2021 20:11

    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

    • Reply Pierre Mar 11,2021 10:37

      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

      • Reply Pierre Mar 11,2021 10:40

        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.

  18. Reply Pol Tytgat Juin 3,2021 17:48

    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

    • Reply Pierre Juin 30,2021 12:48

      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

Leave a Reply

  

  

  

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.