Partage
  • Partager sur Facebook
  • Partager sur Twitter

Envoie de mail - PHPMailler

    24 janvier 2017 à 14:11:54

    Bonjour,


    J'ai un site web en local, et je souhaite envoyer un mail avec PHPMailler.

    Pour le moment il n'y a pas de condition pour l'envoie du mail, dès que l'on arrive sur l'index.php un mail doit être envoyer (pour voir si cela fonctionne dans un premier temps).

    Voici mon code qui envoie le mail:

        <?php
        require('phpmailer/class.phpmailer.php');
        require_once('phpmailer/class.smtp.php');
    
        $mail = new PHPMailer();
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Port = 25; //Par défaut
    
        //Authentification
        $mail->Username ="xxxxxx@gmail.com";
        $mail->Password = "xxxxxx";
    
        //Expediteur
        $mail->SetFrom('xxxxxx@gmail.com', 'Nicolas Merlaud');
        //Destinataire
        $mail->AddAddress('xxxxxx@gmail.com', 'Nicolas Merlaud');
        //Objet
        $mail->Subject = 'Objet du message';
    
        //Votre message
        $mail->MsgHTML('TEST');
    
        //Envoi du mail avec gestion des erreurs
        if(!$mail->send()){
            echo 'Erreur : ' . $mail->ErrorInfo;
        }else{
            echo 'Message envoyé !';
        }
        ?>

    Sur le site web un message m'affiche : Message envoyé !

    Mais aucuns mails n'arrive dans la boite mail ni dans les spam.

    Si quelqu'un s'y connaissant sur PHPMailler peut me contacter ce serai parfait. :)

    Je suis à votre disposition pour vos questions, rajouter du code, où vous envoyer les logs (je ne sais pas les afficher).

    Merci d'avance pour votre aide,

    Un débutant dans les choux.

    • Partager sur Facebook
    • Partager sur Twitter
      24 janvier 2017 à 15:04:37

      Alexmtch a écrit:

      à lire de haut en bas : http://php.net/manual/fr/function.mail.php


      Bonjour tout d’abord merci pour cette réponse très constructive.

      Cette documentation je l' ai déjà lu. Si je prend la peine de poster sur le forum c'est que j'ai déjà cherché de mon côté.

      Et  je ne suis pas quelqu'un qui comprend directement, dès qu'il a lu la doc. J'ai besoin d'une explication concrète d'une personne ayant déjà fait cela pour mieux comprendre.

      Merci de votre compréhension.

      PS: C'est bien un forum d'entraide ici hein ? Pas une page Google qui nous propose des liens multiples directement ?

      Un débutant dans les choux ... qui en a marre des redirections vers une doc qu'il a déjà lu et qu'il ne comprend pas toujours.

      -
      Edité par NicolasMerlaud 24 janvier 2017 à 15:07:54

      • Partager sur Facebook
      • Partager sur Twitter
        24 janvier 2017 à 15:33:41

        Je suis d'accord c'est un forum d'entraide mais quand je vois l'exemple mis sur la doc ci-dessous, je ne vois pas ce que l'on pourrais ne pas comprendre :

        <?php
             // Plusieurs destinataires
             $to  = 'aidan@example.com' . ', '; // notez la virgule
             $to .= 'wez@example.com';
        
             // Sujet
             $subject = 'Calendrier des anniversaires pour Août';
        
             // message
             $message = '
             <html>
              <head>
               <title>Calendrier des anniversaires pour Août</title>
              </head>
              <body>
               <p>Voici les anniversaires à venir au mois d\'Août !</p>
               <table>
                <tr>
                 <th>Personne</th><th>Jour</th><th>Mois</th><th>Année</th>
                </tr>
                <tr>
                 <td>Josiane</td><td>3</td><td>Août</td><td>1970</td>
                </tr>
                <tr>
                 <td>Emma</td><td>26</td><td>Août</td><td>1973</td>
                </tr>
               </table>
              </body>
             </html>
             ';
        
             // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
             $headers  = 'MIME-Version: 1.0' . "\r\n";
             $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        
             // En-têtes additionnels
             $headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
             $headers .= 'From: Anniversaire <anniversaire@example.com>' . "\r\n";
             $headers .= 'Cc: anniversaire_archive@example.com' . "\r\n";
             $headers .= 'Bcc: anniversaire_verif@example.com' . "\r\n";
        
             // Envoi
             mail($to, $subject, $message, $headers);
        ?>

        Dis moi quelles parties te sont obscures et je m'attellerais à les éclairer ;)

        • Partager sur Facebook
        • Partager sur Twitter
          24 janvier 2017 à 15:51:19

          Et bien là je vois que les variables:

          $to correspond aux destinataires. Pour moi mon code est:

          $mail->AddAddress('xxxxxx@gmail.com', 'Nicolas Merlaud');

          $subject correspond à l'objet. Pour moi code mon est:

          $mail->Subject = 'Objet du message';

          $messagecorrespond au message à envoyer. Pour moi mon code est:

          $mail->MsgHTML('TEST');



          L'en-tête Content-type : Aucune idée de ce que sait je vais chercher par la suite.

          En-têtes additionnels : Idem je vais recherche ce que c'est.

          Et pour ce qui est de l'envoi, (l'idéal pour moi serai un no-reply mais je test déjà avec une adresse existante) mais sur ce code pour moi ça n'envoie pas de mail vue qu'il n'y a pas de configuration du smtp.

          -
          Edité par NicolasMerlaud 24 janvier 2017 à 15:53:53

          • Partager sur Facebook
          • Partager sur Twitter
            24 janvier 2017 à 15:55:46

            Il me semble qu'il y a des manips à faire dans le fichier php.ini pour activer l'envoi de mail en local, notamment au niveau du protocole smtp. Ensuite tu as bien remplacé xxxxx par des adresses mail valide ?
            • Partager sur Facebook
            • Partager sur Twitter
              24 janvier 2017 à 15:59:08

              Si tu veux envoyer un mail, utilise plus le code de la doc (celui que je t'ai mis, tu aura bien plus de facilité à le maîtriser).

              L'en-tête Content-type correspond grossièrement à la langue utilisée pour envoyer le mail. En gros tu vas pouvoir définir si les caractères sont européen, asiatiques, anglais, arabes, etc... mais aussi indiquer si ce que tu envoie est un simple texte, ou un contenu html.

              Dans les entêtes additionnelles, tu peux ajouter des copies conformes, copies cachées pour tes mails, Assigner un mail à un prénom par exemple, et indiquer qui est l'expéditeur via un prénom.

              Quand tu reçois un mail dans le FROM il n'est pas écrit par exemple contact@openclassrom.com mais "Contact Openclassroom", tout ceci n'a qu'un simple but esthétique.

              • Partager sur Facebook
              • Partager sur Twitter
                24 janvier 2017 à 16:07:24

                adrienrosi a écrit:

                Il me semble qu'il y a des manips à faire dans le fichier php.ini pour activer l'envoi de mail en local, notamment au niveau du protocole smtp. Ensuite tu as bien remplacé xxxxx par des adresses mail valide ?


                Le fichier php.ini a bien été modifier. Les xxxxxx sont bien des adresses valide.

                Alexmtch a écrit:

                Si tu veux envoyer un mail, utilise plus le code de la doc (celui que je t'ai mis, tu aura bien plus de facilité à le maîtriser).

                L'en-tête Content-type correspond grossièrement à la langue utilisée pour envoyer le mail. En gros tu vas pouvoir définir si les caractères sont européen, asiatiques, anglais, arabes, etc... mais aussi indiquer si ce que tu envoie est un simple texte, ou un contenu html.

                Dans les entêtes additionnelles, tu peux ajouter des copies conformes, copies cachées pour tes mails, Assigner un mail à un prénom par exemple, et indiquer qui est l'expéditeur via un prénom.

                Quand tu reçois un mail dans le FROM il n'est pas écrit par exemple contact@openclassrom.com mais "Contact Openclassroom", tout ceci n'a qu'un simple but esthétique.


                On m'a recommander PostFix, PHPMailler et SENDMail pour l'envoie de mail. Je vais quand même utiliser le code de la doc voir si cela marche et je reviens vers vous.

                Merci pour l'aide :D

                -
                Edité par NicolasMerlaud 24 janvier 2017 à 16:08:28

                • Partager sur Facebook
                • Partager sur Twitter
                  24 janvier 2017 à 16:25:51

                  SAlut,

                  Juste pour info tu a quelle version de phpmailer ? Je te demande car une faille de sécurité critique a été trouvée y'a pas longtemps ! 

                  Il faut (si tu ne l'utilise pas encore) utiliser une version >= a la 5.2.18 : 

                  http://www.developpez.com/actu/109938/Une-faille-critique-de-PHPMailer-permet-d-executer-du-code-arbitraire-a-distance-les-utilisateurs-sont-vivement-encourages-a-appliquer-le-patch/

                  https://www.nextinpact.com/news/102657-phpmailer-victime-dune-faille-securite-critique-correctif-est-disponible.htm

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 janvier 2017 à 16:31:51

                    Condkoï a écrit:

                    SAlut,

                    Juste pour info tu a quelle version de phpmailer ? Je te demande car une faille de sécurité critique a été trouvée y'a pas longtemps ! 

                    Il faut (si tu ne l'utilise pas encore) utiliser une version >= a la 5.2.18 : 

                    http://www.developpez.com/actu/109938/Une-faille-critique-de-PHPMailer-permet-d-executer-du-code-arbitraire-a-distance-les-utilisateurs-sont-vivement-encourages-a-appliquer-le-patch/

                    https://www.nextinpact.com/news/102657-phpmailer-victime-dune-faille-securite-critique-correctif-est-disponible.htm

                    Bonjour Condokoï, j'utilise la version : 5.2.15

                    ----------------------------------------------------------------------------------------------------------------------------------------------------

                    J'ai bien utilisé le code de la doc mais même résultat rien dans la boîte mail ... Pourtant j'ai juste changé les informations nécessaire ...

                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 janvier 2017 à 16:37:23

                      Salut !

                      Pour utiliser PHPMailer je te conseille d'utiliser son autoloader. Je m'explique :

                      Au lieu de

                      require('phpmailer/class.phpmailer.php');
                      require_once('phpmailer/class.smtp.php');

                      Tu peux mettre

                      require 'phpmailer/PHPMailerAutoload.php';

                      (pas besoin des parenthèses, require est une instruction, pas une fonction)

                      Ensuite remplace le port par 587 et utilise TLS

                      $mail->Port = 587;
                      $mail->SMTPSecure = 'tls';

                      Normalement, ton mail devrait s'envoyer. L'exemple sur le github de PHPMail m'a aidé : https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail.phps

                      Code final :

                      <?php
                      require 'phpmailer/PHPMailerAutoload.php';
                       
                      $mail = new PHPMailer();
                      $mail->Host = 'smtp.gmail.com';
                      $mail->SMTPAuth = true;
                      $mail->Port = 587;
                      $mail->SMTPSecure = 'tls';
                       
                      //Authentification
                      $mail->Username ="xxxxxx@gmail.com";
                      $mail->Password = "xxxxxx";
                       
                      //Expediteur
                      $mail->SetFrom('xxxxxx@gmail.com', 'Nicolas Merlaud');
                      //Destinataire
                      $mail->AddAddress('xxxxxx@gmail.com', 'Nicolas Merlaud');
                      //Objet
                      $mail->Subject = 'Objet du message';
                       
                      //Votre message
                      $mail->MsgHTML('TEST');
                       
                      //Envoi du mail avec gestion des erreurs
                      if(!$mail->send()){
                          echo 'Erreur : ' . $mail->ErrorInfo;
                      }else{
                          echo 'Message envoyé !';
                      }
                      ?>



                      -
                      Edité par Miguel_Migoo 24 janvier 2017 à 16:40:21

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 janvier 2017 à 16:39:13

                        Peut être une erreur d'extensions chargées, ça m'est déjà arrivé ^^

                        Dans ton php.ini définis :

                        error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

                        display_errors = On

                        Ensuite (j'espère que tu es sous linux), tu vas sur ton terminal, tu fais :

                        php -a

                        Tu arrive sur un invite de commandes php où tu peux envoyer executer du php sur ton terminal et tu colle :

                        mail('tonmail@example.com', 'Mon Sujet', 'test');

                        Dis moi si tu as un message d'erreur qui s'affiche ;)

                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 janvier 2017 à 16:44:41

                          Miguel_Migoo a écrit:

                          Salut !

                          Pour utiliser PHPMailer je te conseille d'utiliser son autoloader. Je m'explique :

                          Au lieu de

                          require('phpmailer/class.phpmailer.php');
                          require_once('phpmailer/class.smtp.php');

                          Tu peux mettre

                          require 'phpmailer/PHPMailerAutoload.php';

                          (pas besoin des parenthèses, require est une instruction, pas une fonction)

                          Ensuite remplace le port par 587 et utilise TLS

                          $mail->Port = 587;
                          $mail->SMTPSecure = 'tls';

                          Normalement, ton mail devrait s'envoyer. L'exemple sur le github de PHPMail m'a aidé : https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail.phps

                          -
                          Edité par Miguel_Migoo il y a moins de 30s

                          Je viens de le faire et toujours pas donc 2 hypothèses:

                          1: Mon php.ini est mal configuré

                          2: Juste avec ce code juste en chargant la page ça devrai envoyer un mail on est d'accord ? (Ça m'affiche Message envoyé!)

                          <?php
                              require 'phpmailer/PHPMailerAutoload.php';
                          
                              $mail = new PHPMailer();
                              $mail->Host = 'smtp.gmail.com';
                              $mail->SMTPAuth = true;
                              $mail->Port = 25; //Par défaut
                              $mail->SMTPSecure = 'tls';
                          
                              //Authentification
                              $mail->Username ="xxxxxx@gmail.com";
                              $mail->Password = "xxxxxx";
                          
                              //Expediteur
                              $mail->SetFrom('xxxxxx@gmail.com', 'Nicolas Merlaud');
                              //Destinataire
                              $mail->AddAddress('xxxxxx@gmail.com', 'Nicolas Merlaud');
                              //Objet
                              $mail->Subject = 'Objet du message';
                          
                              //Votre message
                              $mail->MsgHTML('TEST');
                          
                              //Envoi du mail avec gestion des erreurs
                              if(!$mail->send()){
                                  echo 'Erreur : ' . $mail->ErrorInfo;
                              }else{
                                  echo 'Message envoyé !';
                              }
                              ?>




                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 janvier 2017 à 16:49:24

                            Remplace le port par 587 (vu que tu utilises TLS), à mon avis gmail ne doit pas utiliser le port 25 (sous réserve de vérification).

                            Sinon, si tu es sur linux, tu peux faire

                            sudo tail -f /var/log/apache2/error.log

                            pour voir s'il t'affiche des erreurs.

                            Le php.ini ne doit normalement pas jouer sur PHPMailer.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 janvier 2017 à 16:49:48

                              Alexmtch a écrit:

                              Peut être une erreur d'extensions chargées, ça m'est déjà arrivé ^^

                              Dans ton php.ini définis :

                              error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

                              display_errors = On

                              Ensuite (j'espère que tu es sous linux), tu vas sur ton terminal, tu fais :

                              php -a

                              Tu arrive sur un invite de commandes php où tu peux envoyer executer du php sur ton terminal et tu colle :

                              mail('tonmail@example.com', 'Mon Sujet', 'test');

                              Dis moi si tu as un message d'erreur qui s'affiche ;)

                              J'ai rajouter le : error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT // donc j'ai mis en plus -> & ~E_DEPRECATED & ~E_STRICT

                              Le display_errors = On était déjà bon

                              Et je suis sous Windows...

                              Et toujours rien ...

                              Miguel_Migoo a écrit:

                              Remplace le port par 587 (vu que tu utilises TLS), à mon avis gmail ne doit pas utiliser le port 25 (sous réserve de vérification).

                              Sinon, si tu es sur linux, tu peux faire

                              sudo tail -f /var/log/apache2/error.log

                              pour voir s'il t'affiche des erreurs.

                              Le php.ini ne doit normalement pas jouer sur PHPMailer.

                              Je viens de changer le port, je suis sous Windows et non toujours rien ...

                              -
                              Edité par NicolasMerlaud 24 janvier 2017 à 16:59:48

                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 janvier 2017 à 16:58:28

                                Bonjour,

                                Je penche vraiment pour une erreur de config du ini.php, je me suis souvent cassé la tête la-dessus.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 janvier 2017 à 16:58:31

                                  Salut,

                                  oki en prod ça serait quand même mieux de passer à la version 5.2.21 (je crois que c'est la dernière) ça ne change rien aux méthodes et / ou fonction c'est totalement transparent et c'est plus sécure !

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 janvier 2017 à 17:06:02

                                    Miguel_Migoo a écrit:

                                    Remplace le port par 587 (vu que tu utilises TLS), à mon avis gmail ne doit pas utiliser le port 25 (sous réserve de vérification).

                                    Sinon, si tu es sur linux, tu peux faire

                                    sudo tail -f /var/log/apache2/error.log

                                    pour voir s'il t'affiche des erreurs.

                                    Le php.ini ne doit normalement pas jouer sur PHPMailer.

                                    Je viens de changer le port, je suis sous Windows et non toujours rien ...

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 janvier 2017 à 17:08:15

                                      Si tu veux utiliser la fonction mail() de PHP et pas PHPMailer avec Windows, il faut modifier sendmail.ini et php.ini

                                      Dans sendmail.ini

                                      smtp_server=smtp.gmail.com
                                      smtp_port=587
                                      error_logfile=error.log
                                      debug_logfile=debug.log
                                      auth_username=your-gmail-id@gmail.com
                                      auth_password=your-gmail-password
                                      force_sender=your-gmail-id@gmail.com

                                      en remplaçant l'adresse et le mot de passe par ton identifiant et ton mot de passe gmail, et dans php.ini

                                      SMTP=smtp.gmail.com
                                      smtp_port=587
                                      sendmail_from = your-gmail-id@gmail.com
                                      sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
                                      ;sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

                                      en remplaçant l'adresse your-gmail-id@gmail.com par la tienne. J'ai trouvé ça dans les commentaires de cette doc : http://php.net/manual/fr/function.mail.php 

                                      Du coup plus besoin de PHPMailer. Par contre je n'ai pas pu tester, je suis sous Linux (Debian).

                                      Sinon, je pense avoir trouvé le problème avec PHPMailer : un problème de casse !

                                      <?php
                                      require 'phpmailer/PHPMailerAutoload.php';
                                        
                                      $mail = new PHPMailer();
                                      $mail->Host = 'smtp.gmail.com';
                                      $mail->SMTPAuth = true;
                                      $mail->Port = 587;
                                      $mail->SMTPSecure = 'tls';
                                        
                                      //Authentification
                                      $mail->Username ="xxxxxx@gmail.com";
                                      $mail->Password = "xxxxxx";
                                        
                                      //Expediteur
                                      $mail->setFrom('xxxxxx@gmail.com', 'Nicolas Merlaud');
                                      //Destinataire
                                      $mail->addAddress('xxxxxx@gmail.com', 'Nicolas Merlaud');
                                      //Objet
                                      $mail->Subject = 'Objet du message';
                                        
                                      //Votre message
                                      $mail->msgHTML('TEST');
                                        
                                      //Envoi du mail avec gestion des erreurs
                                      if(!$mail->send()){
                                          echo 'Erreur : ' . $mail->ErrorInfo;
                                      }else{
                                          echo 'Message envoyé !';
                                      }
                                      ?>

                                      Les lignes 15, 17 et 22 devaient poser problème. Je pense que comme moi tu as dû faire le tuto sur developpez.com qui date de 2004 et qui utilise de vieilles méthodes qui n'existent plus dans les versions actuelles de PHPMailer. Pour utiliser les méthodes et être sûr qu'elles existent tu peux ouvrir le fichier class.phpmailer.php et faire une recherche pour vérifier que la méthode existe bien.

                                      EDIT: j'ai oublié de prendre ça en compte, mais vu que tu es sur Windows, le require devrait avoir un anti-slash :

                                      require 'phpmailer\PHPMailerAutoload.php';

                                      EDIT2 : Peut-être que je viens de te dire une bêtise juste au dessus, si tu voyais apparaître "Message envoyé" et pas une page blanche le chemin devait être bon avec un slash.

                                      -
                                      Edité par Miguel_Migoo 25 janvier 2017 à 11:37:47

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Envoie de mail - PHPMailler

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown