Python Send Mail & Translate

Abaixo você encontra os procedimentos para configuração e o código-fonte em Python desenvolvido para enviar e-mails personalizados e traduzidos automaticamente para múltiplos idiomas.


Procedimento Operacional Padrão (POP)

1. Criar o ambiente virtual (venv) no Windows

Ainda não criou o seu ambiente localhost? Veja no link abaixo como fazer.


2. Instalar as bibliotecas Python

Nota: As bibliotecas smtplib, ssl e csv já fazem parte da Standard Library (biblioteca padrão) do Python e não precisam ser instaladas via pip.

3. Como configurar o script


Código-Fonte

# REQUEST LIB PYTHON
import smtplib
import ssl
import csv
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formatdate, make_msgid

# VARS CONFIG SERVER MAIL
DOMAIN_SITE = "example.com"
SMTP_HOST = "mail.example.com"
SMTP_PORT = 465
SMTP_SECURE = True  # Ignorado aqui, pois usamos SSL direto na porta 465
SMTP_USERNAME = "contact@example.com"
SMTP_PASSWORD = "EXAMPLE_PASS"
SMTP_FROM_EMAIL = "contact@example.com"
SMTP_FROM_NAME = "CRUD-BMVC" 

# LANGS: en, it, pt-br 
MAIL_LANG = "pt-br"

# DICIONÁRIO DE TRADUÇÕES (SUBJECT, BODY E LOGS) 
TRANSLATIONS = {
    "en": {
        "subject": "Hello, {name}!",
        "body": "Hello {name},\n\nThis is a personalized message.\n\nBest regards,\n{from_name}\n{from_email}",
        "log_send_msg": "Message sent to",
        "log_send_all_message": "All emails sent successfully!",
    },
    "it": {
        "subject": "Ciao, {name}!",
        "body": "Ciao {name},\n\nQuesto è un messaggio personalizzato.\n\nCordiali saluti,\n{from_name}\n{from_email}",
        "log_send_msg": "Messaggio inviato a",
        "log_send_all_message": "Tutte le email sono state inviate correttamente!",
    },
    "pt-br": {
        "subject": "Olá, {name}!",
        "body": "Olá {name},\n\nEsta é uma mensagem personalizada.\n\nAtenciosamente,\n{from_name}\n{from_email}",
        "log_send_msg": "Mensagem enviada para",
        "log_send_all_message": "Todos os e-mails foram enviados com sucesso!",
    },
}

# Seleciona o idioma configurado (com fallback para 'en' caso o idioma informado seja inválido)
lang_data = TRANSLATIONS.get(MAIL_LANG.lower(), TRANSLATIONS["en"])

FILE_MAILING_CSV = "mailing.csv"

# Criar contexto SSL
context = ssl.create_default_context()

# Conectar com SSL direto (porta 465)
server = smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT, context=context)
server.login(SMTP_USERNAME, SMTP_PASSWORD)

# Ler CSV e enviar
with open(FILE_MAILING_CSV, newline="", encoding="utf-8") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        to_name = row["name"]
        to_email = row["email"]

        # Formata o assunto e o corpo para o destinatário atual
        subject_content = lang_data["subject"].format(name=to_name)
        body_content = lang_data["body"].format(
            name=to_name, from_name=SMTP_FROM_NAME, from_email=SMTP_FROM_EMAIL
        )

        msg = MIMEMultipart()
        msg["From"] = f"{SMTP_FROM_NAME} <{SMTP_FROM_EMAIL}>"
        msg["To"] = to_email
        msg["Subject"] = subject_content
        msg["Date"] = formatdate()  # Anti-spam: data atual
        msg["Message-ID"] = make_msgid(domain=DOMAIN_SITE)  # Anti-spam: ID único

        msg.attach(MIMEText(body_content, "plain", "utf-8"))

        server.sendmail(SMTP_FROM_EMAIL, to_email, msg.as_string())

        # Print do log individual traduzido
        print(f"{lang_data['log_send_msg']} {to_name} ({to_email}) [{MAIL_LANG}]")

server.quit()

print(lang_data["log_send_all_message"])