<?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>Le Blog du grand loup Zeur &#187; socket</title>
	<atom:link href="http://blog.gaetan-grigis.eu/tag/socket/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gaetan-grigis.eu</link>
	<description>Le blog qui vous fait connaitre ce que vous savez déjà</description>
	<lastBuildDate>Tue, 17 Jan 2012 08:43:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Checker la validité d&#8217;une adresse mail en PHP via SMTP</title>
		<link>http://blog.gaetan-grigis.eu/programmation/checker-la-validite-dune-adresse-mail-en-php-via-smtp/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/checker-la-validite-dune-adresse-mail-en-php-via-smtp/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 18:16:24 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[checker mail]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[protocole]]></category>
		<category><![CDATA[rfc 821]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[socket]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=627</guid>
		<description><![CDATA[plopinou &#8230; Il arrive toujours un jour où l&#8217;on doit checker la validité d&#8217;une adresse mail de façon sûr (plus qu&#8217;une simple vérification sur la validité du nom de domaine). Pour ce faire il faut directement se connecter sur le SMTP du domaine de l&#8217;adresse mail via un socket en PHP et envoyer l&#8217;adresse mail [...]]]></description>
			<content:encoded><![CDATA[<p>plopinou &#8230;</p>
<p>Il arrive toujours un jour où l&#8217;on doit checker la validité d&#8217;une adresse mail de façon sûr (plus qu&#8217;une simple vérification sur la validité du nom de domaine).<br />
Pour ce faire il faut directement se connecter sur le SMTP du domaine de l&#8217;adresse mail via un socket en PHP et envoyer l&#8217;adresse mail à checker.<br />
<span id="more-627"></span></p>
<p>Le petit script :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">Error Code</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;-1 not an adress mail</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;-2 can&#39;t connect to SMTP</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;-3 no mx server found</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;-4 connection rejected</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;-5 our adress has been rejected</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;-6 this adress isn&#39;t valid</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;-7 problem with EHLO command</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> mailTester<span class="br0">&#40;</span><span class="re1">$mail</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">preg_match</span><span class="br0">&#40;</span><span class="st0">&quot;#^(.*)@(.*<span class="es0">\.</span>[a-z]{2,4})$#i&quot;</span><span class="sy0">,</span><span class="re1">$mail</span><span class="sy0">,</span><span class="re1">$ret</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$socket</span> <span class="sy0">=</span> <span class="kw3">socket_create</span><span class="br0">&#40;</span>AF_INET<span class="sy0">,</span> SOCK_STREAM<span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">getmxrr</span><span class="br0">&#40;</span><span class="re1">$ret</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="re1">$r</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$r</span><span class="br0">&#41;</span><span class="sy0">==</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span><span class="co1">//try to connect directly to the server</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sy0">@</span><span class="kw3">fsockopen</span><span class="br0">&#40;</span><span class="re1">$ret</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="st0">&quot;25&quot;</span><span class="sy0">,</span><span class="re1">$er1</span><span class="sy0">,</span><span class="re1">$er2</span><span class="sy0">,</span><span class="nu0">0.5</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">//can&#39;t use it with socket :s</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$er1</span><span class="sy0">&gt;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">-3</span><span class="sy0">;</span><span class="co1">//no mx server and no smtp server</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re1">$r</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">=</span><span class="re1">$ret</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">socket_connect</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="sy0">,</span><span class="re1">$r</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="st0">&quot;25&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">-2</span><span class="sy0">;</span><span class="co1">//can&#39;t connect</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">socket_recv</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="sy0">,</span><span class="re1">$retour</span><span class="sy0">,</span><span class="nu0">1024</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$ret</span><span class="sy0">=</span>getCodeMsg<span class="br0">&#40;</span><span class="re1">$retour</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$ret</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">!=</span><span class="nu0">220</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">-4</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">socket_write</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="sy0">,</span><span class="st0">&quot;EHLO google.com<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">socket_recv</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="sy0">,</span><span class="re1">$retour</span><span class="sy0">,</span><span class="nu0">1024</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$ret</span><span class="sy0">=</span>getCodeMsg<span class="br0">&#40;</span><span class="re1">$retour</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$ret</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">!=</span><span class="nu0">250</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">-7</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">socket_write</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="sy0">,</span><span class="st0">&quot;MAIL FROM: &lt;mailchecker@gmail.com&gt;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">socket_recv</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="sy0">,</span><span class="re1">$retour</span><span class="sy0">,</span><span class="nu0">1024</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$ret</span><span class="sy0">=</span>getCodeMsg<span class="br0">&#40;</span><span class="re1">$retour</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$ret</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">!=</span><span class="nu0">250</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">-5</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">socket_write</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="sy0">,</span><span class="st0">&quot;RCPT TO: &lt;&quot;</span><span class="sy0">.</span><span class="re1">$mail</span><span class="sy0">.</span><span class="st0">&quot;&gt;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">socket_recv</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="sy0">,</span><span class="re1">$retour</span><span class="sy0">,</span><span class="nu0">1024</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">socket_write</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="sy0">,</span><span class="st0">&quot;quit<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="co1">//bisou</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$ret</span> <span class="sy0">=</span>getCodeMsg<span class="br0">&#40;</span><span class="re1">$retour</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">socket_close</span><span class="br0">&#40;</span><span class="re1">$socket</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$ret</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">==</span><span class="nu0">250</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">-6</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">return</span> <span class="nu0">-1</span><span class="sy0">;</span><span class="co1">//not an adress mail</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> getCodeMsg<span class="br0">&#40;</span><span class="re1">$ret</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw3">preg_match</span><span class="br0">&#40;</span><span class="st0">&quot;#^([0-9]+) (.*)$#im&quot;</span><span class="sy0">,</span><span class="re1">$ret</span><span class="sy0">,</span><span class="re1">$tab</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw3">array_shift</span><span class="br0">&#40;</span><span class="re1">$tab</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">return</span> <span class="re1">$tab</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>et hop, c&#8217;est tout, y&#8217;a pas besoin de plus d&#8217;explication en plus je pense, au pire, il y a pas mal de doc sur le procotole SMTP. (Le domaine google.com et l&#8217;adresse mailchecker sont des fakes, mais il faut fournir des domaines existants et une adresse mail pour certain serveurs SMTP, google m&#8217;a semblé être le bon choix ^^).</p>
<p>Si c&#8217;est lent, c&#8217;est normal, suivant les serveurs SMTP, la vérification peut prendre entre 5secs et 30secs voir plus, pour des traitements sur des lots de mail (genre des newsletters), il est possible de faire une boucle sur les RCPT TO: pour les adresses mail d&#8217;un même domaine, ce qui permet d&#8217;utiliser la connexion courrantes et évite d&#8217;ouvrir un trop grand nombre de connexion sur le serveur en question.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=627">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/petit-serveur-dadresse-mail-de-diffusion/" rel="bookmark" title="Permanent Link: Petit serveur d&#8217;adresse mail de diffusion">Petit serveur d&#8217;adresse mail de diffusion</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/envoyer-des-mails-dans-le-passe/" rel="bookmark" title="Permanent Link: Envoyer des mails dans le passé">Envoyer des mails dans le passé</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/creer-son-propre-service-de-mail-jetable-avec-appengine/" rel="bookmark" title="Permanent Link: Créer son propre service de mail jetable avec appengine">Créer son propre service de mail jetable avec appengine</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/utiliser-google-app-pour-gerer-son-domaine/" rel="bookmark" title="Permanent Link: Utiliser Google App pour gérer son Domaine">Utiliser Google App pour gérer son Domaine</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/checker-la-validite-dune-adresse-mail-en-php-via-smtp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

