Enviando email com Raspberry Pi e Python

Enviando e-mail com Raspberry Pi na linguagem Python 9

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("[email protected]", "browncat")
msg = "Hello World!"
server.sendmail("[email protected]", "[email protected]", msg)
server.quit()

Onde [email protected] é o e-mail de quem envia, “browncat” é a senha do e-mail de quem envia e [email protected] é 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 = "[email protected]"
toaddr = "[email protected]"
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 = "[email protected]"
toaddr = "[email protected]"
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.makerhero.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.

Este tutorial foi baseado no Blog de Nael Shiab.

Faça seu comentário

Acesse sua conta e participe

9 Comentários

  1. Olá
    Por acaso sabe se dá para usar este módulo com caracteres não ascii ( como acentos por exemplo). Sou de portugal e tenho uma implementação parecida, já tentei algumas coisas mas não obtive sucesso

  2. Olá Giovanni, muito bom e útil seu artigo, porém não estou conseguindo colocar titulo no e-mail disparado. Poderia me ajudar com essa dúvida?

    1. Olá Rodrigo!

      Você deve alterar esta linha:

      msg[‘Subject’] = “Hello from Raspberry Pi – Python email”

      Abraços!

      André – Equipe MakerHero

  3. Olá
    Em vez de mandar a temperatura do meu rasp gostava de mandar a temperatura do meu mac!
    É possível?

    1. Olá Bernardo! Creio que seja possível sim. Veja: https://robservatory.com/see-sensor-stats-in-terminal/

  4. ótimo artigo, pode por favor fazer o exemplo de envio de e-mail com os dados do sensor dht11?

    1. Olá Edson!

      Dê uma olhada nos nossos outros posts sobre Raspberry Pi especialmente neste:
      https://www.makerhero.com/blog/temperatura-umidade-dht11-com-raspberry-pi/

      Juntando os dois conceitos você consegue chegar no seu objetivo.

      Bons projetos!

  5. Ó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.makerhero.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!