メインコンテンツまでスキップ

付録E. その他のゲートウェイ問題 (Other Gateway Issues)

この付録では、SMTPを他のメールシステムに接続するメールゲートウェイに関する特別な考慮事項について説明する。

E.1. ゲートウェイの責任 (Gateway Responsibilities)

SMTPを別のメールシステムに接続するメールゲートウェイは、以下を行わなければならない (MUST):

  1. アドレスの変換 (Translate Addresses)

    • SMTP形式と他のシステムの形式間で変換する
    • 双方向マッピングを維持する
    • 変換規則を文書化する
  2. ヘッダーの変換 (Translate Headers)

    • SMTPヘッダーフィールドを他のシステムの同等物にマッピングする
    • 意味的意味を保持する
    • ゲートウェイ固有の追跡フィールドを追加する
  3. コンテンツの変換 (Translate Content)

    • 文字セットの違いを処理する
    • 必要に応じてコンテンツエンコーディングを変換する
    • 可能な限り添付ファイルを保持する
  4. 配信通知の処理 (Handle Delivery Notifications)

    • システム間でDSNを変換する
    • 失敗を適切に報告する
    • エラーコードをマッピングする

E.2. X.400ゲートウェイの例 (X.400 Gateway Example)

SMTP to X.400:

  • RFC 5322アドレスをX.400 O/Rアドレスに変換する
  • SMTPヘッダーをX.400 P2ヘッダーにマッピングする
  • メッセージコンテンツを保持する

X.400 to SMTP:

  • X.400 O/RアドレスをRFC 5322形式に変換する
  • X.400ヘッダーをSMTPヘッダーにマッピングする
  • 配信レポートを維持する

E.3. アドレスマッピングの課題 (Address Mapping Challenges)

問題: 異なるアドレス指定スキーム

SMTP: [email protected]
UUCP: host!user
X.400: /C=US/ADMD=ATT/PRMD=XYZ/S=Smith/G=John/

ゲートウェイは以下を行わなければならない (MUST):

  • 両方向にアドレスを変換する
  • 異なる部分 (エンベロープとヘッダー) のアドレスを処理する
  • 変換不可能なアドレスに対処する

E.4. 文字セットの問題 (Character Set Issues)

SMTPは伝統的に7ビットASCIIを使用する。異なる文字セットを持つシステムへのゲートウェイは、以下を行わなければならない (MUST):

  1. エンコーディングの識別: 受信メッセージの文字セットを検出する
  2. 安全な変換: ターゲットシステムのエンコーディングに変換する
  3. 明確なマーク: ヘッダーでエンコーディングを示す (MIME Content-Type)
  4. 失敗の処理: 変換不可能な文字に対処する

E.5. コンテンツ変換 (Content Conversion)

コンテンツ形式が異なる場合:

テキスト:

  • 行末変換 (CRLF vs LF vs CR)
  • 文字セット変換
  • テキストの折り返し/折り返し解除

バイナリ:

  • エンコーディング (Base64、Quoted-Printable)
  • タイプ保持
  • ファイル名処理

リッチテキスト:

  • HTMLから/他の形式へ
  • フォーマット保持
  • プレーンテキストへのフォールバック

E.6. ゲートウェイにおけるループ防止 (Loop Prevention in Gateways)

ゲートウェイは、メールループを防がなければならない (MUST):

SMTP → ゲートウェイA → 他のシステム → ゲートウェイB → SMTP (ループ!)

防止方法:

  1. ゲートウェイを越えてMessage-IDを追跡する
  2. ゲートウェイ固有の追跡ヘッダーを追加する
  3. ゲートウェイ変換を越えてホップカウントを制限する
  4. 繰り返されたゲートウェイ処理を検出する

E.7. エラー処理 (Error Handling)

ゲートウェイ固有のエラー:

変換失敗:

  • 変換不可能なアドレス → 5xxエラーを返す
  • 文字セットの問題 → エラーを返すか、最善の努力で変換する
  • 形式の非互換性 → 拒否するか、損失警告付きで変換する

配信失敗:

  • 他のシステムが拒否 → SMTPエラーコードに変換する
  • 他のシステムでタイムアウト → 一時的失敗を返す (4xx)
  • 永続的失敗 → 永続的失敗を返す (5xx)

E.8. ゲートウェイReceivedヘッダー (Gateway Received Headers)

ゲートウェイは、適切なReceivedヘッダーを追加しなければならない (MUST):

Received: from smtp.example.com by gateway.example.com
with SMTP (gateway to X400) id 12345
for [email protected]; Wed, 24 Dec 2024 10:00:00 +0000

以下を含む:

  • ソースプロトコル (SMTP)
  • 宛先プロトコル (コメント内)
  • ゲートウェイ識別
  • タイムスタンプ

E.9. ベストプラクティス (Best Practices)

  1. 変換を文書化: すべてのアドレスとヘッダーの変換を明確に文書化する
  2. 情報を保持: 可能な限り元の情報を保持する
  3. 追跡を追加: デバッグのためにゲートウェイ固有のヘッダーを追加する
  4. 徹底的にテスト: さまざまなメッセージタイプとエッジケースでテストする
  5. 監視: トラブルシューティングのためにゲートウェイ操作をログに記録する
  6. 更新: セキュリティと互換性のためにゲートウェイソフトウェアを最新に保つ