2011-07-12 4 views
2

Je suis en train d'écrire un script qui doit envoyer un e-mail via la fonction de messagerie PHP. Comme il est écrit ci-dessous, cela fonctionne lors de l'envoi d'un e-mail à un compte Gmail, mais pas un compte sur mon domaine. Nous utilisons un serveur Exchange. A partir de maintenant, les e-mails sont envoyés par _www @ server. Est-ce que quelqu'un sait d'un problème avec le courrier de php et l'échange (ou peut-être même les adresses de courrier électronique commençant par un trait de soulignement et échange?)? Ou peut-être y a-t-il un autre problème ici? La fonction de messagerie retournera vrai, peu importe quoi.Fonction de messagerie PHP fonctionne parfois

Merci,

Jeff

$user = $_POST['email']; 

$to = "[email protected]"; 

$subject = "Request to Reset EduTube Password"; 

$body = "Thank you " . $_POST['email'] . " for using the EduTube Password Reset System.\n\n"; 
$body .= "Please click the following link, or copy & paste it into your browser to reset your password.\n\n"; 
$body .= "http://testing.domain.org/reset.php?user=" . $user; 

$headers = "From: [email protected]"; 

$from = "EduTube Password Reset System"; 

if (mail($to, $subject, $body, $headers)){ 

echo "Your email has been sent. Please check your inbox shortly."; 
echo "<br/><a href='http://testing.domain.org'>Click</a>"; 

} 
+0

Est-ce que 'mail' renvoie déjà false ou le message" n'est-il pas livré "? – hakre

+0

Pouvez-vous vérifier les journaux Exchange? 'mail' renvoie' true' uniquement lorsque le courrier est accepté pour l'envoi –

+0

@hakre La fonction mail renvoie toujours la valeur true. Si le compte est mon compte Gmail, je reçois l'e-mail. Si c'est mon compte de travail, je ne le fais pas. J'ai vérifié le spam, etc. Aussi, rien sur les logs du serveur que je peux dire. –

Répondre

10

mail() se termine par «la fonction de livraison quand il remet votre courrier au serveur SMTP. Sa seule responsabilité est l'équivalent du monde réel de prendre votre enveloppe et de le déposer dans la boîte aux lettres sur le coin. Le reste du service postal (vider cette boîte, la faire passer par des centres de traitement, la transférer dans le pays/la ville du destinataire, etc.) est complètement hors de la portée de mail(). Tant que l'enveloppe tombe dans la boîte aux lettres, mail() retournera vrai et prétendra qu'il a été livré. Alors ... vérifiez les journaux de votre serveur SMTP pour voir ce qui est vraiment arrivé au courrier. Peut-être qu'il a été marqué comme spam par le récepteur et a rebondi. Peut-être est-il coincé dans une file d'attente quelque part, etc ... Seuls les logs vous le diront - tout ce que vous pouvez voir/faire en PHP est inutile, car PHP et mail() ne font que 1% du processus d'envoi/livraison et quelque chose ne va pas dans cet autre 99%.

+0

En outre: L'ajout de l'en-tête 'Return-Path' est utile pour envoyer des messages renvoyés dans une boîte de réception du monde réel. – hakre

+0

@hakre - de nombreux serveurs sont configurés pour ne pas envoyer des rapports de rebond –

+0

@Adam: Eh bien, il m'a aidé à suivre les choses nombreuses fois je en avais besoin. La vérification des logs est bien meilleure, mais bon, certains serveurs tombent même sans laisser de message dans les logs, n'est-ce pas? – hakre

Questions connexes