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
- MAIL_LANG: Defina esta constante com o código do idioma desejado para os envios (ex: "pt-BR", "en").
- TRANSLATIONS: Monte o dicionário com as mensagens e assuntos traduzidos.
- mailing.csv: Cadastre a lista de e-mails dos destinatários no formato CSV.
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"])