$ python modulo_5.py

E-mails e arquivos

Enviar relatórios por e-mail, anexar arquivos e organizar pastas automaticamente. SMTP + pathlib + logging.

O que você vai aprender

1. Envio de e-mail simples

import smtplib
from email.message import EmailMessage
from pathlib import Path

def enviar_email(destino: str, assunto: str, corpo: str, anexo: Path | None = None):
    msg = EmailMessage()
    msg["From"] = "robot@irndevs.com"
    msg["To"] = destino
    msg["Subject"] = assunto
    msg.set_content(corpo)

    if anexo and anexo.exists():
        msg.add_attachment(
            anexo.read_bytes(),
            maintype="application",
            subtype="octet-stream",
            filename=anexo.name
        )

    with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
        smtp.login("seu@gmail.com", "app-password")  # use App Password
        smtp.send_message(msg)

enviar_email("cliente@empresa.com", "Relatório diário", "Segue o relatório.", Path("relatorio.xlsx"))
GMAIL Ative a verificação em 2 etapas e gere uma “Senha de app”. Nunca use a senha normal da conta.

2. HTML no corpo

msg.add_alternative("""
<html>
  <body style="font-family:sans-serif">
    <h2>Relatório IRN Devs</h2>
    <p>Total do dia: <strong>R$ 12.450</strong></p>
  </body>
</html>
""", subtype="html")

3. Organização de pastas (watchdog)

pip install watchdog
watcher.py
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from pathlib import Path
import time
import shutil

DESTINOS = {
    ".pdf": Path("docs"),
    ".xlsx": Path("planilhas"),
    ".csv": Path("planilhas"),
    ".jpg": Path("imagens"),
    ".png": Path("imagens"),
}

class Organizador(FileSystemEventHandler):
    def on_created(self, event):
        if event.is_directory:
            return
        arq = Path(event.src_path)
        time.sleep(0.5)  # espera gravar
        destino_dir = DESTINOS.get(arq.suffix.lower(), Path("outros"))
        destino_dir.mkdir(exist_ok=True)
        destino = destino_dir / arq.name
        shutil.move(str(arq), str(destino))
        print(f"Movido: {arq.name} → {destino}")

observer = Observer()
observer.schedule(Organizador(), path="downloads", recursive=False)
observer.start()
print("Monitorando pasta downloads...")
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
observer.join()
EXERCÍCIO 1. Envie um e-mail com anexo Excel gerado no módulo 4.
2. Crie um watcher que move arquivos e envia notificação por e-mail quando chega um PDF.
3. Adicione logging em arquivo com nível INFO e ERROR.

Sumário do curso

Precisa de algo assim, sob medida pro seu negócio?

agendar diagnóstico gratuito →