Saltar para a documentação
Python

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 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 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.