2010-02-24 4 views
25

Est-ce que quelqu'un sait comment je peux attraper une erreur de courrier (l'erreur est montrée en envoyant l'email et l'erreur est provoquée par le serveur de courrier vers le bas) en php?Comment puis-je intercepter une erreur causée par mail()?

erreur qui a été causée par emailserver vers le bas est au-dessous:

<!--2010-02-24T14:26:43+11:00 NOTICE (5): Unexpected Error: mail() [<a href='function.mail'>function.mail</a>]: Failed to connect to mailserver at "ip " port portip, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() (# 2).
2010-02-24 14:26:43
Username: admin
Error in line 439 of file D:\test.php
Script: /customer.php
[Global Error Handler]
-->

+1

Comment envoyer des mails? Parlez-vous directement au serveur SMTP? –

Répondre

42

Ceci est sur le meilleur que vous pouvez faire:

if (!mail(...)) { 
    // Reschedule for later try or panic appropriately! 
} 

http://php.net/manual/en/function.mail.php

mail() returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.

It is important to note that just because the mail was accepted for delivery, it does NOT mean the mail will actually reach the intended destination.

Si vous devez supprimer avertissements, vous pouvez utiliser:

if ([email protected](...)) 

Attention cependant à l'utilisation de l'opérateur @ sans vérifier de manière appropriée si quelque chose a réussi ou non.


Si mail() erreurs ne sont pas supprimable (bizarre, mais ne peut le tester en ce moment), vous pouvez:

a) désactiver temporairement les erreurs:

$errLevel = error_reporting(E_ALL^E_NOTICE); // suppress NOTICEs 
mail(...); 
error_reporting($errLevel); // restore old error levels 

b) utiliser un expéditeur différent, comme suggéré par fire et Mike.

Si mail() s'avère trop floconneuse et rigide, je regarderais dans b). Désactiver les erreurs rend le débogage plus difficile et n'est généralement pas bon.

+3

+1 Bonne réponse. Souvent, les gens oublient que 'mail()' renvoie un 'bool'. Bien que vous ayez fait référence à l'hypothèse «si aucune erreur, le courrier n'est arrivé», c'est également une idée fausse répandue parmi les nouveaux développeurs. – Sampson

+0

Salut deceze, je comprends que mail() retournera vrai ou faux.Mais raison inconnue, ceci montre toujours le message d'erreur sur ma page (que le message d'erreur montre sur ma question ci-dessus et l'erreur seulement capable de regarder quand je regarde le code source de la page): et cette erreur m'a causé incapable rediriger (header()) ma page vers la nouvelle page. J'ai cherché autour du code mais incapable de découvrir où réellement montrer cette erreur. Peut-être que cela est défini dans le paramètre php stmp? –

+0

Ma question est ... comment puis-je ignoré ou jeter ce message d'erreur "Impossible de se connecter au serveur de messagerie" de mon en-tête de page? Est-ce que quelqu'un a une idée de comment le faire? Je cherchais autour de google mais toujours incapable de trouver la solution –

1

Vous pouvez utiliser les PEAR Mail classes et méthodes, qui vous permet de vérifier les erreurs via:

if (PEAR::isError($mail)) { 
    echo("<p>" . $mail->getMessage() . "</p>"); 
} else { 
    echo("<p>Message successfully sent!</p>"); 
} 

Vous pouvez trouver un exemple here.

6

PHPMailer poignées bien des erreurs, un bon script pour utiliser aussi pour l'envoi de courrier via SMTP ...

if(!$mail->Send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
} 
+0

En fait, je pense qu'il fait écho une erreur si vous n'avez pas défini la propriété d'exception à vrai – AntonioCS

+0

J'ai plongé dans son code et il utilise simplement 'safe mode' + @mail() temporaire pour gérer les erreurs. –

4

également à l'aide http://php.net/error_get_last ne vous aidera pas, parce que la poste() n'Emmit pas ses erreurs dans ce fonction.

Seul moyen semble être d'utiliser un mailer approprié, comme déjà suggéré ci-dessus.

+2

Cette affirmation semble avoir une certaine valeur, 'mail' renvoie false pour moi mais' error_get_last' est nul. – yoshi

Questions connexes