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 2
Revisão 1e 2005-06-22 17:38:53
Tamanho: 4536
Editor: RodrigoSenra
Comentário:
Revisão 2e 2005-06-22 17:41:52
Tamanho: 4390
Editor: RodrigoSenra
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 11: Linha 11:
Linha 13: Linha 12:
Linha 15: Linha 13:
Linha 17: Linha 14:
Linha 19: Linha 15:
Linha 21: Linha 16:
Linha 23: Linha 17:

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

from Crypto.Cipher import DES
from Crypto.Cipher import DES   # Opcional
Linha 52: Linha 32:
Linha 54: Linha 33:
Linha 60: Linha 38:
Linha 63: Linha 40:
__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 43:
# Atualmente nao esta havendo autenticacao

#
__login = ""

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

Linha 175: Linha 108:
Linha 177: Linha 109:

 
Linha 185: Linha 115:
 
Linha 188: Linha 117:
Linha 192: Linha 120:
Linha 196: Linha 123:
Linha 198: Linha 124:

         

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

#  ___ GPr Sistemas ____________________________________
#
#  Modulo: gpmail.py
#  Data de Criação:     2003-02-26
#  Data de Atualização: 2003-12-05
#
#  Desenvolvedores: João Chaves/Rod Senra
#  Interpretador:   Python 2.3.2  ou superior

import sys
import smtplib
import MimeWriter
import mimetypes
import base64
import StringIO
import getopt
import os.path
import sys
import urllib2
from StringIO import StringIO
from Crypto.Cipher import DES   # Opcional
from syslog import *
from traceback import format_exception


__version__ = '0.4'


# Configurações

__server = '127.0.0.1'  # alterar aqui com nome ou endereço servidor smtp


# Atualmente  nao esta havendo autenticacao, preencha se necessario
__login = ""
__passwd = ""


def attachText(_writer, _text,_mime):
    part = _writer.nextpart()
    body = part.startbody(_mime)
    body.write(_text)



def attachPlainFile(_writer, _file, _mimeType=None, _name="unknown"):
    part = _writer.nextpart()
    part.addheader('Content-Transfer-Encoding','base64')
    body = part.startbody("%s; name=%s"%(_mimeType,_name))
    base64.encode(StringIO(_file),body)

    

def attachCryptFile(_writer, _file,_mimeType=None,_name="unknown"):
    part = _writer.nextpart()
    part.addheader('Content-Transfer-Encoding', 'base64')
    body = part.startbody('%s; name=%s'%(_mimeType,_name))
    obj = DES.new(" secret ",DES.MODE_ECB)
    pad = 8-(len(_file)%8)
    _file = _file+pad*" "
    crypt = obj.encrypt(_file)
    base64.encode(StringIO(crypt),body)

    



def sendmail(_subject,_from,_to,_cc=None,_attachments=None):
    try:
        message = StringIO()
        writer = MimeWriter.MimeWriter(message)
        writer.addheader('MIME-Version', '1.0')
        writer.addheader('Subject', _subject)
        writer.addheader('To',_to)

        if _cc:
            writer.addheader('Cc',_cc)

        writer.startmultipartbody('mixed')

        

        # process attachments
        if _attachments:
            for _mode,_file,_mime,_name in _attachments:
                if _mode=="text":
                    attachText(writer,_file.read(),_mime)
                elif _mode=="attach":
                    attachPlainFile(writer,_file.read(),_mime,_name)
                elif _mode=="crypt":
                    attachCryptFile(writer,_file.read(),_mime,_name)    
                else:
                    raise Exception("Invalid Mode specified")

        # finish off
        writer.lastpart()

        # send the mail
        smtp = smtplib.SMTP(__server)

        # Uncomment the line below if you need authentication

        if __login:
            smtp.login(__login,__passwd)


        smtp.sendmail(_from,_to, message.getvalue())
        #print message.read()

        smtp.quit()
        syslog(LOG_INFO,"Email Ok")

    except:
        syslog(LOG_INFO,str(format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])))

Exemplo de uso

def main():
    # Alterar estes valores antes de instalar na Wagonlit!!!
    to = "deFulano@dominio.com.br"
    orig = "paraBeltrano@outroDominio.com.br"
    subject = "Teste de e-mail"
    filename = "f0001.ped"

    body = """
    Segue em anexo o arquivo %s com um pedido 
    criptografado. Por obséquio, salve o arquivo no diretório
    c:\gpr\pedidos (ou no diretório onde foi instalado o
    aplicativo de visualização distribuído pela GPr Sistemas) e
    dispare pedidos.py para visualizar seu conteúdo.

    Atenciosamente,
    GPr Sistemas Ltda
    """%(filename)

    attach = """
    Name:               Fulano de tal
    Endereço:           Rua da Amargura 1313
    Cartão de Crédito:  1243543412356

    etc etc etc
    """

    data1 = StringIO(body)
    data2 = StringIO(attach)

    sendmail(_subject = subject,
                     _from = orig,
                     _to = to,
                     _attachments = (('text',data1,'text/plain',None),
                                     ('attach',data2,'EncryptedContent.ENCRYPTED',filename)))
       
if __name__=="__main__":
    main()

Volta para CookBook.


RodrigoSenra