Почта для людей.
py-postman берёт на себя всю рутину по настройке портов, MIME-заголовков и протоколов. Идеальный
инструмент для надёжных уведомлений, ботов на aiogram и сервисов на FastAPI
pip install py-postman-lib
Инициализация клиента
Класс Postman является точкой входа. Используйте встроенные пресеты
провайдеров (gmail, yandex, mail.ru, outlook) или передайте кастомные конфигурации вашего SMTP-сервера.
from py_postman import Postman
# Базовая инициализация (Zero-config)
mailer = Postman(
email="your_email@gmail.com",
password="your_app_password",
provider="gmail"
)
# Продвинутая инициализация
mailer_pro = Postman(
email="bot@mycompany.com",
password="super_secret",
custom_config={"host": "smtp.mycompany.com", "port": 465, "use_ssl": True},
test_mode=False, # Режим «Песочницы»
tg_token="12345:ABCDE", # Токен Telegram для доставки логов
tg_chat_id="987654321" # ID чата администратора
)
Отправка базового письма
Метод send()
позволяет отправлять письмо одному или нескольким адресатам, использовать копии (CC, BCC) и помечать
корреспонденцию как важную.
success = mailer.send(
to=["client1@mail.ru", "client2@gmail.com"],
subject="Срочный отчет 🚨",
text="Привет, это обычное текстовое сообщение.",
cc="manager@company.com", # Копия
bcc="crm@company.com", # Скрытая копия
reply_to="support@company.com",# Обратный адрес
priority="high" # Отметить письмо как важное
)
if success:
print("Успешно!")
Markdown, HTML и Шаблоны
Больше не нужно вручную прописывать сложную HTML-вёрстку. Транслируйте Markdown напрямую в письмо или применяйте встроенные дизайн-пресеты.
mailer.send(
to="dev@company.com",
subject="Релиз",
markdown="""
# Новый релиз! 🚀
Вот список изменений:
* Добавлен парсинг Markdown
* Улучшена маршрутизация
Код: `print('Hello World')`
"""
)
# Подстановка в красивый HTML
mailer.send(
to="new@mail.com",
subject="Добро пожаловать!",
# Доступно: 'welcome', 'reset_password'
builtin_template="welcome",
template_context={
"name": "Алексей",
"link": "https://site.com/start"
}
)
Файлы, Байты и Авто-ZIP
Флаг auto_zip=True позволяет автоматически сжимать массивные файлы в единый
архив перед отправкой. Это существенно экономит трафик и предотвращает отказ серверов из-за превышения
лимитов на размер вложений.
Best Practice: Используйте
attachments_bytes,
если вы генерируете PDF или Excel-отчеты «на лету» в оперативной памяти. Это позволит избежать
создания и удаления временных файлов на диске вашего сервера.
# Данные в оперативной памяти (например, сгенерированный PDF)
pdf_data = b"%PDF-1.4 ... (сырые байты) ..."
mailer.send(
to="boss@company.com",
subject="Квартальные отчеты",
# 1. Файлы с диска (будут сжаты в .zip)
attachments=["./huge_video.mp4", "./logs.txt"],
auto_zip=True,
# 2. Файлы из памяти (bytes)
attachments_bytes=[
{"name": "report.pdf", "data": pdf_data, "mime_type": "application/pdf"}
],
# 3. Встраивание изображений в тело письма (Inline images)
html='Посмотри на этот график: <img src="cid:my_chart">',
inline_images={"my_chart": "./sales_chart.png"}
)
Инвайты в Календарь
Библиотека автоматически формирует валидный .ics файл, корректно
обрабатывает спам-фильтры (генерируя уникальные UID) и выводит интерактивную кнопку «Добавить в
Календарь» в интерфейсе почтового клиента получателя.
mailer.send(
to="team@company.com",
subject="Еженедельный Синхрон 📅",
text="Жду всех на звонке.",
calendar_event={
"title": "Синхронизация команды",
"start": "20260224T100000Z", # Формат времени UTC (YYYYMMDDTHHMMSSZ)
"end": "20260224T110000Z",
"location": "Zoom / Google Meet"
}
)
Асинхронность и Сессии (Keep-Alive)
Используйте контекстный менеджер AsyncMailSession для поддержки постоянного
соединения (Keep-Alive). Это обеспечивает высокую пропускную способность при массовых рассылках,
исключая издержки на повторную авторизацию (handshake) при отправке каждого нового письма.
import asyncio
async def mass_mailing():
users = ["user1@mail.com", "user2@mail.com", "user3@mail.com"]
# Открываем единое соединение с SMTP-сервером
async with mailer.get_async_session() as session:
for user in users:
# Отправка без задержек на переподключение
await session.send_async(to=user, subject="Дайджест", text="Привет!")
asyncio.run(mass_mailing())
Песочница и Telegram Логгер
Укажите test_mode=True во время локальной разработки — письма будут
выводиться в консоль, а не уходить в сеть. Если передать параметры Telegram, внутренний логгер
перехватит критические ошибки SMTP и мгновенно доставит подробный traceback напрямую в ваш админ-чат.
Критическая ошибка отправки
Не удалось доставить письмо на
адрес user@company.com.
Гайды и Практические Примеры
1. Отлов критических ошибок в FastAPI
Автоматическая отправка логов администратору при падении эндпоинта 500-й ошибкой.
from fastapi import FastAPI, Request
from py_postman import Postman
import traceback
app = FastAPI()
mailer = Postman(email="bot@site.com", password="pass", provider="gmail")
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
error_trace = "".join(traceback.format_exception(type(exc), exc, exc.__traceback__))
# Отправляем письмо админу асинхронно
await mailer.send_async(
to="admin@site.com",
subject=f"🚨 Ошибка на {request.url.path}",
markdown=f"**Произошла ошибка 500:**\n\n```python\n{error_trace}\n```",
priority="high"
)
return {"message": "Internal Server Error"}
2. Ежедневный отчет с графиком (Встроенные картинки)
Генерация красивого письма с использованием Markdown и встраиванием локального изображения прямо в текст.
mailer.send(
to="ceo@company.com",
subject="📊 Отчет за 24 октября",
markdown="""
## Доброе утро!
За прошедшие сутки мы наблюдаем стабильный рост. Обратите внимание на график ниже:
**Ключевые метрики:**
* Регистрации: +150
* Доход: $4,500
""",
inline_images={"daily_chart": "assets/today_growth.png"}
)
История версий
v0.1.0
Current 24 Февраля, 2026- • Первый стабильный релиз библиотеки py-postman.
- • Поддержка синхронной и асинхронной отправки писем (включая сессии Keep-Alive).
- • Поддержка Markdown, встроенных HTML шаблонов (Jinja2) и удобная работа с вложениями (в т.ч. auto_zip и отправка байтов напрямую из ОЗУ).
- • Интегрирован логгер ошибок для Telegram Bot API.
- • Добавлен CLI-интерфейс для отправки писем прямо из консоли.