メール
email カテゴリの API 操作を11件カバーします。
| メソッド | パス | 説明 |
|---|---|---|
| POST | /v1/hooks/ses | SESのバウンス・苦情・配信のWebhook |
| GET | /v1/orgs/{orgSlug}/projects/{projectName}/email | メールステータス(runlot email) |
| POST | /v1/orgs/{orgSlug}/projects/{projectName}/email | オフにしたメールを再びオンにします |
| DELETE | /v1/orgs/{orgSlug}/projects/{projectName}/email | メールをオフにします(runlot email delete) |
| GET | /v1/orgs/{orgSlug}/projects/{projectName}/email/domains | カスタム送信ドメイン(runlot email domain list) |
| POST | /v1/orgs/{orgSlug}/projects/{projectName}/email/domains | カスタム送信ドメインを追加します(runlot email domain add) |
| POST | /v1/orgs/{orgSlug}/projects/{projectName}/email/domains/{domain}/verify | 送信ドメインを今すぐ再確認します(runlot email domain verify) |
| DELETE | /v1/orgs/{orgSlug}/projects/{projectName}/email/domains/{domain} | 送信ドメインを削除します(runlot email domain rm) |
| 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
メールが許可されているかどうかに加えて、アドレス、送信者、1時間あたりの上限、直近の送信数・受信数です。許可されていない場合でも、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に接続され、そのアドレス宛てに送られたメールは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/domains
プロジェクト自身の送信ドメインと、その検証状態です。各行には公開すべき正確なDNSレコードが含まれています。
viewer 以上が必要です。
operationId listEmailDomains
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 送信ドメイン | object |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core — サービスが一時的に利用できません | Error |
POST /v1/orgs/{orgSlug}/projects/{projectName}/email/domains
DKIMを用いてドメインを送信用に登録し、公開すべきレコードを返します:3つの<token>._domainkey.<domain> CNAME(必須)、SPFのTXTとDMARCのTXT(いずれも推奨)です。このドメインはverifiedと表示されて初めてenv.email.send({ from })で使用できるようになります。
publish: trueを指定すると、そのドメインをカバーするゾーンをRunlotがホストしており、かつ同じ組織に属している場合、レコードがそのままゾーンに書き込まれます。自分で書き込んだレコードが上書きされることはありません。
繰り返し呼び出してもエラーにはならず、トークンも変わりません — 既に公開済みのレコードは正しいまま保たれます。メンバー以上の権限が必要です。email.domain.addとして監査記録に残ります。
operationId addEmailDomain
リクエストボディ: application/json ・ object
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | ドメインと公開すべきレコード | EmailDomain |
| 400 | — | — |
| 403 | — | — |
| 404 | — | — |
| 409 | email_not_granted — このプロジェクトにはメールが許可されていません。email_domains_unavailable — このインストールではカスタム送信ドメインを提供していません。email_domain_taken — 別のプロジェクトが既にこのドメインを証明済みです。email_domain_provider — プロバイダーが拒否しました | Error |
| 503 | no_core — サービスが一時的に利用できません | Error |
POST /v1/orgs/{orgSlug}/projects/{projectName}/email/domains/{domain}/verify
ドメインのDKIM状態を今すぐ再確認し、行を更新します。ドメインが保留中の間はバックグラウンドチェックが1分ごとに同じ処理を行いますが、これはレコードを公開したばかりで待ちたくないときのためのボタンです。
チェックを完了できない場合、状態はそのままにされ、理由はlastErrorに表示されます。
member 以上が必要です。
operationId verifyEmailDomain
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | チェック後のドメイン | EmailDomain |
| 403 | — | — |
| 404 | — | — |
| 503 | no_core — サービスが一時的に利用できません | Error |
DELETE /v1/orgs/{orgSlug}/projects/{projectName}/email/domains/{domain}
送信IDと行を削除し、Runlotがホストするゾーンに書き込んだレコードがあれば削除します。まもなく、このドメインを指定するすべてのenv.email.send({ from })はfrom_not_verifiedで拒否されるようになります。
存在しないものを削除しようとした場合も204になります。管理者以上の権限が必要です。email.domain.removeとして監査記録に残ります。
operationId removeEmailDomain
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 204 | 削除済み | — |
| 403 | — | — |
| 404 | — | — |
| 409 | email_domain_provider — 送信アイデンティティを削除できなかったため、行は保持され、呼び出しは再試行できます | Error |
| 503 | no_core — サービスが一時的に利用できません | Error |
GET /v1/orgs/{orgSlug}/projects/{projectName}/email/log
送信・受信メッセージごとに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
ヘッダーを含む生メッセージをそのまま返します。受信メールの場合、Runlot が追加した Received ヘッダーと Authentication-Results ヘッダーが含まれます。送信メールの場合、送信された内容から組み立てられます。.eml としてダウンロードされます。生メッセージのない行(hasRaw: false)は404を返します。viewer 以上の権限が必要です。
operationId getMailLogRaw
| ステータスコード | 説明 | レスポンスボディ |
|---|---|---|
| 200 | 元のテキスト | string |
| 403 | — | — |
| 404 | — | — |