Перейти к документации
Python

Установка

Один пакет, три зависимости, Python 3.10 и новее.

Установка

Текущий релиз: 0.0.1. В нём есть метод для каждого метода TypeScript SDK, под тем же именем в snake_case, а проверка соответствия в пакете роняет сборку, когда какой-то метод пропадает или отправляет другой запрос.

pip install openemail
send_email.py
import os from openemail import init, openemail init(os.environ['OPENEMAIL_API_KEY']) email = openemail.emails.send({    'from': 'Acme Billing <[email protected]>',    'to': '[email protected]',    'subject': 'Your September invoice',    'html': '<p>Invoice attached.</p>',}) print(email['id'], email['status'])

init один раз настраивает общий клиент openemail, и каждый модуль, который после этого импортирует openemail, получает именно его. Если пропустить вызов, первый же запрос соберёт клиент из OPENEMAIL_API_KEY.

Тело запроса представляет собой обычный dict с собственными именами полей API, так что from, replyTo и scheduledAt пишутся ровно так же, как в справочнике API, а ответ тоже является dict. У каждого тела и ответа есть TypedDict в openemail.types, поэтому редактор дополняет ключи, а проверка типов ловит ключ с опечаткой.

То, что send() вернул управление, не означает, что письмо ушло. Запланированная или отменяемая отправка возвращается со статусом queued или scheduled и завершается позже. Читайте status, а не сам факт, что вызов вернулся.

Где он работает

Python 3.10 и новее, три зависимости: httpx для HTTP, anyio для асинхронного клиента и typing-extensions для типов. Каждый запрос идёт через httpx, и вы можете передать собственный httpx.Client или httpx.AsyncClient для AsyncOpenEmail.

OpenEmail подходит для скриптов, воркеров и синхронных веб-приложений, а AsyncOpenEmail для цикла событий на asyncio или trio. Оба поставляются в этом одном пакете с одинаковыми методами.

Один клиент можно безопасно использовать из нескольких потоков, так что рабочему процессу нужен только один. Он держит один пул соединений, который закрывает close() или конец блока with.

Пакет поставляется с py.typed и проходит mypy и pyright в строгом режиме, так что средство проверки типов видит каждый метод, тело и ответ ровно такими, как они написаны.

Клиент несёт API-ключ рабочего пространства, который может отправлять почту и читать почтовый ящик, поэтому его место на сервере, в фоновой задаче или в инструменте, который работает на вашей собственной машине. Храните ключ в переменной окружения или в менеджере секретов, но никогда в коде.