web-dev-qa-db-fra.com

fonction php mail () sur localhost

J'ai un problème avec la fonction php mail() sur le serveur localhost. Je ne peux pas tester mon application de messagerie sur localhost lorsque j'essaie d'envoyer des courriels avec la fonction php mail()

Je reçois cette erreur Warning: mail() [function.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 F:\wamp\www\product\ajax.php on line 64

J'utilise le serveur WAMP et si quelqu'un connaît la solution, aidez-moi.

14
Shark

Vous devez configurer un serveur de messagerie sur votre ordinateur pour que la fonction de messagerie fonctionne. Si vous êtes sous Windows (ce qui, je suppose, découle de votre utilisation de WAMP), vous pouvez configurer un serveur de messagerie Pegasus .

D'autres options incluent l'utilisation d'une classe d'encapsuleur telle que SwiftMailer ou PHPMailer et leur utilisation pour se connecter à un autre serveur SMTP tel que votre compte GMail. Même si vous utilisez le serveur de messagerie Pegasus sur votre propre itinéraire localhost, je vous recommanderais néanmoins d'utiliser l'une des deux classes que j'ai mentionnées ci-dessus. Ils vous donnent beaucoup plus de flexibilité et sont plus sûrs.

Connexion au serveur SMTP de votre FAI ou à votre messagerie GMail ou à l’un des moyens les plus faciles de sortir de celui-ci.

14
Treffynnon

Après avoir passé 2 jours sur ce problème de fonction mail php, je l’ai compris et je vous aiderais à faire de même. Cela a perdu assez de temps, commençons ...

PHP a une fonction mail php intégrée qui peut être utilisée pour envoyer du courrier à partir d'un script, mais cette fonction est limitée car elle ne peut pas vous connecter à un serveur SMTP (mail transfer protocol). Je suppose que vous utilisez WAML/XAMPP, que vous n’avez pas vraiment essayé XAMPP, mais vous pouvez le savoir en procédant comme suit:

Nous devons d’abord trouver un moyen de connecter notre serveur Web (wamp) à un serveur SMTP externe. Nous utiliserions Gmail dans ce cas, mais auparavant, nous devions télécharger/installer un outil permettant de récupérer notre courrier électronique à partir du script php et de le transmettre au SMTP de Gmail.

  1. Allez d’abord sur http://glob.com.au/sendmail/ et cliquez sur le fichier téléchargé sendmail.Zip pour le télécharger.
  2. Une fois le téléchargement terminé, extrayez-le dans C:\wamp\ et extrayez-le sous forme de dossier, ce qui signifie que son contenu devrait se trouver dans un dossier appelé sendmail. Vous pouvez le trouver à C:\wamp\sendmail.
  3. Maintenant, dans le dossier d'envoi du courrier, cliquez avec le bouton droit sur sendmail.ini et ouvrez-le en tant qu'administrateur car nous sommes sur le point de modifier son contenu.
  4. changer les lignes suivantes

    [sendmail]
    smtp_server=smtp.gmail.com
    smtp_port= 465
    smtp_ssl=ssl
    default_domain=localhost
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username= enter your gmail account here        
    auth_password= enter the password for that account here
    ;pop3_server=
    ;pop3_username=
    ;pop3_password=
    ;force_sender=
    ;force_recipient=
    hostname= localhost 
    

    S'il vous plaît soyez prudent et faites comme vous voyez ci-dessus. J'ai supprimé la plupart des contenus indésirables de mon fichier sendmail.ini afin de rendre les choses un peu plus faciles à lire.

  5. Sauvegarder le fichier

  6. Accédez à votre dossier wampname__, déplacez-le vers bin\Apache\apache[version here]\bin\php.ini et modifiez le fichier php en tant qu'administrateur comme suit:

    Si vous utilisez le bloc-notes, vous pouvez utiliser la recherche sous l’onglet Édition ou ctrl+F et tapez "fonction mail" pour naviguer rapidement vers la partie fonction de courrier du fichier php.ini.

    [mail function]
    ;For Win32 only.
    ;http://php.net/smtp
    ;SMTP = localhost
    ;http://php.net/smtp-port
    ;smtp_port = 25
    
    ;For Win32 only.
    ;http://php.net/sendmail-from
    ;sendmail_from = 
    
    ;For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    ;http://php.net/sendmail-path
    sendmail_path = "C:\wamp\sendmail\sendmail.exe -t -i" ----> this is the changed part. 
    

    Remarque: Seul le sendmail_path doit être remplacé par celui ci-dessus. Laissez les autres paramètres tels que vous les voyez. Votre chemin peut être différent selon l'endroit où vous avez extrait le dossier sendmail.

  7. Enregistrez ce fichier php.ini

  8. Revenez à C:\wamp\bin et choisissez php\php[version here]\php.ini et modifiez le chemin d'accès sendmail comme vous l'avez fait ci-dessus et enregistrez le fichier en tant qu'administrateur/ou avant de l'ouvrir, ouvrez-le en tant qu'administrateur en cliquant avec le bouton droit de la souris.

  9. Exécutez wampserver en tant qu'administrateur et lorsqu'il passe au vert, activez les éléments suivants:

    Faites un clic gauche sur l'icône verte et passez à php -> extensions php -> php_sockets (cliquez pour avoir la coche noire)

    attendez que l'icône redevienne verte et suivez les instructions ci-dessus pour activer php_openssl.

    Si l'icône devient verte, il est temps d'activer apaches ssl_module en passant à icom Apache lorsque vous cliquez sur l'icône de serveur de feu vert. Vous pouvez le trouver dans les modules Apache.

    Lorsque vous avez terminé avec les trois étapes ci-dessus, quittez et exécutez à nouveau wampserver en tant qu’administrateur pour effectuer les modifications.

  10. Revenez dans le dossier extrait de sendmail et cliquez avec le bouton droit de la souris sur sendmail.exe
    Accédez à ses propriétés -> compatibilité -> modifiez les paramètres de tous les utilisateurs -> mode de compatibilité [passez à Windows XP (service pack 3)] -> Exécutez ce programme en tant qu'administrateur [cochez cette option].

    Enregistrer et appliquer.
    Nous devions le faire de sorte que chaque fois que nous appelons l’application sendmail, elle s’exécute en tant qu’administrateur.

  11. Nous devons maintenant configurer notre compte gmail pour fonctionner avec cette application sendmail. Connectez-vous à votre compte gmail et dans le coin supérieur droit, cliquez sur l'engrenage pour choisir les paramètres. Dans les paramètres, accédez à l'onglet Transfert et POP/IMAP et activez le protocole IMAP. Sauvegarder les modifications

  12. Enfin, revenez à votre boîte de réception. En haut à droite de votre adresse e-mail se trouve une petite flèche pointant vers le bas. Cliquez dessus pour choisir Mon compte. Si vous ne l'avez pas, vous pouvez essayer de cliquer sur votre photo de profil pour choisir Mon compte à partir de là.

    Cliquez sur l'onglet Connexion et sécurité et faites défiler vers le bas de la page. Vous trouverez Autoriser les applications moins sécurisées: et l'activer. Surtout ce serait éteint.

  13. C'est tout ce que vous avez à faire pour pouvoir maintenant envoyer des emails à partir de vos scripts php sur localhost. Vous pouvez maintenant essayer votre fonction mail() avec les 4 paramètres minimum et voir. J'espère que cela t'aides. Votez si cela peut vous aider afin que je puisse prendre le temps de poster des solutions plus intéressantes.

7
linuxhini

Il s'agit d'un problème bien connu lié à l'utilisation de mail() sous Windows, pour lequel vous ne disposez généralement pas d'un service SMTP local. Comme votre message d'erreur l'indique, vous devez définir les paramètres SMTP dans votre php.ini pour pouvoir parler à un serveur de messagerie via lequel vous êtes autorisé à envoyer des messages sortants, avec ou sans authentification. Voir la documentation mail ().

1
Michael Berkowski

Essayez de configurer le serveur de messagerie pour localhost. Sinon, ça ne fonctionnera pas chez localhost.

0
Technogupshup