associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

EnviarEmailHtml

=Enviando emails em Html e anexos=

Embora não seja uma boa prática, visto que pode impedir ou dificultar algumas pessoas de lerem o seu email, às vezes é necessário enviar emails em html a partir de um programa python. A função com um exemplo de uso está abaixo, bem como um exemplo de template html referenciando as imagens corretamente.

   1 # -*- coding: utf-8 -*-
   2 
   3 def mail(serverURL=None, sender='', to='', subject='', text='', attachments = [], html_template = None):
   4 
   5     import smtplib, MimeWriter, base64, cStringIO, mimetools
   6 
   7     #
   8     # buffer da mensagem
   9     #
  10     message = cStringIO.StringIO()
  11 
  12     txtin  = cStringIO.StringIO(text)
  13 
  14     if html_template:
  15         htmlin = cStringIO.StringIO(open(html_template).read() % text)
  16     
  17     writer = MimeWriter.MimeWriter(message)
  18     writer.addheader('Subject', subject)
  19     writer.addheader('MIME-Version', '1.0')
  20 
  21     writer.startmultipartbody("alternative")
  22     writer.flushheaders()
  23 
  24     #
  25     # parte de texto plano
  26     #
  27     subpart = writer.nextpart()
  28     subpart.addheader("Content-Transfer-Encoding", "quoted-printable")
  29     pout = subpart.startbody("text/plain", [("charset", 'utf-8')])
  30     mimetools.encode(txtin, pout, 'quoted-printable')
  31     txtin.close()
  32     
  33     #
  34     # parte do html
  35     #
  36     subpart = writer.nextpart()
  37     subpart.addheader("Content-Transfer-Encoding", "quoted-printable")
  38     pout = subpart.startbody("text/html", [("charset", 'utf-8')])
  39     mimetools.encode(htmlin, pout, 'quoted-printable')
  40     htmlin.close()
  41 
  42     #
  43     # adiciona os anexos
  44     #
  45     for attachment in attachments:
  46         part = writer.nextpart()
  47         part.addheader('Content-Transfer-Encoding', 'base64')
  48         #necessário para referência em tags <img>
  49         part.addheader('Content-Id', "<"+attachment['file']+">")
  50         body = part.startbody('%s; name=%s' % (attachment['mime'], attachment['file']))
  51         base64.encode(open(attachment['file'], 'rb'), body)
  52     
  53     #
  54     # finaliza a mensagem
  55     #
  56     writer.lastpart()
  57     
  58     #
  59     # envia o email
  60     #
  61     smtp = smtplib.SMTP(serverURL)
  62     smtp.sendmail(sender, to, message.getvalue())
  63     message.close()
  64     smtp.quit()
  65 
  66 if __name__ == "__main__":
  67     anexos = []
  68     anexos.append({'mime' : 'image/jpg', 'file' : 'cabecalho.jpg'})
  69     anexos.append({'mime' : 'image/jpg', 'file' : 'rodape.jpg'})
  70     template = 'template.htm'
  71     mail('smtp.server.com.br','joao@server.com.br','maria@cliente.com.br','Solicitação de visita', str_mail, anexos, template)

Template Html:

<HTML>
<HEAD>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
        <STYLE>
                body {
                        font-family: Verdana, Arial, Helvetica, sans-serif;
                        font-size: 12px;
                }
        </STYLE>
</HEAD>
<BODY>
<img src="cid:cabecalho.jpg" width="743" height="132" align="texttop">
<br>
<br>
<br>
<pre>
%s
</pre>
<br>
<br>
<br>
<div style="background: url(cid:rodape.jpg); height: 113px; width: 741px;">
        Atenciosamente,
        <br>
        <b>João da Silva</b>
        <br>
        <i>Gerente </i>
        <br>
</div>
</BODY>
</HTML>

Baseado no cookbook encontrado em http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/67083

LuizCarlosGeron