web-dev-qa-db-fra.com

Lorsque j'appelle sendMail, comment puis-je obtenir l'erreur si le courrier n'est pas envoyé?

J'envoie un email en utilisant le code suivant:

$mail =& JFactory::getMailer();
$email_sent = $mail->sendMail( 
        $from_email,
        $from_name,
        $to_email,
        $subject,
        $email_body,
        $sendas,
        $cc_emails,
        $bcc_emails,
        $email_attachments,
        $reply_to_email,
        $reply_to_name );
if($email_sent) {
    echo "Mail sent.";
} else {
    echo "Mail NOT sent.";
}

Toutes les variables sont définies sur les valeurs appropriées.

Lorsque $ email_sent a la valeur false, existe-t-il un moyen de capturer le message d'erreur ou un autre moyen de savoir pourquoi le courrier électronique n'a pas été envoyé?

Je suis sur Joomla 3.7 et 5.6 php.

1
Sloan Thrasher

Tout d’abord, veuillez supprimer le & Avant JFactory

Il y a un an, une demande d'attraction avait été soumise à Github, permettant à Joomla de détecter les erreurs commises par PHPMailer:

https://github.com/joomla/joomla-cms/pull/9881

Je ne suis pas sûr de l'implémentation, mais selon la documentation, la fonction send() renverra un objet JError si des erreurs se sont produites:

https://docs.joomla.org/Sending_email_from_extensions

2
Lodder

Aucune des solutions proposées ne fonctionne. La valeur jMailer return est un casse-tête car vous ne pouvez pas intercepter les exceptions ni même connaître le type du send() return.

Si le succès retourne un booléen true; sinon, il retourne un objet Jexception, les deux résultats sont généralement considérés comme des valeurs booléennes vraies!

Le moyen le plus simple que j'ai trouvé est:

$result = $mail->Send();
if ($result === true)  return true;
else  return false;
0
user13355