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.
