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.