Instalar
Um pacote, três dependências, Python 3.10 ou superior.
Instalar
A versão atual é a 0.0.1. Tem um método para cada método do SDK de TypeScript, com o mesmo nome em snake_case, e a verificação de paridade do pacote falha o build quando algum fica de fora ou envia um pedido diferente.
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 uma vez o cliente openemail partilhado, e todos os módulos que importem openemail depois disso recebem esse cliente. Se o saltar, a primeira chamada constrói o cliente a partir de OPENEMAIL_API_KEY.
O corpo de um pedido é um dict simples com os nomes de campo da própria API, por isso from, replyTo e scheduledAt escrevem-se exatamente como na referência da API, e uma resposta também é um dict. Cada corpo e cada resposta tem um TypedDict em openemail.types, por isso o seu editor completa as chaves e um verificador de tipos deteta uma mal escrita.
O facto de send() ter terminado não significa que a mensagem tenha partido. Um envio agendado ou cancelável volta como queued ou scheduled e resolve-se mais tarde. Leia status, e não o facto de a chamada ter terminado.
Onde corre
Python 3.10 ou mais recente, com três dependências: httpx para HTTP, anyio para o cliente assíncrono e typing-extensions para os tipos. Todos os pedidos passam pelo httpx, e pode passar-lhe o seu próprio httpx.Client, ou um httpx.AsyncClient para AsyncOpenEmail.
OpenEmail adequa-se a scripts, workers e aplicações web síncronas, e AsyncOpenEmail a um ciclo de eventos, em asyncio ou trio. Ambos vêm neste mesmo pacote com os mesmos métodos.
É seguro partilhar um cliente entre threads, por isso um processo worker só precisa de um. Mantém um único pool de ligações, que close() ou o fim de um bloco with fecha.
O pacote inclui py.typed e passa no mypy e no pyright em modo estrito, por isso um verificador de tipos lê cada método, corpo e resposta tal como estão escritos.
O cliente transporta uma chave de API do espaço de trabalho que pode enviar correio e ler a caixa de correio, por isso o seu lugar é num servidor, numa tarefa ou numa ferramenta que corra na sua própria máquina. Guarde a chave numa variável de ambiente ou num gestor de segredos, nunca no código.