spip_nursit/plugins-dist/dist/nursit/facteur/erreurs et exceptions.txt

43 lines
3 KiB
Text
Raw Normal View History

2023-06-01 15:30:12 +00:00
Avril 2012
Yffic
Petit point sur la gestion des erreurs et les exceptions de phpMailer 5. "Parce que c'est p<>nible de ne pas savoir pourquoi <20>a ne marche pas"
Constat :
- Les probl<62>mes de connexion smtp ne sont pas affich<63>es dans l'interface priv<69>e de SPIP apr<70>s un test d'envoi via la page de config de Facteur. On a juste le message "Erreur: consultez le fichier log pour plus de d<>tails" dans un cadre rouge.
- Dans formulaires/configurer_facteur.php, facteur_envoyer_mail_test() renvoie true/false. Donc on n'a pas acc<63>s aux messages d'erreurs de phpMailer dans l'espace priv<69>.
- La gestion des exceptions via la classe phpmailerException n'est pas activ<69>e par d<>faut dans phpMailer (Cf le constructeur). Elle sert surtout <20> faire remonter les messages d'erreur.
- Apr<70>s avoir activ<69> la gestion des exceptions et le mode debug de la classe smtp (qui ne fait que des echo), on peut remarquer que les messages d'erreurs affich<63>s par les exceptions dans phpMailer ne reprennent pas les vraies causes d'erreurs relev<65>es dans la classe smtp. Si par exemple, on n'active pas ssl dans php, le debug "echo" affiche "SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?", mais l'exception se contente d'un "SMTP Error: Could not connect to SMTP host" dans le fichier log. C'est quand m<>me dommage de ne pas avoir acc<63>s au premier message d'erreur.
- Voir aussi :
http://code.google.com/a/apache-extras.org/p/phpmailer/issues/detail?id=50
http://code.google.com/a/apache-extras.org/p/phpmailer/issues/detail?id=5
En attendant une <20>ventuelle am<61>lioration de phpMailer, on peut :
- Upgrader phpMailer 5.2.1. J'ai test<73>, ca ne change rien au niveau de la gestion des messages d'erreur, mais <20>a corrige d'autres trucs.
05/04/12 : Un cas foireux avec la version 5.2.1 : Si comme h<>te on met un serveur ssl (ssl0.ovh.net), mais qu'on ne coche pas ssl au dessous, lors d'un test d'envoi, la roue Ajax tourne en rond ind<6E>finiment... Pas de retour, aucune trace meme avec de simples echo... Je pense que ca tourne en rond au niveau de la fonction feof de get_lines. Cf les Notes de http://php.net/manual/fr/function.feof.php... Il n'est pas donc pas si urgent d'upgrader...
- Red<65>finir dans la classe Facteur, les fonctions Send, AddAttachment, AddReplyTo, AddBCC, AddCC, de la classe PhpMailer de cette fa<66>on :
public function Send() {
ob_start();
parent::Send();
$error = ob_get_contents();
ob_end_clean();
if( !empty($error) ) {
spip_log("Erreur Facteur->Send : $error",'facteur.err');
}
}
Avec une constante pour activer ce mode et rajouter au d<>but du constructeur de Facteur :
if (defined('_FACTEUR_DEBUG_SMTP')) {
$this->SMTPDebug = _FACTEUR_DEBUG_SMTP ;
}
Ajouter la ligne qui suit dans mes_options.php permet donc de retrouver les erreurs dans le fichier facteur.err.log.
define('_FACTEUR_DEBUG_SMTP','5'); // Le niveau peut varier de 1 <20> 5, 5 affichant tout le dialogue lors de la connexion smtp avec le serveur