<?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>Veinti1 &#187; programacion</title>
	<atom:link href="http://veinti1.com/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://veinti1.com</link>
	<description>.. mi pequeña guarida ..</description>
	<lastBuildDate>Thu, 15 Dec 2011 14:16:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Script para hacer Mailing en Python</title>
		<link>http://veinti1.com/script-para-hacer-mailing-en-python/</link>
		<comments>http://veinti1.com/script-para-hacer-mailing-en-python/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 17:48:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programacion]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://veinti1.com/?p=225</guid>
		<description><![CDATA[Mucho tiempo después vuelvo a compartir algo a través de este triste Blog, justo el día antes de irme de vacaciones, y con la intención de una vez que vuelva de las mismas dedicarle un poco más de tiempo, ya que me voy haciendo mayor y los escasos 140 caracteres de twitter se me empiezan [...]]]></description>
			<content:encoded><![CDATA[<p>Mucho tiempo después vuelvo a compartir algo a través de este triste Blog, justo el día antes de irme de vacaciones, y con la intención de una vez que vuelva de las mismas dedicarle un poco más de tiempo, ya que me voy haciendo mayor y los escasos 140 caracteres de twitter se me empiezan a quedar cortos.</p>
<p>El tema es que hace unos días me puse manos a la obra a instalar una herramienta para hacer mailing y mientras buscaba pensaba en lo fácil que sería programarlo con Python, así que después de no encontrar nada que mereciera la pena, me puse a tirar lineas y en apenas un par de horas ya lo tenía, Python es maravilloso <img src='http://veinti1.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> , así que con una sonrisa que aún dura, os dejo el código por si sirviera a alguien de ayuda en un futuro, y una buena manera de tenerlo yo siempre a mano.</p>
<p>Decir que el envío lo hago a través de Gmail de una cuenta legítima para evitar que sea catalogado como SPAM y el envío se hace cada 5 segundos para evitar que Gmail nos bloquee. Así que no está preparado para enviar grandes volúmenes. </p>
<p>init.py</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
<span style="color: #808080; font-style: italic;">#Script for Mailing</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> sqlite3
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">smtplib</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">from</span> GmailMail <span style="color: #ff7700;font-weight:bold;">import</span> GmailMail
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> initDb<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
	conn = sqlite3.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'db.sqlite'</span><span style="color: black;">&#41;</span>
	c = conn.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;"># Drop and Create table</span>
	<span style="color: #ff7700;font-weight:bold;">try</span>:
		c.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: #483d8b;">'DROP table user'</span><span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">except</span>:
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;No existe tabla user previamente&quot;</span>
	c.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: #483d8b;">'create table user
	(id integer, name text, surname text,
	 email text, send integer)'</span><span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;"># Insert a row of data</span>
	fd = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;datos.txt&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
	i=<span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> fd:
	   	datos = line.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: black;">&#41;</span>
		c.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;insert into user values (&quot;</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot;, '&quot;</span> + datos<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>+ <span style="color: #483d8b;">&quot;' , '&quot;</span> + datos<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;', '&quot;</span> + datos<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span> +<span style="color: #483d8b;">&quot;',0)&quot;</span><span style="color: black;">&#41;</span>
		conn.<span style="color: black;">commit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
	   	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;:  &quot;</span> + datos<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;  &quot;</span> + datos<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
		i = i+<span style="color: #ff4500;">1</span>
	fd.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	conn.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">def</span> connDB<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">return</span> sqlite3.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'db.sqlite'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> closeDB<span style="color: black;">&#40;</span>conn<span style="color: black;">&#41;</span>:
	conn.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> getAllDB<span style="color: black;">&#40;</span>conn<span style="color: black;">&#41;</span>:
	c = conn.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	c.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: #483d8b;">'select * from user WHERE send=0'</span><span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>
	arr = c
	<span style="color: #ff7700;font-weight:bold;">return</span> arr
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> updateRegister<span style="color: black;">&#40;</span><span style="color: #008000;">id</span>,conn<span style="color: black;">&#41;</span>:
	c = conn.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	c.<span style="color: black;">execute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;UPDATE user SET send=1 WHERE id=&quot;</span>+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span><span style="color: #008000;">id</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
	conn.<span style="color: black;">commit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> composeContent<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
	f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;email.txt&quot;</span><span style="color: black;">&#41;</span>	
	content=f.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf8&quot;</span><span style="color: black;">&#41;</span>
	f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> content
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> sendDB<span style="color: black;">&#40;</span>subject, content, search<span style="color: black;">&#41;</span>:
	conn = connDB<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">try</span>:
		m = GmailMail<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;usuario@gmail.com&quot;</span>, <span style="color: #483d8b;">&quot;password&quot;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">except</span>:
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Error SMTP&quot;</span>, <span style="color: #dc143c;">sys</span>.<span style="color: black;">exc_info</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">raise</span>
&nbsp;
	c=getAllDB<span style="color: black;">&#40;</span>conn<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> row <span style="color: #ff7700;font-weight:bold;">in</span> c:
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Durmiendo cinco segundo para no saturar Gmail&quot;</span>
		<span style="color: #dc143c;">time</span>.<span style="color: black;">sleep</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">try</span>:
                        content=composeContent<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
			<span style="color: #dc143c;">email</span>=row<span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span>	
			content = content.<span style="color: black;">replace</span><span style="color: black;">&#40;</span>search, row<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
			m.<span style="color: black;">send</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">email</span>, subject, content<span style="color: black;">&#41;</span>
			updateRegister<span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, conn<span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;  Enviado email a &quot;</span> + row<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot; email : &quot;</span> + <span style="color: #dc143c;">email</span>
		<span style="color: #ff7700;font-weight:bold;">except</span>:
			<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Error id: &quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>row<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>, <span style="color: #dc143c;">sys</span>.<span style="color: black;">exc_info</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	closeDB<span style="color: black;">&#40;</span>conn<span style="color: black;">&#41;</span>		
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
&nbsp;
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>==<span style="color: #483d8b;">&quot;initDb&quot;</span>:
		initDb<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>==<span style="color: #483d8b;">&quot;run&quot;</span>:
&nbsp;
		subject=u<span style="color: #483d8b;">&quot;Asunto del email&quot;</span>
		search=<span style="color: #483d8b;">&quot;$nombre&quot;</span>
&nbsp;
		sendDB<span style="color: black;">&#40;</span>subject, <span style="color: #483d8b;">&quot;&quot;</span>, search<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">else</span>:
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;&quot;&quot;
			[+] initDb: Vuelca el contenido del fichero datos.txt a db.sqlite
			[+] run: Empieza el envio de mailing
		&quot;&quot;&quot;</span></pre></td></tr></table></div>

<p>datos.txt<br />
<code><br />
nombre1 ape1 email<br />
nombre2 ape2 email<br />
</code></p>
<p>email.txt<br />
<code><br />
Estimado $nombre:</p>
<p>bla bla bla<br />
bla bla bla<br />
bla bla blas<br />
</code></p>
<p>GmailMail.py, por no complicarme con la codificación al final opté por esta clase que robé de internet.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># requires Python &gt;= 2.5</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">smtplib</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">mime</span>.<span style="color: black;">multipart</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEMultipart
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">mime</span>.<span style="color: black;">base</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEBase
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">mime</span>.<span style="color: black;">text</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEText
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">mime</span>.<span style="color: black;">audio</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEAudio
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">mime</span>.<span style="color: black;">image</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEImage
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">encoders</span> <span style="color: #ff7700;font-weight:bold;">import</span> encode_base64
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">mimetypes</span> <span style="color: #ff7700;font-weight:bold;">import</span> guess_type
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span> <span style="color: #ff7700;font-weight:bold;">import</span> basename
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> GmailMail<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, gmail_user, gmail_pwd<span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;
        Prepares an instance with basic authentication
&nbsp;
        &quot;&quot;&quot;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">gmail_user</span> = gmail_user
        <span style="color: #008000;">self</span>.<span style="color: black;">gmail_pwd</span> = gmail_pwd
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> getAttachment<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, path, charset=<span style="color: #483d8b;">'ASCII'</span><span style="color: black;">&#41;</span>:
        contentType, encoding = guess_type<span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> contentType <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span> <span style="color: #ff7700;font-weight:bold;">or</span> encoding <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">None</span>:
            contentType = <span style="color: #483d8b;">'application/octet-stream'</span>
&nbsp;
        mainType, subType = contentType.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/'</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        _file = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>path, <span style="color: #483d8b;">'rb'</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> mainType == <span style="color: #483d8b;">'text'</span>:
            attachment = MIMEText<span style="color: black;">&#40;</span>_file.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, subType, charset<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> mainType == <span style="color: #483d8b;">'message'</span>:
            attachment = <span style="color: #dc143c;">email</span>.<span style="color: black;">message_from_file</span><span style="color: black;">&#40;</span>_file<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> mainType == <span style="color: #483d8b;">'image'</span>:
            attachment = MIMEImage<span style="color: black;">&#40;</span>_file.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, _subType=subType<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> mainType == <span style="color: #483d8b;">'audio'</span>:
            attachment = MIMEAudio<span style="color: black;">&#40;</span>_file.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, _subType=subType<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            attachment = MIMEBase<span style="color: black;">&#40;</span>mainType, subType<span style="color: black;">&#41;</span>
            attachment.<span style="color: black;">set_payload</span><span style="color: black;">&#40;</span>_file.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            encode_base64<span style="color: black;">&#40;</span>attachment<span style="color: black;">&#41;</span>
&nbsp;
        _file.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
        attachment.<span style="color: black;">add_header</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Content-Disposition'</span>, <span style="color: #483d8b;">'attachment'</span>,
            filename=basename<span style="color: black;">&#40;</span>path<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">return</span> attachment
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> send<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, to, subject, text=u<span style="color: #483d8b;">&quot;&quot;</span>, html=<span style="color: #008000;">None</span>, attachments=<span style="color: #008000;">None</span>, charset=<span style="color: #483d8b;">&quot;iso-8859-15&quot;</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;
        Sends an email through Gmail using the authentication
        given to this instance.
&nbsp;
        If given, attachments must be a list of paths pointing
        to the files we want to include.
&nbsp;
        This script does not embed inline content (multipart/related)
&nbsp;
        &quot;&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> charset <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: black;">&#91;</span><span style="color: #483d8b;">'utf8'</span>,<span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#93;</span>: <span style="color: #808080; font-style: italic;">#bug?</span>
            <span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">charset</span> <span style="color: #ff7700;font-weight:bold;">import</span> add_charset, SHORTEST
            add_charset<span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span>, SHORTEST, <span style="color: #008000;">None</span>, <span style="color: #008000;">None</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>text, <span style="color: #008000;">unicode</span><span style="color: black;">&#41;</span>:
            text = text.<span style="color: black;">encode</span><span style="color: black;">&#40;</span>charset, <span style="color: #483d8b;">'replace'</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>html, <span style="color: #008000;">unicode</span><span style="color: black;">&#41;</span>:
            html = html.<span style="color: black;">encode</span><span style="color: black;">&#40;</span>charset, <span style="color: #483d8b;">'replace'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> attachments <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
            attachments = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> text: plain_part = MIMEText<span style="color: black;">&#40;</span>text, <span style="color: #483d8b;">'plain'</span>, charset<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> html: html_part = MIMEText<span style="color: black;">&#40;</span>html, <span style="color: #483d8b;">'html'</span>, charset<span style="color: black;">&#41;</span>
&nbsp;
        is_alternative = html <span style="color: #ff7700;font-weight:bold;">and</span> text
        layers = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> attachments <span style="color: #ff7700;font-weight:bold;">or</span> is_alternative:
            msg = MIMEMultipart<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;">#mixed</span>
            msg.<span style="color: black;">set_charset</span><span style="color: black;">&#40;</span>charset<span style="color: black;">&#41;</span>
            msg.<span style="color: black;">preamble</span> = <span style="color: #483d8b;">'This is a multi-part message in MIME format.'</span>
            msg.<span style="color: black;">epilogue</span> = <span style="color: #483d8b;">''</span>
            layers.<span style="color: black;">append</span><span style="color: black;">&#40;</span>msg<span style="color: black;">&#41;</span>
&nbsp;
            <span style="color: #ff7700;font-weight:bold;">if</span> is_alternative:
                msgAlternative = MIMEMultipart<span style="color: black;">&#40;</span><span style="color: #483d8b;">'alternative'</span><span style="color: black;">&#41;</span>
                msg.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>msgAlternative<span style="color: black;">&#41;</span>
                layers.<span style="color: black;">append</span><span style="color: black;">&#40;</span>msgAlternative<span style="color: black;">&#41;</span>
&nbsp;
            <span style="color: #ff7700;font-weight:bold;">if</span> text:
                layers<span style="color: black;">&#91;</span>-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>plain_part<span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> html:
                layers<span style="color: black;">&#91;</span>-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>html_part<span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">elif</span> text:
            msg = plain_part
        <span style="color: #ff7700;font-weight:bold;">else</span>: <span style="color: #808080; font-style: italic;">#html only</span>
            msg = html_part
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">for</span> path <span style="color: #ff7700;font-weight:bold;">in</span> attachments:
            msg.<span style="color: black;">attach</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">getAttachment</span><span style="color: black;">&#40;</span>path, charset<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'From'</span><span style="color: black;">&#93;</span> = <span style="color: #008000;">self</span>.<span style="color: black;">gmail_user</span>
        msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'To'</span><span style="color: black;">&#93;</span> = to
        msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Subject'</span><span style="color: black;">&#93;</span> = subject
&nbsp;
        mailServer = <span style="color: #dc143c;">smtplib</span>.<span style="color: black;">SMTP</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;smtp.gmail.com&quot;</span>, <span style="color: #ff4500;">587</span><span style="color: black;">&#41;</span>
        mailServer.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        mailServer.<span style="color: black;">starttls</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        mailServer.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        mailServer.<span style="color: black;">login</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">gmail_user</span>, <span style="color: #008000;">self</span>.<span style="color: black;">gmail_pwd</span><span style="color: black;">&#41;</span>
        mailServer.<span style="color: black;">sendmail</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">gmail_user</span>, to, msg.<span style="color: black;">as_string</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #808080; font-style: italic;"># Should be mailServer.quit(), but that crashes...</span>
        mailServer.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://veinti1.com/script-para-hacer-mailing-en-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual gSoap, por Manuel Castillo Cagigal</title>
		<link>http://veinti1.com/manual-gsoap-por-manuel-castillo-cagigal/</link>
		<comments>http://veinti1.com/manual-gsoap-por-manuel-castillo-cagigal/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 15:56:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://veinti1.com/?p=179</guid>
		<description><![CDATA[Mi amigo Manuel Castillo Cagigal ha escrito un excelente manual sobre gSoap, lo comparte con todos vosotros con el fín de que a alguien le pueda facilitar un poco la comprensión de esta herramienta. gSoap: La herramienta gSoap realiza una conexión de lenguaje entre el protocolo SOAP/XML y el lengua je de programación C/C++ facilitando [...]]]></description>
			<content:encoded><![CDATA[<p>Mi amigo Manuel Castillo Cagigal ha escrito un excelente manual sobre gSoap, lo comparte con todos vosotros con el fín de que a alguien le pueda facilitar un poco  la comprensión de esta herramienta.</p>
<p><strong>gSoap:</strong><br />
<em>La herramienta gSoap realiza una conexión de lenguaje entre el protocolo SOAP/XML y el lengua je de programación C/C++ facilitando considerablemente el desarrollo de servicios web y aplicaciones cliente/servidor en estos lenguajes. </em></p>
<p><a href="http://doc.veinti1.com/Manual_gSoap.pdf" target="_blank">Descargar Manual.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://veinti1.com/manual-gsoap-por-manuel-castillo-cagigal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>getTorrent.py &#8211; nueva versión.</title>
		<link>http://veinti1.com/gettorrentpy-nueva-version/</link>
		<comments>http://veinti1.com/gettorrentpy-nueva-version/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 18:23:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[opensource]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://veinti1.com/?p=174</guid>
		<description><![CDATA[¿Que es? He subido una nueva versión debido a cambios en el RSS de mininova que no me parseaba correctamente los seechs y leechs. Podeís descargarla desde aquí.]]></description>
			<content:encoded><![CDATA[<p><a href="http://veinti1.com/gettorrentpy-script-para-descarga-de-torrent-del-rss-de-mininova-y-anadirlos-a-mldonkey/" target="_blank">¿Que es?</a></p>
<p>He subido una nueva versión debido a cambios en el RSS de mininova que no me parseaba correctamente los seechs y leechs.</p>
<p>Podeís descargarla desde <a href="http://doc.veinti1.com/getTorrent.tar.gz">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://veinti1.com/gettorrentpy-nueva-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script para hacer Backups</title>
		<link>http://veinti1.com/script-para-hacer-backups/</link>
		<comments>http://veinti1.com/script-para-hacer-backups/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 03:36:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://veinti1.com/?p=164</guid>
		<description><![CDATA[Me he hecho un pequeño script en Python que llamo todos los dias en en el cron para que me haga un backup. Utiliza scp y lo tengo configurado con certificado de la máquina &#8216;backup&#8217; hacía la que va a copiar. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [...]]]></description>
			<content:encoded><![CDATA[<p>Me he hecho un pequeño script en Python que llamo todos los dias en en el cron para que me haga un backup.<br />
Utiliza scp y lo tengo configurado con certificado de la máquina &#8216;backup&#8217; hacía la que va a copiar.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">time</span>, <span style="color: #dc143c;">smtplib</span>, <span style="color: #dc143c;">sys</span>, <span style="color: #dc143c;">subprocess</span>, <span style="color: #dc143c;">StringIO</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">mime</span>.<span style="color: black;">image</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEImage
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">mime</span>.<span style="color: black;">text</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEText
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">mime</span>.<span style="color: black;">multipart</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEMultipart
&nbsp;
<span style="color: #dc143c;">email</span> = <span style="color: #483d8b;">&quot;email@dominio&quot;</span> <span style="color: #808080; font-style: italic;">#email al que vas a enviar</span>
email_from = <span style="color: #483d8b;">&quot;email@dominio&quot;</span> <span style="color: #808080; font-style: italic;">#Desde el que vas a enviar</span>
path = <span style="color: #483d8b;">&quot;/path/donde/guardar/el/backup&quot;</span>
path_l = path + <span style="color: #483d8b;">&quot;files/&quot;</span>
path_h = <span style="color: #483d8b;">&quot;/path/de/la/maquina/remota/a/copiar&quot;</span>
host = <span style="color: #483d8b;">&quot;ip_o_dominio&quot;</span>
<span style="color: #dc143c;">user</span> = <span style="color: #483d8b;">&quot;cacaue&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> writelog<span style="color: black;">&#40;</span>content<span style="color: black;">&#41;</span>:
log=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>path+<span style="color: #483d8b;">'log.txt'</span>, <span style="color: #483d8b;">'a'</span><span style="color: black;">&#41;</span>
log.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%d %m %Y %H:%M&quot;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot;  &quot;</span>+content+<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
log.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> sendemail<span style="color: black;">&#40;</span>content, asunto<span style="color: black;">&#41;</span>:
msg = MIMEMultipart<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'To'</span><span style="color: black;">&#93;</span> = <span style="color: #dc143c;">email</span>
msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Cc'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;&quot;</span>
msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'From'</span><span style="color: black;">&#93;</span> = email_from
msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Subject'</span><span style="color: black;">&#93;</span> = asunto
text = MIMEText<span style="color: black;">&#40;</span>content<span style="color: black;">&#41;</span>
text.<span style="color: black;">add_header</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Content-Disposition&quot;</span>, <span style="color: #483d8b;">&quot;inline&quot;</span><span style="color: black;">&#41;</span>
msg.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>text<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">try</span>:
server=<span style="color: #dc143c;">smtplib</span>.<span style="color: black;">SMTP</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;localhost&quot;</span><span style="color: black;">&#41;</span>
server.<span style="color: black;">sendmail</span><span style="color: black;">&#40;</span>msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'From'</span><span style="color: black;">&#93;</span>, msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'To'</span><span style="color: black;">&#93;</span>, msg.<span style="color: black;">as_string</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
server.<span style="color: black;">quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
writelog<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Email enviado a &quot;</span>+msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'To'</span><span style="color: black;">&#93;</span>+<span style="color: #483d8b;">&quot; con el contenido: &quot;</span>+content<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">except</span>:
writelog<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Error al enviar email&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
path_backup = path_l+<span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%d%m%y&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">try</span>:
<span style="color: #dc143c;">os</span>.<span style="color: black;">mkdir</span><span style="color: black;">&#40;</span>path_backup<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">except</span>:
writelog<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Ya existe --&amp;gt; &quot;</span>+path_backup<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">cmd</span> = <span style="color: #483d8b;">&quot;scp -r &quot;</span>+<span style="color: #dc143c;">user</span>+<span style="color: #483d8b;">&quot;@&quot;</span>+host+<span style="color: #483d8b;">&quot;:&quot;</span>+path_h+<span style="color: #483d8b;">&quot; &quot;</span>+path_backup
<span style="color: #ff7700;font-weight:bold;">try</span>:
f=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>path+<span style="color: #483d8b;">&quot;temp.txt&quot;</span>, <span style="color: #483d8b;">&quot;w&quot;</span><span style="color: black;">&#41;</span>
retcode = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">call</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">cmd</span>, shell=<span style="color: #008000;">True</span>, stdin=f, stderr=f<span style="color: black;">&#41;</span>
f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> retcode <span style="color: #66cc66;">&amp;</span>lt<span style="color: #66cc66;">;</span> <span style="color: #ff4500;">0</span>:
writelog<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Child was terminated by signal&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">else</span>:
f=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>path+<span style="color: #483d8b;">&quot;temp.txt&quot;</span>, <span style="color: #483d8b;">&quot;r&quot;</span><span style="color: black;">&#41;</span>
salida = f.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">getsize</span><span style="color: black;">&#40;</span>path+<span style="color: #483d8b;">&quot;temp.txt&quot;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;</span><span style="color: #ff4500;">0</span>:
writelog<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Error en &quot;</span>+host<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">else</span>:
sendemail<span style="color: black;">&#40;</span>salida, <span style="color: #483d8b;">&quot;Backup &quot;</span>+<span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%d/%m/%y&quot;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot; realizado con exito&quot;</span><span style="color: black;">&#41;</span>
writelog<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Realizado con exito&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">OSError</span>, e:
writelog<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Execution failed&quot;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://veinti1.com/script-para-hacer-backups/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

