<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code-It &#187; PHP</title>
	<atom:link href="http://lois.di-qual.net/blog/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://lois.di-qual.net/blog</link>
	<description></description>
	<lastBuildDate>Tue, 30 Oct 2012 19:19:29 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>MantisBT et PHPMailer: problème avec l&#8217;envoi de mails</title>
		<link>http://lois.di-qual.net/blog/mantisbt-et-phpmailer-probleme-avec-lenvoi-de-mails/</link>
		<comments>http://lois.di-qual.net/blog/mantisbt-et-phpmailer-probleme-avec-lenvoi-de-mails/#comments</comments>
		<pubDate>Thu, 07 Jun 2012 17:34:17 +0000</pubDate>
		<dc:creator>Loïs Di Qual</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://lois.di-qual.net/blog/?p=65</guid>
		<description><![CDATA[Je me suis retrouvé récemment face à un problème assez facheux. MantisBT, un logiciel de tracking de bugs, n&#8217;envoyait plus de mail. Que ce soit lors d&#8217;un ajout de bug ou lors de la procédure de réinitialisation du mot de passe: rien, nada. Pourtant, MantisBT affirmait que le mail était envoyé. Un petit coup d&#8217;oeil [...]]]></description>
				<content:encoded><![CDATA[<p>Je me suis retrouvé récemment face à un problème assez facheux. <a href="http://www.mantisbt.org/">MantisBT</a>, un logiciel de tracking de bugs, n&#8217;envoyait plus de mail. Que ce soit lors d&#8217;un ajout de bug ou lors de la procédure de réinitialisation du mot de passe: rien, nada. Pourtant, MantisBT affirmait que le mail était envoyé.</p>
<p>Un petit coup d&#8217;oeil dans le fichier <code class="codecolorer text default"><span class="text">core/email_api.php</span></code> permet de voir que Mantis prend en compte les erreurs de <a href="http://phpmailer.worxware.com/index.php">PHPMailer</a> via les try/catch suivants:</p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// Insertion du mail dans la BDD</span><br />
try<br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">// Envoi du mail</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">// Suppression du mail dans la BDD</span><br />
<span style="color: #009900;">&#125;</span><br />
catch <span style="color: #009900;">&#40;</span> phpmailerException <span style="color: #000088;">$e</span> <span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">// Rien</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Mais vous l&#8217;avez bien compris, MantisBT ne génère pas de message d&#8217;erreur (ni de log) si l&#8217;envoi du mail n&#8217;est pas correctement effectué. Par contre, il laisse le mail dans la BDD pour qu&#8217;il puisse être envoyé dès que le système marche à nouveau (voir <code class="codecolorer text default"><span class="text">core/email_queue_api.php</span></code>).</p>
<p>Pour débugger mon affaire, j&#8217;ai donc du insérer une petite ligne de code juste après le <code class="codecolorer text default"><span class="text">catch</span></code>:</p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Et là, bingo: <code class="codecolorer text default"><span class="text">Could not instantiate mail function</span></code>.</p>
<p>Pourtant, j&#8217;avais bien vérifié que la fonction <code class="codecolorer text default"><span class="text">mail</span></code> fonctionnait correctement avec un petit <code class="codecolorer text default"><span class="text">if (mail(&quot;toto@test.com&quot;, &quot;sujet&quot;, &quot;message&quot;)) echo &quot;ok&quot;;</span></code>. Chose que je ne savais pas: si PHP est en <code class="codecolorer text default"><span class="text">safe_mode</span></code>, la fonction <code class="codecolorer text default"><span class="text">mail()</span></code> est amputée d&#8217;un argument:</p>
<blockquote><p>
<a href="http://php.net/features.safe-mode.functions.php">Fonctions désactivées par le Safe Mode</a>:<br />
<code class="codecolorer text default"><span class="text">mail()</span></code>: Si le Safe Mode est actif, le 5ème paramètre est désactivé (note : uniquement affecté depuis PHP 4.2.3)
</p></blockquote>
<p>Super.</p>
<p>Il faut donc vérifier que <code class="codecolorer text default"><span class="text">safe_mode = On</span></code> dans <code class="codecolorer text default"><span class="text">php.ini</span></code> pour que tout ça marche. Autre solution si votre hébergeur ne vous permet pas d&#8217;accéder au fichier de configuration, ajouter <code class="codecolorer text default"><span class="text">php_flag safe_mode off</span></code> dans votre <code class="codecolorer text default"><span class="text">.htaccess</span></code>.</p>
<p>Cela montre encore une fois que <a href="http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/">PHP est totalement imprévisible<a>. Il y a tellement d&#8217;endroits où l&#8217;on peut écraser les paramètres d&#8217;une configuration que l&#8217;on ne peut savoir si telle ou telle fonction va marcher. Mais bon, problème résolu !</p>
]]></content:encoded>
			<wfw:commentRss>http://lois.di-qual.net/blog/mantisbt-et-phpmailer-probleme-avec-lenvoi-de-mails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
