Enviar cartas bonitas es una parte importante de cualquier aplicación moderna. Ya sea un registro, una notificación o un boletín, un simple text/plain ya no evoca emociones. Pero los correos electrónicos en HTML son marketing de verdad 💥
En este artículo, analizaremos cómo crear y usar plantillas de correo electrónico con HTML y CSS dentro de un proyecto Python. ¡Es fácil y muy útil!

🔧 ¿Por qué se necesitan plantillas HTML para los correos electrónicos?
📌 Ordenar la estructura de la carta
🖼 Añadir estilos, botones, imágenes
👀 Haz que el correo electrónico sea visualmente atractivo
📱 Adaptar para dispositivos móviles
🛠️ ¿Qué vamos a utilizar?
smtplib— para enviar correos electrónicosemail.message.EmailMessage— para la formación de la cartaJinja2— para generar HTML con variablesHTML + встроенный CSS— para el diseño
📁 Estructura del proyecto
email_project/
├── main.py
├── templates/
│ └── welcome.html🧠 Paso 1: Plantilla HTML del correo (templates/welcome.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
body { font-family: Arial, sans-serif; background-color: #f9f9f9; padding: 20px; }
.container { background: white; padding: 30px; border-radius: 10px; max-width: 600px; margin: auto; }
h1 { color: #333; }
p { color: #555; }
.button { background-color: #007bff; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; }
</style>
</head>
<body>
<div class="container">
<h1>Привет, {{ name }}!</h1>
<p>Спасибо за регистрацию. Добро пожаловать в наш проект!</p>
<a href="{{ link }}" class="button">Подтвердить email</a>
</div>
</body>
</html>🧪 Paso 2: Generación de la carta en main.py
import smtplib
from email.message import EmailMessage
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('welcome.html')
html_content = template.render(name="Code", link="https://itcodik.com/confirm")
msg = EmailMessage()
msg['Subject'] = 'Welcome!'
msg['From'] = 'noreply@example.com'
msg['To'] = 'user@example.com'
msg.set_content("You have a new email")
msg.add_alternative(html_content, subtype='html')
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
smtp.login('your_email@gmail.com', 'your_password')
smtp.send_message(msg)Importante: nunca codifique la contraseña, use variables de entorno o .env
📌 Consejos para el diseño de cartas
Qué tener en cuenta | ¿Por qué es importante? |
|---|---|
✅ Estilos en línea | Los correos electrónicos cortan <style> |
✅ Estructura simple | Mejor <table> para la fiabilidad |
❌ No usar JS | No funciona en los correos electrónicos |
✅ Imágenes a través de URL | No adjuntar como archivos innecesarios |
✅ Probar en Gmail, Outlook | Diferentes motores de visualización |
📤 Ejemplos de uso
Registro: correo electrónico de confirmación
Recuperación de contraseña
Boletín de noticias
Notificación de pedido
Carta de apoyo
👀 ¿Cómo probar un correo electrónico?
Puedes guardar el archivo HTML localmente:
with open("preview.html", "w", encoding="utf-8") as f:
f.write(html_content)🧩 Dónde es útil
En proyectos Flask (
flask-mail)En Django (
EmailMultiAlternatives)En FastAPI a través de bibliotecas SMTP asíncronas
En bots de servidor, notificaciones, integraciones de CRM
🧠 Conclusión
¡Crear correos electrónicos HTML en Python es fácil! Lo principal es una plantilla, un poco de estilo y un envío ordenado.
Si quieres experimentar con los correos y la generación automática de correos electrónicos, en la aplicación Kodik encontrarás cursos paso a paso, plantillas y apoyo de la comunidad. Entra o escribe a nuestro chat de Telegram ✌️
💬 ¿Quieres una plantilla de correo electrónico con diseño adaptable o integración con Mailgun / SendGrid? ¡Escríbenos y lo haremos!
