Enviando email com Raspberry Pi e Python

Enviando e-mail com Raspberry Pi na linguagem Python 2

Neste post iremos mostrar como é simples enviar e-mail através de uma Raspberry Pi utilizando a linguagem Python. Assim você poderá, por exemplo, desenvolver sistemas de segurança e enviar alertas ou dados de sensores automaticamente para seu e-mail. Montaremos um projeto bem simples usando apenas um Kit Raspberry Pi Advanced. No primeiro exemplo de código enviaremos um e-mail simples e nos outros dois exemplos enviaremos um e-mail mais elaborado com campo Assunto, informações de temperatura da CPU e até foto em anexo. Assim você saberá os conceitos básicos para enviar email com Raspberry Pi em Python. 

Tenha em mãos um cartão micro SD já com o Raspbian instalado. Baixe aqui a imagem e utilize o etcher.io para gravar no cartão SD. 

Exemplo 1: enviar email com Raspberry Pi em Python

O Python já vem com um módulo para envio de e-mail, então não é necessário instalar nenhum pacote. Usaremos como teste o Gmail, para isso é necessário permitir o login de apps menos seguros. Isso porque a autenticação do nosso programa Python irá usar apenas e-mail e senha. Para ativar essa permissão em sua conta acesse aqui https://myaccount.google.com/lesssecureapps.

Crie um arquivo texto chamado email.py com o seguinte conteúdo:

#!/usr/bin/python3
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login("jane.doe@gmail.com", "browncat")
msg = "Hello World!"
server.sendmail("jane.doe@gmail.com", "ethan.hunt@gmail.com", msg)
server.quit()

Onde jane.doe@gmail.com” é o e-mail de quem envia, “browncat” é a senha do e-mail de quem envia e ethan.hunt@gmail.com” é o e-mail de quem recebe. Troque esses campos pelos dados desejados.

Execute o programa com o comando abaixo:

python email.py

Exemplo 2: enviando e-mail com informação de temperatura da CPU

Com o programa abaixo podemos monitorar a temperatura da CPU da Raspberry Pi. Para isso o programa utiliza o módulo os e executa o comando shell vcgencmd measure_temp para fazer uma leitura da temperatura atual.

#!/usr/bin/python3
import smtplib
import os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

fromaddr = "jane.doe@gmail.com"
toaddr = "ethan.hunt@gmail.co"
passwd = "browncat"

msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Raspberry Pi CPU Temperature - Python email"

def getCPUtemperature():
   res = os.popen('vcgencmd measure_temp').readline()
   return(res.replace("temp=",""))

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, passwd)
print("getting temperature...")
body = "Raspberry Pi current temperature: " + getCPUtemperature()
print(body)
msg.attach(MIMEText(body, 'plain'))
print("sending mail...")
server.sendmail(fromaddr, toaddr, str(msg))
server.quit()
print("mail sent!")

Na sua caixa de entrada de e-mail deverá aparecer o seguinte:

Email com Python e informações de temperatura da Raspberry Pi

Exemplo 3: enviando e-mail com foto em anexo

Seguindo com um exemplo um pouco mais elaborado iremos enviar um e-mail contendo o Assunto e anexada uma foto tirada com a câmera da Raspberry Pi.

Para tirar uma foto com a câmera na linguagem Python, precisamos instalar o pacote picamera. Execute os seguintes comandos:

sudo apt-get install python-setuptools
sudo easy_install picamera

Então crie um programa Python com o seguinte conteúdo:

#!/usr/bin/python3
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders
from picamera import PiCamera

camera = PiCamera()

fromaddr = "jane.doe@gmail.com"
toaddr = "ethan.hunt@gmail.com"
passwd = "browncat"

msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Hello from Raspberry Pi - Python email"

body = "Hello World!"
print("taking picture...")
camera.capture('/home/pi/image.jpg')
print("image saved in /home/pi/image.jpg")
msg.attach(MIMEText(body, 'plain'))
filename = "image.jpg"
attachment = open("/home/pi/image.jpg", "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
msg.attach(part)

print("sending mail...")
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, passwd)
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
print("email sent!")

Caso o programa execute com sucesso você deverá ver o seguinte no terminal:

pi@raspberrypi:~ $ python send-picture-email.py
taking picture...
image saved in /home/pi/image.jpg
sending mail...
email sent!

Veja novamente sua caixa de e-mail

Enviar email com Raspberry Pi em Python e foto em anexo

Outro projeto que você pode tentar montar aí na sua casa e juntar os conceitos deste tutorial com os conceitos mostrados no tutorial abaixo sobre DHT11 e enviar email com Raspberry Pi em Python com as informações de temperatura do sensor DHT11. 

https://www.filipeflop.com/blog/temperatura-umidade-dht11-com-raspberry-pi/

Gostou de saber como enviar email com Raspberry Pi em Python? Ajude-nos a melhorar o blog comentando abaixo sobre este tutorial. Não se esqueça de visitar nosso Fórum para dúvidas e compartilhar suas ideias de projetos com a comunidade.

Este tutorial foi baseado no Blog de Nael Shiab.

Posts Relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

2 Comentários

  1. Ótima artigo! Como sugestão gostaria de um artigo que se comunicasse com o raspberry via Telegram. Tanto para acionar GPIO quanto para as GPIO forem acionadas devido a algum sensor. Seria legal ver as diferenças para o sistema Raspian e também o sistema mais “leve” que também é instalado no raspberry zero. Assim podemos automatizar residências com facilidade e “acessa” a residência em uma rede externa.

    1. Olá Chará! hehe

      Essa ideia é bem legal, vamos analisar a possibilidade de fazermos um post sobre isso.

      Enquanto isso você pode já ir dando uma olhada no post que temos sobre Bots Telegram com a Beaglebone Black: https://www.filipeflop.com/blog/bot-telegram-com-beaglebone-black/

      Dê uma olhada na API também. Creio que já dá pra ir desenvolvendo alguma coisa: https://github.com/python-telegram-bot/python-telegram-bot

      Abraço!