web-dev-qa-db-fra.com

PHP mail () ne fonctionne pas

Je souhaite créer un script pour un simple formulaire d'inscription avec un courrier d'activation, etc. Mais pour une raison quelconque, mail () n'envoie pas les emails, ou mes 3 comptes de messagerie différents (hotmail, gmail, yahoo) ne les reçoivent pas et ne les mettent donc même pas dans le dossier spam.

Code:

<?php
    $mailto = '[email protected]';
    $subject = 'the subject';
    $message = 'the message';
    $from = '[email protected]';
    $header = 'From:'.$from;

    if(mail($mailto,$subject,$message,$header)) {
        echo 'Email on the way';
    }
?>

Chaque fois qu'il sort 'Email on the way' alors mail () renvoie true, non? Je ne comprends vraiment pas, j'ai même essayé d'éteindre mon petit vif (bien que je n'aie pas bloqué le protocole SMTP).

21
Rivers

Voir cet article de Jeff Atwood .

En bref: ce n'est pas parce que votre code a transféré le courrier électronique à un agent de transfert de courrier qu'il sera livré. Oui, mail() retournant vrai signifie "accepté pour la livraison" - ce qui signifie "ressemble à un e-mail, je essayerai de livrer ceci", et non "Il est livré". Même le manuel de mail() dit :

Il est important de noter que, même si le courrier a été accepté pour la livraison, cela ne signifie PAS que le courrier atteindra réellement la destination voulue.

Soooo: vérifiez votre MTA (l'e-mail est-il envoyé depuis votre ordinateur local?), Essayez de l'envoyer à une adresse locale (si l'adresse est locale, est-il livré?), Essayez d'envoyer un e-mail depuis votre messagerie client, en utilisant les mêmes paramètres que votre script PHP, essayez d'envoyer à un hébergeur de messagerie plus petit, ce qui vous permet de désactiver l'antispam (est-il livré en dehors de votre réseau?). Lisez également cet article et vérifiez les points qui y sont mentionnés.

13
Piskvor

Peut-être que votre serveur n'est pas configuré pour gérer mail().

<?php
    print phpinfo();  
?>

et regardez sendmail_path

4
DENIEL

Vous devrez peut-être ajouter des caractères de fin de ligne corrects aux en-têtes. Ce peut être \n ou \r\n

1
Brombomb

J'ai eu le même problème sur Ubuntu et je l'ai résolu après le prochain tutoriel:

http://www.nixtutor.com/linux/send-mail-with-gmail-and-ssmtp/

J'espère que cela fonctionne pour vous aussi.

0
mgrdiez

Vérifiez votre phpinfo et/ou php.ini pour vos paramètres de messagerie et assurez-vous que vous pouvez envoyer un courrier avec le programme que php essaie d'utiliser. La fonction réussira si la commande est exécutée mais ne sait pas si le courrier est réellement sorti.

0
ldg

Consultez le journal de messagerie de votre serveur de messagerie. Sur les systèmes Unix, il s’agit généralement de/var/log/maillog. Sur Windows, qui sait, mais il devrait y avoir un journal quelque part. Si le courrier renvoie VRAI, le serveur de messagerie auquel il se connecte a accepté le courrier pour une remise éventuelle. Ensuite, mail() n'est plus impliqué, il appartient aux serveurs SMTP de procéder à la livraison. 

En termes réels, mail() signifie que vous rédigez une lettre et que vous la déposez dans une boîte aux lettres. Tout ce qui suit est en dehors de la portée et du contrôle de PHP.

0
Marc B

S'il s'agit d'un serveur linux, il est probablement configuré pour envoyer à la file d'attente de messagerie locale. Lorsque j'ai eu ce problème, je l'ai fait fonctionner en ajoutant une entrée MX sur le serveur DNS utilisé par les serveurs linux pointant vers le serveur de messagerie de notre FAI.

0
Brad Mace