ステップ 10: 不要なメールを検査してフィルターに掛ける SMTP 出口の設計 (オプション)

SMTP 出口機能を使用すると、インストール・システムは送られてくる不要なメール (スパム) の量を制御できるようになります。SMTP は、MVS™ が提供する動的出口機能 (CSVDYNEX マクロ) を利用します。詳しくは、z/OS MVS Programming: Authorized Assembler Services Guide を参照してください。カスタマーは、それぞれが望ましいと考えるポリシーを実装するために出口を用意します。ユーザーが定義 (および実装) した基準に基づいて、個々のメール項目を、他のリソースを消費する前にリジェクトすることができます。SMTPEXIT は、ローカル・ポリシーの実装を支援するためのプログラミング・ガイドとして提供されています。これは SEZAINST に入っています。この出口は、許可ライブラリー内の REENTRANT および AMODE 31 でなければなりません。SMTP 出口を使用するには、名前トークン (EZBTCPIPSMTPEXIT) が SYS1.PARMLIB(PROGxx) に確立されている必要があります。

ユーザー・プログラムが使用可能な場合、SMTPPROC プログラムが開始されると SMTP 出力データ・セットにメッセージ EZA5549I が生成されます。このメッセージは、ユーザー出口がアクティブであることを示します。

この出口は、SMTPPROC プログラムを停止させずに動的に置き換えることができます。これを行う手順は、次のとおりです。

  1. "SMSG smtpprocname STOPEXIT" TSO コマンドを実行します。このコマンドを実行するためには、TSO ユーザー ID が SMTPPROC の許可リストに入っていなければなりません。これによって、SMTP は出口に対して終了コールを実行し、出口がもうコールされないようフラグを設定します。メールの処理は、出口がないものとして続行されます。
  2. SETPROG EXIT オペレーター・コマンドを使用するか、SYS1.PARMLIB(PROGxx) を更新してからコンソール・リフレッシュ・コマンドを実行して、出口を除去します。SYS1.PARMLIB を更新する例を次に示します。
    1. 以下の定義を SYS1.PARMLIB(PROGxx) に組み込みます。
      EXIT DELETE EXITNAME(EZBTCPIPSMTPEXIT) MODNAME(MYEXIT) FORCE(YES)
    2. MVS コンソールで、SET PROG=xx を実行します。
  3. SETPROG EXIT オペレーター・コマンドを使用するか SYS1.PARMLIB(PROGxx) を更新して出口を追加し、新しい出口に置き換えます。SYS1.PARMLIB を更新する例を次に示します。
    1. SYS1.PARMLIB(PROGxx) に次の行を入れます。
      EXIT ADD EXITNAME(EZBTCPIPSMTPEXIT) MODNAME(NEWEXIT)
    2. MVS コンソールで、SET PROG=xx を実行します。
  4. "SMSG smtpprocname STARTEXIT" TSO コマンドを実行します。これによって、SMTP は出口に対して初期化コールを実行します。その後フラグが設定されて、それ以降の新しいメール接続ではその出口がコールされるようになります。出口がコールされ、新しいメールの処理が続行されます。復元された出口が最初に出会う smtp コマンドは HELO です。現在処理中の交換の途中では、出口はコールされません。

SMTP 出口を設計する場合には、以下のような設計上の注意を考慮する必要があります。 この出口の実行中、リモート SMTP アプリケーションがローカル SMTP に接続されることに注意します。出口で時間がかかりすぎると、タイムアウト状態が発生して、リモート SMTP アプリケーションは接続を終了し、再試行のロジックに入ります。このような状態になると、メール・システムのパフォーマンスは著しく低下します。出口はできる限り効率的にコーディングし、出口で入出力操作や DNS リゾルバー・コールなどの余分な処理や待ち時間が発生するのを、極力避けるようにしなければなりません。メッセージのデータ部分を細かくスキャンする処理を避けられれば、メールをリジェクトする処理はより効率的なものになります。出口では処理を継続するかメッセージ全体をリジェクトすることができ、メッセージの個々のセグメントをリジェクトする機能はありません。出口では、メッセージの内容を変えることはできません。 出口はいつでもメッセージを受け入れ、そのメッセージについてのそれ以上の出口コールを使用不可にすることができます。SMTP プログラムによって現在実装されているコマンドだけが、出口プログラムに渡されます。 このようなコーディングを行う前に、RFC 2505 および RFC 2635 を読み、よく理解しておく必要があります。同時に複数の接続が発生する可能性があり、出口では接続ベースで本来あるべき状態に関する情報を持つよう、事前の対策をとっておかなければなりません。SMTP コマンドおよび標準に関する詳細は、RFC 821 および 822 に説明されています。

SMTP サーバーが SMTP 出口プログラムを呼び出し、インバウンド TCP/IP 接続だけでなく JES スプールから着信するデータも問い合わせることができるように設定することもできます。

詳しくは、「z/OS Communications Server: IP 構成解説書」を参照してください。