Instalación
Un paquete, tres dependencias, Python 3.10 o superior.
Instalación
La versión actual es 0.0.1. Tiene un método por cada método del SDK de TypeScript, con el mismo nombre en snake_case, y la comprobación de paridad del paquete hace fallar la compilación cuando falta alguno o cuando envía una solicitud distinta.
pip install openemailimport 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 configura una sola vez el cliente compartido openemail, y todos los módulos que importen openemail después reciben ese cliente. Si lo omites, la primera llamada construye el cliente a partir de OPENEMAIL_API_KEY.
El cuerpo de una solicitud es un dict simple con los nombres de campo propios de la API, así que from, replyTo y scheduledAt se escriben exactamente igual que en la referencia de la API, y una respuesta también es un dict. Cada cuerpo y cada respuesta tiene un TypedDict en openemail.types, así que tu editor completa las claves y un comprobador de tipos detecta una mal escrita.
Que send() termine no significa que el mensaje haya salido. Un envío programado o cancelable vuelve como queued o scheduled y se resuelve más tarde. Lee status, no el hecho de que la llamada haya terminado.
Dónde funciona
Python 3.10 o posterior, con tres dependencias: httpx para HTTP, anyio para el cliente asíncrono y typing-extensions para los tipos. Todas las solicitudes pasan por httpx, y puedes pasarle tu propio httpx.Client, o un httpx.AsyncClient para AsyncOpenEmail.
OpenEmail es adecuado para scripts, workers y apps web síncronas, y AsyncOpenEmail, para un bucle de eventos, con asyncio o trio. Ambos vienen en este mismo paquete con los mismos métodos.
Un mismo cliente se puede compartir entre hilos sin riesgo, así que un proceso worker solo necesita uno. Mantiene un único pool de conexiones, que se cierra con close() o al final de un bloque with.
El paquete incluye py.typed y supera mypy y pyright en modo estricto, así que un comprobador de tipos lee cada método, cuerpo y respuesta tal como están escritos.
El cliente lleva una clave de API del espacio de trabajo que puede enviar correo y leer el buzón, así que su sitio es un servidor, un trabajo en segundo plano o una herramienta que se ejecute en tu propia máquina. Guarda la clave en una variable de entorno o en un gestor de secretos, nunca en el código.