You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
3.0 KiB

Avril 2012
Yffic
Petit point sur la gestion des erreurs et les exceptions de phpMailer 5. "Parce que c'est p<EFBFBD>nible de ne pas savoir pourquoi <EFBFBD>a ne marche pas"
Constat :
- Les probl<EFBFBD>mes de connexion smtp ne sont pas affich<EFBFBD>es dans l'interface priv<EFBFBD>e de SPIP apr<EFBFBD>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<EFBFBD>tails" dans un cadre rouge.
- Dans formulaires/configurer_facteur.php, facteur_envoyer_mail_test() renvoie true/false. Donc on n'a pas acc<EFBFBD>s aux messages d'erreurs de phpMailer dans l'espace priv<EFBFBD>.
- La gestion des exceptions via la classe phpmailerException n'est pas activ<EFBFBD>e par d<EFBFBD>faut dans phpMailer (Cf le constructeur). Elle sert surtout <EFBFBD> faire remonter les messages d'erreur.
- Apr<EFBFBD>s avoir activ<EFBFBD> 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<EFBFBD>s par les exceptions dans phpMailer ne reprennent pas les vraies causes d'erreurs relev<EFBFBD>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<EFBFBD>me dommage de ne pas avoir acc<EFBFBD>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 <EFBFBD>ventuelle am<EFBFBD>lioration de phpMailer, on peut :
- Upgrader phpMailer 5.2.1. J'ai test<EFBFBD>, ca ne change rien au niveau de la gestion des messages d'erreur, mais <EFBFBD>a corrige d'autres trucs.
05/04/12 : Un cas foireux avec la version 5.2.1 : Si comme h<EFBFBD>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<EFBFBD>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<EFBFBD>finir dans la classe Facteur, les fonctions Send, AddAttachment, AddReplyTo, AddBCC, AddCC, de la classe PhpMailer de cette fa<EFBFBD>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<EFBFBD>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 <EFBFBD> 5, 5 affichant tout le dialogue lors de la connexion smtp avec le serveur