メール
emailカテゴリの7個のAPI操作を扱います。
| メソッド | パス | 説明 |
|---|---|---|
| POST | /v1/hooks/ses | SESのバウンス・苦情・配信のWebhook(SNSから呼び出されます、docs/email.md §6.2) |
| GET | /v1/orgs/{orgSlug}/projects/{projectName}/email | メールステータス(runlot email) |
| POST | /v1/orgs/{orgSlug}/projects/{projectName}/email | メールをオンにします(デプロイが "email": true を読み取った後に呼び出します) |
| DELETE | /v1/orgs/{orgSlug}/projects/{projectName}/email | メールをオフにします(runlot email delete) |
| GET | /v1/orgs/{orgSlug}/projects/{projectName}/email/log | メールログ(runlot email log) |
| GET | /v1/orgs/{orgSlug}/projects/{projectName}/email/log/{mailId} | 1通のメールのメタデータ |
| GET | /v1/orgs/{orgSlug}/projects/{projectName}/email/log/{mailId}/raw | メールの生メッセージ(message/rfc822) |
POST /v1/hooks/ses
これはユーザーが呼び出すパスではありません。Amazon SNSがHTTPSサブスクリプション経由でSESイベントをここに配信します。認証はトークンではなくSNS署名によって行われます。証明書URLが sns.<region>.amazonaws.com 上のhttpsであり、トピックがサーバーの RUNLOT_SES_SNS_TOPIC_ARN と一致する場合にのみリクエストを受け付けます(それ以外は403)。SubscriptionConfirmation は SubscribeURL へGETを送信することで自動的に完了します。サーバーにトピックARNがない場合は501を返します。クライアントライブラリはこれを呼び出しません。
operationId sesHook
リクエストボディ: text/plain ・ string
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 受信済み(不明なイベントタイプや不明な id も 200 を返します) | — |
| 400 | — | — |
| 403 | SNS の署名が一致しません | — |
| 501 | webhook がオフです | — |
GET /v1/orgs/{orgSlug}/projects/{projectName}/email
付与されているかどうか、アドレス、送信者、時間あたりの上限、直近の送受信数(docs/email.md §5)。付与されていなくても address と from には値が入ります。これは「オンにするとアドレスはこうなります」という材料です。実際の状態は granted が示します。
viewer以上です。
operationId getEmail
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | メールステータス | EmailStatus |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core | Error |
POST /v1/orgs/{orgSlug}/projects/{projectName}/email
冪等です。 リクエストボディはありません。アドレスは(<project>.<org>.<mail-domain>)として決定され、上限はプランによって決まります。アドレスは付与時点の名前に固定されます。
有効化すると、ノードは次回の収束時に env.email を接続し、そのアドレス宛のメールはworkerの email() に届きます。送信と受信は同時にオンになります。1つのドメインが両方向の名前になります。
メンバー以上が必要です。email.grant として監査されます。
operationId grantEmail
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 付与ステータス(既に存在していた場合は既存の値) | EmailStatus |
| 403 | — | — |
| 404 | — | — |
| 409 | email_unavailable — このデプロイにはメールドメインがありません。email_address_taken — 別のプロジェクトがすでに同じアドレスを保持しています | Error |
| 503 | no_core | Error |
DELETE /v1/orgs/{orgSlug}/projects/{projectName}/email
そのアドレス宛のメールは550を受け取るようになります。送信元のMTAはバウンスを受け取り、再試行しません。これは冪等です。
管理者以上が必要です。監査イベントは email.revoke です。
operationId revokeEmail
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 204 | オフになりました | — |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core | Error |
GET /v1/orgs/{orgSlug}/projects/{projectName}/email/log
送受信したメッセージごとに1行、時系列の逆順で表示されます(docs/email.md §6.1)。エンベロープ・結果・サイズ・SPF結果が含まれます。生メッセージは …/log/{mailId}/raw にあります。
保持期間はプランの現在値です。Freeでは30日、Proでは365日です(keepDays)。
viewer 以上が必要です。
operationId listMailLog
| パラメーター | 場所 | 必須 | 型 | 説明 |
|---|---|---|---|---|
direction | query | 不可 | string | 空の場合は両方 |
cursor | query | 不可 | string | 前のページの cursor |
limit | query | 不可 | integer | — |
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 1ページ | MailLogPage |
| 403 | — | — |
| 404 | — | — |
GET /v1/orgs/{orgSlug}/projects/{projectName}/email/log/{mailId}
プロジェクト外のidは404を返します。idによって他のプロジェクトのログを探ることはできません。viewer以上です。
operationId getMailLog
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 1通のメール | MailLogEntry |
| 403 | — | — |
| 404 | — | — |
GET /v1/orgs/{orgSlug}/projects/{projectName}/email/log/{mailId}/raw
ヘッダーを含む生メッセージをそのまま返します。受信メールの場合、追加した Received および Authentication-Results ヘッダーが含まれます。送信メールの場合は、リレーに渡された内容から組み立てられます。.eml としてダウンロードされます。生メッセージがない行(hasRaw: false)は404を返します。viewer以上です。
operationId getMailLogRaw
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 元のテキスト | string |
| 403 | — | — |
| 404 | — | — |