<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.grafactory.net/blog/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>L'appartement</title>
  <link>http://www.grafactory.net/blog/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Tue, 08 Jul 2008 15:57:42 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Script minimaliste : nettoyer une boite aux lettres avec une expression rationnelle</title>
    <link>http://www.grafactory.net/blog/post/2008/04/11/Ntettoyer-de-la-boite-mail-avec-PHP-CLI</link>
    <guid isPermaLink="false">urn:md5:bc1dd449a911787a357b4d56e93ef3f1</guid>
    <pubDate>Fri, 11 Apr 2008 22:13:00 +0200</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le PHP</category>
        <category>cli</category><category>mail</category><category>php</category>    
    <description>    &lt;p&gt;Dans la catégorie des scripts minimalistes (mais néanmoins utiles), je vous propose un petit script qui permet d'effacer, en ligne de commande avec PHP &lt;acronym title=&quot;Commande Line Interface&quot;&gt;CLI&lt;/acronym&gt;, certains messages d'un compte mail en fonction d'une expression régulière précisée en paramètre et qui &lt;em&gt;matche&lt;/em&gt; le sujet du mail.&lt;/p&gt;


&lt;p&gt;Par exemple, effacer les centaines de messages de spam qui se trouvent dans une de vos nombreuses boites tant inutiles que nécessaires &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; Autre exemple, j'exécute ce script via un cron pour nettoyer tous ce qui traine dans des boites genre &lt;em&gt;postmaster&lt;/em&gt;, &lt;em&gt;abuse&lt;/em&gt; (encore que cette dernière n'est pas trop pourrie par le SPAM), et autres bal «&amp;nbsp;no-reply&amp;nbsp;» qu'il reste quand même, pour certaines, nécessaires de consulter &lt;del&gt;tous les ans&lt;/del&gt; régulièrement.&lt;/p&gt;


&lt;p&gt;C'est un script clairement dédié à de la maintenance.  Je vous déconseille de laisser trainer ce code n'importe ou accessible via le web.&lt;/p&gt;


&lt;h4&gt;Utilisation&amp;nbsp;:&lt;/h4&gt;

&lt;pre&gt;
cleanmail -u=nom_utilisateur -p=mot_de_passe -s=imap.mondomain.tld:143 -e=&amp;quot;/SPAM/i&amp;quot;
&lt;/pre&gt;


&lt;h4&gt;Pour être sur que tous le monde a compris&amp;nbsp;:&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;-u=&lt;/strong&gt; nom d'utilisateur du compte mail&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-p=&lt;/strong&gt; mot de passe du compte mail&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-s=&lt;/strong&gt; serveur (pop ou imap). Toutes les options disponibles sur la fonction &lt;a href=&quot;http://fr2.php.net/manual/fr/function.imap-open.php&quot;&gt;imap_open&lt;/a&gt; de PHP sont disponible&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-e=&lt;/strong&gt; expression régulière qui sera «&amp;nbsp;passée&amp;nbsp;» à &lt;a href=&quot;http://fr2.php.net/preg_match&quot; hreflang=&quot;fr&quot;&gt;preg_match&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Le script&amp;nbsp;:&lt;/h4&gt;

&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#!/usr/bin/php&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// on supprime la limite d'éxecution d'un script php&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.php.net/set_time_limit&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;set_time_limit&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/**&lt;br /&gt;
&amp;nbsp;* cleanmail supprimer des mails d'une boite imap avec une pattern définie&lt;br /&gt;
&amp;nbsp;*&lt;br /&gt;
&amp;nbsp;* PHP versions 5&lt;br /&gt;
&amp;nbsp;*&lt;br /&gt;
&amp;nbsp;* LICENSE: Ce programme est un logiciel libre distribue sous licence GNU/GPL&lt;br /&gt;
&amp;nbsp;*&lt;br /&gt;
&amp;nbsp;* @author &amp;nbsp; &amp;nbsp; Yves Tannier &amp;lt;yvesSANSPAM grafactory.net&amp;gt;&lt;br /&gt;
&amp;nbsp;* @copyright &amp;nbsp;2008 Yves Tannier&lt;br /&gt;
&amp;nbsp;* @license &amp;nbsp; &amp;nbsp;http://www.gnu.org/copyleft/lesser.html &amp;nbsp;LGPL License 2.1&lt;br /&gt;
&amp;nbsp;* @version &amp;nbsp; &amp;nbsp;0.1.0 &lt;br /&gt;
&amp;nbsp;* @link &amp;nbsp; &amp;nbsp; &amp;nbsp; http://www.grafactory.net&lt;br /&gt;
&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// aide contextuelle&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$help_string&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Parametres :&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -u : utilisateur&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -p : mot de passe&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -s : serveur et port (localhost:143, localhost:110, localhost:143/novalidate-cert...)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -e : expression régulière&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -h, --help : afficher cette aide...&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// recuperer les parametres passe en CLI&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'argv'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// utilisateur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/strpos&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;strpos&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;u=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$login_imap&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;-u=&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;continue&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// mot de passe&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/strpos&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;strpos&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;p=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$passwd_imap&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;-p=&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;continue&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// serveur et port&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/strpos&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;strpos&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;s=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$server_imap&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;-s=&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;continue&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// expression reguliere&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/strpos&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;strpos&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;e=&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$pattern&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'-e='&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;''&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;continue&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;switch&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;'-h'&lt;/span&gt; :&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;'--help'&lt;/span&gt; :&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$help_string&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/exit&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;exit&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'SCRIPT_NAME'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt; :&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/unset&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;unset&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'argv'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;break&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;default&lt;/span&gt; :&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;Paramètre inconnu : &amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$param&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/exit&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;exit&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// pas d'argument&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$_SERVER&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'argv'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;Veuillez preciser au moins un paramÃ¨tre !&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$help_string&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/exit&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;exit&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// connexion&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$mbox&lt;/span&gt; = imap_open&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;{&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$server_imap&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;}INBOX&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$login_imap&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$passwd_imap&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; or &lt;a href=&quot;http://www.php.net/die&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;die&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Impossible de se connecter : &amp;quot;&lt;/span&gt;.imap_last_error&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Connexion...&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// recup des headers&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0000ff;&quot;&gt;$headers&lt;/span&gt; = imap_headers&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$mbox&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// parcourir les messages&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;!&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$headers&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Recherche avec l'expression : &amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$pattern&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$msgnum&lt;/span&gt; = &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$headers&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$val&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$msgnum&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$msgnum&lt;/span&gt; + &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$header&lt;/span&gt; = imap_headerinfo&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$mbox&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$msgnum&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$subject&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$header&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;subject&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/preg_match&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;preg_match&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$pattern&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$subject&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$mailmarked&lt;/span&gt; = imap_delete&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$mbox&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$msgnum&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Message &amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$msgnum&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot; supprimé&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Aucun message dans la boite&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Fin de la transaction&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// quitter et vider en meme temps&lt;/span&gt;&lt;br /&gt;
imap_close&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$mbox&lt;/span&gt;,CL_EXPUNGE&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Bientôt le même mais en perl &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2008/04/11/Ntettoyer-de-la-boite-mail-avec-PHP-CLI#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2008/04/11/Ntettoyer-de-la-boite-mail-avec-PHP-CLI#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/160</wfw:commentRss>
      </item>
    
  <item>
    <title>A la découverte de Jelix, l'essayer c'est l'adopter</title>
    <link>http://www.grafactory.net/blog/post/2008/03/24/A-la-decouverte-de-Jelix-lessayer-cest-ladopter</link>
    <guid isPermaLink="false">urn:md5:dd75ed95c3f8a7e6fb98955f108fdb6f</guid>
    <pubDate>Mon, 24 Mar 2008 09:31:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le PHP</category>
        <category>framework</category><category>jelix</category><category>mvc</category><category>orm</category><category>php</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/icones/logo_jelix_moyen.png&quot; alt=&quot;Logo Jelix&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;Malgré tous les avantages que j'ai pu trouver à &lt;del&gt;mon framework&lt;/del&gt; mes bouts de codes personnels basés sur plusieurs librairies &lt;a href=&quot;http://pear.php.net&quot; hreflang=&quot;fr&quot;&gt;PEAR&lt;/a&gt;, je me suis tourné vers quelques choses de plus &quot;moderne&quot; et plus homogène pour mes nouveaux développements. Après pas mal de recherches et d'essais, mon choix c'est porté sur &lt;a href=&quot;http://jelix.org/&quot; hreflang=&quot;fr&quot;&gt;Jelix&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Ca tombe bien. Un nouveau projet dont les contraintes correspondent parfaitement à l'utilisation de ce &lt;a href=&quot;http://fr.wikipedia.org/wiki/Framework&quot; hreflang=&quot;fr&quot;&gt;framework&lt;/a&gt; me permet donc actuellement de me frotter à la bête... Et je ne suis pas déçu&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Je ne vais pas rentrer dans &lt;a href=&quot;http://jelix.org/articles/presentation&quot; hreflang=&quot;fr&quot;&gt;le détail des fonctionnalités&lt;/a&gt; mais il y a tous ce qu'on peux rechercher dans un framework PHP5 orienté objet &lt;del&gt;et de classe américaine&lt;/del&gt;. &lt;a href=&quot;http://jelix.org/&quot; hreflang=&quot;fr&quot;&gt;Jelix&lt;/a&gt; ne pas fait le café comme &lt;a href=&quot;http://www.symfony-project.org/&quot; hreflang=&quot;en&quot;&gt;Symfony&lt;/a&gt; (que j'ai essayé également et qui possède de nombreux avantages) et c'est justement pas ce que je lui demande car je souhaite garder la compréhension globale de ce que j'utilise. C'est léger, rapide et extensible. Bref, que du bon pour l'instant &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Voici ce que j'en retiens principalement (liste non exhaustive). J'ai précisé, pour mémoire, les équivalents de ce que j'utilisais comme librairies PEAR&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://fr.wikipedia.org/wiki/Object-relational_mapping&quot; hreflang=&quot;fr&quot;&gt;ORM&lt;/a&gt; puissant. J'utilisais &lt;a href=&quot;http://pear.php.net/package/mdb2&quot; hreflang=&quot;fr&quot;&gt;PEAR::MDB2&lt;/a&gt; très efficace aussi. Surtout la gestion transactions&lt;/li&gt;
&lt;li&gt;système de templates. Beaucoup mieux que &lt;a href=&quot;http://pear.php.net/package/HTML_Template_Flexy&quot; hreflang=&quot;en&quot;&gt;PEAR::HTML_Template_Flexy&lt;/a&gt; pour lequel la syntaxe dans le template reste assez réduite (exemple&amp;nbsp;: impossible d'utiliser des opérateurs de comparaisons)&lt;/li&gt;
&lt;li&gt;localisation. &lt;a href=&quot;http://pear.php.net/package/Translation2&quot; hreflang=&quot;en&quot;&gt;PEAR::Translation2&lt;/a&gt; ne m'a jamais réellement séduit.&lt;/li&gt;
&lt;li&gt;génération de formulaire. Quand on a prit l'habitude d'utiliser &lt;a href=&quot;http://pear.php.net/package/HTML_QuickForm&quot; hreflang=&quot;en&quot;&gt;PEAR::HTML_Quickform&lt;/a&gt;, on recherche forcément quelque chose de similaire.&lt;/li&gt;
&lt;li&gt;système de cache. Je n'ai pas encore eu la possibilité de comparer avec les performances de &lt;a href=&quot;http://pear.php.net/package/cache_lite&quot; hreflang=&quot;en&quot;&gt;PEAR::Cache_Lite&lt;/a&gt; mais ça semble équivalent.&lt;/li&gt;
&lt;li&gt;Quelques modules bien utiles comme la &lt;a href=&quot;http://jelix.org/articles/tutoriels/principal/crud&quot; hreflang=&quot;fr&quot;&gt;génération de CRUD&lt;/a&gt;, le module d'authentification, les acls...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La présentation détaillée et une application de tests sont disponibles sur le site officiel. Il ne vous reste plus qu'à essayer &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Si vous aviez l'intention de vous rendre aux Rencontres Mondiales du Logiciel Libre 2008 à Mont-de-Marsan, assistez à &lt;a href=&quot;http://2008.rmll.info/Conference-Jelix-un-framework-pour.html&quot; hreflang=&quot;fr&quot;&gt;la conférence sur Jelix&lt;/a&gt; de &lt;a href=&quot;http://ljouanneau.com/blog/&quot;&gt;Laurent Jouanneau&lt;/a&gt; et vous en apprendrez encore plus&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2008/03/24/A-la-decouverte-de-Jelix-lessayer-cest-ladopter#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2008/03/24/A-la-decouverte-de-Jelix-lessayer-cest-ladopter#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/158</wfw:commentRss>
      </item>
    
  <item>
    <title>Installer la signature DKIM sur Postfix avec DKIMproxy</title>
    <link>http://www.grafactory.net/blog/post/2008/03/12/Installer-la-signature-DKIM-sur-Postfix-Debian-Etch-Amavisd-new</link>
    <guid isPermaLink="false">urn:md5:7f7842a3ebe511cd881299d33d7a7014</guid>
    <pubDate>Wed, 12 Mar 2008 10:00:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le pingouin</category>
        <category>amavis</category><category>dkim</category><category>dkimproxy</category><category>domainkeys</category><category>postfix</category>    
    <description>&lt;p&gt;Je vous propose dans ce billet l'installation de la signature &lt;a href=&quot;http://dkim.org/&quot;&gt;DKIM&lt;/a&gt; sur vos mails &lt;em&gt;sortants&lt;/em&gt;. Ceci fait suite à mon billet concernant l'implémentation de &lt;a href=&quot;http://www.grafactory.net/blog/post/2007/11/04/Installer-DomainKeys-sur-Postfix-Debian-Etch-Amavisd-new&quot; hreflang=&quot;fr&quot;&gt;DomainKeys avec Postfix et Amavis via Dkfilter&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://jason.long.name/dkfilter/&quot;&gt;Dkfilter&lt;/a&gt; ne gère en effet que le protocole DomainKeys de Yahoo! maintenant remplacé par &lt;a href=&quot;http://www.dkim.org/&quot; hreflang=&quot;en&quot;&gt;DKIM&lt;/a&gt; (DomainKeys Identified Mail) , un protocole plus &lt;em&gt;avancé&lt;/em&gt; et standardisé par la &lt;a href=&quot;http://www.ietf.org/rfc/rfc4871.txt&quot; hreflang=&quot;en&quot;&gt;RFC 4871&lt;/a&gt;. Très très brièvement, DKIM permet de «&amp;nbsp;renforcer&amp;nbsp;» l'identité des expéditeurs.&lt;/p&gt;


&lt;p&gt;En remplacement de dkfilter, l'auteur de ce programme nous propose &lt;a href=&quot;http://dkimproxy.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;DKIMproxy&lt;/a&gt; pour gérer la signature DKIM et/ou DomainKeys.&lt;/p&gt;


&lt;p&gt;Si vous utilisez &lt;a href=&quot;http://www.ijs.si/software/amavisd/&quot;&gt;Amavis&lt;/a&gt;, comme c'est mon cas, sachez quelques petites choses&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Il semble que Amavisd-new gère la signature DKIM des mails sortants à partir de la version 2.6.0. Mais sur Debian Etch, nous en sommes à la version 2.4. C'est donc l'intérêt de ce billet. Je n'ai pas testé la version 2.6.0. je ne peux donc pas vous en dire plus.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;DKIMproxy permet également une vérification des mails entrants. Cette vérification ne nous intéresse pas forcément puisque Amavis propose déjà cette fonctionnalité via Spamassassin qui utilise la librairie perl Mail::DKIM.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Comme pour mon précédent billet, c'est un &lt;/em&gt;howto&lt;em&gt; «&amp;nbsp;copié/collé&amp;nbsp;» pour les informaticiens &lt;del&gt;fainéants&lt;/del&gt; pressés. J'ai également fais pas mal de copié/collé de l'ancien billet puisque la configuration est sensiblement la même sur de nombreux points.&lt;/em&gt;&lt;/p&gt;    &lt;h3&gt;Installer DKIMproxy&lt;/h3&gt;


&lt;p&gt;Placez-vous dans /usr/src et téléchargez &lt;a href=&quot;http://dkimproxy.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;DKIMproxy&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;
cd /usr/src
wget http://kent.dl.sourceforge.net/sourceforge/dkimproxy/dkimproxy-1.0.1.tar.gz
&lt;/pre&gt;


&lt;p&gt;Décompressez l'archive et placez-vous dans le nouveau répertoire&lt;/p&gt;

&lt;pre&gt;
tar zxvf dkimproxy-1.0.1.tar.gz
cd dkimproxy-1.0.1
&lt;/pre&gt;


&lt;p&gt;Si vous n'avez pas encore le module perl Mail::Dkim, il faut l'installer via CPAN pour disposer d'une version suffisamment récente la version Debian Etch est trop ancienne).&lt;/p&gt;

&lt;pre&gt;
perl -MCPAN -e shell
install Mail::DKIM
exit
&lt;/pre&gt;


&lt;p&gt;Préparez l'installation de dkimproxy dans /usr/local/dkimproxy&lt;/p&gt;

&lt;pre&gt;
mkdir /usr/local/dkimproxy
./configure --prefix=/usr/local/dkimproxy
&lt;/pre&gt;


&lt;p&gt;Compilez et installez&lt;/p&gt;

&lt;pre&gt;
make install
&lt;/pre&gt;


&lt;p&gt;Déplacez-vous dans le répertoire dkimproxy et renommez les fichiers de configuration des daemons&lt;/p&gt;

&lt;pre&gt;
cd /usr/local/dkimproxy
mv etc/dkimproxy_in.conf.example etc/dkimproxy_in.conf
mv etc/dkimproxy_out.conf.example etc/dkimproxy_out.conf
&lt;/pre&gt;


&lt;h3&gt;Créer l'utilisateur et le groupe dkim&lt;/h3&gt;

&lt;pre&gt;
adduser dkim --no-create-home --disabled-password --disabled-login
&lt;/pre&gt;


&lt;h3&gt;Installer le script de démarrage de dkimproxy&lt;/h3&gt;


&lt;p&gt;Copiez le script de démarrage proposé dans les sources de dkimproxy dans /etc/init.d/&lt;/p&gt;

&lt;pre&gt;
cp /usr/src/dkimproxy-1.0.1/sample-dkim-init-script.sh /etc/init.d/dkimproxy
&lt;/pre&gt;


&lt;p&gt;Editez-le. Normalement, il n'y a rien a changer dans ce fichier si on utilise les paramètres «&amp;nbsp;standards&amp;nbsp;»&lt;/p&gt;

&lt;pre&gt;
vi /etc/init.d/dkimproxy
&lt;/pre&gt;


&lt;h3&gt;Créer une clé publique/privée&lt;/h3&gt;


&lt;p&gt;Chaque domaine possèdera sa propre clé. On crée un dossier dans lequel on stockera les clés.&lt;/p&gt;

&lt;pre&gt;
mkdir /usr/local/dkimproxy/keys
cd /usr/local/dkimproxy/keys
&lt;/pre&gt;


&lt;p&gt;On suppose que vous avez le paquet OpenSSL installé et que votre domaine est exemple.tld&lt;/p&gt;


&lt;p&gt;La clé privée&lt;/p&gt;

&lt;pre&gt;
openssl genrsa -out exempletld.key 1024
&lt;/pre&gt;


&lt;p&gt;La clé publique&lt;/p&gt;

&lt;pre&gt;
openssl rsa -in exempletld.key -pubout -out exempletld_pub.key
&lt;/pre&gt;


&lt;p&gt;Changer les droits sur la clé privée pour la rendre uniquement accessible à l'utilisateur dkim&lt;/p&gt;

&lt;pre&gt;
chown dkim:dkim exempletld.key
chmod 640 exempletld.key
&lt;/pre&gt;


&lt;h3&gt;Ajouter l'enregistrement TXT à la zone DNS&lt;/h3&gt;


&lt;p&gt;Une fois la clé générée, il va falloir ajouter un enregistrement TXT à la zone de chaque domaine. Prenons encore l'exemple du domaine exemple.tld&lt;/p&gt;


&lt;p&gt;On édite le fichier de zone /var/cache/bind/exemple.tld.hosts et on ajoute l'enregistrement TXT suivant. La valeur de &quot;p=&quot; correspond à la clé publique sur une seule ligne. Notez également le nom exempletld qui sera utile pour la suite (nous l'appellerons &quot;sélecteur&quot;). Le t=y; signifie que votre installation est en test. Vous pourrez retirer cette information quand tout sera opérationnel&lt;/p&gt;

&lt;pre&gt;
; DKIM
_domainkey.exemple.tld.                  IN TXT  &amp;quot;t=y; o=-;&amp;quot;
exempletld._domainkey.exemple.tld.    IN TXT &amp;quot;k=rsa; t=s; p=ici_la_cle_publique_hyper_longue&amp;quot;
&lt;/pre&gt;


&lt;p&gt;N'oubliez pas d'incrémenter le numéro de série de votre zone pour que les changements soient pris en compte et relancer bind&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/bind9 restart
&lt;/pre&gt;


&lt;h3&gt;Créer le fichier de configuration de DKIM&lt;/h3&gt;


&lt;p&gt;Il faut maintenant créer le fichier de configuration qu'utilisera DKIMproxy au lancement du service. Celui ci contient les différentes informations pour chacun des domaines signés.&lt;/p&gt;

&lt;pre&gt;
vi /usr/local/dkimproxy/sender_map
&lt;/pre&gt;


&lt;p&gt;Toujours l'exemple avec exemple.tld. Ici, on demande la signature DKIM &lt;strong&gt;et&lt;/strong&gt; la signature DomainKeys. Il est possible de choisir l'un ou l'autre uniquement. Je vous renvois sur les spécifications de DKIM pour les autres paramètres&amp;nbsp;! Sachez simplement que le paramètre «&amp;nbsp;s&amp;nbsp;» correspond au nom du sélecteur utilisé dans votre fichier de zone.&lt;/p&gt;

&lt;pre&gt;
exemple.tld dkim(c=simple,s=exempletld,a=rsa-sha1,key=/usr/local/dkimproxy/keys/exemple.tld.key), domainkeys(c=nofws,s=exempletld,key=/usr/local/dkimproxy/keys/exempletld.key) 
&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;A lire avant de continuer&lt;/strong&gt;&amp;nbsp;: un «&amp;nbsp;problème&amp;nbsp;» subsiste dans mon &lt;em&gt;howto&lt;/em&gt;. En effet, je lance toujours dkimproxy.in qui s'occupe de l'analyse de messages entrants alors que ce travail est déjà effectué par SpamAssasin via Amavis comme je le précise au début de ce billet. Je n'ai simplement pas pris le temps de modifier le script de démarrage et mon implémentation dans Postfix. Je modifierais ce billet dés que j'aurais nettoyé tout ça&amp;nbsp;! Ami lecteur, si tu l'as fais pour ta configuration, n'hésites pas à me le signaler &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Ceci étant, la signature fonctionne tout de même... alors on continue&amp;nbsp;!&lt;/p&gt;


&lt;h3&gt;Lancer DKIMproxy&lt;/h3&gt;


&lt;p&gt;Avant d'envisager la configuration de Postfix, il faut vérifier que DKIMproxy se lance correctement&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/dkimproxy start
&lt;/pre&gt;


&lt;p&gt;Si il n'y a pas d'erreur on vérifie que le service est fonctionnel&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ps aux | grep dkim
&lt;/pre&gt;


&lt;p&gt;Il doit y avoir des lignes avec dkimproxy.in et des lignes avec dkimproxy.out.&lt;/p&gt;


&lt;p&gt;Maintenant que la zone est modifié, DKIMproxy installé et fonctionnel, passons enfin à la configuration de Postfix.&lt;/p&gt;


&lt;h3&gt;Configurer de Postfix&lt;/h3&gt;


&lt;p&gt;&lt;em&gt;La configuration n'est pas différente de celle pour dkfilter. Je colle ici le contenu de mon précédent billet.&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;Dans ma configuration, avant l'installation de DKIM et DomainKeys, j'utilise déjà Amavisd-new pour le filtrage antivirus (clamav) et antispam (spamassassin et dspam). J'ajoute donc DKIMproxy dans le process avant l'analyse par Amavis.&lt;/p&gt;


&lt;p&gt;Dans le main.cf, je remplace&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
content_filter = amavis:[127.0.0.1]:10024
&lt;/pre&gt;


&lt;p&gt;par&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
content_filter = dksign:[127.0.0.1]:12027
&lt;/pre&gt;


&lt;p&gt;[Je ne sais pas pourquoi mais si je ne précise pas le content_filter dans le main.cf, les mails envoyés par des processus locaux (par exemple, la fonction mail de PHP) ne passe pas par amavis et dksign]&lt;/p&gt;


&lt;p&gt;Dans le master.cf, voici la configuration&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Au début du fichier&lt;/p&gt;

&lt;pre&gt;
# relayer sur dksign sur le port 10028
smtp      inet  n       -       -       -       200     smtpd
        -o receive_override_options=no_address_mappings
        -o content_filter=dksign:[127.0.0.1]:12027

# Le smtp securise SSL
smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o content_filter=dksign:[127.0.0.1]:12027
  -o receive_override_options=no_address_mappings
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

# envoyer directement a dksign
submission  inet  n     -       n       -       -       smtpd
    -o smtpd_etrn_restrictions=reject
    -o smtpd_sasl_auth_enable=yes
    -o content_filter=dksign:[127.0.0.1]:12027
    -o receive_override_options=no_address_mappings
    -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
    #-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
&lt;/pre&gt;


&lt;p&gt;A la fin&lt;/p&gt;

&lt;pre&gt;
# Pour amavis
amavis  unix    -   -   -   -   20  smtp
        -o smtp_helo_timeout=300 
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
127.0.0.1:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_bind_address=127.0.0.1
    -o disable_dns_lookups=yes

#
# signature dkim/domainkeys
#
dksign    unix  -       -       n       -       10      smtp
    -o smtp_send_xforward_command=yes
    -o smtp_discard_ehlo_keywords=8bitmime

#
# signature dkim/domainkeys
#
127.0.0.1:12028 inet  n  -      n       -       10      smtpd
    -o content_filter=amavis:[127.0.0.1]:10024
    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
    -o smtpd_helo_restrictions=
    -o smtpd_client_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o smtpd_authorized_xforward_hosts=127.0.0.0/8
&lt;/pre&gt;


&lt;p&gt;Vous pouvez ensuite relancer postfix&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/postfix restart
&lt;/pre&gt;


&lt;h3&gt;Vérifier la signature&lt;/h3&gt;


&lt;p&gt;Envoyez un mail et regardez dans les logs&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
tail -f /var/log/mail.info
&lt;/pre&gt;


&lt;p&gt;Vous devez avoir pour un message envoyé par une adresse de exemple.tld&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
... DKIM signing - signed; message-id=&amp;lt;47D7961B.6060505@exemple.tld&amp;gt;, signer=&amp;lt;yves@exemple.tld&amp;gt;, from=&amp;lt;yves@exemple.tld&amp;gt; 
&lt;/pre&gt;


&lt;p&gt;Pour les autres&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
... DKIM signing - skipped; from=&amp;lt;test@autredomain.tld
&lt;/pre&gt;


&lt;p&gt;Vous pouvez également vérifier votre configuration en envoyant un mail à l'adresse&amp;nbsp;: &lt;strong&gt;check-auth ici_le_chez verifier.port25.com&lt;/strong&gt;. Cette adresse vous renvoi les informations sur l'installation des différents protocoles d'authentification des mails sur votre domaine. Ainsi, si vous avez également configuré correctement SPF vous devez avoir tout bon&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   pass
DKIM check:         pass
Sender-ID check:    pass
SpamAssassin check: ham
&lt;/pre&gt;


&lt;p&gt;Vous devez aussi avoir les informations sur DKIM et DomainKeys dans l'entête du message signé&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
DKIM-Signature: v=1; a=rsa-sha1; c=simple; d=exemple.tld; h=
	message-id:date:from:mime-version:to:subject:content-type:
	content-transfer-encoding; q=dns/txt; s=exempletld; bh=clepublique=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=exemple.tld; h=message-id:
	date:from:mime-version:to:subject:content-type:
	content-transfer-encoding; q=dns; s=exemple.tld; b=clepublique=
&lt;/pre&gt;


&lt;p&gt;Il me reste encore à comprendre complètement les différentes options de la spécification DKIM mais c'est un bon début &lt;img src=&quot;/blog/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2008/03/12/Installer-la-signature-DKIM-sur-Postfix-Debian-Etch-Amavisd-new#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2008/03/12/Installer-la-signature-DKIM-sur-Postfix-Debian-Etch-Amavisd-new#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/157</wfw:commentRss>
      </item>
    
  <item>
    <title>Un script de monitoring ultra simpliste</title>
    <link>http://www.grafactory.net/blog/post/2008/02/27/Un-script-de-monitoring-ultra-simpliste</link>
    <guid isPermaLink="false">urn:md5:ceb4e822743c67d25c104f5df0a629ea</guid>
    <pubDate>Wed, 27 Feb 2008 13:41:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le codage</category>
        <category>bash</category><category>monitoring</category><category>shell</category>    
    <description>    &lt;p&gt;Loin de &lt;a href=&quot;http://www.nagios.org/&quot; hreflang=&quot;en&quot;&gt;Nagios&lt;/a&gt; et de ses innombrables possibilités, voici un script bash minimaliste pour tester la disponibilité d'une machine ou plusieurs machines via un ping et recevoir, en cas de non réponse, les alertes par SMS&lt;sup&gt;[&lt;a href=&quot;http://www.grafactory.net/blog/post/2008/02/27/#pnote-156-1&quot; id=&quot;rev-pnote-156-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; et/ou mail. Le principe est le suivant&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;on teste toutes les X minutes la disponibilité des hôtes&lt;/li&gt;
&lt;li&gt;si une machine est détectée &lt;em&gt;down&lt;/em&gt;, on le note dans un fichier temporaire&lt;/li&gt;
&lt;li&gt;si 5 minutes après la machine est toujours &lt;em&gt;down&lt;/em&gt;, on lance les alertes&lt;/li&gt;
&lt;li&gt;quand la machine est de nouveau &lt;em&gt;up&lt;/em&gt;, on renvoi un mail (pas de SMS dans ce cas)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour configurer le script, il suffit de préciser les variables commentées au début du fichier.&lt;/p&gt;

&lt;code class=&quot;bash&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# pingTest par Yves et Thierry&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# http://www.grafactory.net/blog/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &lt;span style=&quot;color: #000000;&quot;&gt;2008&lt;/span&gt; / Licence LGPL&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# les hotes a tester &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;HOSTS=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;domain.tld autredomaine.tld&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# sujets des mails&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;SUBJECT=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;machine down&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;SUBJECT_UP=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;machine up&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# envoyer un SMS via tm4b.com&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;EMAILID=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;moi@domain.tld&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;TELID=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;XXXXX&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;PASSWD=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;XXXXX&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# envoyer un simple mail&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;EMAILSIMPLE=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;moi@domain.tld&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# nombre test&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;COUNT=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;for&lt;/span&gt; myHost &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$HOSTS&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;do&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; ! &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;ping&lt;/span&gt; -q -c &lt;span style=&quot;color: #007800;&quot;&gt;$COUNT&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$myHost&lt;/span&gt; &amp;gt;&amp;gt; /dev/null&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# elle est KO&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; ! -f /tmp/mail.&lt;span style=&quot;color: #007800;&quot;&gt;$myHost&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# on n est pas encore au courant&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; -f /tmp/&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;ping&lt;/span&gt;.&lt;span style=&quot;color: #007800;&quot;&gt;$myHost&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# elle etait KO cinq minutes avant, faut prevenir&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# envoyer un SMS&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;To - $TELID&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;From - $TELID&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;Message - La machine $myHost ne repond plus a $(date)&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;Password - $PASSWD&amp;quot;&lt;/span&gt; |\&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mail -s &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;[$myHost] $SUBJECT&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$EMAILID&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# envoyer un mail normal&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;La machine $myHost ne repond plus a $(date)&amp;quot;&lt;/span&gt; |\&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mail -s &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;[$myHost] $SUBJECT&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$EMAILSIMPLE&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# &amp;nbsp;creer le fichier pour indiquer que le mail a ete envoye&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;touch&lt;/span&gt; /tmp/mail.&lt;span style=&quot;color: #007800;&quot;&gt;$myHost&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;touch&lt;/span&gt; /tmp/&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;ping&lt;/span&gt;.&lt;span style=&quot;color: #007800;&quot;&gt;$myHost&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# elle n est pas KO&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; -f /tmp/&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;ping&lt;/span&gt;.&lt;span style=&quot;color: #007800;&quot;&gt;$myHost&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;rm&lt;/span&gt; /tmp/&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;ping&lt;/span&gt;.&lt;span style=&quot;color: #007800;&quot;&gt;$myHost&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; -f /tmp/mail.&lt;span style=&quot;color: #007800;&quot;&gt;$myHost&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;rm&lt;/span&gt; /tmp/mail.&lt;span style=&quot;color: #007800;&quot;&gt;$myHost&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;# renvoyer un mail&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;La machine $myHost repond a nouveau a $(date)&amp;quot;&lt;/span&gt; |\&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mail -s &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;[$myHost] $SUBJECT_UP&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$EMAILSIMPLE&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;done&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Dans la crontab, on ajoute la ligne suivante (ici, un test toute les 5 minutes).&lt;/p&gt;

&lt;pre&gt;
# faire un test de ping toutes les 5 min
*/5 * * * * /usr/local/sbin/pingtest &amp;gt;&amp;gt; /dev/null
&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;(on suppose donc ici que le script est installé dans /usr/local/sbin/)&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;Toutes les améliorations sont les bienvenues &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.grafactory.net/blog/post/2008/02/27/#rev-pnote-156-1&quot; id=&quot;pnote-156-1&quot;&gt;1&lt;/a&gt;] Pour recevoir les alertes par SMS, j'utilise le service &lt;em&gt;Email to SMS&lt;/em&gt; de &lt;a href=&quot;http://www.tm4b.com/&quot; hreflang=&quot;en&quot;&gt;TM4B&lt;/a&gt; . Les SMS peuvent être de prépayés via PayPal à un tarif très intéressant. Cette société propose aussi un API très complet pour l'envoi de SMS depuis un programme, un site Web...&lt;/p&gt;&lt;/div&gt;
</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2008/02/27/Un-script-de-monitoring-ultra-simpliste#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2008/02/27/Un-script-de-monitoring-ultra-simpliste#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/156</wfw:commentRss>
      </item>
    
  <item>
    <title>Le déguisement de robot pour carnaval</title>
    <link>http://www.grafactory.net/blog/post/2008/02/10/Le-deguisement-de-robot-pour-carnaval</link>
    <guid isPermaLink="false">urn:md5:c309b2e694cd53909c77c1b7e8504c69</guid>
    <pubDate>Sun, 10 Feb 2008 11:45:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le café du commerce</category>
        <category>carnaval</category><category>déguisement</category><category>geeklife</category><category>robot</category>    
    <description>&lt;p&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/robot-pied-suite.jpg&quot; alt=&quot;Le déguisement de robot pour carnaval&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;Histoire de changer un peu, je vous propose un formidable &quot;howto&quot; pour la construction d'un déguisement pour le carnaval de votre enfant (papa geek inside). C'est &lt;strong&gt;le déguisement de robot&lt;/strong&gt; digne d'un film de Ed Wood  (&quot;&lt;a href=&quot;http://www.imdb.com/title/tt0052077/&quot; hreflang=&quot;en&quot;&gt;Plan 9 from Outer Space&lt;/a&gt;&quot; par exemple). Alors décrochez un peu de votre écran et montrez que vous savez aussi utiliser vos dix doigts pour autre chose qu'un clavier &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;    &lt;h3&gt;Matériel&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Un enfant (le votre fera l'affaire)&lt;/li&gt;
&lt;li&gt;Un carton (ici maxipack de couches) pour le &quot;corps&quot; du robot&lt;/li&gt;
&lt;li&gt;Du carton souple pour les sur-bottes&lt;/li&gt;
&lt;li&gt;Des circuits d'ordinateurs usagés&lt;/li&gt;
&lt;li&gt;Du tuyau de conduit d'aération pour les bras&lt;/li&gt;
&lt;li&gt;Des bouchons de bouteilles de lait, une petit bouteille d'eau minérale, 2 petites bouteilles genre &quot;Yop-mini&quot; pour les réacteurs et accessoires&lt;/li&gt;
&lt;li&gt;Un peu de matériel pour de la petite électricité pas plus de 9V - N'allez pas électrocuter votre progéniture&amp;nbsp;! - (fils, douilles, ampoules...).&lt;/li&gt;
&lt;li&gt;Les gadgets qui font &lt;em&gt;pouet&lt;/em&gt; et qui trainent dans vos tiroirs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Outillage&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pistolet à colle&lt;/li&gt;
&lt;li&gt;Ciseaux, cutteurs&lt;/li&gt;
&lt;li&gt;Peinture grise métallisée&lt;/li&gt;
&lt;li&gt;Gros scotch de bricolage gris&lt;/li&gt;
&lt;li&gt;Quelques heures devant vous&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Fabrication du robot&lt;/h3&gt;


&lt;p&gt;&lt;strong&gt;Voici quelques photos&lt;/strong&gt; qui devrait vous aider suffisamment pour la réalisation du robot. Le succès est garanti&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1091.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1091_sq.jpg&quot; alt=&quot;IMG_1091.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1092.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1092.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1092_sq.jpg&quot; alt=&quot;IMG_1092.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1094.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1094.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1094_sq.jpg&quot; alt=&quot;IMG_1094.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1095.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1095.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1095_sq.jpg&quot; alt=&quot;IMG_1095.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1128.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1128.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1128_sq.jpg&quot; alt=&quot;IMG_1128.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1105.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1105.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1105_sq.jpg&quot; alt=&quot;IMG_1105.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1189.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1189.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1189_sq.jpg&quot; alt=&quot;IMG_1189.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1112.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1112.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1112_sq.jpg&quot; alt=&quot;IMG_1112.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1109.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1109.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1109_sq.jpg&quot; alt=&quot;IMG_1109.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1110.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1110.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1110_sq.jpg&quot; alt=&quot;IMG_1110.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1120.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1120.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1120_sq.jpg&quot; alt=&quot;IMG_1120.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1122.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1122.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1122_sq.jpg&quot; alt=&quot;IMG_1122.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1134.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1134.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1134_sq.jpg&quot; alt=&quot;IMG_1134.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1139.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1139.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1139_sq.jpg&quot; alt=&quot;IMG_1139.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1138.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1138.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1138_sq.jpg&quot; alt=&quot;IMG_1138.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1140.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1140.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1140_sq.jpg&quot; alt=&quot;IMG_1140.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1141.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1141.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1141_sq.jpg&quot; alt=&quot;IMG_1141.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1148.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1148.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1148_sq.jpg&quot; alt=&quot;IMG_1148.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1143.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1143.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1143_sq.jpg&quot; alt=&quot;IMG_1143.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1144.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1144.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1144_sq.jpg&quot; alt=&quot;IMG_1144.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1145.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1145.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1145_sq.jpg&quot; alt=&quot;IMG_1145.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1147.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1147.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1147_sq.jpg&quot; alt=&quot;IMG_1147.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1146.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1146.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1146_sq.jpg&quot; alt=&quot;IMG_1146.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1154.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1154.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1154_sq.jpg&quot; alt=&quot;IMG_1154.jpg&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.grafactory.net/blog/public/images/robot/IMG_1161.jpg&quot; hreflang=&quot;&quot; rel=&quot;lightbox[robot]&quot; title=&quot;IMG_1161.jpg&quot;&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/robot/.IMG_1161_sq.jpg&quot; alt=&quot;IMG_1161.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Je ne décris donc pas la fabrication en détail mais n'hésitez pas à poser vos questions en commentaire &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2008/02/10/Le-deguisement-de-robot-pour-carnaval#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2008/02/10/Le-deguisement-de-robot-pour-carnaval#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/155</wfw:commentRss>
      </item>
    
  <item>
    <title>Comment remplacer 2007 par 2008 sur Debian Etch</title>
    <link>http://www.grafactory.net/blog/post/2008/01/03/Comment-remplacer-2007-par-2008-sur-Debain-Etch</link>
    <guid isPermaLink="false">urn:md5:2730668e4f48b24e616276176a983bd1</guid>
    <pubDate>Thu, 03 Jan 2008 21:25:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le café du commerce</category>
            
    <description>    &lt;pre&gt;
apt-get remove --purge 2007
apt-get install 2008
&lt;/pre&gt;


&lt;p&gt;OK, je sors&amp;nbsp;! Mais avant je vous souhaite une bonne année 2008 &lt;img src=&quot;/blog/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2008/01/03/Comment-remplacer-2007-par-2008-sur-Debain-Etch#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2008/01/03/Comment-remplacer-2007-par-2008-sur-Debain-Etch#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/154</wfw:commentRss>
      </item>
    
  <item>
    <title>Petite mise à jour du script de mass mailing</title>
    <link>http://www.grafactory.net/blog/post/2007/11/09/Script-de-mailing-mis-a-jour</link>
    <guid isPermaLink="false">urn:md5:979c6a60c93f2b5f66f9c58688f26ea8</guid>
    <pubDate>Fri, 09 Nov 2007 14:26:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le PHP</category>
        <category>cli</category><category>mailing</category><category>php</category><category>phpmailer</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/conneries/supermegamass2000.jpg&quot; alt=&quot;Mass&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;C'est une mise à jour mineure. Les fonctionnalités sont les même que celles de &lt;a href=&quot;http://www.grafactory.net/blog/post/2006/06/09/125-script-de-mass-mailing-en-php&quot; hreflang=&quot;fr&quot;&gt;la première version&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;J'ai eu quelques soucis avec la classe Zend_Mail. Lors d'un envoi, suite à une mise à jour de Zend_Mail, je me suis retrouvé avec des groupes de destinataires en copie au lieu d'un envoi unitaire (pas très sérieux !).&lt;/p&gt;


&lt;p&gt;J'ai donc utilisé le &quot;bon vieux&quot; &lt;a href=&quot;http://phpmailer.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;PHPMailer&lt;/a&gt;. J'en ai aussi profité pour remplacer &lt;a href=&quot;http://pear.php.net/package/DB&quot; hreflang=&quot;en&quot;&gt;PEAR::DB&lt;/a&gt; par &lt;a href=&quot;http://www.php.net/pdo&quot; hreflang=&quot;fr&quot;&gt;PDO&lt;/a&gt;. Ce qui rend le script plus léger et plus simple à installer &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; . Je l'ai également doté d'un fichier de configuration séparé.&lt;/p&gt;


&lt;h2&gt;Changelog&amp;nbsp;:&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Utilisation de &lt;a href=&quot;http://phpmailer.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;PHPMailer&lt;/a&gt; à la place de Zend_Mail&lt;/li&gt;
&lt;li&gt;Utilisation de &lt;a href=&quot;http://www.php.net/pdo&quot; hreflang=&quot;fr&quot;&gt;PDO&lt;/a&gt; à la place de PEAR::DB&lt;/li&gt;
&lt;li&gt;Changement esthétique.&lt;/li&gt;
&lt;li&gt;Un fichier de configuration séparé.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Documentation&lt;/h2&gt;


&lt;p&gt;Vous devez télécharger &lt;a href=&quot;http://phpmailer.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;PHPMailer&lt;/a&gt;, disposer de PHP5 et l'extension PDO.&lt;/p&gt;


&lt;p&gt;Pour le reste, la &lt;a href=&quot;http://www.grafactory.net/blog/2006/06/09/125-script-de-mass-mailing-en-php&quot; hreflang=&quot;fr&quot;&gt;documentation&lt;/a&gt; de la première mouture est toujours valable. Vous pouvez également utiliser toutes les options disponibles dans PHPMailer pour adapter ce script à votre convenance (je vous laisse chercher dans le script).&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;&amp;nbsp;: Ce programme est fourni sans aucune garantie même si je l'utilise toutes les semaines pour une newsletter de 30 000 abonnés.&lt;/p&gt;


&lt;h2&gt;A faire&amp;nbsp;:&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;une option pour préciser le chemin du fichier de configuration&lt;/li&gt;
&lt;li&gt;en extra, toujours le gros boulot qui consiste à analyser les retours de mail (Delivery Error).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Téléchargement&lt;/h2&gt;


&lt;p&gt;&lt;a href=&quot;http://www.grafactory.net/dl/sendnews-0.2b.tar.gz&quot; hreflang=&quot;fr&quot;&gt;télécharger le script&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/11/09/Script-de-mailing-mis-a-jour#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/11/09/Script-de-mailing-mis-a-jour#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/153</wfw:commentRss>
      </item>
    
  <item>
    <title>Installer DomainKeys sur Postfix (Debian Etch, Amavisd-new...)</title>
    <link>http://www.grafactory.net/blog/post/2007/11/04/Installer-DomainKeys-sur-Postfix-Debian-Etch-Amavisd-new</link>
    <guid isPermaLink="false">urn:md5:b3d3901baee1b8cfd722b82e08824f6c</guid>
    <pubDate>Sun, 04 Nov 2007 13:58:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le pingouin</category>
        <category>amavis</category><category>dkim</category><category>domainkeys</category><category>mail</category><category>postfix</category>    
    <description>&lt;p&gt;&lt;strong&gt;Mise à jour le 12 mars 2008&lt;/strong&gt;&amp;nbsp;: le même billet adapté pour DKIM est disponible&amp;nbsp;: &lt;a href=&quot;http://www.grafactory.net/blog/post/2008/03/12/Installer-la-signature-DKIM-sur-Postfix-Debian-Etch-Amavisd-new&quot; hreflang=&quot;fr&quot;&gt;Installer la signature DKIM sur Postfix avec DKIMproxy&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Dans ma lutte incessante pour que mes messages n'aient pas comme destination finale les dossiers &quot;courrier indésirable&quot; des &quot;grands&quot; fournisseurs tels que Yahoo!, Hotmail/MSN, Gmail ect... Je vous propose aujourd'hui l'installation de la signature Domainkeys sur vos mails.&lt;/p&gt;


&lt;p&gt;DomainKeys est un protocole de communication créé par Yahoo! (et défini par une RFC 4870). Wikipedia vous donnera un plus d'informations sur le sujet&amp;nbsp;: &lt;a href=&quot;http://en.wikipedia.org/wiki/DomainKeys&quot; hreflang=&quot;en&quot;&gt;DomainKeys&lt;/a&gt; sur Wikipedia&lt;/p&gt;


&lt;p&gt;Même s'il fonctionne totalement et est déployé sur de nombreux serveurs, sachez qu'il est maintenant &lt;em&gt;remplacé&lt;/em&gt; par une RFC plus &quot;globale&quot;&amp;nbsp;: &lt;a href=&quot;http://www.ietf.org/rfc/rfc4871.txt&quot; hreflang=&quot;en&quot;&gt;DKIM&lt;/a&gt;  (Domain Keys Identified Mail). J'aborderais les différences et l'implémentation de DKIM dans un autre post.&lt;/p&gt;


&lt;p&gt;D'autres liens&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://fr.docs.yahoo.com/mail/spamguard_domainkeys.html&quot; hreflang=&quot;fr&quot;&gt;Prouver et sécuriser l'identité des expéditeurs&lt;/a&gt; par Yahoo!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://domainkeys.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;DomainKey Implementor's Tools and Library for email servers &amp;amp; clients&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DomainKeys bien reconnu chez Yahoo! (forcément ;))
&lt;img src=&quot;http://www.grafactory.net/blog/public/images/domain_keys.jpg&quot; alt=&quot;DomainKeys&quot; /&gt;&lt;/p&gt;



&lt;p&gt;Voici la configuration du serveur de messagerie sur lequel se base ce tutoriel&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distribution Linux &lt;a href=&quot;http://www.debian.org/&quot; hreflang=&quot;fr&quot;&gt;Debian&lt;/a&gt; Etch&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.postfix.org/&quot; hreflang=&quot;en&quot;&gt;Postfix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amavis.org/&quot; hreflang=&quot;en&quot;&gt;Amavis&lt;/a&gt; (antivirus+antispam)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nous allons mettre en place la configuration suivante&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
postfix -&amp;gt; dkfilter -&amp;gt; postfix -&amp;gt; amavis -&amp;gt; postfix
&lt;/pre&gt;


&lt;p&gt;&lt;a href=&quot;http://jason.long.name/dkfilter/&quot; hreflang=&quot;en&quot;&gt;Dkfilter&lt;/a&gt; est un proxy de signature et de vérification des signatures pour DomainKeys.&lt;/p&gt;


&lt;p&gt;Ceci peut paraitre un peu lourd en regardant le schéma, mais postfix gère ce type de configuration très bien via les &lt;a href=&quot;http://www.postfix.org/FILTER_README.html&quot; hreflang=&quot;en&quot;&gt;content filter&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;em&gt;Comme je suis gentil et que l'informaticien est souvent fainéant, j'ai écris ce howto avec plein de copier/coller &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/em&gt;&lt;/p&gt;    &lt;h2&gt;Installer dkfilter&lt;/h2&gt;


&lt;p&gt;Il n'existe, à l'heure où j'écris ces lignes, pas de paquet Debian Etch pour dkfilter mais l'installation est relativement simple.&lt;/p&gt;


&lt;h3&gt;Installez les modules perl suivant (ici, via cpan)&amp;nbsp;:&lt;/h3&gt;

&lt;pre&gt;
perl -MCPAN -e shell

install Crypt::OpenSSL::RSA
install Mail::Address
install MIME::Base64
install Net::DNS
install Net::Server
install Test::More
install AppConfig::File
&lt;/pre&gt;


&lt;p&gt;Placez vous dans /usr/src/&lt;/p&gt;

&lt;pre&gt;
cd /usr/src/
&lt;/pre&gt;


&lt;h3&gt;Téléchargez dkfilter&lt;/h3&gt;

&lt;pre&gt;
wget http://jason.long.name/dkfilter/dkfilter-0.11.tar.gz
&lt;/pre&gt;


&lt;p&gt;Décompressez l'archive&lt;/p&gt;

&lt;pre&gt;
tar zxvf dkfilter-0.11.tar.gz
&lt;/pre&gt;


&lt;h3&gt;Patcher pour l'utilisation de dkfilter sur plusieurs domaines&lt;/h3&gt;


&lt;p&gt;Pour mon installation, j'ai besoin que &lt;strong&gt;Domain Keys&lt;/strong&gt; soit utilisable pour &lt;strong&gt;plusieurs domaines&lt;/strong&gt; sur le même serveur.&lt;/p&gt;


&lt;p&gt;Ca tombe bien, un gentil contributeur nous propose un &lt;em&gt;patch&lt;/em&gt; de dkfilter pour gérer les différentes clés et paramètres par domaine depuis un simple fichier de configuration.&lt;/p&gt;


&lt;p&gt;Téléchargez donc le patch en question&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
wget -P /usr/src/dkfilter-0.11/scripts/ http://jason.long.name/dkfilter/config_file.patch
&lt;/pre&gt;


&lt;p&gt;Patchez le programme&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
cd /usr/src/dkfilter-0.11/scripts/
patch &amp;lt; config_file.patch
&lt;/pre&gt;


&lt;p&gt;Ensuite, créez le répertoire d'installation de dkfilter dans /usr/local par exemple&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
mkdir /usr/local/dkfilter
&lt;/pre&gt;


&lt;p&gt;Lancez le &quot;configure&quot; en précisant dans l'option votre répertoire d'installation&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
./configure --prefix=/usr/local/dkfilter
&lt;/pre&gt;


&lt;p&gt;Installez&lt;/p&gt;

&lt;pre&gt;
make install
&lt;/pre&gt;


&lt;p&gt;Si il n'y a pas d'erreur, vous pouvez continuer. Vous devez voir dans /usr/local/dkfilter, un dossier lib/ et un dossier bin/&lt;/p&gt;

&lt;pre&gt;
ls -l /usr/local/dkfilter
&lt;/pre&gt;


&lt;h2&gt;Créer l'utilisateur et le groupe dkfilter&lt;/h2&gt;

&lt;pre&gt;
adduser dkfilter --no-create-home --disabled-password --disabled-login
&lt;/pre&gt;


&lt;h2&gt;Installer le script de démarrage de dkfilter&lt;/h2&gt;


&lt;p&gt;Un script d'exemple est fourni dans l'archive de dkfilter. On le copie dans /etc/init.d/.&lt;/p&gt;

&lt;pre&gt;
cp /usr/scr/dkfilter-0.11/sample-dkfilter-init-script.sh /etc/init.d/dkfilter
&lt;/pre&gt;


&lt;p&gt;Il faut ensuite modifier le script pour l'adapter à votre configuration et au patch de gestion multi-domaines. On édite donc le script.&lt;/p&gt;

&lt;pre&gt;
vi /etc/init.d/dkfilter
&lt;/pre&gt;


&lt;p&gt;Voici la partie modifiée du fichier&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
...
DKFILTERUSER=dkfilter
DKFILTERGROUP=dkfilter
DKFILTERDIR=/usr/local/dkfilter

HOSTNAME=`hostname -f`
DOMAIN=`hostname -d`
DKFILTER_IN_ARGS=&amp;quot;
    --hostname=$HOSTNAME
    127.0.0.1:12025 127.0.0.1:12026&amp;quot;
DKFILTER_OUT_ARGS=&amp;quot;
        --configfile=/etc/dkfilter.conf
    --headers
    127.0.0.1:12027 127.0.0.1:12028&amp;quot;
...
&lt;/pre&gt;


&lt;p&gt;Soyez vigilant sur&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;les ports de dkfilter.ini (vérification des signatures des mails entrants)&lt;/li&gt;
&lt;li&gt;les ports de dkfilter.out (signature des mails sortants)&lt;/li&gt;
&lt;li&gt;le chemin vers le fichier de configuration.&lt;/li&gt;
&lt;li&gt;le groupe et l'utilisateur dkfilter créés précédemment&lt;/li&gt;
&lt;li&gt;la modification de l'argument --configfile pour prendre en compte votre fichier de configuration qui sera créé plus bas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Créer une clé publique/privée&lt;/h2&gt;


&lt;p&gt;Chaque domaine possèdera sa propre clé. On crée un dossier dans lequel on stockera les clés.&lt;/p&gt;

&lt;pre&gt;
mkdir /urs/local/dkfilter/keys
cd /urs/local/dkfilter/keys
&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;On suppose que vous avez le paquet openssl installé et que votre domaine est exemple.tld&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;La clé privée&lt;/p&gt;

&lt;pre&gt;
openssl genrsa -out exempletld.key 1024
&lt;/pre&gt;


&lt;p&gt;La clé publique&lt;/p&gt;

&lt;pre&gt;
openssl rsa -in exempletld.key -pubout -out exempletld_pub.key
&lt;/pre&gt;


&lt;p&gt;Changer les droits sur la clé privée pour la rendre uniquement accessible à l'utilisateur dkfilter&lt;/p&gt;

&lt;pre&gt;
chown dkfilter; exempletld.key
chmod 640 exempletld.key
&lt;/pre&gt;


&lt;h2&gt;Ajouter l'enregistrement TXT à la zone DNS&lt;/h2&gt;


&lt;p&gt;Une fois la clé générée, il va falloir ajouter un enregistrement TXT à la zone de chaque domaine. Prenons l'exemple du domaine exemple.tld&lt;/p&gt;


&lt;p&gt;On édite le fichier de zone &lt;em&gt;/var/cache/bind/exemple.tld.hosts&lt;/em&gt; et on ajoute l'enregistrement TXT suivant. La valeur de &quot;p=&quot; correspond à la clé publique sur une seule ligne.  Notez également le nom exempletld qui sera utile pour la suite (nous l'appellerons &quot;selecteur&quot;).&lt;/p&gt;

&lt;pre&gt;
; DomainKeys
_domainkey.exemple.tld.            IN TXT  &amp;quot;t=y; o=-;&amp;quot;
exempletld._domainkey.exemple.tld.    IN TXT  &amp;quot;g=; k=rsa; p=ici_la_cle_publique_hyper_longue;&amp;quot;
&lt;/pre&gt;


&lt;p&gt;N'oubliez pas d'incrémenter le numéro de série de votre zone pour que les changements soient pris en compte et relancer bind&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/bind9 restart
&lt;/pre&gt;


&lt;p&gt;Vous pouvez vérifier la bonne configuration de votre zone sur le site officiel de DomainKeys&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://domainkeys.sourceforge.net/selectorcheck.html&quot; hreflang=&quot;en&quot;&gt;testez avec le nom du sélecteur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://domainkeys.sourceforge.net/policycheck.html&quot; hreflang=&quot;en&quot;&gt;testez l'implémentation de DomainKeys sur la zone&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Créer le fichier de configuration de dkfilter&lt;/h2&gt;


&lt;p&gt;Il faut maintenant créer le fichier de configuration qu'utilisera dkfilter au démarrage du service dans &lt;em&gt;/ect/dkfilter.conf&lt;/em&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
# ------------------------------------------
# exemple.tdl
[domain]
name        = exemple.tdl
method      = simple
selector    = exempletld
private_key = /usr/local/dkfilter/keys/exempletld.key
&lt;/pre&gt;


&lt;p&gt;La ligne &lt;em&gt;selector&lt;/em&gt; correspond au sélecteur indiqué dans la zone.&lt;/p&gt;


&lt;h2&gt;Lancer dkfilter&lt;/h2&gt;


&lt;p&gt;Avant d'envisager la configuration de Postfix, il faut vérifier que dkfilter se lance correctement&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/dkfilter start
&lt;/pre&gt;


&lt;p&gt;Si il n'y a pas d'erreur on vérifie que le service est fonctionnel&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ps aux | grep dkfilter
&lt;/pre&gt;


&lt;p&gt;Il doit y avoir des lignes avec dkfilter.in et des lignes avec dkfilter.out. Vérifier également que les options sont correctes. Notamment l'appel au fichier de configuration.&lt;/p&gt;


&lt;p&gt;Maintenant que la zone est modifié, dkfilter installé et fonctionnel, nous pouvons enfin passer à la configuration de postfix.&lt;/p&gt;


&lt;h2&gt;Configurer de Postfix&lt;/h2&gt;


&lt;p&gt;Dans ma configuration, avant l'installation de DomainKeys, j'utilise déjà Amavisd-new pour le filtrage antivirus (clamav) et antispam (spamassassin et dspam).&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Edit le 25 février&lt;/strong&gt;&amp;nbsp;: &lt;em&gt;on me demande comment s'effectue la vérification de la signature des mails entrants dans ma configuration. C'est en fait Amavis via SpamAssassin et l'intégration du module CPAN Mail::Dkim qui effectue cette vérification. Si vous utilisez déjà SpamAssassin via Amavis, Il suffit d'activer et de configurer le module DKIM dans le fichier /etc/spamassassin/v312.pre. On peux donc, dans ce cas, se poser la question de l&quot;utilité de lancer également le process dkfilter.in dans cette configuration...&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;J'ajoute donc dkfilter dans le process avant l'analyse par Amavis.&lt;/p&gt;


&lt;p&gt;Dans le main.cf, je remplace&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
content_filter = amavis:[127.0.0.1]:10024
&lt;/pre&gt;


&lt;p&gt;par&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
 content_filter = dksign:[127.0.0.1]:12027
&lt;/pre&gt;


&lt;p&gt;[Je ne sais pas pourquoi mais si je ne précise pas le content_filter dans le main.cf, les mails envoyés par des process locaux (par exemple, la fonction &lt;em&gt;mail&lt;/em&gt; de PHP) ne passe pas par amavis et dkfilter]&lt;/p&gt;


&lt;p&gt;Dans le master.cf, voici la configuration&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Au début du fichier&lt;/p&gt;

&lt;pre&gt;
# relayer sur dksign sur le port 10028
smtp      inet  n       -       -       -       200     smtpd
        -o receive_override_options=no_address_mappings
        -o content_filter=dksign:[127.0.0.1]:12027

# Le smtp securise SSL
smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o content_filter=dksign:[127.0.0.1]:12027
  -o receive_override_options=no_address_mappings
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

# envoyer directement a dksign
submission  inet  n     -       n       -       -       smtpd
    -o smtpd_etrn_restrictions=reject
    -o smtpd_sasl_auth_enable=yes
    -o content_filter=dksign:[127.0.0.1]:12027
    -o receive_override_options=no_address_mappings
    -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
    #-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
&lt;/pre&gt;


&lt;p&gt;A la fin&lt;/p&gt;

&lt;pre&gt;
# Pour amavis
amavis  unix    -   -   -   -   20  smtp
        -o smtp_helo_timeout=300 
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
127.0.0.1:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_bind_address=127.0.0.1
    -o disable_dns_lookups=yes

#
# signature domainkeys
#
dksign    unix  -       -       n       -       10      smtp
    -o smtp_send_xforward_command=yes
    -o smtp_discard_ehlo_keywords=8bitmime

#
# signature domainkeys
#
127.0.0.1:12028 inet  n  -      n       -       10      smtpd
    -o content_filter=amavis:[127.0.0.1]:10024
    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
    -o smtpd_helo_restrictions=
    -o smtpd_client_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o smtpd_authorized_xforward_hosts=127.0.0.0/8
&lt;/pre&gt;


&lt;p&gt;Vous pouvez ensuite relancer postfix&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/postfix restart
&lt;/pre&gt;


&lt;h2&gt;Vérifier la signature&lt;/h2&gt;


&lt;p&gt;Envoyez un mail et regardez dans les logs&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
tail -f /var/log/mail.info
&lt;/pre&gt;


&lt;p&gt;Vous devez avoir pour un message envoyé par une adresse de exemple.tld&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
DomainKeys signing - signed; from=&amp;lt;yves@exemple.tld&amp;gt;, message-id=...
&lt;/pre&gt;


&lt;p&gt;Pour les autres&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
DomainKeys signing - skipped (wrong sender domain); from=&amp;lt;test@autredomain.tld
&lt;/pre&gt;


&lt;p&gt;Vous pouvez également vérifier votre configuration en envoyant un mail à l'adresse&amp;nbsp;: &lt;strong&gt;check-auth ici_le_chez verifier.port25.com&lt;/strong&gt;. Cette sympathique adresse vous renvoi les informations sur l'installation des différents protocoles d'authentification des mails sur votre domaine.&lt;/p&gt;


&lt;p&gt;Vous devez également avoir les informations sur DomainKeys dans l'entête du message signé&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
DomainKey-Signature : a=rsa-sha1; h=Received:Message-ID:Date:From:Organization:User-Agent:MIME-Version:To:Subject:Content-Type:Content-Transfer-Encoding; b=LhoN2HSlL...6mkkDXfIw=; c=simple; d=exemple.tld; q=dns; s=exempletld
&lt;/pre&gt;


&lt;p&gt;Voilà, peut-être que vos messages ne finiront plus dans les spambox ;). n'hésitez pas à me signaler les erreurs présentent dans ce howto.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/11/04/Installer-DomainKeys-sur-Postfix-Debian-Etch-Amavisd-new#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/11/04/Installer-DomainKeys-sur-Postfix-Debian-Etch-Amavisd-new#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/152</wfw:commentRss>
      </item>
    
  <item>
    <title>Connaitre les adresses IP des visiteurs derrière un reverse proxy</title>
    <link>http://www.grafactory.net/blog/post/2007/10/31/Connaitre-les-adresse-IP-des-visiteurs-derriere-un-reverse-proxy</link>
    <guid isPermaLink="false">urn:md5:d6c5660b926e370cb55547cec9e96f1a</guid>
    <pubDate>Wed, 31 Oct 2007 09:33:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Les logiciels</category>
        <category>apache</category><category>awstats</category><category>statistiques</category>    
    <description>    &lt;p&gt;Ce qui est pénible quand on héberge un serveur web derrière un reverse proxy, c'est qu'on n'obtient pas, par défaut, les adresses IP réelles des visiteurs mais uniquement l'adresse IP du reverse proxy.&lt;/p&gt;


&lt;p&gt;Un logiciel de statistiques qui utilise les logs du serveur web, Awstats par exemple, vous indiquera donc que vous n'avez qu'un seul et unique visiteur (snif !).&lt;/p&gt;


&lt;p&gt;Il existe heureusement une solution simple qui se trouve dans la variable d'environnement X-Forwarded-For.&lt;/p&gt;


&lt;p&gt;Sur un serveur Apache (sur lighttp, ca sera sensiblement pareil), il faut donc changer la ligne&amp;nbsp;:&lt;/p&gt;


&lt;pre&gt;LogFormat &quot;%h %l %u %t \&quot;%r\&quot; %&amp;gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot;&quot; combined&lt;/pre&gt;


&lt;p&gt;En&amp;nbsp;:&lt;/p&gt;


&lt;pre&gt;LogFormat &quot;%{X-Forwarded-For}i - %u %t \&quot;%r\&quot; %&amp;gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot;&quot; combined&lt;/pre&gt;


&lt;p&gt;Et voilà des jolies statistiques pleines de visiteurs &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/10/31/Connaitre-les-adresse-IP-des-visiteurs-derriere-un-reverse-proxy#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/10/31/Connaitre-les-adresse-IP-des-visiteurs-derriere-un-reverse-proxy#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/151</wfw:commentRss>
      </item>
    
  <item>
    <title>Recherche Fulltext et InnoDB avec Mysql</title>
    <link>http://www.grafactory.net/blog/post/2007/09/07/Recherche-Fulltext-et-InnoDB-avec-Mysql</link>
    <guid isPermaLink="false">urn:md5:c70ad4563922462c4b58283621606501</guid>
    <pubDate>Mon, 10 Sep 2007 11:22:00 +0200</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le codage</category>
        <category>fulltext</category><category>innodb</category><category>mysql</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/icones/mysql_100x52-64.gif&quot; alt=&quot;Logo Mysql&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;Les avantages de l'utilisation du moteur de stockage &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/fr/innodb-overview.html&quot; hreflang=&quot;fr&quot;&gt;InnoDB&lt;/a&gt; par rapport à &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/fr/myisam-storage-engine.html&quot; hreflang=&quot;fr&quot;&gt;MysIsam&lt;/a&gt; sur une base de données &lt;a href=&quot;http://www.mysql.fr/&quot; hreflang=&quot;fr&quot;&gt;Mysql&lt;/a&gt; (à partir de la version 5.02) sont non négligeables sur certains projets. Il permet l'utilisation&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;de contraintes d'intégrité (Foreign Key ect...)&lt;/li&gt;
&lt;li&gt;de &lt;em&gt;triggers&lt;/em&gt; (déclencheurs en français dans le texte).&lt;/li&gt;
&lt;li&gt;de procédures stockées&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un inconvénient est, par contre, particulièrement pénalisant dès qu'on envisage un moteur de recherche en &quot;texte intégral&quot;. Il est en effet impossible de créer des &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html&quot; hreflang=&quot;fr&quot;&gt;index FULLTEXT&lt;/a&gt; avec le moteur InnoDB&amp;nbsp;! L'utilisation des MATCH et autres joyeusetés est donc impossible. Le classement pertinent des résultats devient plus compliqué à mettre en oeuvre.&lt;/p&gt;


&lt;p&gt;Je me suis retrouvé confronté à ce problème récemment et voici comment je l'ai contourné. Je résume, pour l'exemple, en une unique table, ma structure de données qui en compte quelques dizaines.&lt;/p&gt;


&lt;p&gt;J'ai donc une table &quot;texts&quot; qui utilise InnoDB avec quelques champs dont le &quot;title&quot; sur lequel je souhaite faire les recherches (la clé primaire s'appelle &quot;idtext&quot;).&lt;/p&gt;


&lt;p&gt;J'ai créé une table &quot;searchs_texts&quot; avec le moteur MyIsam, deux champs -   idtext/title - &lt;strong&gt;et&lt;/strong&gt; un index FULLTEXT sur le champ &quot;title&quot;.&lt;/p&gt;


&lt;p&gt;Cette table contient, vous l'aurez compris, l'exacte correspondance des champs idtext/title de la table texts.&lt;/p&gt;


&lt;p&gt;Reste à tenir à jour cette table sans modifier le code de tous le site. Les &lt;strong&gt;triggers&lt;/strong&gt; vont nous être bien utile pour ça&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Un pour l'INSERT&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
CREATE TRIGGER trigger_insert_texts
AFTER INSERT ON texts
FOR EACH ROW
INSERT INTO searchs_texts SET idtext=NEW.idtext, title=NEW.title;
&lt;/pre&gt;

&lt;pre&gt;&lt;/pre&gt;

&lt;p&gt;Un pour l'UPDATE&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
CREATE TRIGGER trigger_update_texts
AFTER UPDATE ON texts
FOR EACH ROW
UPDATE searchs_texts SET title=NEW.title WHERE idtext=OLD.idtext;
&lt;/pre&gt;

&lt;pre&gt;&lt;/pre&gt;

&lt;p&gt;Et enfin, un pour le DELETE&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
CREATE TRIGGER trigger_delete_texts
AFTER DELETE ON texts
FOR EACH ROW
DELETE FROM searchs_texts WHERE idtext=OLD.idtext;
&lt;/pre&gt;


&lt;p&gt;Et voilà. Le tour est joué&amp;nbsp;! Maintenant, votre moteur de recherche pourra utiliser &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/fr/fulltext-boolean.html&quot; hreflang=&quot;fr&quot;&gt;tous ce qui est disponible&lt;/a&gt; et bientôt concurrencer Google &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/09/07/Recherche-Fulltext-et-InnoDB-avec-Mysql#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/09/07/Recherche-Fulltext-et-InnoDB-avec-Mysql#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/150</wfw:commentRss>
      </item>
    
  <item>
    <title>Liens symboliques avec Pure-ftpd sur Debian Etch</title>
    <link>http://www.grafactory.net/blog/post/2007/09/03/Liens-symboliques-avec-Pure-ftpd-sur-Debian-Etch</link>
    <guid isPermaLink="false">urn:md5:b2e715814c38f784ceba81aeffe531a7</guid>
    <pubDate>Mon, 03 Sep 2007 11:46:00 +0200</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le pingouin</category>
        <category>debian</category><category>pure-ftpd</category>    
    <description>    &lt;p&gt;Une chose manquait cruellement dans le binaire de pure-ftpd sur Debian Sarge&amp;nbsp;: la gestion des liens symboliques. Il fallait passer par des &quot;mount --bind ...&quot; pour arriver à ses fins (cf. &lt;a href=&quot;http://pureftpd.sourceforge.net/FAQ&quot; hreflang=&quot;en&quot;&gt;la documentation sur le sujet&lt;/a&gt;).&lt;/p&gt;


&lt;p&gt;Fort heureusement, sur Debian Etch c'est résolu... Encore faut-il le trouver&amp;nbsp;! Il y a deux binaires &lt;code&gt;pure-ftpd-mysql&lt;/code&gt; et &lt;code&gt;pureftp-mysql-virtualchroot&lt;/code&gt; (dans mon cas, vous l'aurez deviné, j'utilise le support Mysql).&lt;/p&gt;


&lt;p&gt;Pour activer le &quot;virtualchroot&quot;, éditez le fichier &lt;strong&gt;/ect/default/pure-ftpd-common&lt;/strong&gt; et ajoutez la ligne&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;VIRTUALCHROOT=true&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Relancez le tout avec &lt;code&gt;/etc/init.d/pure-ftpd-mysql restart&lt;/code&gt;&lt;/p&gt;


&lt;p&gt;Supprimez vos mount --bind &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/09/03/Liens-symboliques-avec-Pure-ftpd-sur-Debian-Etch#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/09/03/Liens-symboliques-avec-Pure-ftpd-sur-Debian-Etch#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/149</wfw:commentRss>
      </item>
    
  <item>
    <title>Si tu respectes pas les RFCs t'es niqué</title>
    <link>http://www.grafactory.net/blog/post/2007/08/23/Si-tu-respectes-pas-les-RFCs-tes-nique</link>
    <guid isPermaLink="false">urn:md5:b3ad594355da443fdc4b77bf99a020c4</guid>
    <pubDate>Thu, 23 Aug 2007 00:00:00 +0200</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le café du commerce</category>
        <category>antispam</category><category>gmail</category><category>postfix</category>    
    <description>    &lt;p&gt;Une mésaventure m'est arrivée aujourd'hui. Un client me signale que les mails que je lui envois sur sa boîte &lt;strong&gt;Gmail&lt;/strong&gt; n'arrive pas.&lt;/p&gt;


&lt;p&gt;Après vérification, ils arrivent en fait directement dans le dossier Spam de son compte Gmail&amp;nbsp;! Moi un spammeur&amp;nbsp;! Le comble de l'horreur &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt; Pourtant, j'ai blindé le serveur de messagerie avec et le domaine avec &lt;a href=&quot;http://fr.wikipedia.org/wiki/Sender_Policy_Framework&quot;&gt;SPF&lt;/a&gt; et tout le toutim pour éviter ça.&lt;/p&gt;


&lt;p&gt;D'ailleurs, Gmail le confirme dans les entêtes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
Received-SPF: pass (google.com: domain of yves@monsuperdomaine.net designates 194.xxx.xxx.xxx as permitted sender) client-ip=194.xxx.xxx.xxx;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of yves@monsuperdomaine.net designates 194.xxx.xxx.xxx as permitted sender) smtp.mail=yves@monsuperdomaine.net
&lt;/pre&gt;


&lt;p&gt;Mais ca ne suffit pas. Mes mails passent directement dans le courrier indésirable de Gmail dès qu'il y a un lien hypertexte dans le message (j'ai justement le lien vers grafactory.net dans ma signature...).&lt;/p&gt;


&lt;p&gt;Donc, un mail avec le corps du message suivant arrive dans la boîte de réception&amp;nbsp;:&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;Salut c'est Yves&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Le même avec ma signature va directement dans le dossier Spam&amp;nbsp;:&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;Salut c'est Yves&lt;/p&gt;
&lt;p&gt;
--&lt;br /&gt;
http://www.grafactory.net&lt;/p&gt;&lt;/blockquote&gt;



&lt;p&gt;Je vérifie les entête chez Gmail, j'effectue moult essais pour toujours revenir à cette conclusion&amp;nbsp;: un lien hypertexte dans mo message  et il est considéré comme Spam.&lt;/p&gt;


&lt;p&gt;Mais pourquoi donc l'antispam google ne veut pas de certains de mes messages&amp;nbsp;? Je suppose que je dois atteindre une note assez élevé dès que j'ajoute un lien dans mon message pour me retrouvé dans les indésirables...&lt;/p&gt;


&lt;p&gt;Après fait quelques dizaines d'essais de configuration différentes, quelques incantations et brulé quelques cierges, je me décide à vérifier la configuration de mon domaine et du serveur de messagerie.&lt;/p&gt;


&lt;p&gt;Tiens tiens&amp;nbsp;! DNSReport, me renvoit une erreur &quot;Fatal&quot;&amp;nbsp;: je n'ai pas déclaré d'adresse postmaster sur le domaine grafactory.net.&lt;/p&gt;


&lt;p&gt;Je décide de créer le compte postmaster &quot;à tout hasard&quot;... Et c'était bien ça !!! Me voilà de retour dans la boîte de réception de
Gmail &lt;img src=&quot;/blog/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Moralité, les RFCs, c'est pas pour les chiens&amp;nbsp;! Particulièrement pour le mail la &lt;a href=&quot;http://www.ietf.org/rfc/rfc1123.txt&quot;&gt;RFC 1123&lt;/a&gt; et la &lt;a href=&quot;http://www.ietf.org/rfc/rfc2142.txt&quot;&gt;RFC 2142&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/08/23/Si-tu-respectes-pas-les-RFCs-tes-nique#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/08/23/Si-tu-respectes-pas-les-RFCs-tes-nique#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/148</wfw:commentRss>
      </item>
    
  <item>
    <title>Passage sur Dotclear 2 Beta7</title>
    <link>http://www.grafactory.net/blog/post/2007/07/17/Passage-sur-Dotclear-2-Beta7</link>
    <guid isPermaLink="false">urn:md5:683ee4c9ead100dc363ddacd2cf41db5</guid>
    <pubDate>Tue, 17 Jul 2007 10:22:00 +0200</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le PHP</category>
        <category>dotclear</category><category>innodb</category><category>mysql</category>    
    <description>    &lt;p&gt;Apparement, il y avait une grosse faille de sécurité chez Dotclear. J'ai donc mis à jour. Pour mon blog, pas de problème. Pour la plateforme multiblogs que je gère, ca a été plus compliqué.&lt;/p&gt;


&lt;p&gt;Le moteur utilisé par Dotclear 2 avec Mysql maintenant InnoDB. C'est bien. Il y a des belles contraintes d'intégrité partout &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Va savoir pourquoi, l'intégrité n'était plus de mise sur la base multiblogs, il y avait des enregistrements orphelins qui ne faisaient plus référence.  J'ai du donc nettoyer un peu&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
DELETE FROM `dc_post` WHERE blog_id NOT IN (SELECT blog_id FROM dc_blog);
DELETE FROM `dc_category` WHERE blog_id NOT IN (SELECT blog_id FROM dc_blog);
DELETE FROM `dc_link` WHERE blog_id NOT IN (SELECT blog_id FROM dc_blog);
DELETE FROM `dc_permissions` WHERE blog_id NOT IN (SELECT blog_id FROM dc_blog);
DELETE FROM `dc_setting` WHERE blog_id NOT IN (SELECT blog_id FROM dc_blog);
DELETE FROM `dc_spamrule` WHERE blog_id NOT IN (SELECT blog_id FROM dc_blog);
DELETE FROM `dc_media` WHERE user_id NOT IN (SELECT user_id FROM dc_user);
DELETE FROM `dc_comment` WHERE post_id NOT IN (SELECT post_id FROM dc_post);
DELETE FROM `dc_media` WHERE user_id NOT IN (SELECT user_id FROM dc_user);
DELETE FROM `dc_post_media` WHERE media_id NOT IN (SELECT media_id FROM dc_media);
DELETE FROM `dc_post_media` WHERE post_id NOT IN (SELECT post_id FROM dc_post);
&lt;/pre&gt;


&lt;p&gt;Ca pourrait-être intégré dans le code de Dotclear avant une mise à jour ?!&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/07/17/Passage-sur-Dotclear-2-Beta7#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/07/17/Passage-sur-Dotclear-2-Beta7#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/147</wfw:commentRss>
      </item>
    
  <item>
    <title>PhpMyAdmin, Vista inside ?</title>
    <link>http://www.grafactory.net/blog/post/2007/07/15/PhpMyAdmin-Vista-inside</link>
    <guid isPermaLink="false">urn:md5:b62580992c3399d92f86c420bb1eb9c4</guid>
    <pubDate>Sun, 15 Jul 2007 21:49:00 +0200</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le PHP</category>
            
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/capture/phpmy_erreur.jpg&quot; alt=&quot;Phpmyadmin Erreur&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Une erreur windowsienne &lt;img src=&quot;/blog/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/07/15/PhpMyAdmin-Vista-inside#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/07/15/PhpMyAdmin-Vista-inside#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/146</wfw:commentRss>
      </item>
    
  <item>
    <title>Plugin importer des auteurs</title>
    <link>http://www.grafactory.net/blog/post/2007/07/05/Plugin-importer-des-auteurs</link>
    <guid isPermaLink="false">urn:md5:faef3d8de327ffe973dbdf8c54784b68</guid>
    <pubDate>Thu, 05 Jul 2007 09:47:00 +0200</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le PHP</category>
        <category>php</category><category>plugin</category><category>spip</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/icones/auteur_import.png&quot; alt=&quot;Logo importer des auteurs&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;Un nouvelle version de mon plugin &lt;a href=&quot;http://www.spip.net&quot; hreflang=&quot;fr&quot;&gt;SPIP&lt;/a&gt; qui permet de créer des auteurs en masse à partir d'un fichier csv.&lt;/p&gt;


&lt;p&gt;Outre l'ajout de plusieurs fonctionnalités, j'ai fais en sorte que le code soit modifiable assez facilement pour une personne ayant quelques connaissances en PHP. On m'a en effet plusieurs fois demandé comment modifier le plugin pour choisir les identifiants et mot de passe, avoir un mot de passe identique à l'identifiant...&lt;/p&gt;


&lt;p&gt;Plus d'informations sur l'article &lt;a href=&quot;http://www.spip-contrib.net/Plugin-Importer-des-auteurs-v-5,2&quot; hreflang=&quot;fr&quot;&gt;Importer des auteurs v-0.5&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/07/05/Plugin-importer-des-auteurs#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/07/05/Plugin-importer-des-auteurs#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/145</wfw:commentRss>
      </item>
    
  <item>
    <title>Passage du blog sous Dotclear 2</title>
    <link>http://www.grafactory.net/blog/post/2007/07/01/Passage-du-blog-sous-Dotclear-2</link>
    <guid isPermaLink="false">urn:md5:dcd090a7f2ae31500cf3d1df018ede86</guid>
    <pubDate>Sun, 01 Jul 2007 08:32:00 +0200</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le PHP</category>
        <category>dotclear</category><category>php</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/dotclear_pw.png&quot; alt=&quot;dotclear_pw.png&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt; Etant un utilisateur de la première heure de Dotclear, je me devais de passer sur &lt;a href=&quot;http://www.dotclear.net&quot; hreflang=&quot;fr&quot;&gt;Dotclear 2&lt;/a&gt; Beta6. Utilisation du plugin Flat Export, changement des chemins d'images avec une ou deux requête SQL bien placée*, mise en place des redirections des anciennes URL vers les nouvelles... Reste plus que le thème à changer pour remettre le mien.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mes requêtes SQL pour le changement de /blog/images en /blog/public/images dans les champs post_content et post_content_xhtml de la table dc_post&amp;nbsp;:&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;UPDATE dc_post SET post_content = replace(post_content,'blog/images','blog/public/images');
UPDATE dc_post SET post_content_xhtml = replace(post_content_xhtml,'blog/images','blog/public/images');&lt;/pre&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/07/01/Passage-du-blog-sous-Dotclear-2#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/07/01/Passage-du-blog-sous-Dotclear-2#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/144</wfw:commentRss>
      </item>
    
  <item>
    <title>De retour</title>
    <link>http://www.grafactory.net/blog/post/2007/06/30/153-de-retour</link>
    <guid isPermaLink="false">urn:md5:c0eb31543a6d8ed0bfcf7d961bef0a9b</guid>
    <pubDate>Sat, 30 Jun 2007 16:02:00 +0000</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le café du commerce</category>
            
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/icones/reload.png&quot; alt=&quot;reload.png&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt;Il y a quelques temps (en 2005), j'écrivais un billet intitulé &quot;ce blog n'est pas mort&quot;.  En ce moment, on peux se le demander. Un peu démotivé peut-être et surtout surbooké au boulot. Enfin, j'ai décide de reprendre la main.&lt;/p&gt;


&lt;p&gt;Voilà quelques trucs en vrac de ces derniers mois&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;déjà, un peu d'auto-promo avec quelques nouveaux sites&amp;nbsp;: un &lt;a href=&quot;http://www.lagarce.net&quot; hreflang=&quot;fr&quot;&gt;lagarce.net&lt;/a&gt; réalisé avec SPIP. Un refactoring complet de &lt;a href=&quot;http://www.galeriecimaise.com&quot; hreflang=&quot;fr&quot;&gt;galeriecimaise.com&lt;/a&gt; avec mon &lt;em&gt;framework&lt;/em&gt; Grafomatic, un &lt;a href=&quot;http://www.studio103.fr&quot; hreflang=&quot;fr&quot;&gt;studio103.fr&lt;/a&gt; réalisé avec le même framework et du jQuery dedans. Plus quelques trucs secrets top secrets;&lt;/li&gt;
&lt;li&gt;je bosse actuellement sur un bon gros projet pour la gestion complète de &lt;a href=&quot;http://www.theatre-contemporain.net&quot; hreflang=&quot;fr&quot;&gt;theatre-contemporain.net&lt;/a&gt;. On va essayer de devenir le Wikipedia du théâtre contemporain. Rien de moins. En tout cas l'interface sera très Ajax Web 3.0 &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/li&gt;
&lt;li&gt;finalement, je n'utiliserais pas le framework &lt;a href=&quot;http://www.symfony-project.com/&quot; hreflang=&quot;fr&quot;&gt;Symphony&lt;/a&gt;. Je crois que c'est &lt;a href=&quot;http://jelix.org/&quot; hreflang=&quot;fr&quot;&gt;Jelix&lt;/a&gt; qui va être mon choix pour mes prochains projets. Surtout que &lt;a href=&quot;http://www.ljouanneau.com/blog/2007/06/02/679-jforms-en-bonne-voie&quot; hreflang=&quot;fr&quot;&gt;ce qui me manquait&lt;/a&gt; semble être au programme;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jquery.com/&quot; hreflang=&quot;fr&quot;&gt;jQuery&lt;/a&gt; ca roxe grave. On le savait déjà mais je n'en fini plus de m'amuser avec et d'améliorer sensiblement mes interfaces.&lt;/li&gt;
&lt;li&gt;je cherche à changer de taf (voir un prochain post sur ce sujet)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Encore plus en vrac&amp;nbsp;: un nouveau bi-xéon de chez Sivit sur lequel j'héberge du gros site, mon MacBook Pro ne fait plus de bruit, je n'ai vraiment pas eu le temps de me mettre au C, je cherche un VTT d'occase, j'ai nouveau canon Ixus 850...&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/06/30/153-de-retour#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/06/30/153-de-retour#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/143</wfw:commentRss>
      </item>
    
  <item>
    <title>Le plein de navigateurs</title>
    <link>http://www.grafactory.net/blog/post/2007/04/13/152-le-plein-de-navigateurs</link>
    <guid isPermaLink="false">urn:md5:d60fd761a6a985f93570c7b059a702e3</guid>
    <pubDate>Fri, 13 Apr 2007 09:11:56 +0000</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le codage</category>
            
    <description>    &lt;p&gt;Voilà un petit truc qui évite d'avoir plein de machines virtuelles pour tester vos sites sur IE6+IE7+IE5+Opéra+Firefox ect...  Une compilation de navigateur qui se lance en &quot;standalone&quot; sous Winchose. (je n'ai pas Win mais j'ai au moins une VM de test)&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.wikistuce.info/doku.php/logiciels/une_panoplie_de_navigateur&quot;&gt;Standalone et Portable browser&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;N'oubliez quand même pas de tester sous Safari, Konqueror, Epiphany et Lynx &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/04/13/152-le-plein-de-navigateurs#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/04/13/152-le-plein-de-navigateurs#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/142</wfw:commentRss>
      </item>
    
  <item>
    <title>Mon père, ce héros... sous Linux</title>
    <link>http://www.grafactory.net/blog/post/2007/03/11/150-mon-pere-ce-heros-sous-linux</link>
    <guid isPermaLink="false">urn:md5:15da7aeb1eed36d8f57fd5bd09874b21</guid>
    <pubDate>Sun, 11 Mar 2007 14:56:45 +0000</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le café du commerce</category>
            
    <description>    &lt;p&gt;En 1920, mon père est né du côté de Namur, en Belgique.&lt;/p&gt;


&lt;p&gt;En 2007, à &lt;strong&gt;87 ans&lt;/strong&gt;, après avoir trainé, jusqu'à un problème de disque dur, son Windows 98 (un passage par Mac OS 8 pour son initiation à l'informatique), il utilise maintenant Ubuntu GNU/Linux.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Un système d'exploitation libre&amp;nbsp;! Lui qui était dans la résistance en 1940, ça tombe bien &lt;img src=&quot;/blog/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; !&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Certes, ce n'est pas facile tous les jours de perdre ses repères - &lt;em&gt;oui Papa, le menu &quot;Système&quot; c'est l'équivalent du panneau de configuration. Et non, on ne peux pas installer l'utilitaire Canon qui indique le niveau d'encre avec de jolies couleurs. Oui, c'est normal qu'il n'y ai plus d'antivirus&lt;/em&gt; - mais hormis ces changements géographiques et graphiques, il est convaincu.&lt;/p&gt;


&lt;p&gt;Qui dit encore que Linux c'est pour les geeks ?!&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/03/11/150-mon-pere-ce-heros-sous-linux#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/03/11/150-mon-pere-ce-heros-sous-linux#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/141</wfw:commentRss>
      </item>
    
  <item>
    <title>eZ Publish et &quot;Instant Publishing&quot; avec WebDav</title>
    <link>http://www.grafactory.net/blog/post/2007/02/05/149-ez-publish-et-instant-publishing-avec-webdav</link>
    <guid isPermaLink="false">urn:md5:b6e99016d56f0479be69a8ae1b62038c</guid>
    <pubDate>Mon, 05 Feb 2007 11:11:57 +0000</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le PHP</category>
            
    <description>    &lt;p&gt;&lt;img src=&quot;http://www.grafactory.net/blog/public/images/icones/ezpublish.png&quot; alt=&quot;eZ Publish&quot; style=&quot;float:right; margin: 0 0 1em 1em;&quot; /&gt; Je n'utilise pas encore eZ Publish mais va falloir sérieusement y réfléchir. Pourquoi&amp;nbsp;? Parceque la gestion d'un site par glisser/déposer de fichiers OpenOffice (Word aussi avec OpenXML ?) via un partage &lt;a href=&quot;http://fr.wikipedia.org/wiki/WebDAV&quot; hreflang=&quot;fr&quot;&gt;WebDav&lt;/a&gt;, c'est trop fort &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://ez.no/ezpublish/demo/ez_publish_now_flash_demo&quot; hreflang=&quot;en&quot;&gt;Un petit ''trailer'' en Flash&lt;/a&gt; pour s'en convaincre. Si vous n'êtes pas patient, attaquez directement le chapitre &quot;Instant Publishing&quot;.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://ez.no/ezpublish/demo/ez_publish_now_flash_demo&quot; hreflang=&quot;en&quot;&gt;Démonstration de eZ Publish&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/02/05/149-ez-publish-et-instant-publishing-avec-webdav#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/02/05/149-ez-publish-et-instant-publishing-avec-webdav#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/140</wfw:commentRss>
      </item>
    
</channel>
</rss>