Resumo rápido: um script em Python que lê uma planilha com clientes, gera faturas em PDF, envia e-mails personalizados via Outlook e registra tudo num log. Ideal para reduzir tempo com cobranças e manter histórico para auditoria.
Por que isso ajuda sua empresa? 🤔
-
Evita retrabalho manual (copiar/colar e-mails).
-
Mantém linguagem padronizada e profissional.
-
Gera prova de envio (PDF + log).
-
Ajuda a acelerar recebimentos e reduzir inadimplência.
O que você precisa ter antes de rodar 🛠️
-
Windows com Microsoft Outlook instalado (automatização usa Outlook).
-
Python 3.8+ instalado.
-
Bibliotecas: pandas
, openpyxl
, pywin32
, fpdf
.
Instale com:
-
Uma planilha Excel (clientes.xlsx
) com estas colunas (exatas):
Cliente | Email | Valor | Vencimento | Pago
Exemplo:
Código completo (salve como assistente_cobranca.py
) 💻
Explicação linha por linha (linguagem simples) 🧾🔍
Vou explicar cada linha numerada acima. Se preferir, copie o código e acompanhe.
1 import os
2 import pandas as pd
3 import win32com.client as win32
4 from datetime import datetime
5 from fpdf import FPDF
6 import unicodedata
7 EXCEL_INPUT = "clientes.xlsx"
8 LOG_FILE = "log_cobrancas.xlsx"
9 PASTA_FATURAS = "faturas"
10 os.makedirs(PASTA_FATURAS, exist_ok=True)
11 def nome_arquivo_seguro(texto):
12 nf = unicodedata.normalize('NFKD', texto).encode('ASCII', 'ignore').decode()
13 nf = "".join(c for c in nf if c.isalnum() or c in (' ', '-', '_')).strip()
14 nf = nf.replace(" ", "_")
15 return nf.lower() + ".pdf"
16 def gerar_pdf(cliente, valor, vencimento, pasta=PASTA_FATURAS):
17 nome = nome_arquivo_seguro(f"fatura_{cliente}")
18 caminho = os.path.join(pasta, nome)
19 pdf = FPDF()
20 pdf.add_page()
21 pdf.set_font("Arial", size=12)
22 pdf.cell(0, 10, txt=f"Fatura - {cliente}", ln=1, align="C")
23 pdf.ln(5)
24 pdf.cell(0, 10, txt=f"Valor: R$ {valor:,.2f}", ln=1)
25 pdf.cell(0, 10, txt=f"Vencimento: {vencimento.strftime('%d/%m/%Y')}", ln=1)
26 pdf.output(caminho)
27 return caminho
28 def enviar_emails():
29 df = pd.read_excel(EXCEL_INPUT, engine="openpyxl")
30 outlook = win32.Dispatch("Outlook.Application")
31 enviados = []
32 for idx, row in df.iterrows():
33 cliente = str(row.get("Cliente", "")).strip()
34 email = str(row.get("Email", "")).strip()
35 valor = float(row.get("Valor", 0))
36 venc = pd.to_datetime(row.get("Vencimento"))
37 pago = str(row.get("Pago", "")).strip().lower()
38 dias_atraso = (datetime.now() - venc.to_pydatetime()).days
39 if not email or pago in ("sim", "s", "yes", "true"):
40 continue
41 if dias_atraso <= 0:
42 continue
43 if dias_atraso < 10:
44 mensagem = f"... (texto educado) ..."
45 elif dias_atraso < 30:
46 mensagem = f"... (texto intermediário) ..."
47 else:
48 mensagem = f"... (texto firme) ..."
49 fatura = gerar_pdf(cliente, valor, venc)
50 mail = outlook.CreateItem(0)
51 mail.To = email
52 mail.Subject = f"Cobrança - {cliente} - R$ {valor:,.2f}"
53 mail.Body = mensagem
54 mail.Attachments.Add(os.path.abspath(fatura))
55 mail.Send()
56 enviados.append({...})
57 print(f"E-mail enviado para {cliente} -> {email}")
58 except Exception as e:
/ print(f"Falha...")
59 if enviados:
60 df_log = pd.DataFrame(enviados)
61 if os.path.exists(LOG_FILE):
62 df_antigo = pd.read_excel(LOG_FILE, engine="openpyxl")
63 df_novo = pd.concat([df_antigo, df_log], ignore_index=True)
64 df_novo.to_excel(LOG_FILE, index=False)
65 else: df_log.to_excel(LOG_FILE, index=False)
66 if __name__ == "__main__":
67 enviar_emails()
Como usar — passo a passo simples ✅
-
Coloque assistente_cobranca.py
e clientes.xlsx
na mesma pasta.
-
Abra o terminal (Prompt) nessa pasta.
-
Instale dependências: pip install pandas openpyxl pywin32 fpdf
-
Rode: python assistente_cobranca.py
-
Observe no terminal as mensagens de sucesso/erro. Verifique a pasta faturas/
e o arquivo log_cobrancas.xlsx
.
Dicas importantes e boas práticas ⚠️
-
Teste primeiro com 1 ou 2 e-mails (coloque seu próprio e-mail) antes de rodar em toda base.
-
Outlook pode mostrar um alerta de segurança; algumas empresas bloqueiam automações — consulte o time de TI.
-
Não use para spam: envie apenas cobranças válidas e respeite regras de comunicação.
-
Mantenha backup da planilha original antes de rodar.
Variações e melhorias que você pode pedir depois 🔧
-
Enviar em lotes (por ex. 50 por vez).
-
Integração com SMTP (para quem não usa Outlook).
-
HTML no corpo do e-mail (assinatura com logo).
-
Interface simples em Tkinter para selecionar arquivo e rodar com 1 botão.
-
Agendamento diário (via Agendador de Tarefas do Windows).
Precisa de suporte contábil? 📞
Sou contador e ajudo profissionais e empresas com:
-
Abertura e registro de empresas no Simples Nacional;
-
Acompanhamento mensal da contabilidade;
-
Tributação e planejamento tributário.