Um dos principais interesses das linguagens de programação, tais como Python, é automatizar tarefas como o envio de correio. Neste tutorial veremos como escrever um programa Python para enviar um e-mail a partir de uma conta Gmail.
Este tutorial pode ser aplicado a qualquer computador, incluindo um Raspberry Pi.
Para enviar e-mails do microcontrolador compatível com Arduino. Pode ler este tutorial.
Material
- Computador ou Raspberry Pi
- Conta Gmail
Como funciona
Para enviar um correio com Python, utilizaremos o SMTP (Simple Mail Transfer Protocol), pelo que utilizaremos um servidor que gere o envio de correio. Tal como o servidor smtp do Gmail. Para utilizar este servidor, é necessária uma conta Gmail (criação gratuita) e é necessário activar a validação em duas etapas.
Configuração de conta Gmail
Na página de gestão de contas, vá para o separador ‘Segurança’, depois procure a caixa ‘Iniciar sessão no Google’.
Adicionar validação em duas etapas.
Gerar uma palavra-chave de acesso à conta para uma determinada aplicação
Tudo o que tem de fazer é copiar o ID do utilizador (o endereço Gmail) e a palavra-passe emitida pelo Google (inserção amarela acima) para o código Python abaixo.
Esta função é deliberadamente simplificada para mostrar o envio de correio, mas é possível modificá-la para enviar diferentes assuntos, corpo de mensagens e informações.
Código
Para gerir o protocolo STMP, utilizaremos a biblioteca stmplib que pode instalar com o comando
pip install smtplib
Para uma reutilização mais fácil do código, criámos a EmailSenderClass para facilitar o envio de correio. Não se esqueça de substituir o endereço do destinatário “destinataire@email.com” pelo seu próprio na parte inferior do guião no
email.sendHtmlEmailTo("Admin","destinataire@email.com","Ceci est un mail automatique envoyé à partir d'un script Python.")
#!/usr/bin/env python # -*- coding: utf-8 -*- #Libraries import sys import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders from email.header import Header from email.utils import formataddr EMAIL_HTML_TEMPLATE="""<html> <head> </head> <body> <p style ="margin: 5px 0;line-height: 25px;">Bonjour {},<br> <br> Ceci est un mail au format html. <br> {} <br> Bien à vous,<br> {} <br> </p> </body> </html> """ class EmailSenderClass: def __init__(self): """ """ self.logaddr = "<gmail address>" self.fromaddr = "contact@domaine.com"# alias self.password = "<gmail app password"# def sendMessageViaServer(self,toaddr,msg): # Send the message via local SMTP server. server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(self.logaddr, self.password) text = msg.as_string() server.sendmail(self.fromaddr, toaddr, text) server.quit() def sendHtmlEmailTo(self,destName,destinationAddress,msgBody): #Message setup msg = MIMEMultipart() msg['From'] = "Me<"+self.fromaddr+">" msg['To'] = destinationAddress msg['Subject'] = "Hello mail" hostname=sys.platform txt = EMAIL_HTML_TEMPLATE txt=txt.format(destName,msgBody,hostname) #Add text to message msg.attach(MIMEText(txt, 'html')) print("Send email from {} to {}".format(self.fromaddr,destinationAddress)) self.sendMessageViaServer(destinationAddress,msg) if __name__ == "__main__": email= EmailSenderClass() email.sendHtmlEmailTo("Admin","destinataire@email.com","Ceci est un mail automatique envoyé à partir d'un script Python.")
Resultado
Depois de executar o guião, deverá receber o e-mail descrito no programa na sua caixa de entrada.