Как отправлять красивые письма в Python-проектах
Создаём email-шаблоны с HTML и CSS: инструкция, шаблон и код для отправки.
Отправка красивых писем — важная часть любого современного приложения. Будь то регистрация, уведомление или рассылка — простой text/plain
уже не вызывает эмоций. А вот HTML-письма — это уже настоящий маркетинг 💥
В этой статье разберём, как создавать и использовать email-шаблоны с HTML и CSS внутри Python-проекта. Это просто и очень полезно!

🔧 Зачем нужны HTML-шаблоны для писем?
📌 Упорядочить структуру письма
🖼 Добавить стили, кнопки, изображения
👀 Сделать письмо визуально привлекательным
📱 Адаптировать под мобильные устройства
🛠️ Что будем использовать?
smtplib
— для отправки писемemail.message.EmailMessage
— для формирования письмаJinja2
— для генерации HTML с переменнымиHTML + встроенный CSS
— для оформления
📁 Структура проекта
email_project/
├── main.py
├── templates/
│ └── welcome.html
🧠 Шаг 1: HTML-шаблон письма (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>
🧪 Шаг 2: Генерация письма в 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="Кодик", link="https://itcodik.com/confirm")
msg = EmailMessage()
msg['Subject'] = 'Добро пожаловать!'
msg['From'] = 'noreply@example.com'
msg['To'] = 'user@example.com'
msg.set_content("У вас новое письмо")
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)
Важно: никода не хардкодьте пароль — используйте переменные окружения или .env
📌 Советы по верстке писем
Что учитывать | Почему важно |
---|---|
✅ Инлайн-стили | Почтовики режут <style> |
✅ Простая структура | Лучше <table> для надёжности |
❌ Не использовать JS | Он не работает в письмах |
✅ Изображения через URL | Не прикладывать как файлы без нужды |
✅ Тестировать в Gmail, Outlook | Разные движки отображения |
📤 Примеры использования
Регистрация: письмо с подтверждением
Восстановление пароля
Новостная рассылка
Уведомление о заказе
Письмо поддержки
👀 Как протестировать письмо?
Можно сохранить HTML-файл локально:
with open("preview.html", "w", encoding="utf-8") as f:
f.write(html_content)
🧩 Где пригодится
Во Flask-проектах (
flask-mail
)В Django (
EmailMultiAlternatives
)В FastAPI через асинхронные SMTP-библиотеки
В серверных ботах, уведомлениях, CRM-интеграциях
🧠 Заключение
Создание HTML-писем в Python — это просто! Главное — шаблон, немного стилей и аккуратная отправка.
Если хочешь поэкспериментировать с рассылками и автогенерацией писем — в приложении Кодик ты найдёшь пошаговые курсы, шаблоны и поддержку сообщества. Заходи или пиши в наш телеграм-чат ✌️
💬 Хочешь шаблон письма с адаптивной версткой или интеграцией с Mailgun / SendGrid? Напиши — сделаем продолжение!