ドキュメント本文へスキップ
SDK

予約と取り消し

`scheduledAt`、`emails.reschedule`、`emails.cancel`。

あとで送る

schedule.ts
await openemail.emails.send({ ...message, scheduledAt: 'PT1H' })await openemail.emails.send({ ...message, scheduledAt: new Date('2027-01-01T09:00:00Z') })await openemail.emails.send({ ...message, scheduledAt: '2027-01-01T09:00:00.000Z' })

Date、ISO-8601 の時刻、または PT1H / P2D のような期間。最大 1 年先までで、過去は指定できません。

移動と停止

reschedule.ts
const queued = await openemail.emails.send({ ...message, scheduledAt: 'PT1H' }) await openemail.emails.reschedule(queued.id, new Date(Date.now() + 86_400_000))await openemail.emails.cancel(queued.id)

止められるのは queuedscheduled のメッセージだけです。それより先に進んだものは conflict_error になります。その一部はすでに誰かのメールボックスにあるからです。すでに取り消されたメッセージを取り消す呼び出しは成功し、何も変わりません。

代わりに取り消し猶予を使う

undo-window.ts
await openemail.emails.send({ ...message, cancellableForSeconds: 30 })

予約されたメッセージは送信されるまですでに取り消せるので、この 2 つは併用できず、サーバーが拒否します。即時メッセージの送信取り消し猶予には、こちらを使ってください。

パラメーター: 予約

scheduledAtDate | string
`emails.send` における送信時刻です。`Date`、ISO-8601 の時刻、または `PT1H` や `P2D` のような期間で、クライアントが通信用の文字列に変換します。少なくとも 1 秒先、最大 365 日先までで、どちらの境界を外れても `scheduledAt` に対する `validation_error` になります。自然言語は受け付けません。「来週の火曜日」を誤って解釈すれば、取り返しのつかない時刻にメッセージを送ってしまうからです。
cancellableForSecondsnumber
即時送信における送信取り消し猶予です。0 から 900 の integer で、既定は 0。0 より大きい値は `scheduledAt` と併用すると拒否されます。予約は送信されるまですでに取り消せるからです。この方法で保留されたメッセージは `scheduled` ではなく `queued` にとどまります。短い遅延を伴う、同じ延期の仕組みです。
idstring必須
`msg_…` の id で、`emails.cancel` と `emails.reschedule` の第 1 引数です。どちらも専用のスコープではなく `emails:send` を必要とし、どちらもキー自身のワークスペース内で解決されるので、他のワークスペースに属する id は、存在しなかった id とまったく同じ `not_found_error` になります。
reschedule.scheduledAtDate | string必須
新しい時刻で、`emails.reschedule` の第 2 引数です。同じ規則と同じ 1 年の枠で解釈され、内部の `PATCH /emails/{id}` が変更する唯一のものです。期間はサーバーがそれを読んだ時点からの相対なので、再試行された再予約は最初のものより少し後になります。後にはなりますが、前になることはありません。

レスポンス: EmailResource

object'email'
常に `email` です。どちらの呼び出しも確認応答ではなくメッセージ全体を返すので、何が変わったか見るために取得し直す必要はありません。`emails.send` はこれと同じ形に `replayed` を加えたものを返します。
idstring
`msg_…` のハンドル。メッセージの生涯にわたって不変で、そのメッセージに対する他のすべての呼び出しが受け取る id です。
statusEmailStatus
取り消し後は `cancelled`、再予約後は `scheduled` になります。取り消し猶予の裏で `queued` だっただけのメッセージも含み、再予約はそれを本物の予約に変えます。移動や停止ができるのは `queued` と `scheduled` のメッセージだけで、それより先に進んだものはコード `email_not_cancellable` の `conflict_error` になります。その一部はすでに誰かのメールボックスにあるからです。
scheduledAtstring | null
メッセージが送出される予定の ISO 時刻。`scheduledAt` による送信だけでなく取り消し猶予でも設定されます。この 2 つは 1 つの仕組みだからです。単純な即時送信では null です。
cancellableUntilstring | null
取り消しが効かなくなる時刻で、延期された両方の経路で `scheduledAt` と同じ瞬間です。呼び出しが返る頃にはすでに出ている即時送信では null です。
sentAtstring | null
メッセージが実際に出ていった時刻。待機中は null で、取り消されたものでは永遠に null です。
messageIdstring | null
RFC 5322 の Message-ID で、MIME ができるまでは null です。したがって、この 2 つの呼び出しが対象にできるメッセージでは常に null です。API への指定に使うものではなく、後のバウンスが返ってくる先でもありません。送信サービスが送出時にヘッダーを書き換えるからです。
threadIdstring | null
このメッセージが属するスレッド。リクエストから取られ、送信後はトランスポートが報告した値で書き換えられます。返信でない場合は null です。
transportEmailTransport | (string & {}) | null
バイト列がどう出ていったか。送出までは null なので、取り消しや再予約が返せるメッセージでは常に null です。テストモードの送信は `test` を記録し、この SDK がまだ名前を持たないトランスポートが破壊的変更にならないよう、ユニオンは開いたままです。
attemptsnumber
送出処理がこの行を何回つかんだか。送信の成功ではなく、つかんだ時点で増えるので、待機中のものはすべて 0 です。
lastErrorstring | null
そのメッセージに対して記録された直近の失敗。何も失敗していなければ null です。ジョブを投入できなかった延期送信はここに `Could not schedule: …` と書かれて `failed` に移されます。これは、誰も要求していないのに予約されたメッセージが取り消し可能でなくなる唯一の経路です。
fromstring
メッセージが送出を認可されたアドレスで、素のまま小文字で保存されます。求められたアドレスとは限らず(`from` を指定しない絞り込まれたキーは、使ってよい最初のアドレスに解決されます)、表示名はここでは落とされます。`emails.list` の `from` フィルターが等価比較を行うからです。