<?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>Blogouille &#187; mail</title>
	<atom:link href="http://blog.bafouille.fr/tag/mail/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bafouille.fr</link>
	<description>Le blog de la bafouille</description>
	<lastBuildDate>Fri, 03 Feb 2012 23:25:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Problème d&#8217;authentification SMTP avec le composant email de CakePHP</title>
		<link>http://blog.bafouille.fr/web/probleme-dauthentification-smtp-avec-le-composant-email-de-cakephp/</link>
		<comments>http://blog.bafouille.fr/web/probleme-dauthentification-smtp-avec-le-composant-email-de-cakephp/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 19:58:17 +0000</pubDate>
		<dc:creator>Bafouille</dc:creator>
				<category><![CDATA[Cakephp]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[ehlo]]></category>
		<category><![CDATA[helo]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://blog.bafouille.fr/?p=498</guid>
		<description><![CDATA[La version 1.2x de CakePhp possède un composant très pratique pour envoyer des courriels et permet d&#8217;éviter le recours à des solutions externes comme phpmailer ou swiftmailer (même s&#8217;ils sont incontournables dans la version 1.1x et des tutos sont disponibles dans la cuisine de cakephp). Les mises à jour sont régulières et il est préférable [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-499" title="Mail flow" src="http://blog.bafouille.fr/wp-content/uploads/2009/10/smtp-flow.png" alt="Mail flow" width="560" height="93" />La version 1.2x de CakePhp possède un composant très pratique pour envoyer des courriels et permet d&#8217;éviter le recours à des solutions externes comme phpmailer ou swiftmailer (même s&#8217;ils sont incontournables dans la version 1.1x et des tutos sont disponibles dans la<a title="http://bakery.cakephp.org" href="http://bakery.cakephp.org" target="_blank"> cuisine de cakephp</a>).</p>
<p>Les mises à jour sont régulières et il est préférable de les installer car ce composant est souvent actualisé.</p>
<p>Toutefois, j&#8217;ai buté dans un os et, comme je suis partageur, je me dis qu&#8217;il vaut mieux le ronger à plusieurs (j&#8217;ai soumis un ticket à ce sujet sur cakephp d&#8217;ailleurs).<br />
<span id="more-498"></span></p>
<h2>Envoyer un courriel avec le composant email</h2>
<p>Le manuel est très bien fait et laisse peu de place au hasard. La création du message peut se faire directement dans le contrôleur (hum côté MCV, ça se pose un peu là) ou via des layouts et des vues (c&#8217;est mieux).</p>
<p>Le composant permet 2 méthodes d&#8217;envoi :</p>
<ul>
<li>La fonction mail de PHP : Elle est relativement limitée et, si elle n&#8217;est pas implémentée sur le serveur, ne fonctionne pas.</li>
<li>L&#8217;utilisation du protocole SMTP (<code>sending mail protocol</code>) : C&#8217;est ce protocole qui est généralement utilisé par les clients de messagerie habituels. Son utilisation ne nécessite pas toujours de s&#8217;authentifier mais la plupart des fournisseurs d&#8217;accès internet (FAI) l&#8217;impose pour éviter des utilisations frauduleuses de leurs serveurs.</li>
</ul>
<p>Pour envoyer un mail via SMTP, il vous faut habituellement 3 informations : l&#8217;adresse du serveur, un nom d&#8217;utilisateur et un mot de passe, accessoirement un numéro de port (25 par défaut) . Vous les avez ? Parfait. Passons à la suite.</p>
<p>La configuration du composant est des plus simples et <a title="Page du manuel de CakePHP sur le composant Email" href="http://book.cakephp.org/view/176/Email" target="_blank">documentée dans le manuel de cakephp</a>. Je ne reviendrais donc pas là-dessus.</p>
<h2>Mes courriels ne partent pas !</h2>
<p>Après avoir suivi scrupuleusement les instructions et renseigné correctement le tableau smtpOptions, vous essayez fièrement votre script et&#8230; une erreur 550, le mail n&#8217;est pas parti !</p>
<p>Cet incapable de serveur SMTP vous explique que le message ne peut pas être relayé depuis &lt;votre nom de domaine ou IP&gt; ou quelque chose dans ce goût là ! Fiévreusement, vous vérifiez toutes vos informations, elles sont correctes !</p>
<p>Mais que s&#8217;est-il donc passé ?</p>
<p>Pour le savoir, utilisons telnet (accessible par l&#8217;invite de commande sous Windows, tapez menu démarrer -&gt; exécuter -&gt;cmd et ok, par la console sous Linux). Pourquoi ? Telnet va nous permettre de simuler étape par étape une transaction SMTP pour voir où réside le problème.</p>
<p><strong>Première étape, se connecter au serveur SMTP</strong>. Entrez la commande : <code>telnet &lt;votre_serveur_smtp&gt; XX</code> où XX est le numéro du port (généralement 25 mais pas forcément).<br />
Normalement votre serveur devrait vous répondre quelque chose du genre : <code>220 - </code>. Peut importe le texte, pourvu que le code soit 220. Cela veut dire que le serveur attend vos commandes.</p>
<p><strong>Deuxième étape, dire bonjour</strong>. Entrez <code>HELO</code>. Le serveur va vous répondre quelque chose qui doit commencer par le code 250. Si ce n&#8217;est pas ce code, il est fort possible que le serveur n&#8217;accepte pas d&#8217;entrer en discussion avec un client non reconnu.</p>
<p><strong>Troisième étape, demandez à s&#8217;identifier</strong>. Tapez <code>AUTH LOGIN</code>.  Si le serveur vous renvoie un code 503, c&#8217;est que vous n&#8217;avez pas à vous identifier. S&#8217;il s&#8217;agit d&#8217;un code 334, il attend un identifiant et un mot de passe.</p>
<p>C&#8217;est cette procédure que suit le composant email de CakePhp (et c&#8217;est normal). Lorsqu&#8217;il reçoit une réponse 503, il n&#8217;envoie pas de nom d&#8217;utilisateur ni de mot de passe considérant que c&#8217;est inutile. <strong>Tout va bien quand ça l&#8217;est vraiment</strong>.</p>
<p>Mon hébergeur, mavenhosting (très bien au demeurant), m&#8217;a réservé une petite surprise sur laquelle j&#8217;ai passée quelques heures. Le serveur SMTP renvoyait un code 503 à mon <code>AUTH LOGIN</code> mais refusait d&#8217;envoyer des e-mails sans authentification et tout finissait en une belle erreur 550.</p>
<p>En fouillant un peu sur le net, je me suis aperçu que le standard <code>HELO</code> était devenu <code>EHLO</code> (extended <code>HELO</code>). Pour autant, tous les serveurs devraient pouvoir encore gérer <code>HELO</code>. <strong><a href="http://www.exim.org/lurker/message/20040902.003002.43123677.fr.html" target="_blank">Et bien pas Exim dans les versions supérieurs à la 4.2</a>.</strong></p>
<p>En utilisant <code>EHLO</code>, puis <code>AUTH LOGIN</code>, le serveur m&#8217;a renvoyé un code 334 pour me demander de m&#8217;authentifier. Il m&#8217;a donc suffit de modifier légèrement <code>mailer.php</code> à la ligne 693 comme ceci :</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p498code2'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4982"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p498code2"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>__smtpSend<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;EHLO <span style="color: #006699; font-weight: bold;">{$host}</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'250'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">smtpSend</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;HELO <span style="color: #006699; font-weight: bold;">{$host}</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'250'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>La commande <code>HELO</code> ne sera utilisée que si <code>EHLO</code> ne fonctionne pas. Je ne sais s&#8217;il est souhaitable de faire ainsi et je laisse le soin aux excellents développeurs (bénévoles qui plus est) de cakePHP de trancher. En attendant, ça semble fonctionner.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.bafouille.fr%2Fweb%2Fprobleme-dauthentification-smtp-avec-le-composant-email-de-cakephp%2F&amp;title=Probl%C3%A8me%20d%26%238217%3Bauthentification%20SMTP%20avec%20le%20composant%20email%20de%20CakePHP" id="wpa2a_2"><img src="http://blog.bafouille.fr/social.gif" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.bafouille.fr/web/probleme-dauthentification-smtp-avec-le-composant-email-de-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

