Envoyer des emails en localhost avec XAMPP (Windows) 21

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 ( ; )

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 mailtodisk => sendmail_path = « D:\xampp\mailtodisk\mailtodisk.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 :(";
        }
    }
}
?>
<div class="container">
    <div class="page-header">
        <h1>Test d'envoi d'email au format HTML</h1>
    </div>
    <form method="post" action="">
        <?php
        if (isset($_POST['action']) && $_POST['action'] == 'envoyer' && empty($send_error)) {
            echo '<div class="alert alert-success"><a class="close" data-dismiss="alert" href="#">&times;</a>Email envoyé avec succès !</div>';
        } else if (isset($send_error)) {
            echo '<div class="alert alert-error"><a class="close" data-dismiss="alert" href="#">&times;</a>' . $send_error . '</div>';
        }
        ?>
        <div class="control-group">
            <label for="to">Email</label>
            <div class="controls">
                <input type="text" name="to" id="to" class="span12" value="<?php if (isset($_POST['to'])) echo $_POST['to']; ?>" />
            </div>
        </div>
        <div class="control-group">
            <label for="subject">Sujet</label>
            <div class="controls">
                <input type="text" name="subject" id="subject" class="span12" value="<?php if (isset($_POST['subject'])) echo $_POST['subject']; ?>" />
            </div>
        </div>
        <div class="control-group">
            <label for="message">Message (format HTML)</label>
            <div class="controls">
                <textarea name="message" id="message"class="span12" rows="20" cols="50"><?php if (isset($_POST['message'])) echo $_POST['message']; ?></textarea>
            </div>
        </div>
        <div class="form-actions">
            <input type="hidden" name="action" value="envoyer" />
            <button type="submit" class="btn btn-primary">Envoyer</button>
        </div>
    </form>
</div>

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

21 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

Leave a Reply