|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|