43 lines
3 KiB
Text
43 lines
3 KiB
Text
|
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
|
|||
|
|
|||
|
|
|||
|
|