Do Tédio à Eficiência: Automatizando Tarefas Maçantes com Python

Tutorial de Automação de Envio de Relatórios por Email usando Python

Vanderson Amorim
comunidadeds
8 min readDec 13, 2023

--

Ninguém gosta de fazer tarefas repetitivas e manuais. Além de tomar parte do nosso tempo, essas tarefas não agregam valor para o nosso trabalho. Mas parece que sempre sobra pra gente fazer esse tipo de tarefa. Parece uma tortura pensar que precisamos fazer aquela tarefa chata de novo.

Então por que não automatizá-las? Deixe o computador fazer as tarefas chatas por você.

Neste artigo vou te explicar como fazer, na prática, uma automatização utilizando Python!

1. Contexto do Problema

Neste artigo: Guiando-se na Prática: Um Manual Hands-On para Análise de Dados com Python, mostrei a você como realizar a sua primeira análise de dados com Python.

Vamos continuar o nosso problema de negócio, onde você é um Analista de Dados em uma empresa de locação de veículos.

Agora, considere que seu chefe gostou muito das suas análises, e quer receber essas informações toda semana por e-mail. Como você faria isso?

O código que criamos fornece todas as informações, mas é necessário tirar print da tabela de top 10 veículos com maior quilometragem, copiar os valores de média de quilometragem da frota e da média de tempo parado, e tirar print dos 2 gráficos. É algo simples, mas tomaria alguns minutos do seu tempo.

Mas e se isso se tornar comum? E se todas as áreas da empresa começassem a pedir para você enviar o relatório no mesmo formato? Agora, alguns minutos viraram 30 minutos. Além de ser uma tarefa bem chata.

Portanto, pensando na eficiência e na escalabilidade, vamos melhorar o nosso código, realizando o envio do relatório por email de forma automática.

A empresa onde você trabalha utiliza o Gmail como provedor de email, e a Google tem uma política de segurança para utilização dos seus serviços por códigos de terceiros, como o nosso código. Então, precisamos fazer alguns procedimentos na sua conta para habilitarmos o envio.

2. Preparando o Ambiente

Para permitir o envio do email através do Python, você deve primeiro criar uma senha própria de acesso à nossa conta através do nosso código.

Primeiramente, acesse as configurações da sua conta Google: Google Account.

Vá na Aba de Segurança:

Na aba de como fazer login no Google, selecione a opção de Verificação em 2 Etapas:

No final da página, selecione Senhas de Aplicativos:

Na nova página, coloque o nome do aplicativo, como “Teste enviar email”, e clique em criar, onde você verá a senha do aplicativo.

IMPORTANTE: salve sua senha em um papel ou no bloco de notas!

Quando finalizado, suas senhas aparecerão na página:

Com nossa senha criada, vamos fazer o esboço de como ficará o e-mail que iremos enviar.

3. Esboço do E-mail

Como temos métricas, tabela e gráficos, podemos pesquisar formas de incorporar as métricas e a tabela no corpo do e-mail, e colocar os gráficos como imagem, em anexo. Dessa forma, teríamos um corpo do email da seguinte forma:

“Prezados(as),

Segue abaixo o relatório pedido.

Aqui está o top 10 veículos mais rodados:

(TABELA COM TOP 10)

A quilometragem média da frota foi de (MÉDIA DE KM) km.

O tempo médio parado da frota foi de (MÉDIA DE HORAS) horas por dia.

Segue em anexo os gráficos explicativos da distribuição de quilometragem e horas paradas.”

Com o ambiente preparado e com o esboço do e-mail construído, vamos criar o nosso código em python!

4. Confecção do Código

Para facilitar a criação completa do código, disponibilizei o código da análise dos dados neste link.

Primeiramente, vamos salvar os gráficos que iremos enviar em anexo no email.

4.1 Salvando os gráficos

O Plotly possui uma função para salvar os seus gráficos, onde inserimos apenas o nome do arquivo, juntamente com a sua extensão:

Rodando esse código, temos os nossos gráficos salvos no formato PNG.

Feito isso, precisamos definir quais bibliotecas iremos utilizar para enviar os e-mails.

4.2 Bibliotecas Necessárias

A própria linguagem Python já tem algumas bibliotecas built-in que podemos utilizar para enviar e-mails. Vamos utilizar as seguintes:

  • smtplib: ela é responsável por definir um protocolo SMTP (Simple Mail Transfer Protocol), que é responsável por enviar o e-mail através da internet. Nele, definimos qual o provedor de e-mail vamos usar, a porta, o usuário e a senha.
  • email.mime: ela é responsável por criar todo o corpo do e-mail e inserir os anexos. Nele, definimos como nossa mensagem está formatada, qual o caminho do anexo, o assunto do e-mail e quem vai enviar e receber o e-mail.

Como o smtplib é uma biblioteca simples, podemos importá-la da seguinte forma:

import smtplib

Por outro lado, a biblioteca email.mime é mais complexa, e vamos importar apenas as seguintes:

  • from email.mime.multipart import MIMEMultipart: utilizada para compor e-mails que contém mensagem e anexo. Ela é responsável por juntar todas as informações e converter para o formato de e-mail.
  • from email.mime.text import MIMEText: nela definimos qual o formato do corpo do e-mail.
  • from email.mime.application import MIMEApplication: utilizado para anexar arquivos binários, como imagens, PDF etc.

Comparando essas bibliotecas com a forma que enviamos e-mail através do Gmail, temos:

Dessa forma, nosso código final fica:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

Com as devidas bibliotecas importadas, vamos configurar o SMTP para conseguirmos enviar e-mail através do Gmail.

4.3 Configurando o SMTP

Para o Gmail, utilizamos o endereço “smtp.gmail.com’, através da porta 587. Essas informações estão disponíveis no suporte do Google. O usuário é o nosso e-mail e a senha é a mesma que definimos nas senhas de aplicativos.

Feito a configuração, podemos definir o destinatário e o corpo do e-mail.

4.4 Definindo Destinatário e Corpo do E-mail

Primeiramente, vamos definir o remetente, destinatário e o assunto do e-mail:

Nota: Para fins de teste, você pode usar o seu e-mail tanto para enviar quanto para receber o e-mail.

Em relação ao corpo do e-mail, vamos utilizar a linguagem HTML, que facilitará a inserção da tabela com os top 10 veículos com maior quilometragem. Para isso, vamos converter o tabela top10 para o formato HTML:

  • index = False: retira o número identificador de cada linha, melhorando o visual da tabela:
  • .replace('<td>','<td align = "center">'): utilizamos a linguagem HTML para centralizar os textos de cada linha.

Feito isso, vamos usar as tags HTML <p> para determinar cada parágrafo. Colocando entre chaves {} a tabela e as variáveis que contém a média de km e média de tempo parado da frota.

Com a mensagem feita e definido as variáveis de remetente, destinatário e assunto, utilizamos a biblioteca MIMEMultipart para criarmos um objeto em Python que converte essas variáveis no formato de e-mail:

Além disso, usamos a MIMEText para adicionar a nossa mensagem ao e-mail que estamos criando:

Por fim, precisamos adicionar ao nosso e-mail os gráficos, que devem ser enviados em anexo.

4.5 Adicionando o Anexo

Para adicionarmos os gráficos, primeiramente vamos criar 2 variáveis informando o caminho dos gráficos:

O ponto . indica que o gráfico está na mesma pasta que o código.

Abriremos as imagens no formato de leitura e utilizaremos a biblioteca MIMEApplication para converter as imagens para um formato referente a um anexo de e-mail:

  • open(grafico_km,'rb') as attachment: indica que estamos abrindo a imagem no formato binário (read binary).
  • part = MIMEApplication(attachment, read()): faz a leitura do arquivo para adicionar como anexo.
  • part.add_header('Content-Disposition', f'attachment; filename = {grafico_km}'): converte o arquivo para ser interpretado como o anexo em um e-mail.
  • message.attach(part): adiciona o anexo ao e-mail que estamos criando.

Com os gráficos anexados, nosso e-mail está finalizado. Agora, vamos efetuar o envio.

4.6 Enviando o E-mail

Para realizar o envio, devemos informar as variáveis que criamos, identificando qual provedor de e-mail estamos usando:

  • smtplib.SMTP(): informa os parâmetros do Gmail.
  • server.starttls(): adicionamos um protocolo de segurança TLS para enviarmos o email de forma segura.
  • server.login(): informa o login e senha.
  • server.sendmail(): informa o remetente, destinatário e a mensagem do e-mail.
  • server.quit(): fecha todas as conexões que foram abertas para enviar o e-mail.

Compilando o código, o relatório virá no seguinte formato:

Abrindo o e-mail, temos:

Dessa forma, algo que poderia levar alguns minutos agora pode ser feito apenas apertando um botão!

Esse é o poder de automatizarmos nossas tarefas.

5. Conclusão

Neste artigo você aprendeu como criar a sua primeira automação em Python, enviando e-mails de forma automática!

Espero que tenha te convencido dos benefícios de investirmos nosso tempo em criarmos um código de automação, invés de gastarmos nosso tempo com tarefas repetitivas.

Além de enviar e-mails, há outras possibilidades de automação como: coletar informações de sites (como preços de produtos), criar relatórios no formato do Word, editar imagens, fazer tratamento de arquivos etc.

Ficou com alguma dúvida ou tem alguma sugestão? Fique à vontade para deixar nos comentários ou entrar em contato comigo pelo meu LinkedIn: Vanderson Amorim | LinkedIn.

Referências e Links Úteis

Send email from a printer, scanner, or app — Google Workspace Admin Help

Sign in with app passwords — Google Account Help

Static image export in Python (plotly.com)

smtplib — SMTP protocol client — Python 3.12.1 documentation

email.mime: Creating email and MIME objects from scratch — Python 3.12.1 documentation

Binary file — Wikipedia

pandas.DataFrame.to_html — pandas 2.1.4 documentation (pydata.org)

html — How to set cell alignment in pandas dataframe.to_html() — Stack Overflow

--

--