要約

  • 1995年9月のRFC 1846は、メールを一切受けない専用ホストへの誤送信を扱った。SMTPサーバーが存在しないと、送信側は接続失敗を一時的とみなし、何日も保存して再試行し得る。実験的な521応答はMX中継器か小さな拒否専用サーバーから、恒久的な答えを返すために提案された。
  • 提案者によると、一部の既存クライアントは521の直後に切断されると再びキューに入れたが、サーバーがQUITまで待つと送り主に返した。2015年のRFC 7504は、絶対に受信しないホストの接続開始時に521を正式化し、受信しないドメインを事前に知る中継器向けに556を加えた。

返事がないだけでは、二度と来るなとは伝わらない

メールの再試行は、相手が一時的に止まった時には役に立つ。受信サーバーが午後に復旧すれば、待っていた便を渡せる。しかし宛先の機械が初めからメールを扱わないなら、その親切さは空回りする。Alain DurandとFrancis Dupontは1995年の実験的なRFCで、DNSやNTPなど特定の仕事をするホストが増え、メールサービスを持たない機械も多いと指摘した。それでも人は、そのホスト名を含む宛先を打ち間違える。

SMTPの窓口がないホストに接続を試みると、送信クライアントには「今は答えがない」ことしか分からない。後でサーバーが立ち上がるかもしれないので、メールを保管し、再試行を続ける。RFCは、このため誤送信されたメールが何日も待ち、最後には分かりにくいエラーで戻ると説明した。何も受け取らないホストは待機列を持たない。保存と再接続の手間は送り手の設備に残り、人間の送り主も遅れて失敗を知る。

1982年のSMTP仕様は、送信側が受信側に接続し、命令と応答を交換する仕組みを記した。数値の応答があれば、次に進むか、送り直すか、断念するかを決められる。1995年の二人が足そうとしたのはメールボックスではなく、受信しないという意思表示だった。その答えに付いた番号が521である。黙ったままでは他人に再訪を強いる機械が、短い返事で再訪を終わらせる。

発話者は二通り考えられた。MX中継器が対象ホスト宛ての受信者を示された時点で521を返す方法。あるいは対象ホスト自身が、すべてのメールを拒むためだけの最小限のSMTPサーバーを動かす方法だ。前者では中継器が決定を伝え、後者ではホストが直接伝える。どちらでも、誰かが「一時停止ではなく、ここでは受信しない」と責任を持って言う必要がある。

中継器を使うなら、経路をそろえなければならない。RFC 1846は、ある優先順位のMXが受信しないホストを代表して拒否する場合、優先順位の低い別のMXも同じように拒否すべきだとした。一つ目の窓口で永久に不可と言われても、二つ目の窓口が違う振る舞いをすれば、送信側の再試行はそこで続く。拒否の数字より、その数字を掲げる窓口同士の一致が運用を左右した。

521と言ってすぐ切ると、また列に並ぶ

小さなサーバーは接続直後に521を送り、続けて正式なホスト名またはIPアドレスを示せた。その後は切断してもよいし、命令を読み続けてQUIT以外には521で返し、終了を待ってもよい。こうした521の挨拶を送るホストを、どのドメインのMXにも載せてはならない。メールを受けないと言いながら、受信先として宣伝してはいけないからだ。

どちらの切断方法でも同じ意味になるはずだった。だがRFCの著者は、既存クライアントの一部が、521の直後の切断を一時的な故障とみなしてメールを再びキューに入れると記した。サーバーが接続を保てば、そのクライアントはQUITを送り、メールを差出人へ返した。応答の意味は変わらないのに、会話の終え方で結果が逆になる。現場で動くソフトウェアは、仕様の一行に従うだけの透明な箱ではなかった。

このため、メールを一通も受け取らない機械が、SMTPサービスの最小片を運用する理由が生まれた。接続可能な状態で名乗り、固定の拒否を送り、必要なら相手の別れの挨拶を待つ。メール保管の仕事は増えない。その代わり、他人が届けられない便を何日も保管する仕事を減らせる。「何もしない」より、正しく断る方がネットワーク全体では安く済む場面だ。

1995年のRFCは実験文書で、実装経験の報告を求めていた。「一部の」クライアントが急な切断後に再試行したという記述は相互運用の観察であり、影響を受けた製品やメールの総数ではない。当時の規模を知るには送信キューの記録か実装調査が要る。残る確かな事実は、拒否を送ったというサーバー側の記録だけでは、送信側が諦めたとは言えないことだ。

DNSが先に断れるようになった

2015年のRFC 7504は521をSMTPの正式な応答番号として取り入れた。1995年の提案から広く使われていたと同RFCは述べるが、基本仕様にはまだ正式に含まれていなかった。新しい役割は接続開始時、どんな状況でもメールを受け取らないホストを示すことだ。特定の送り主や宛先を拒む場合にも使える広い554とは違う。機械全体のサービスに関する断言として521を定め、実験を終えた。

同じ年のRFC 7505は、ドメインがメールを受け取らないことをDNSで示すnull MXを定義した。通常、送信側はMXを探し、なければAやAAAAのアドレスに接続を試み得る。ウェブサイトだけを置くドメインにも、受信の可能性が残ってしまう。null MXは、SMTP接続の前にドメインとして受信しないと告げる。専用の拒否サーバーを立てる必要がない。

RFC 7504はさらに556を加えた。転送先のドメインがメールを受け取らないと、たとえばnull MXから知った中間のメールシステムは、対象ホストに接続せず、元の送信システムへ拒否を返せる。521はホストの入口で聞く返事、556は中継器がその手前で知ったドメインの規則を伝える返事だ。拒否の発信者と知識の出所が異なる。

1995年は、受信しないホストがあえて小さな窓口を動かし、無駄な列を止める時代だった。2015年には、DNSからも「ここには届けない」と先に伝えられるようになった。どちらの方法でも節約したのは一回の接続だけではない。宛先を知る者が明言しない限り、遠くの送信者が何度も推測し続ける時間である。