Como enviar mensagens de e-mail automatizadas em Python
Embora os clientes de email comercial ofereçam a conveniência de uma GUI amigável, eles geralmente não têm a flexibilidade e personalização que muitos desenvolvedores ou criadores de conteúdo desejam para suas necessidades de email.
Seja para enviar um e-mail de agradecimento a um novo assinante em seu canal de mídia social ou adicionar funcionalidade de e-mail ao seu projeto mais recente, a capacidade de enviar mensagens automatizadas usando SMTP em Python é algo que certamente será útil.
Continue lendo para descobrir como você pode fazer com que um script Python envie e-mails rodando em sua máquina hoje.
O que é SMTP?
Simplificando, SMTP, ou Simple Mail Transfer Protocol, é um protocolo de comunicação para servidores de correio para transmitir e-mail pela Internet.
É parte integrante da camada de aplicação do pacote TCP / IP, que é um conjunto de protocolos usados para comunicação pela Internet ou outras redes semelhantes. Em uma rede onde o SMTP é implementado, um processo conhecido como armazenar e encaminhar ajuda a mover o correio entre as redes.
Em cada terminal, o software conhecido como Mail Transfer Agent (MTA) usa armazenamento e encaminhamento para facilitar a comunicação entre os servidores SMTP participantes. A principal função do SMTP, portanto, é simplesmente ditar onde e como o e-mail se move de um ponto a outro em uma rede.
Começando
Você precisa ter uma conta de e-mail para enviar e-mails usando este programa. Isso ocorre porque usaremos o serviço SMTP do cliente de e-mail para enviar e-mails. Para este tutorial, usaremos o Gmail.
Você também pode usar um servidor de depuração SMTP local para enviar e-mails de teste, mas por enquanto usaremos uma conta de e-mail para enviar e-mails, pois é mais intuitivo.
É possível simplesmente usar uma conta existente do Gmail, mas à medida que você brinca com seu programa, ele pode logo ficar cheio de e-mails de teste. É por isso que recomendamos a criação de uma conta 'descartável' para fins de teste.
Agora, ative a opção para permitir que aplicativos menos seguros acessem sua conta do Gmail. Este é outro motivo para usar um e-mail descartável, pois não é recomendável brincar com as configurações de privacidade do seu e-mail principal.
Escrevendo o e-mail em Python
O Python 3 vem pré-instalado com um módulo chamado smtplib (abreviação de biblioteca smtp), que pode ser usado para trabalhar com servidores SMTP.
Como qualquer outro módulo Python, a primeira coisa que você precisa fazer é importar smtplib.
import smtplib
Inicializando um objeto SMTP
Agora, você pode usar smtplib para criar um objeto SMTP, que fornecerá a maioria das funcionalidades de um cliente de e-mail convencional. No entanto, as funções de um objeto SMTP só podem ser usadas por meio de métodos de instância. Então, naturalmente, o próximo passo é declarar uma instância do objeto.
mySMTP = smtplib.SMTP("smtp.google.com")
Isso configura o objeto SMTP para enviar e-mails usando o servidor SMTP do Google.
Depois disso, especificamos os e-mails do remetente e do destinatário. É aqui que a conta do Gmail que você criou anteriormente se torna útil.
emailSender = “[email protected]”
myThroaway = "[email protected]"
emailRecipients = [myThroaway]
Uma coisa a ser observada aqui é que a lista de destinatários é, na verdade, uma matriz, o que significa que foi projetada para armazenar valores não atômicos. Como resultado, você pode até especificar uma lista de e-mails inteira neste campo!
Escrevendo a Mensagem
Provavelmente a parte mais direta do processo, aqui você tem que inserir valores que normalmente adicionaria ao redigir um novo e-mail. Isso inclui:
- Detalhes do remetente
- Detalhes do destinatário
- Sujeito
- Corpo da mensagem
Esses campos são colocados entre aspas triplas e são demarcados da seguinte forma:
newEmail = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Email Test
This is the body of the email.
"""
Enviando o e-mail
Finalmente, podemos usar o comando sendmail para enviar o e-mail do seu servidor SMTP para o servidor do destinatário.
mySMTP.sendmail(emailSender, emailRecipients, newEmail)
Agora, há apenas uma etapa final: reorganizar o código para evitar travamentos previsíveis do programa.
Solução de problemas de seu programa de e-mail Python
Às vezes, o servidor SMTP pode falhar ao estabelecer uma conexão com o do destinatário ou pode haver um problema com o envio de um e-mail de uma porta SMTP para outra. Nesse caso, seu programa pode travar inesperadamente.
Para levar em conta essas possibilidades, você pode usar um bloco try-except e colocar as instruções sujeitas a erros dentro do bloco try . Todo o seu programa, junto com o bloco try-except, deve ser parecido com isto:
import smtplib
emailSender = “[email protected]”
myThroaway = '[email protected]'
emailRecipients = [myThroaway]
newEmail = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Email Test
This is the body of the email.
"""
try:
smtpObj = smtplib.SMTP('smtp.gmail.com')
mySMTP.sendmail(emailSender, emailRecipients, newEmail)
print (“Email sent successfully!”)
except SMTPException:
print ("Error: There was an error in sending your email.")
Protegendo seus e-mails
Se você pretende usar Python em uma configuração do mundo real para enviar e-mails, é importante certificar-se de que a comunicação seja segura em ambas as extremidades.
Usar um servidor SMTP simples com a porta padrão não fornece nenhuma camada de criptografia para a comunicação. Isso significa que, se qualquer terceiro estiver ouvindo em sua rede, ele poderá acessar suas credenciais de login e as informações contidas em seu e-mail.
Uma maneira de contornar esse problema é usar o protocolo TLS (Transport Layer Security) para criptografar sua comunicação. Este é o mesmo protocolo usado pelos principais clientes de e-mail, como Gmail e Outlook, para garantir que seus e-mails nunca caiam nas mãos erradas.
Para fazer isso, precisamos fazer algumas pequenas alterações no programa que criamos anteriormente.
A primeira etapa, é claro, é importar a biblioteca ssl junto com o smtplib . A biblioteca SSL oferece a capacidade de criar um contexto SSL seguro e se comunicar em uma rede criptografada conectando-se a portas específicas em ambas as extremidades.
Um contexto SSL seguro nada mais é do que uma coleção de cifras, versões de protocolo, certificados confiáveis, opções TLS e extensões TLS.
Em seguida, podemos especificar a porta TLS e adicionar algumas funções de biblioteca SSL para criar um emailer seguro.
O código, com todas as alterações feitas, é semelhante a este:
import smtplib, ssl
smtpServer = "smtp.gmail.com"
port = 587
myEmail = "[email protected]"
password = "my_password"
#email and password can also be user input fields
context = ssl.create_default_context()
newEmail = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Email Test
This is the body of the email.
"""
try:
server = smtplib.SMTP(smtpServer,port)
server.starttls(context=context)
server.login(newEmail, password)
except Exception as e:
print("the email could not be sent.")
finally:
server.quit()
Como antes, você deve criar e usar a instância SMTP em um bloco try-except para evitar travamentos abruptos do programa.
O que você pode fazer com este script Python
Agora que você adquiriu a habilidade incrível e surpreendentemente útil de automatizar e-mails usando código, pode aplicá-la a qualquer plataforma que requeira o envio de e-mails para uma lista de mala direta diversificada.
Desde usá-lo em seu site pessoal para enviar e-mails de confirmação automatizados até usá-lo para enviar cartões de Natal ou convites para sua família e amigos, os usos desse pequeno script Python são limitados apenas por sua própria criatividade.
Além disso, essa é apenas uma das muitas coisas incríveis que você pode fazer com Python. Com seu suporte onipresente ao desenvolvedor e sintaxe fácil de aprender, aprender uma habilidade em Python nunca foi tão fácil.
Para continuar construindo coisas legais com código, verifique nosso guia sobre como construir seu próprio bot do Telegram com Python 3 !