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 Mega e uma Câmera. 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:
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
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.
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
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?
Olá Rodrigo!
Você deve alterar esta linha:
msg[‘Subject’] = “Hello from Raspberry Pi – Python email”
Abraços!
André – Equipe MakerHero
Olá
Em vez de mandar a temperatura do meu rasp gostava de mandar a temperatura do meu mac!
É possível?
Olá Bernardo! Creio que seja possível sim. Veja: https://robservatory.com/see-sensor-stats-in-terminal/
ótimo artigo, pode por favor fazer o exemplo de envio de e-mail com os dados do sensor dht11?
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!
Ó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.
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!