Pourquoi je ne peux pas envoyer un mail depuis PHP ?

Réponses rédigées par Antoine
Dernière mise à jour : 2022-09-16 12:52:50
Thèmes : php - mail
Question

Bonjour j'avais déjà essayé la function mail().

<?php
ini_set('SMTP','localhost');
     // Plusieurs destinataires
     $to  = 'exemple@fr.scc.com>'; //, sally@example.com'; // notez la virgule

     // Sujet
     $subject = 'Demande de création de ticket REGUL';

     // 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';
     $headers[] = 'Content-type: text/html; charset=iso-8859-1';

     // En-têtes additionnels
     // $headers[] = 'To: HD <safranbugtrackeradc@fr.scc.com>';
     // $headers[] = 'From: Anniversaire <anniversaire@example.com>';
     // $headers[] = 'Cc: anniversaire_archive@example.com';
     // $headers[] = 'Bcc: anniversaire_verif@example.com';

     // Envoi
     mail($to, $subject, $message, implode("\r\n", $headers));
?>

Mais j'ai cette erreur qui s'affiche.

PHP Warning:  mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\inetpub\wwwroot\DevAdminPage-SansDossiers\mailenvoi1.php on line 42

j'ai regardé le fichier php.ini en local, le port 25 est bien déclaré.

J'ai aussi essayé avec ini_set, pas de changement.

Mais je n'aurai pas la main sur le fichier php.ini du serveur IIS externe.

Merci pour votre aide si précieuse.

Réponse

Bonjour,

Tout d'abord êtes vous bien sure d'avoir un serveur de mail sur votre environnement de développement ?

Si vous développez en local, sur un ordinateur Windows, avec Wamp par exemple, vous n'avez pas de serveur de mail, donc il est tout à fait normal que vous obteniez l'erreur suivante :

Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in ...

Si vous êtes certain que sur votre environnement de développement, vous disposez d'un serveur de mail opérationnel, l'autre seule raison pour laquelle vous obtenez ce message d'erreur est le blocage du port 25 par un firewall.

En outre je vous conseille vivement d'utiliser plutôt la librairie PHPMailer au lieu de la fonction mail(). PHPMailer est beaucoup plus robuste et flexible.

Vous trouverez plusieurs tutoriels sur Google pour installer et configurer PHPMailer ; avec Gmail par exemple comme serveur d'envoi de mail.