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

Diferenças para "EnviarEmail"

Diferenças entre as versões de 1 e 3 (2 versões de distância)
Revisão 1e 2005-06-22 17:38:53
Tamanho: 4536
Editor: RodrigoSenra
Comentário:
Revisão 3e 2005-06-22 19:22:06
Tamanho: 4410
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 10: Linha 10:
#!python
Linha 11: Linha 12:
Linha 13: Linha 13:
Linha 15: Linha 14:
Linha 17: Linha 15:
Linha 19: Linha 16:
Linha 21: Linha 17:
Linha 23: Linha 18:

# Interpretador: Python 2.3.2
ou superior
# Interpretador: Python 2.3.2  ou superior
Linha 28: Linha 21:
Linha 30: Linha 22:
Linha 32: Linha 23:
Linha 34: Linha 24:
Linha 36: Linha 25:
Linha 38: Linha 26:
Linha 40: Linha 27:
Linha 42: Linha 28:
Linha 44: Linha 29:
Linha 46: Linha 30:
Linha 48: Linha 31:

from Crypto.Cipher import DES
from Crypto.Cipher import DES   # Opcional
Linha 52: Linha 33:
Linha 54: Linha 34:
Linha 60: Linha 39:
Linha 63: Linha 41:
__server = '127.0.0.1'
# alterar aqui comnome ou endereço servidor smtp
__server = '127.0.0.1'  # alterar aqui com nome ou endereço servidor smtp
Linha 67: Linha 44:
# Atualmente nao esta havendo autenticacao

#
__login = ""

#
__passwd = ""
# Atualmente nao esta havendo autenticacao, preencha se necessario
__login = ""
__passwd = ""
Linha 76: Linha 50:
Linha 78: Linha 51:
Linha 80: Linha 52:
Linha 86: Linha 57:
Linha 88: Linha 58:
Linha 90: Linha 59:
Linha 92: Linha 60:
Linha 98: Linha 65:
Linha 100: Linha 66:
Linha 102: Linha 67:
Linha 104: Linha 68:
Linha 106: Linha 69:
Linha 108: Linha 70:
Linha 110: Linha 71:
Linha 112: Linha 72:
Linha 120: Linha 79:
Linha 122: Linha 80:
Linha 124: Linha 81:
Linha 126: Linha 82:
Linha 128: Linha 83:
Linha 130: Linha 84:
Linha 134: Linha 87:
Linha 142: Linha 94:
Linha 144: Linha 95:
Linha 146: Linha 96:
Linha 148: Linha 97:
Linha 150: Linha 98:
Linha 152: Linha 99:
Linha 154: Linha 100:
Linha 156: Linha 101:
Linha 158: Linha 102:
Linha 160: Linha 103:
Linha 163: Linha 105:
                        
Linha 169: Linha 106:
Linha 172: Linha 108:

Linha 175: Linha 109:
Linha 177: Linha 110:

 
Linha 185: Linha 116:
 
Linha 188: Linha 118:
Linha 192: Linha 121:
Linha 196: Linha 124:
Linha 198: Linha 125:

         
Linha 208: Linha 132:
#!python

Receita: EnviarEmail

Esta receita ilustra como utilizar a biblioteca smtplib (padrão em distribuição Python) para enviar e-mails, com anexos opcionais.

Código

   1 #  ___ GPr Sistemas ____________________________________
   2 #
   3 #  Modulo: gpmail.py
   4 #  Data de Criação:     2003-02-26
   5 #  Data de Atualização: 2003-12-05
   6 #
   7 #  Desenvolvedores: João Chaves/Rod Senra
   8 #  Interpretador:   Python 2.3.2  ou superior
   9 
  10 import sys
  11 import smtplib
  12 import MimeWriter
  13 import mimetypes
  14 import base64
  15 import StringIO
  16 import getopt
  17 import os.path
  18 import sys
  19 import urllib2
  20 from StringIO import StringIO
  21 from Crypto.Cipher import DES   # Opcional
  22 from syslog import *
  23 from traceback import format_exception
  24 
  25 
  26 __version__ = '0.4'
  27 
  28 
  29 # Configurações
  30 
  31 __server = '127.0.0.1'  # alterar aqui com nome ou endereço servidor smtp
  32 
  33 
  34 # Atualmente  nao esta havendo autenticacao, preencha se necessario
  35 __login = ""
  36 __passwd = ""
  37 
  38 
  39 def attachText(_writer, _text,_mime):
  40     part = _writer.nextpart()
  41     body = part.startbody(_mime)
  42     body.write(_text)
  43 
  44 
  45 
  46 def attachPlainFile(_writer, _file, _mimeType=None, _name="unknown"):
  47     part = _writer.nextpart()
  48     part.addheader('Content-Transfer-Encoding','base64')
  49     body = part.startbody("%s; name=%s"%(_mimeType,_name))
  50     base64.encode(StringIO(_file),body)
  51 
  52     
  53 
  54 def attachCryptFile(_writer, _file,_mimeType=None,_name="unknown"):
  55     part = _writer.nextpart()
  56     part.addheader('Content-Transfer-Encoding', 'base64')
  57     body = part.startbody('%s; name=%s'%(_mimeType,_name))
  58     obj = DES.new(" secret ",DES.MODE_ECB)
  59     pad = 8-(len(_file)%8)
  60     _file = _file+pad*" "
  61     crypt = obj.encrypt(_file)
  62     base64.encode(StringIO(crypt),body)
  63 
  64     
  65 
  66 
  67 
  68 def sendmail(_subject,_from,_to,_cc=None,_attachments=None):
  69     try:
  70         message = StringIO()
  71         writer = MimeWriter.MimeWriter(message)
  72         writer.addheader('MIME-Version', '1.0')
  73         writer.addheader('Subject', _subject)
  74         writer.addheader('To',_to)
  75 
  76         if _cc:
  77             writer.addheader('Cc',_cc)
  78 
  79         writer.startmultipartbody('mixed')
  80 
  81         
  82 
  83         # process attachments
  84         if _attachments:
  85             for _mode,_file,_mime,_name in _attachments:
  86                 if _mode=="text":
  87                     attachText(writer,_file.read(),_mime)
  88                 elif _mode=="attach":
  89                     attachPlainFile(writer,_file.read(),_mime,_name)
  90                 elif _mode=="crypt":
  91                     attachCryptFile(writer,_file.read(),_mime,_name)    
  92                 else:
  93                     raise Exception("Invalid Mode specified")
  94 
  95         # finish off
  96         writer.lastpart()
  97 
  98         # send the mail
  99         smtp = smtplib.SMTP(__server)
 100 
 101         # Uncomment the line below if you need authentication
 102 
 103         if __login:
 104             smtp.login(__login,__passwd)
 105 
 106 
 107         smtp.sendmail(_from,_to, message.getvalue())
 108         #print message.read()
 109 
 110         smtp.quit()
 111         syslog(LOG_INFO,"Email Ok")
 112 
 113     except:
 114         syslog(LOG_INFO,str(format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])))

Exemplo de uso

   1 def main():
   2     # Alterar estes valores antes de instalar na Wagonlit!!!
   3     to = "deFulano@dominio.com.br"
   4     orig = "paraBeltrano@outroDominio.com.br"
   5     subject = "Teste de e-mail"
   6     filename = "f0001.ped"
   7 
   8     body = """
   9     Segue em anexo o arquivo %s com um pedido 
  10     criptografado. Por obséquio, salve o arquivo no diretório
  11     c:\gpr\pedidos (ou no diretório onde foi instalado o
  12     aplicativo de visualização distribuído pela GPr Sistemas) e
  13     dispare pedidos.py para visualizar seu conteúdo.
  14 
  15     Atenciosamente,
  16     GPr Sistemas Ltda
  17     """%(filename)
  18 
  19     attach = """
  20     Name:               Fulano de tal
  21     Endereço:           Rua da Amargura 1313
  22     Cartão de Crédito:  1243543412356
  23 
  24     etc etc etc
  25     """
  26 
  27     data1 = StringIO(body)
  28     data2 = StringIO(attach)
  29 
  30     sendmail(_subject = subject,
  31                      _from = orig,
  32                      _to = to,
  33                      _attachments = (('text',data1,'text/plain',None),
  34                                      ('attach',data2,'EncryptedContent.ENCRYPTED',filename)))
  35        
  36 if __name__=="__main__":
  37     main()

Volta para CookBook.


RodrigoSenra