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

Diferenças para "EnviarEmail"

Diferenças entre as versões de 2 e 5 (3 versões de distância)
Revisão 2e 2005-06-22 17:41:52
Tamanho: 4390
Editor: RodrigoSenra
Comentário:
Revisão 5e 2008-09-26 14:07:53
Tamanho: 4751
Editor: localhost
Comentário: converted to 1.6 markup
Deleções são marcadas assim. Adições são marcadas assim.
Linha 10: Linha 10:
#!python
Linha 40: Linha 41:
__server = '127.0.0.1' # alterar aqui com nome ou endereço servidor smtp # alterar aqui com nome ou endereço servidor smtp
__server = '127.0.0.1'
Linha 42: Linha 44:

# Atualmente nao esta havendo autenticacao, preencha se necessario
# Atualmente nao esta havendo autenticacao, preencha
#
se necessario
Linha 55: Linha 57:
def attachPlainFile(_writer, _file, _mimeType=None, _name="unknown"): def attachPlainFile(_writer, _file, _mimeType=None,
                   
_name="unknown"):
Linha 63: Linha 66:
def attachCryptFile(_writer, _file,_mimeType=None,_name="unknown"): def attachCryptFile(_writer, _file,_mimeType=None,
                    
_name="unknown"):
Linha 98: Linha 102:
                    attachPlainFile(writer,_file.read(),_mime,_name)                     attachPlainFile(writer,_file.read(),
                                    
_mime,_name)
Linha 100: Linha 105:
      attachCryptFile(writer,_file.read(),_mime,_name)       attachCryptFile(writer,_file.read(),
                                    
_mime,_name)
Linha 123: Linha 129:
        syslog(LOG_INFO,str(format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])))         syslog(LOG_INFO,
               
str(format_exception(sys.exc_info()[0],
                                    
sys.exc_info()[1],
                                    
sys.exc_info()[2])))
Linha 131: Linha 140:
#!python
Linha 142: Linha 152:
    aplicativo de visualização distribuído pela GPr Sistemas) e
    dispare pedidos.py para visualizar seu conteúdo.
    aplicativo de visualização distribuído pela GPr Sistemas)
    e dispare pedidos.py para visualizar seu conteúdo.
Linha 163: Linha 173:
                     _attachments = (('text',data1,'text/plain',None),
                                     ('attach',data2,'EncryptedContent.ENCRYPTED',filename)))
                     _attachments = (('text', data1,
                                      
'text/plain', None),
                                     ('attach',data2,
                                      
'EncryptedContent.\
ENCRYPTED',
                                      
filename)))

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 # alterar aqui com nome ou endereço servidor smtp
  32 __server = '127.0.0.1'  
  33 
  34 # Atualmente  nao esta havendo autenticacao, preencha 
  35 # se necessario
  36 __login = ""
  37 __passwd = ""
  38 
  39 
  40 def attachText(_writer, _text,_mime):
  41     part = _writer.nextpart()
  42     body = part.startbody(_mime)
  43     body.write(_text)
  44 
  45 
  46 
  47 def attachPlainFile(_writer, _file, _mimeType=None,
  48                     _name="unknown"):
  49     part = _writer.nextpart()
  50     part.addheader('Content-Transfer-Encoding','base64')
  51     body = part.startbody("%s; name=%s"%(_mimeType,_name))
  52     base64.encode(StringIO(_file),body)
  53 
  54     
  55 
  56 def attachCryptFile(_writer, _file,_mimeType=None,
  57                     _name="unknown"):
  58     part = _writer.nextpart()
  59     part.addheader('Content-Transfer-Encoding', 'base64')
  60     body = part.startbody('%s; name=%s'%(_mimeType,_name))
  61     obj = DES.new(" secret ",DES.MODE_ECB)
  62     pad = 8-(len(_file)%8)
  63     _file = _file+pad*" "
  64     crypt = obj.encrypt(_file)
  65     base64.encode(StringIO(crypt),body)
  66 
  67     
  68 
  69 
  70 
  71 def sendmail(_subject,_from,_to,_cc=None,_attachments=None):
  72     try:
  73         message = StringIO()
  74         writer = MimeWriter.MimeWriter(message)
  75         writer.addheader('MIME-Version', '1.0')
  76         writer.addheader('Subject', _subject)
  77         writer.addheader('To',_to)
  78 
  79         if _cc:
  80             writer.addheader('Cc',_cc)
  81 
  82         writer.startmultipartbody('mixed')
  83 
  84         
  85 
  86         # process attachments
  87         if _attachments:
  88             for _mode,_file,_mime,_name in _attachments:
  89                 if _mode=="text":
  90                     attachText(writer,_file.read(),_mime)
  91                 elif _mode=="attach":
  92                     attachPlainFile(writer,_file.read(),
  93                                     _mime,_name)
  94                 elif _mode=="crypt":
  95                     attachCryptFile(writer,_file.read(),
  96                                     _mime,_name)        
  97                 else:
  98                     raise Exception("Invalid Mode specified")
  99 
 100         # finish off
 101         writer.lastpart()
 102 
 103         # send the mail
 104         smtp = smtplib.SMTP(__server)
 105 
 106         # Uncomment the line below if you need authentication
 107 
 108         if __login:
 109             smtp.login(__login,__passwd)
 110 
 111 
 112         smtp.sendmail(_from,_to, message.getvalue())
 113         #print message.read()
 114 
 115         smtp.quit()
 116         syslog(LOG_INFO,"Email Ok")
 117 
 118     except:
 119         syslog(LOG_INFO,
 120                str(format_exception(sys.exc_info()[0],
 121                                     sys.exc_info()[1],
 122                                     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)
  13     e 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,
  34                                       'text/plain', None),
  35                                      ('attach',data2,
  36                                       'EncryptedContent.\
  37 ENCRYPTED',
  38                                       filename)))
  39        
  40 if __name__=="__main__":
  41     main()

Volta para CookBook.


RodrigoSenra