要約

  • DELIVERBY はメールの外部にあった期限を SMTP envelope の条件にした。期限後に試行を打ち切る Return と、遅延を報告しつつ継続する Notify を別の判断として表した。
  • 対応する中継は経過時間を差し引いて残り秒数を次へ渡す。これは優先処理、期限内配送、通常より長い保持、期限内に戻る DSN のいずれも保証しない。

メールが二つの MTA の間を移る瞬間、責任は単純にはコピーされない。送信側が保有していた queue の時間、再試行の履歴、次の経路候補は、そのまま受信側の現実にはならない。それでも、ある情報だけは同じ意味で渡らなければならない。あと何秒なら、このメールを届け続けることが正しいのかという情報である。

RFC 2852 は、業務時間後に pager を鳴らしたくないという例を挙げた。17 時前には有用なメッセージでも、その後では迷惑、あるいは誤った操作になる。通常の SMTP queue は一時的失敗なら後で再試行する。それは配送規則として正しくても、メッセージの用途を知らない。

2000 年 6 月の Deliver By SMTP Service Extension は、用途の期限を queue に持ち込んだ。ただし送信者に遠隔 queue の支配権は与えなかった。各 MTA が条件を受け入れるか拒否し、受け入れた場合だけ残り時間を継承する。この境界が、単なる「urgent」表示との違いである。

最短時間の広告は、約束より先に拒否を置いた

対応サーバーは EHLO に DELIVERBY を示す。さらに Return mode で受け入れられる固定の最小 by-time を数字で広告できる。client は MAIL FROM に BY parameter を加える。新しい SMTP verb はない。

この最小値は性能宣伝ではなく admission control である。残り 90 秒のメッセージに対し、次の MTA が最低 240 秒を必要とすると表明しているなら、その経路は同じ義務を引き受けられない。中継が数字を無視して渡せば、対応しているように見えて期限を失う。

逆に、DELIVERBY を受け入れても queue の優先順位を上げる義務はない。RFC は特別な処理を要求せず、DSN さえ迅速に戻るとはしない。送信者は「期限が過ぎたら何をするか」を選べるが、「他のメールより先に処理せよ」と命じることはできない。

絶対時刻ではなく差分を渡した理由

BY は符号付き十進秒、R または N、必要なら trace の T から成る。秒数の範囲はマイナス 999,999,999 からプラス 999,999,999 までである。

absolute timestamp ではなく delta を使うため、別々の運用主体が同じ wall clock を共有する必要はない。受信した MTA は自分の現在時刻に秒数を足し、local な deliver-by-time を持つ。次の MAIL FROM を送る直前に、そこまでの残りを計算する。

もちろん完全ではない。コマンドは瞬時には届かず、各 hop の latency により有効な期限は少し延びる。RFC 2852 はこの誤差が累積すると明記する。仕組みが保存するのは時間の完全な同一性ではなく、消費した予算を戻さないという関係である。

by-time は deliver-after でもない。将来のある時刻まで保留せよ、という機能ではなく、その時間内に届けよという条件である。また通常の message retention を延ばさない。local policy がより早く断念するなら、期限前に失敗を返すこともできる。

Return と Notify は「遅れ」の意味を分けた

R は Return を表す。0 以下は不正であり、deliver-by-time までに配送または中継できなければ、追加の試行をしてはならない。対象 recipient には 5.4.7、delivery time expired の failed DSN を出す。ここで期限は観測値ではなく、保管を終わらせる命令条件になる。

N は Notify である。期限を過ぎても local policy に従って配送を続け、対象 recipient には 4.4.7 の delayed DSN を出す。0 や負の値も正しい。過去になった期限は、配送権限を消さなくても、遅延の証拠として残るからだ。

同じ遅れを一語で扱わない点が重要である。会議への参加 URL のように遅ければ無意味な情報もあれば、請求書のように遅れても届ける価値がある情報もある。前者には停止が必要で、後者には可視化が必要である。protocol は用途そのものを判定せず、送信側が選んだ結果を queue の動作に結びつける。

対応 hop は残高を継承した

次の server も DELIVERBY を広告する場合、中継 client は mode を維持し、残り秒数を再計算した BY を送らなければならない。元の値を再利用してはならない。複数の管理領域を通るほど、同じ deadline の残高は減る。

Return mode は capability chain を要求する。非対応 server には中継できず、相手の minimum が残りより大きい場合も渡せない。別の正当な MX を試す余地はあるが、対応相手がなければ undeliverable として扱う。期限を失った配送は、Return の委任を実行したことにならない。

Notify mode は非対応 hop へ進める。期限後も試行を許す mode だからである。ただし境界は隠せない。中継側は適用される recipient に relayed DSN を出し、下流が DSN に対応する場合は delay 通知を引き継ぐ。メッセージは前へ進めても、失われた時間 semantics を存在するように装えない。

この差は、thin coordination の実例である。IETF が queue を運用するのではない。operator の local policy も統一しない。ただ、独立した operator 間で同じ制約を名乗るなら、残り値、mode、capability loss の evidence だけは正確に渡すよう求める。

一つの SMTP transaction の中でも知識は段階的だった

server は MAIL FROM を 250 で受けた後、RCPT TO、DATA、または end-of-data で期限を守れないと判断できる。recipient と message body を見る前には分からない制約があるからだ。

したがって最初の肯定 reply は、全 recipient の期限内配送を保証しない。その段階で parameter を構文的、初期政策的に受け入れたという evidence にすぎない。SMTP の段階的な情報開示を無視して、一つの 250 を end-to-end promise に変えるべきではない。

DSN は時計の外側を報告した

DELIVERBY は Delivery Status Notification と組み合わせ、failed、delayed、relayed を伝える。報告には Deliver-By-Date を加えられ、arrival date も推奨される。T があれば中継ごとの relayed DSN を要求でき、それらは terminal result ではない。

ここで DSN と DELIVERBY の役割は異なる。DSN は MTA が取った action を構造化する。DELIVERBY は期限時点でどの action が必要かを決める。R は試行継続の可否を変え、N は遅延 evidence の生成を要求する。

返送される DSN は別のメールであり、別の queue を通る。BY=60;R が 60 秒後に失敗を確定しても、その報告が 60 秒以内に sender に届く保証はない。forward path の deadline を定義することと、すべての観測を同時に制御することは別である。

短い期限は観測装置にもなった

trace は mail path の handoff を明らかにする。さらに異なる短い by-time を持つメッセージを繰り返し送り、拒否や DSN を比較すれば、粗い route や latency の推定に使える。RFC 2852 はこの probing risk を security considerations に記した。

結果は慎重に読む必要がある。Notify の負数は local に期限が過ぎたことを示すが、遅れを作った hop は決めない。Return の 5.4.7 は義務を続けられないことを示すが、怠慢や congestion を証明しない。relayed は handoff の evidence であり、final delivery ではない。

現在の IANA SMTP registry は DELIVERBY を RFC 2852 とともに掲載し、requirement level を MAY とする。これは標準化された選択肢が残るという事実であり、deployment survey ではない。

DELIVERBY が歴史に残したのは、時間を message property にしたことだけではない。独立した operator を通る制約は、受け手が拒否でき、消費に応じて減り、継続不能な地点で evidence を残すべきだという設計である。中継がリセットできなかったのは時計ではない。すでに引き受け、すでに消費した責任だった。

出典