domingo, dezembro 02, 2007

Enviando e-mails com smtplib

O protocolo SMTP é utilizado para enviar e-emails. E Python possui um módulo embutido, o smtplib, que facilita o envio de e-mails utilizando esse protocolo, e é bem facil de usar:

>>> import smtplib
>>> server = smtplib.SMTP('gmail-smtp-in.l.google.com', 25)
>>> para = 'v2.igor@gmail.com'
>>> de = 'ninguem@nada.com'
>>> msg = '''
... From: ninguem@nada.com
... To: v2.igor@gmail.com
... Subject: Nao eh nada nao
... Aqui eh o corpo da mensagem
... '''
>>> server.sendmail(de, para, msg)
{}
>>> server.close()

A classe SMTP do módulo smtplib serve para se conectar com um servidor de e-mails, caso você tenha um servidor de email rodando localmente, basta usar "localhost". E 25 é a porta padrão do SMTP.

A mensagem de e-mail tem um formato padrão que está definido aqui. Mas os campos mais comuns são:

To: E-mail dos destinatários
Cc: E-mail das pessoas que devem receber uma cópia da menssagem
From: E-mail do criador da mensagem
Subject: Assunto da mensagem
Date: Data e hora em que a mensagem foi enviada

Como se pode perceber, o cabeçalho das mensagens fica no formato Chave: valor... O unico dado que não tem uma chave é o corpo da mensagem em si. A classe Message do módulo email ajuda a formatar essa mensagem:

>>> from email.Message import Message
>>> msg = Message()
>>> msg['Subject'] = 'Assunto do email'
>>> msg.set_payload('Aqui eh o corpo da mensagem')
>>> print msg
From nobody Sun Dec 2 16:29:56 2007
Subject: Assunto do email

Aqui eh o corpo da mensagem


Os valores do cabeçalho podem ser adicionados como na sintaxe de um dicionário do Python, e o método set_payload() serve para adicionar a mensagem.

Ah, e caso no exemplo acima o email não chegue na sua caixa de entrada do gmail, não se esqueça de verificar nos "Spams".

7 comentários:

Anônimo disse...

Muito boa a dica!
Só ficou faltando mostrar como enviar e-mails com anexos.. ou mesmo recebendo os dados a partir de outra fonte, pelo menos o conteúdo da mensagem (por exemplo, de um arquivo)
É importante pq aí dá pra fazer um script que envie como anexo ou no conteúdo da msg mesmo a saída de um script de backup, por exemplo..

Rick disse...

Na hora que executei o seu script ele falou que não pode importar a lib smtplib, então fui procurar para instalala mas não achei.
você tem alguma dica.
Obrigado

Nome: Igor Sobreira disse...

Opa Rick,
A smtplib é padrão. Talvez tenha um problema com a instalação do Python. A não ser que você esteja usando uma versão realmente antiga (tipo 1.5). No meu Ubuntu ela se está em:
/usr/lib/python2.5/smtplib.py

Rick disse...

Que estranho, porque estou usando o Ubuntu 7.10 e deu um exxo catastrofico de umas 30 linhas, mas a orimeira parte éra que não conseguia importar a LIB.

Vou estudar um pouco o assunto mais tarde.
Obrigado!

Rick disse...

é ERRO e não exxo desculpa.

Anônimo disse...

Tentei usar, mas quando uso o anexo recebo estes erros:

ANEXO = "Teste"
att = "C:\Pasta\" & (ANEXO) & ".pps"
k.AttachFile.Add = att

Unexpected Python Error: exceptions.TypeError: AttachFile() takes exactly 2 arguments (1 given)

Ou

ANEXO = "Teste"
att = "C:\Pasta\" & (ANEXO) & ".pps"
k.AttachFile = att
O objeto não aceita esta propriedade ou método

Existe alguma forma de mandar este anexo.
Meu email miltonmmjr@hotmail.com

Manutenção em Bancada disse...

poxa... no meu pc deu esse erro aqui...
SMTPDataError: (550, "5.7.1 [201.78.120.214] The IP you're using to send mail is not authorized to\n5.7.1 send email directly to our servers. Please use the SMTP relay at your\n5.7.1 service provider instead. Learn more at http://mail.google\n5.7.1 .com/support/bin/answer.py?answer=10336 9si1623413qyk.156")

como posso resolve-lo?
abracos!