Est-ce que quelqu'un sait comment puis-je détecter une erreur de messagerie (une erreur s'affiche lors de l'envoi d'un e-mail et l'erreur est causée par le serveur de messagerie en panne) dans php?
L'erreur qui a été causée par le serveur de messagerie vers le bas est ci-dessous:
<! - 2010-02-24T14: 26: 43 + 11: 00 AVIS (5): Erreur inattendue: mail () [<a href = 'function.mail'> function.mail </a>]: Échec de connectez-vous au serveur de messagerie sur le port "ip" portip, vérifiez vos paramètres "SMTP" et "smtp_port" dans php.ini ou utilisez ini_set () (# 2).
2010-02-24 14:26:43
Nom d'utilisateur: admin
Erreur dans la ligne 439 du fichier D:\test.php
Script: /customer.php
[Gestionnaire d'erreurs global]
->
Voici ce que vous pouvez faire de mieux:
if (!mail(...)) {
// Reschedule for later try or panic appropriately!
}
http://php.net/manual/en/function.mail.php
mail()
renvoieTRUE
si le courrier a été accepté avec succès,FALSE
sinon.Il est important de noter que le simple fait que le courrier ait été accepté pour la livraison ne signifie PAS que le courrier atteindra réellement la destination prévue.
Si vous devez supprimer les avertissements, vous pouvez utiliser:
if (!@mail(...))
Soyez toutefois prudent lorsque vous utilisez l'opérateur @
sans vérifier correctement si quelque chose réussit ou non.
Si les erreurs mail()
ne sont pas supprimables (bizarre, mais ne peuvent pas le tester pour le moment), vous pourriez:
a) désactiver temporairement les erreurs:
$errLevel = error_reporting(E_ALL ^ E_NOTICE); // suppress NOTICEs
mail(...);
error_reporting($errLevel); // restore old error levels
b) utilisez un autre mailer, comme suggéré par fire et Mike .
Si mail()
se révèle trop floconneux et rigide, je me pencherais sur b). Désactiver les erreurs rend le débogage plus difficile et généralement mauvais.
PHPMailer gère bien les erreurs, aussi un bon script à utiliser pour envoyer du courrier via SMTP ...
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
également utiliser http://php.net/error_get_last ne vous aidera pas, car mail () n'émet pas ses erreurs dans cette fonction.
La seule façon semble être d'utiliser un bon mailer, comme déjà suggéré ci-dessus.
Selon http://php.net/manual/en/function.error-get-last.php , utilisez:
print_r(error_get_last());
Qui renverra un tableau de la dernière erreur générée. Vous pouvez accéder au [message]
élément pour afficher l'erreur.