설치
패키지 하나, 의존성 세 개, Python 3.10 이상.
설치
현재 릴리스는 0.0.1입니다. TypeScript SDK의 모든 메서드에 대응하는 메서드가 같은 이름의 snake_case로 있으며, 하나라도 빠지거나 다른 요청을 보내면 패키지의 패리티 검사가 빌드를 실패시킵니다.
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은 공유 openemail 클라이언트를 한 번 구성하며, 그 뒤로 openemail을 import하는 모든 모듈이 그 클라이언트를 받습니다. 생략하면 첫 호출이 대신 OPENEMAIL_API_KEY로 클라이언트를 만듭니다.
요청 본문은 API 고유의 필드 이름을 쓰는 평범한 dict이므로 from, replyTo, scheduledAt은 API 레퍼런스에 적힌 그대로 쓰며, 응답도 dict입니다. 모든 본문과 응답에는 openemail.types에 TypedDict가 있으므로, 편집기가 키를 자동 완성하고 타입 검사기가 철자가 틀린 키를 잡아냅니다.
send()가 반환되었다고 해서 메시지가 나간 것은 아닙니다. 예약 발송이나 취소 가능한 발송은 queued 또는 scheduled로 돌아온 뒤 나중에 확정됩니다. 호출이 반환되었다는 사실이 아니라 status를 읽으십시오.
실행 환경
Python 3.10 이상에서 동작하며, 의존성은 세 개입니다. HTTP를 위한 httpx, 비동기 클라이언트를 위한 anyio, 타입을 위한 typing-extensions입니다. 모든 요청은 httpx를 거치며, 직접 만든 httpx.Client를 넘겨줄 수도 있고 AsyncOpenEmail에는 httpx.AsyncClient를 넘겨줄 수 있습니다.
OpenEmail은 스크립트, 워커, 동기식 웹 앱에 맞고, AsyncOpenEmail은 asyncio나 trio의 이벤트 루프에 맞습니다. 둘 다 같은 메서드를 갖추고 이 패키지 하나에 함께 들어 있습니다.
클라이언트 하나를 여러 스레드가 안전하게 공유할 수 있으므로, 워커 프로세스에는 하나만 있으면 됩니다. 클라이언트는 연결 풀 하나를 유지하며, close()를 호출하거나 with 블록이 끝나면 그 풀이 닫힙니다.
패키지에는 py.typed가 들어 있고 strict 모드의 mypy와 pyright를 통과하므로, 타입 검사기가 모든 메서드, 본문, 응답을 작성된 그대로 읽습니다.
클라이언트는 메일을 보내고 메일함을 읽을 수 있는 워크스페이스 API 키를 들고 있으므로, 서버나 작업, 또는 자신의 컴퓨터에서 실행되는 도구에 두어야 합니다. 키는 환경 변수나 시크릿 관리자에 보관하고, 절대 코드에 넣지 마십시오.