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

<channel>
	<title>Astuces d&#039;Absolacom &#187; programmation</title>
	<atom:link href="http://astuces.absolacom.com/tag/programmation/feed/" rel="self" type="application/rss+xml" />
	<link>http://astuces.absolacom.com</link>
	<description>La voie est libre mais pleine d&#039;achoppements</description>
	<lastBuildDate>Wed, 01 Feb 2012 17:59:43 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Manipuler des PDF et JPG ou JPEG</title>
		<link>http://astuces.absolacom.com/logiciel/manipuler-des-pdf-et-jpg-ou-jpeg/</link>
		<comments>http://astuces.absolacom.com/logiciel/manipuler-des-pdf-et-jpg-ou-jpeg/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 11:28:29 +0000</pubDate>
		<dc:creator>manuberro</dc:creator>
				<category><![CDATA[images]]></category>
		<category><![CDATA[logiciel]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[convertir]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[programmation]]></category>

		<guid isPermaLink="false">http://astuces.absolacom.com/?p=335</guid>
		<description><![CDATA[Je scanne beaucoup de documents (pour tendre vers le zéro papier) et j&#8217;archive ensuite ceux ci dans des PDF une fois que je n&#8217;en ai plus besoin. Je vous donne mes astuces pour ce faire. Il vous faudra avoir installé les programmes imagemagick et gs, disponibles sous le même nom avec Ubuntu. Créer un PDF [...]]]></description>
			<content:encoded><![CDATA[<p>Je scanne beaucoup de documents (pour tendre vers le zéro papier) et j&#8217;archive ensuite ceux ci dans des PDF une fois que je n&#8217;en ai plus besoin.</p>
<p>Je vous donne mes astuces pour ce faire. Il vous faudra avoir installé les programmes <strong>imagemagick</strong> et <strong>gs</strong>, disponibles sous le même nom avec <strong>Ubuntu</strong>.</p>
<h2>Créer un PDF à partir d&#8217;images</h2>
<p>Je scanne en niveaux de gris à 300 DPI vers jpeg, ce qui permet d&#8217;avoir une image nette et de réimprimer le document au besoin en ayant la même qualité qu&#8217;une photocopie classique.</p>
<p>Ensuite, je met ces images dans un même dossier, et je les convertis toutes en un seul PDF avec la commande suivante:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">convert <span style="color: #000000; font-weight: bold;">*</span>.jpeg Factures_Avril09.PDF</pre></div></div>

<p>Ce qui vous donne un PDF contenant une page par image, dans l&#8217;ordre alphabétique.</p>
<p>Cependant, le PDF est assez lourd, l&#8217;équivalent en poids du total des images. Si vous désirez envoyer ce PDF par mail (par exemple au comptable), il faut l&#8217;alléger car vous allez y gagner en poids et il n&#8217;a pas besoin d&#8217;avoir une qualité identique à la votre tant qu&#8217;il arrive à lire le contenu. Il suffit d&#8217;ajouter une compression et un niveau de qualité à la commande ainsi:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">convert <span style="color: #000000; font-weight: bold;">*</span>.jpeg <span style="color: #660033;">-compress</span> jpeg <span style="color: #660033;">-quality</span> <span style="color: #000000;">30</span> Factures_Avril09.PDF</pre></div></div>

<p>Avec une qualité réglée à 30, vous divisez par environs 2,5 le poids du PDF généré. Mais la qualité de l&#8217;image baisse (ce qui est normal, puisque c&#8217;est ce qui est demandé). A vous de faire varier ce chiffre entre 0 et 100 pour arriver à un compromis acceptable entre la qualité et le poids du résultat final.</p>
<h2>Dans l&#8217;autre sens</h2>
<p>Il est aussi possible de transformer un PDF en série d&#8217;images que vous pourrez ensuite traiter, avec la commande suivante:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">convert fichier.pdf images.jpeg</pre></div></div>

<p>Cela va vous produire <em>images-0.jpeg, images-1.jpeg, images-2.jpeg</em>, &#8230; Autant d&#8217;images que de pages dans le PDF.</p>
<p>Attention cependant, <span style="text-decoration: underline;">la qualité des images obtenues avec cette méthode laisse à désirer</span> et j&#8217;ai eu des soucis avec des images: le format était bien en A4, mais le contenu de l&#8217;image était réduit sur la page. Sans doute un option manquante.</p>
<p>Mais ça reste lisible.</p>
]]></content:encoded>
			<wfw:commentRss>http://astuces.absolacom.com/logiciel/manipuler-des-pdf-et-jpg-ou-jpeg/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Modifier un fichier PPD</title>
		<link>http://astuces.absolacom.com/systeme/modifier-un-fichier-ppd/</link>
		<comments>http://astuces.absolacom.com/systeme/modifier-un-fichier-ppd/#comments</comments>
		<pubDate>Tue, 19 May 2009 11:34:30 +0000</pubDate>
		<dc:creator>manuberro</dc:creator>
				<category><![CDATA[developpement]]></category>
		<category><![CDATA[logiciel]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[système]]></category>
		<category><![CDATA[tuning]]></category>
		<category><![CDATA[impression]]></category>
		<category><![CDATA[programmation]]></category>

		<guid isPermaLink="false">http://astuces.absolacom.com/?p=257</guid>
		<description><![CDATA[Il est parfois nécessaire de pouvoir modifier un driver d&#8217;imprimante pour ajuster son comportement. Ayant eu à le faire récemment, je vous livre mes observations pour vous éviter mes galères: Le fichier utilisé pour contrôler l&#8217;imprimante se trouve dans /etc/cups/ppd Il porte le nom que vous avez donné à l&#8217;imprimante lors de son installation (exemple: [...]]]></description>
			<content:encoded><![CDATA[<p>Il est parfois nécessaire de pouvoir modifier un driver d&#8217;imprimante pour ajuster son comportement. Ayant eu à le faire récemment, je vous livre mes observations pour vous éviter mes galères:</p>
<ul>
<li>Le fichier utilisé pour contrôler l&#8217;imprimante se trouve dans <em>/etc/cups/ppd</em></li>
<li>Il porte le nom que vous avez donné à l&#8217;imprimante lors de son installation (exemple: <em>copieur.ppd</em> si vous avez nommé votre imprimante <em>copieur</em>)</li>
<li>Lors de l&#8217;installation, ou en passant par le gestionnaire des imprimante (<em>Système /Administration/ Impression</em> ou <em>system-config-printer</em>), les options sélectionnées (bacs, format, couleur/gris, &#8230;) sont directement écrites dans le fichier ppd de l&#8217;imprimante</li>
<li>Après modification manuelle du fichier ppd, vous devez redémarrer cups (<em>/etc/init.d/cupsys restart</em>)</li>
<li>En cas d&#8217;erreur de syntaxe dans le fichier ppd, l&#8217;onglet correspondant à la section n&#8217;apparaît plus dans les options lors de l&#8217;impression</li>
<li>Si la commande est trop longue pour tenir sur une seule ligne, le reste de la commande est sur la ligne suivante, et la ligne suivante doit comporter <strong>*End </strong>pour clore la commande<strong>.<br />
</strong></li>
<li>exemple:

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">*</span>OpenUI <span style="color: #000000; font-weight: bold;">*</span>Fold<span style="color: #000000; font-weight: bold;">/</span>Pliage: PickOne
<span style="color: #000000; font-weight: bold;">*</span>OrderDependency: <span style="color: #000000;">3</span> AnySetup <span style="color: #000000; font-weight: bold;">*</span>Fold
<span style="color: #000000; font-weight: bold;">*</span>DefaultFold: None
<span style="color: #000000; font-weight: bold;">*</span>Fold None<span style="color: #000000; font-weight: bold;">/</span>Non:  <span style="color: #ff0000;">&quot;&amp;lt;&amp;lt; /FoldType (Off) &amp;gt;&amp;gt; /KMOptions /ProcSet findresource /setKMoptions get exec&quot;</span>
<span style="color: #000000; font-weight: bold;">*</span>Fold Stitch<span style="color: #000000; font-weight: bold;">/</span>Pliage et Agrafage centre:  <span style="color: #ff0000;">&quot;&amp;lt;&amp;lt; /Collate true &amp;gt;&amp;gt; setpagedevice
 &amp;lt;&amp;lt; /FoldType (CenterFoldIn) /StitchType true &amp;gt;&amp;gt; /KMOptions /ProcSet findresource /setKMoptions get exec&quot;</span>
<span style="color: #000000; font-weight: bold;">*</span>End
<span style="color: #000000; font-weight: bold;">*</span>Fold HalfFold<span style="color: #000000; font-weight: bold;">/</span>Pliage en deux:  <span style="color: #ff0000;">&quot;&amp;lt;&amp;lt; /Collate true &amp;gt;&amp;gt; setpagedevice
 &amp;lt;&amp;lt; /FoldType (CenterFoldIn) /StitchType false &amp;gt;&amp;gt; /KMOptions /ProcSet findresource /setKMoptions get exec&quot;</span>
<span style="color: #000000; font-weight: bold;">*</span>End
<span style="color: #000000; font-weight: bold;">*</span>Fold Stapling<span style="color: #000000; font-weight: bold;">/</span>Agrafage au milieu:  <span style="color: #ff0000;">&quot;&amp;lt;&amp;lt; /Collate true &amp;gt;&amp;gt; setpagedevice
 &amp;lt;&amp;lt; /Finish 1 &amp;gt;&amp;gt; /KMOptions /ProcSet findresource /setKMoptions get exec&quot;</span>
<span style="color: #000000; font-weight: bold;">*</span>End
<span style="color: #000000; font-weight: bold;">*</span>CloseUI: <span style="color: #000000; font-weight: bold;">*</span>Fold</pre></div></div>

</li>
<li>Pour commenter une ligne, elle doit commencer par <strong>*%.</strong> Pour commenter une commande sur 2 lignes,  supprimer le saut de ligne et commenter la ligne.</li>
<li>Faire attention au codage du fichier (en particulier pour les accents dans les labels). Un mauvais codage et le ppd ne fonctionne plus! Il est normalement (si le ppd est bien écrit) déclaré en haut de fichier:<em>*LanguageVersion: French</em> et <em>*LanguageEncoding: ISOLatin1</em></li>
<li>Toujours avoir une copie du ppd avant de le modifier. En cas d&#8217;erreur, il est parfois plus facile de tout recommencer au lieu de chercher quel caractère pose problème.</li>
<li>Éditez le code en root avec un éditeur de textes. Après enregistrement de vos modification, vous pourrez tester immédiatement un lancement d&#8217;impression pour aller vérifier les options que vous avez modifié<em>.</em></li>
<li>Avancez étape par étape. En cas de problème, vous saurez que cela vient de votre dernière modification.<em><br />
</em></li>
</ul>
<p>Grâce à cela, j&#8217;ai supprimé (mis en commentaire) les options qui apparaissaient dans les onglet lors de l&#8217;impression et qui perturbaient mes utilisateurs. J&#8217;ai aussi changé des labels pour les rendre plus explicites (1 face -&gt; Recto, 2 Faces -&gt; Recto Verso).</p>
<p>Une fois le ppd modifié et paramétré avec les options voulues par défaut, il suffit de le copier dans le dossier <em>/etc/cups/ppd</em> de chaque ordinateur en ayant besoin sous le nom de l&#8217;imprimante paramétrée et de relancer cups.</p>
]]></content:encoded>
			<wfw:commentRss>http://astuces.absolacom.com/systeme/modifier-un-fichier-ppd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilisation de Bazaar</title>
		<link>http://astuces.absolacom.com/ubuntu/utilisation-de-bazaar/</link>
		<comments>http://astuces.absolacom.com/ubuntu/utilisation-de-bazaar/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 15:00:00 +0000</pubDate>
		<dc:creator>manuberro</dc:creator>
				<category><![CDATA[developpement]]></category>
		<category><![CDATA[logiciel]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[memo]]></category>
		<category><![CDATA[programmation]]></category>

		<guid isPermaLink="false">http://astuces.absolacom.com/?p=98</guid>
		<description><![CDATA[Bazaar est un gestionnaire de version. L&#8217;un de ses avantages est qu&#8217;il permet d&#8217;utiliser les protocoles ssh ou ftp, ce qui signifie qu&#8217;il n&#8217;est pas nécessaire de monter un &#171;&#160;serveur&#160;&#187; bazaar pour l&#8217;utiliser; il suffit d&#8217;un serveur où vous pouvez vous connecter en ssh. Classement des dossiers L&#8217;organisation des dossiers est laissée à votre goût, [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Bazaar" href="http://doc.ubuntu-fr.org/bazaar" target="_blank">Bazaar</a> est un gestionnaire de version. L&#8217;un de ses avantages est qu&#8217;il permet d&#8217;utiliser les protocoles ssh ou ftp, ce qui signifie qu&#8217;il n&#8217;est pas nécessaire de monter un &laquo;&nbsp;serveur&nbsp;&raquo; bazaar pour l&#8217;utiliser; il suffit d&#8217;un serveur où vous pouvez vous connecter en ssh.</p>
<h2>Classement des dossiers</h2>
<p>L&#8217;organisation des dossiers est laissée à votre goût, mais pour simplifier les explications, voici l&#8217;organisation que nous allons adopter sur le serveur:</p>
<ul>
<li>Un dossier à la racine nommé <em>bzr</em> qui contiendra les divers projets à versionner</li>
<li>Un dossier par projet dans le dossier /bzr (<em>projet1</em> et <em>projet2</em> )</li>
<li>Les droits en lecture/écriture pour les membres du groupe <em>projet</em>s sur le dossier /bzr (récursivement)</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">addgroup projets              <span style="color: #666666; font-style: italic;"># ajout d'un groupe projets</span>
adduser manu projets        <span style="color: #666666; font-style: italic;"># ajout de l'utilisateur au groupe projets</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">/</span>bzr<span style="color: #000000; font-weight: bold;">/</span>projet1         <span style="color: #666666; font-style: italic;"># création du dossier du premier projet</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">/</span>bzr<span style="color: #000000; font-weight: bold;">/</span>projet2         <span style="color: #666666; font-style: italic;"># création du dossier du deuxième projet</span>
<span style="color: #c20cb9; font-weight: bold;">chgrp</span> <span style="color: #660033;">-R</span> projets <span style="color: #000000; font-weight: bold;">/</span>bzr         <span style="color: #666666; font-style: italic;"># attribution du groupe projet à tous les fichiers du répertoire /bzr</span>
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #660033;">-R</span> g+rw <span style="color: #000000; font-weight: bold;">/</span>bzr          <span style="color: #666666; font-style: italic;"># attribution des droits en lecture/écriture à tous les fichiers pour les membres du groupe projets</span></pre></div></div>

<p>Il n&#8217;est pas nécessaire d&#8217;installer bazaar sur le serveur, mais il est nécessaire que l&#8217;accès par ssh fonctionne, avec ou <a title="Identification ssh sans mot de passe" href="http://astuces.absolacom.com/?p=80" target="_blank">sans mot de passe</a>.</p>
<h2>Sur les clients</h2>
<h3>Mise en place du projet sur le serveur</h3>
<p>Ce sont les clients (qui vont modifier le code des projets) qui doivent installer le logiciel bazaar</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> bzr python-paramiko</pre></div></div>

<p>Les préférences de bazaar (limitées) se trouvent dans <em>Système/Préférences/Bazaar preferences</em></p>
<p>Ce sont eux, aussi, qui vont initier le versionning, à l&#8217;endroit qui leur va bien:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>projets
<span style="color: #c20cb9; font-weight: bold;">mv</span> ~<span style="color: #000000; font-weight: bold;">/</span>Bureau<span style="color: #000000; font-weight: bold;">/</span>monprojet ~<span style="color: #000000; font-weight: bold;">/</span>projets <span style="color: #666666; font-style: italic;"># déplacement des fichiers du prototype dans les projets</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>projets<span style="color: #000000; font-weight: bold;">/</span>monprojet
bzr init                        <span style="color: #666666; font-style: italic;"># initialisation du versionning du projet</span>
bzr add <span style="color: #000000; font-weight: bold;">*</span>                    <span style="color: #666666; font-style: italic;"># ajout de tous les fichiers (récursif) au versionning</span>
bzr commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Création&quot;</span> <span style="color: #666666; font-style: italic;"># prise en compte des modifications avec le commentaire &quot;Création&quot;</span>
bzr push sftp:<span style="color: #000000; font-weight: bold;">//</span>manu<span style="color: #000000; font-weight: bold;">@</span>server<span style="color: #000000; font-weight: bold;">/</span>bzr<span style="color: #000000; font-weight: bold;">/</span>projet1 <span style="color: #660033;">--use-existing-dir</span> <span style="color: #666666; font-style: italic;"># envoi de la version du projet sur le serveur en utilisant les répertoires créés plus haut.</span></pre></div></div>

<h3>Récupération des fichiers sur un autre client</h3>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>beauprojet     <span style="color: #666666; font-style: italic;"># création du dossier qui va accueillir le projet</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>beauprojet
bzr init                     <span style="color: #666666; font-style: italic;"># initialisation du dossier au versionning</span>
bzr merge sftp:<span style="color: #000000; font-weight: bold;">//</span>toto<span style="color: #000000; font-weight: bold;">@</span>server<span style="color: #000000; font-weight: bold;">/</span>bzr<span style="color: #000000; font-weight: bold;">/</span>projet1<span style="color: #000000; font-weight: bold;">/</span>  <span style="color: #666666; font-style: italic;"># intégration des fichiers de &quot;monprojet&quot; dans le dossier &quot;beauprojet&quot; dans lequel on se trouve</span></pre></div></div>

<p>Chacun des clients possède maintenant les fichiers sur lesquels effectuer les développements</p>
<h3>Codage!</h3>
<p>Les clients vont effectuer les modifications sur les documents. Après chaque modification (enfin, chaque fin de bloc de modification) ou avant l&#8217;envoi des fichiers modifiés, il faudra effectuer la commande suivante (qu&#8217;ils aient décidé ou non d&#8217;envoyer les fichiers sur le serveur. Les commit peuvent être fait hors connexion.):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">bzr commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;message&quot;</span></pre></div></div>

<p>qui permet de prendre en compte les modifications effectuées dans le versionning et, accessoirement, de revenir à une version antérieure.</p>
<p>Il suffit ensuite &laquo;&nbsp;d&#8217;assembler&nbsp;&raquo; les fichiers modifiés avec ceux du serveur, que ceux ci aient été modifiés ou non par une autre personne:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">bzr merge sftp:<span style="color: #000000; font-weight: bold;">//</span>toto<span style="color: #000000; font-weight: bold;">@</span>server<span style="color: #000000; font-weight: bold;">/</span>bzr<span style="color: #000000; font-weight: bold;">/</span>projet1<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Enfin, les fichiers &laquo;&nbsp;finaux&nbsp;&raquo; sont envoyés sur le serveur afin d&#8217;être disponibles pour tous les développeurs:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">bzr push sftp:<span style="color: #000000; font-weight: bold;">//</span>toto<span style="color: #000000; font-weight: bold;">@</span>server<span style="color: #000000; font-weight: bold;">/</span>bzr<span style="color: #000000; font-weight: bold;">/</span>projet1<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<h2>A retenir</h2>
<ul>
<li>Il ne suffit pas d&#8217;ajouter un fichier/dossier au répertoire du projet pour qu&#8217;il soit pris en compte. Il faut le faire manuellement avec <strong>bzr add <em>lefichier</em></strong></li>
<li>Pour supprimer un fichier, il faut utiliser <strong>bzr remove <em>lefichier</em></strong></li>
<li>la commande <strong>bzr status</strong> permet de savoir l&#8217;état des fichier (plus exactement, du versionning)</li>
<li>La commande <strong>bzr log</strong> permet de voir le log des changements avec les commentaires</li>
<li>la commande <strong>bzr conflicts</strong> affiche les versions de fichiers en conflits</li>
<li>La commande <strong>bzr resolve</strong> <em><strong>lefichier</strong></em> permet de résoudre les conflits dans le fichier <em>lefichier</em></li>
<li>Le manuel de <strong>bzr</strong> donne plein d&#8217;informations et de commandes utilisables</li>
</ul>
<h2>Interface graphique</h2>
<p>Il existe une interface graphique pour bazaar nommée olive (paquet bzr-gtk) que je n&#8217;ai pas réussi à utiliser: impossible de comprendre les messages d&#8217;erreur (pas parlant) et pas trouvé de configuration à effectuer (ni dans le programme, ni dans les fichiers de configuration).</p>
<p>Pas grave, je suis un adepte de la ligne de commande.</p>
<h3>Autres sources:</h3>
<p><a title="Documentation Bazaar" href="http://bazaar-vcs.org/fr/IntroductionABzr" target="_blank">http://bazaar-vcs.org/fr/IntroductionABzr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://astuces.absolacom.com/ubuntu/utilisation-de-bazaar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envoyer un mail avec pièces jointes en python</title>
		<link>http://astuces.absolacom.com/developpement/envoyer-un-mail-avec-pieces-jointes-en-python/</link>
		<comments>http://astuces.absolacom.com/developpement/envoyer-un-mail-avec-pieces-jointes-en-python/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 21:18:06 +0000</pubDate>
		<dc:creator>manuberro</dc:creator>
				<category><![CDATA[developpement]]></category>
		<category><![CDATA[messagerie]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[pièces jointes]]></category>
		<category><![CDATA[programmation]]></category>

		<guid isPermaLink="false">http://astuces.absolacom.com/?p=16</guid>
		<description><![CDATA[Envoyer un mail avec pièces jointes avec python est simple en utilisant le code ci dessous. C'est tout! Ah, si! N'utilisez pas ceci à tout va: il est facile de se faire blacklister avec l'étiquette "spammeur". Et il est très difficile de se faire dé-blacklister. Attention à la taille des pièces jointes. Si vous dépassez [...]]]></description>
			<content:encoded><![CDATA[<p>Envoyer un mail avec pièces jointes avec python est simple en utilisant le code ci dessous.<code>
<pre class="brush: python; title: ; notranslate">&lt;/code&gt;

import smtplib

import os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encodersdef send_mail(send_from, send_to, subject, text, files=[], server=&quot;localhost&quot;):

assert type(send_to)==list
assert type(files)==list
msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = COMMASPACE.join(send_to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach( MIMEText(text) )

for f in files:
part = MIMEBase('application', &quot;octet-stream&quot;)
print f
part.set_payload( open(f,&quot;rb&quot;).read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename=&quot;%s&quot;' % os.path.basename(f))

msg.attach(part)

smtp = smtplib.SMTP(server)
smtp.sendmail(send_from, send_to, msg.as_string())
smtp.close()

retour = &quot;Une erreur s'est produite lors de l'envoi de mail&quot;
files = [ 'monfichier1.zip', '/tmp/le_fichier.pdf' ] # les pièces jointes avec leur chemin
destinataires = [ 'moi@monsite.com', 'moncopain@chez.lui' ]

try:
send_mail('expediteur@monsite.com', destinataires , &quot;Sujet du mail&quot;, &quot;Texte du message&quot;,files , 'smtp.free.fr')
except:
send_mail('expediteur@monsite.com', [ 'adresse@secours.fr'] , &quot; [ERROR ] Sujet du message&quot;, retour ,[] , 'smtp.free.fr')
</pre>
<p>C'est tout!</p>
<p>Ah, si!</p>
<ul>
<li>N'utilisez pas ceci à tout va: il est facile de se faire blacklister avec l'étiquette "spammeur". Et il est très difficile de se faire dé-blacklister.</li>
<li>Attention à la taille des pièces jointes. Si vous dépassez la taille limite de votre FAI (30Mo chez free), une erreur bloque le script avec un message du type:  <em>smtplib.SMTPSenderRefused: (552, 'Message size exceeds fixed limit', 'expediteur@monsite.com')</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://astuces.absolacom.com/developpement/envoyer-un-mail-avec-pieces-jointes-en-python/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

