API
배치 발송
한 번에 최대 100건.
POSTapi.openemail.uk/emails/batch
본인 키로 워크스페이스에 실제 호출을 실행합니다.
전부 아니면 전무가 아니라, 항목별로
각 메시지는 개별적으로 수락되거나 거부되며, 응답은 둘 다 보고합니다. 잘못된 주소 하나 때문에 전체가 롤백된다면, 재시도할 때 어떤 메시지가 이미 나갔는지를 따져야 하는데, 그건 애초에 배치를 쓰면서 피하려던 추적 작업입니다.
배치 발송
본문은 배열이거나 { "emails": [...] }입니다. 각 메시지는 단건 발송과 동일한 필드를 받습니다.
curl -X POST "$OE/emails/batch" -H "$AUTH" -H "Content-Type: application/json" \ -d '{ "emails": [ { "from": "[email protected]", "to": ["[email protected]"], "subject": "Invoice", "html": "<p>1</p>" }, { "from": "[email protected]", "to": ["[email protected]"], "subject": "Invoice", "html": "<p>2</p>" }, { "from": "[email protected]", "to": ["broken@"], "subject": "Invoice", "html": "<p>3</p>" } ] }'HTTP/1.1 207 Multi-Status { "object": "list", "sent": 1, "failed": 2, "data": [ { "index": 0, "status": "ok", "email": { "id": "msg_e7e468…", "status": "sent" } }, { "index": 1, "status": "error", "error": { "type": "permission_error", "code": "from_address_forbidden", "param": "from" } }, { "index": 2, "status": "error", "error": { "type": "validation_error", "code": "invalid_email_address", "param": "to.0" } } ]}200이 아니라 207입니다. 일부는 성공했다는 뜻입니다. 상태 코드로 분기하지 말고 항목별 data[].status를 읽으세요.
배치에 붙인 Idempotency-Key는 내부적으로 항목별로 확장되므로, 100개 메시지에 키 하나를 써도 전부 첫 번째 하나로 뭉뚱그려지지 않습니다.