python + gmail

Neste artigo vou mostrar como usar o módulo smtplib do python para mandar emails usando sua conta do gmail. Primeiro mostrarei o básico e depois uma utilidade prática para isso.

O básico

Para enviar uma mensagem, precisamos primeiro criá-la. Uma mensagem de acordo com os padrões do SMTP é assim:

From: seu.email@provedor.com
To: fulano@provedor.com, sicrano@provedor.com
Subject: Assunto

Corpo da mensagem.

Se necessário, pode-se colocar um campo Cc ou Bcc entre To e Subject.

Depois, precisamos contatar o servidor, estabelecer uma conexão encriptada com TLS, contatar novamente o servidor, fazer o login, enviar a mensagem e fechar a conexão.

Em código, teremos o seguinte:

#!/usr/bin/env python
import smtplib

eu = "seu.email@gmail.com"

# Se for um endereco so, o split() nao eh necessario
eles = "contato1@provedor.com, contato2@provedor.com".split()

assunto = "Teste"

# Aqui comeca a mensagem em si. O numero e a posicao de '\n's eh importante.
# Novamente, se for so um email, nao eh necessario usar "join"
msg = "From: %s\nTo: %s\nSubject: %s\n\n" % (eu, ", ".join(eles), assunto)

# Agora adicionamos o corpo da mensagem
msg += "Esta e uma mensagem curta para teste."

# Agora que temos a mensagem pronta, vamos ao servidor:
server = smtplib.SMTP('smtp.gmail.com')
server.ehlo() # inicia conversacao
server.starttls() # inicia tls
server.ehlo() # reinicia conversacao
server.login(eu, "minhasenhaultrahipersecreta") # login...
server.sendmail(eu, eles, msg) # manda mensagem

# Em alguns casos, pode haver uma excecao aqui, entao...
try:
	server.quit()
except:
	pass

Exemplo 1: Avisar término de um processo demorado

Se você possuir dois computadores, você pode deixar um deles compilando um programa demorado (o kernel, por exemplo) enquanto usa o outro. Após o término da compilação (ou a falha da mesma), o script em python se encarrega de avisá-lo com um email.

Do terminal, vai chamar o programa assim:

$ (make && send_mail.py success) || send_mail.py fail

Sendo que send_mail.py no caso se parece com o código abaixo. Só não se esqueça de torná-lo executável e de deixá-lo no seu $PATH.

#!/usr/bin/env python
import smtplib
import sys

eu = "seu.email.gmail"

if sys.argv[1] == "success":
	assunto = "compilacao concluida com sucesso"
	texto   = "preciso dizer mais alguma coisa?"

elif sys.argv[1] == "fail":
	assunto = "nao foi dessa vez"
	texto   = "mas continue tentando..."

else:
	exit()

msg = "From: %s\nTo: %s\nSubject: %s\n\n" % (eu, eu, assunto)  
  
# Agora adicionamos o corpo da mensagem  
msg += texto  
  
# Agora que temos a mensagem pronta, vamos ao servidor:  
server = smtplib.SMTP('smtp.gmail.com')  
server.ehlo() # inicia conversacao  
server.starttls() # inicia tls  
server.ehlo() # reinicia conversacao  
server.login(eu, "minhasenhaultrahipersecreta") # login...  
server.sendmail(eu, eu, msg) # manda mensagem  
  
# Em alguns casos, pode haver uma excecao aqui, entao...  
try:  
    server.quit()  
except:  
    pass

Addendum

Esses scripts são bastante simples. Use a criatividade para alterá-los conforme a sua necessidade.

Referência:
smtplib por Sam Howard

Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: