概要

sendmail および popper が適するシンプル・メール・アーキテクチャーには、メール・ユーザー・エージェント (MUA)、メール転送エージェント (MTA)、およびメール・デリバリー・エージェント (MDA) があります。MUA は、電子メールの送受信を直接に呼び出すクライアントのソフトウェアです。MUA の例としては Eudora、Netscape Navigator、pine および elm があります。MTA は、送信側のシステムから受信側のシステムへメッセージを実際に発送するソフトウェアです。sendmail は MTA です。しかしながら、sendmail は、他のプログラムに依存して非 SMTP ベースのトランスポート (例えば、UUCP ベースの トランスポートのほか、ユーザーのメールのスプール・ファイルへのローカル・デリバリーなど) を行う 以外の何ものでもありません。MDA は、受信したメールをユーザーの MUA へ引き渡すサーバーのソフトウェアです。popper は POP3 プロトコルを使用した MDA の例です。

メール・デリバリー・プロセスの送信側では、図 1 に示すように、送信側の MUA が送達すべきメッセージを sendmail に送信します。
図 1. 送信側 MUA がメッセージを sendmail に送信する
送信者の MUA が TCP/IP 接続経由の SMTP、または UNIX パイプを使用してメッセージを sendmail に送信することを示した図

これは、2 とおりの方法のいずれかで行われます。MUA がローカル・ホストで実行中の場合は、 sendmail のコピーを実行し、UNIX パイプにより メッセージをプロセスの標準入力に送信することによって、メッセージを送信することができます。

別の方法として (より一般的な方法として)、sendmail の 1 つのコピーがデーモンとして実行され、さらに MUA (ローカル・ホストもしくはリモート・ホストで実行) が sendmail デーモンに対する SMTP 接続をオープンして、送達すべきメッセージをその SMTP 接続によって送信します。この場合には、sendmail は SMTP サーバーとしての役割を果たし、一方、MUA は SMTP クライアントとしての役割を果たします。

次のステップでは、それぞれの受信側アドレスごとに、sendmail は、メッセージを受信側の最終宛先にルーティングするために、幾つかの他の SMTP サーバーにメッセージを送信します。図 2 にこれを示します。
図 2. sendmail がメッセージを中間の SMTP サーバーに送信する
sendmail がメッセージを SMTP で SMTP サーバーに送信することを示した図

この場合、受信側の SMTP サーバーは、すべてのメールを送信側で取り扱うローカル・ハブでも、受信側ですべてのメールを取り扱うリモート・ハブでも、あるいは受信側のホスト・システムでの SMTP サーバーでも構いません。

次のステップでは、sendmail は SMTP クライアントとしての役割を果たしており、幾つかの SMTP サーバーとの SMTP 接続を開始したあと、送達すべきメッセージを SMTP 接続によってそのサーバーに送信します。

メール・デリバリー・プロセスの受信側では、図 3 に示すように、sendmail デーモンが幾つかの SMTP クライアントからメッセージを受信します。
図 3. sendmail デーモンが SMTP クライアントからメッセージを受信する
受信側で、sendmail デーモンが SMTP プロトコルを使用して SMTP クライアントからメッセージを受信することを示した図

SMTP サーバーとしての役割を果たしている sendmail デーモンが、着信の SMTP 接続を受け入れ、その SMTP 接続により送達すべきメッセージを受信します。(このことは、SMTP 接続によって、MUA からメッセージを受信することと同じです。)

メッセージを受信すると、sendmail はそれを受信側のスプール・ファイルに付加することによって、ローカルの受信側にメッセージを引き渡します。 これを行うために、sendmail は、図 4 に示すように、ローカルのメール配布プログラムを必要とします。
図 4. Sendmail がローカルの受信側にメッセージを引き渡す
sendmail がメッセージをローカル・メーラーに送信することを示しており、このローカル・メーラーでは、ファイル・システムの付加機能を使用して受信者にメッセージが付加されます

このステップで、sendmail は /usr/lib/tsmail など、指定されたローカル・メーラー・プログラムを実行し、メッセージが UNIX パイプを通じてそのメーラーへ配信されるよう、伝送を行います。 メール配布プログラムは、メッセージを 受信側のメール・スプール・ファイルに付加します。これで、sendmail のメール送達における役割は終了します。

今度は、受信側が受信メッセージを読み込むためには、MUA を使用する必要があります。MUA によっては、MDA (popper など) がさらに必要な場合と必要ない場合があります。 受信側の MUA が、メール・スプール・ファイルに直接アクセスができる場合には、MUA は 図 5 に示すように、スプール・ファイルからメールを直接取り出すことができます。
図 5. 受信側の MUA がメール・スプール・ファイルを直接アクセスする
受信側の MUA がファイル・システムの読み取り機能を使用してメール・スプール・ファイルからメッセージを取得しているところを示す図
別の方法として (より一般的な方法として)、MUA は popper デーモンとの POP3 接続を確立し、その接続によってメッセージを取り出します。図 6 にこれを示します。
図 6. 受信側の MUA が popper デーモンとの POP3 接続によりメッセージを取り出す
受信側の MUA が POP3 接続経由で接続し、ファイル・システムの読み取り機能を使用してメール・スプール・ファイルからメッセージを読み取っているところを示しています

また、popper デーモンによって受信側の MUA は、メッセージの削除を指定できるため、メール・スプール・ファイルの管理も可能になります。

セキュリティー問題については、sendmail は RFC 2487 (「SMTP Service Extension for Secure SMTP over TLS」) をサポートしており、図 7 に示すように、インターネット上で専用の認証付き通信を提供します。z/OS® UNIX sendmail は、Open SSL でなくシステム SSL を使用します。

図 7. 証明書を使用したセキュア接続の確立
sendmail クライアントおよびサーバーが、クライアントおよびサーバーの証明を使用してそれぞれの鍵リングと鍵データベースを保護していることを示しています

また、sendmail がメールを受信時に、メール・フィルターはサード・パーティー・ソフトウェアに対してインターフェースを提供して、メッセージがメール・トランスポート・システムを通過時に、それらのメッセージの妥当性検査と変更を行います。 フィルターはメッセージの接続情報、エンベロープ・プロトコル・エレメント、ヘッダー、および本体コンテンツを処理でき、メッセージの受信者、ヘッダー、本体を変更できます。 MTA 構成ファイルは、どのフィルターをどの順序で適用するかを指定し、複数の独立して開発されたフィルターを結合できるようにします。 メール・フィルターは、リモート側またはローカル側で実行できるデーモンを分離します。 メール・フィルターの機能については、図 8 を参照してください。

図 8. メール・フィルター操作
MTA がメッセージを受信して、検証と変更のためにメール・フィルターにそれらのメッセージを渡し、処理されて戻されるメッセージを受信することを示しています