Aller à la documentation
Python

Installation

Un seul paquet, trois dépendances, Python 3.10 et plus.

Installation

La version actuelle est 0.0.1. Elle a une méthode pour chaque méthode du SDK TypeScript, sous le même nom en snake_case, et le contrôle de parité du paquet fait échouer le build dès qu'il en manque une ou qu'une méthode envoie une requête différente.

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 configure une fois pour toutes le client openemail partagé, et tout module qui importe openemail ensuite obtient ce client. Sautez cette étape et le premier appel construira le client à partir d'OPENEMAIL_API_KEY.

Le corps d'une requête est un simple dict avec les noms de champs propres à l'API : from, replyTo et scheduledAt s'écrivent donc exactement comme dans la référence de l'API, et une réponse est aussi un dict. Chaque corps et chaque réponse a un TypedDict dans openemail.types : votre éditeur complète donc les clés, et un vérificateur de types repère une clé mal orthographiée.

Le retour de send() ne signifie pas que le message est parti. Un envoi planifié ou annulable revient en queued ou scheduled et se règle plus tard. Lisez status, pas le simple retour de l'appel.

Où il s'exécute

Python 3.10 et plus récent, avec trois dépendances : httpx pour HTTP, anyio pour le client asynchrone et typing-extensions pour les types. Chaque requête passe par httpx, et vous pouvez fournir votre propre httpx.Client, ou un httpx.AsyncClient pour AsyncOpenEmail.

OpenEmail convient aux scripts, aux workers et aux applications web synchrones, et AsyncOpenEmail à une boucle d'événements, sur asyncio ou trio. Les deux sont livrés dans ce seul paquet, avec les mêmes méthodes.

Un même client peut être partagé sans risque entre threads : un processus worker n'en a donc besoin que d'un seul. Il garde un seul pool de connexions, que ferme close() ou la fin d'un bloc with.

Le paquet livre py.typed et passe mypy et pyright en mode strict : un vérificateur de types lit donc chaque méthode, chaque corps et chaque réponse tels qu'ils sont écrits.

Le client porte une clé API d'espace de travail capable d'envoyer du courrier et de lire la boîte aux lettres : sa place est donc sur un serveur, dans un job ou dans un outil qui s'exécute sur votre propre machine. Gardez la clé dans une variable d'environnement ou un gestionnaire de secrets, jamais dans le code.