Michael-J.-Hammel(2008年4月18日(金))シェアSendmailと言えば、古くはSlackwareの黎明期よりLinuxディストリビューションで使われ続けてきた由緒あるプログラムだ。Sendmailは高機能すぎるので主にISPのメールサーバを利用している普通のデスクトップユーザにとっては必ずしも理想的なソリューションではない。sSMTPはそのような場合にうってつけのシンプルなソリューションだ。Protocol)が標準規格化されるよりも前に、メールの処理やメール配信のための最適なルートの決定を手助けするものとして設計された。そのようなもっとも初期のMTAの一つがSendmailで、複数のネットワーク間でのメールの配信をするために非常に普及した。Linuxが広まりつつあった当時、Sendmailはメール配信用のオープンソースソフトウェアとして唯一実用的なものだったため、多くのLinuxディストリビューション上で提供されるデフォルトのMTAになった。Agent)が使われる。MUAはメールの配信については最初のステップのことだけしか把握していない。言い換えると、MUAは最終的なメールの宛先にメールが届くまでのことを知っているわけではなく、通常はサーバ上にある特定のMTAにメールを届ける(その後MTAが最終的な宛先までのメール配信を担当する)方法について把握しているだけだ。メール経由で警告を送るcronジョブや何らかの自動化システムを使用している場合、システムがメールの送信にデフォルトで使用することになるのはSendmailだ。これは、Linuxシステムのmailコマンド(通常は/bin/mail)が使用するデフォルトのMTAがSendmailであるためだ。そのためそのようなメールもISPのメールサーバから受け取るためにはメールリーダの設定を行なうだけでなく、Sendmailの設定も行なう必要があるということになる。残念ながらSendmailの設定は非常に煩雑なため、ベテランユーザでもできることなら避けて済ませたいという代物だ。そのためSendmailは、普通のデスクトップユーザにとって理想的なツールだとは言い難い。Sendmailの代替物として普及しているMTAにはQMailとPostfixの2つがあって、どちらも当初はシンプルなMTAだったものの、自ずと複雑なシステムへと変化し、今では単に手元のマシンからISPまでメールを送りたいというだけの普通のデスクトップユーザのニーズをはるかに越えた機能が備わっている。その他にも、elmやpineなど/bin/mail以外のツールに直接SMTPを扱わせてメールを送信するようにするという方法もあるが、これらはフル装備のMUAクライアントなので、ISPにメールを届けるというメインの目的にとってはオプションがあまりに多すぎオーバースペックだ。複雑なSendmailの代わりに使用することができるシンプルなツールだ。上記のような代替物とは違って複雑ではない。sSMTPを使えば、SMTPに関する設定をもっとシンプルで小さな設定ファイルで置き換えることができる。この設定ファイルでは、リモートのSMTPサーバ、認証情報(ユーザ名とパスワード)、送信メールに表示する送信元ドメインなどをメールリーダの設定と非常に似た感じで設定することができる。sSMTPは、各ディストリビューションのパッケージマネージャ経由でインストールすることもできるし、ソースから構築してインストールすることもできる。--enable-md5auth」をコマンドラインで実行すれば良い。このようにしてSSLとMD5Authを有効にしておけばSMTPのログインが必要なISPとのやり取りを行うことができる。必要ならIPv6のサポートも有効にすることができる。詳しくは--helpを参照しよう。installコマンドとを使用してパッケージの構築とインストールをする。installコマンドを実行すると、いくつかの項目を入力するように求められるので、表示された指示に従えば良い。インストールが完了すれば、/usr/local/ssmtpというディレクトリが作成されていることと、sbinサブディレクトリの中にsSMTPのバイナリ、etc/ssmtpサブディレクトリの中に設定ファイルがそれぞれあることを確認できるはずだ。この時点でSendmailを終了して、sSMTPと置き換えることができるようになった。Vのinitスクリプトを使用しているLinuxディストリビューション(最近のディストリビューションはほとんどが使用している)上でSendmailを終了するには、serviceコマンドを使うと良いだろう。off一つめのコマンドは、その時点で実行中のSendmailのインスタンスを終了する。二つめのコマンドは、リブート時にSendmailが再び起動しないようにする。sendmail」などのコマンドを手動で実行してsendmailのプロセスを終了する必要があるだろう。Sendmailを置き換えるには単に、Sendmailを別のファイル名でバックアップしておいた上で、sendmailからsSMTPへのシンボリックリンクを作成すれば良い。/usr/sbin/sendmail一つめのコマンドは、元のsendmailを邪魔にならないように別のファイル名(sendmail.orig)にする。二つめのコマンドは、システム上のプログラムがsendmailを呼び出した際にsSMTPが実行されるようにしている。しておけば、sSMTPを使用していて何か問題が起こったとしても、シンボリックリンクを削除して、名前を変更しておいたsendmailのファイルを元の名前に戻すだけで良い。設定sSMTP用の設定ファイルの場所は、上記でsSMTPをソースコードから構築する際にconfigureコマンドで使用した--prefixで指定したディレクトリの下となり、今回の場合は/usr/local/ssmtp/etc/ssmtp/ssmtp.confとなる。この設定ファイルには、デフォルトでは4つのよく使われるオプションが含まれているだけだが、後からいくつか認証用のオプションを追加することもできる。sSMTPを試しに構築してみると、私の環境では次のような設定ファイルが作成された(先頭に「#」記号がある行はコメント行)。hostnamehostname=kepler.graphics-muse.orgroot=の値は、cronジョブのエラー出力やログファイルの分析など、システムによって生成されたメールのすべてを受け取るためのメールアドレスに変更しよう。私の場合、この行は自分の個人用メールアドレスに変更した。mailhub=には、メールが送信されるべきSMTPサーバを定義する。この行には、メールリーダにSMTPサーバとして指定しているホストを指定しよう。hostname=には、メールの受信者に見せたいメールホストの名前を指定する。私の場合、メールに対する返信はメールリーダを使って受信することができるようにISPのドメインに送って欲しいので、この行にはISPのドメインを指定した。このドメインは、外部に向けて送信するすべてのメールのドメイン部分になる。システム上の全ユーザからのメールはこのドメインから送信されたように見える。rewriteDomain=は、送信元を別のドメインに見せかけるために使用することができる。私の場合はすでにhostnameの行でサーバのアドレスを詐称しているので、この行はコメントのままにしておいた。自動生成直後の最初の状態の設定ファイルには、認証が必要なSMTPサーバにログインするための情報は含まれていない。この情報は、ISP経由でメールを送信するためにメールリーダに指定する必要がある情報と同じ内容だ。この情報を指定するには、以下のような行を追加すれば良い。AuthUser=ユーザ名AuthPass=パスワードAuthMethod=CRAM-MD5上記のように設定しておくと、システムが/bin/mailを使用してメールを送信する度に、実際にはsendmailに置き換わっているsSMTPが呼び出されて、sSMTPが設定ファイルで指定された認証情報を使用してISPのSMTPサーバにログインして外部ホスト宛のメールを送信する。注意点SendmailをsSMTPに入れ替えるのが有効なのは、ユーザが一人しかいないデスクトップPCの場合だ。ユーザが複数人いる場合にはsSMTPは使用しない方が良いかもしれない。いうのもデフォルトでは、mailコマンドで送信されるすべてのメールが一人のユーザから送信されたものであるように見えるためだ。アドレスに対して特定のローカルユーザを割り当てて、特定のメールサーバ経由でそのメールを送るということは可能だ。認証情報が必要なサーバの場合には、異なる認証情報を使用する異なるメールサーバ上で異なるログインをするように設定する方法というものは存在しない。sSMTPでは、外部に送信するメールについて接続することができるリモートのMTAは基本的には一つだけと考えた方がいいだろう。システム上の全ユーザがsSMTPを使用するためには全ユーザがssmtp.confファイルの読み取り権限を持っている必要があるということだが、誰でもが読むことのできる設定ファイル内にISPのログイン情報を書くということは、システム上の全ユーザがあなたのメールの認証情報を知ることができるということだ。繰り返すが、このことからも、sSMTPはシステム上にユーザが一人しかいないホームユーザにのみ向いていると言える。この問題についてはユーザとグループを適切に設定した上でsSMTPをsetuidプログラムとして実行することで対処することもできるが、そのようなことをするのは、そもそもの目的であった、できるだけシンプルにするということに反することになるだろう。sSMTPはSendmailの代わりになるが、完全に置き換わるわけではない。重要な違いの一つは、Sendmailとは違ってメールの受信を行うことはできないという点だ。メールをISPから受信して読むためには、メールリーダを使用する必要がある。sSMTPはメールのキューを管理しないため、送信メールを即座に配信しようとするという違いもある。sSMTPのマニュアルページでは、Sendmailがサポートしているものと同じコマンドラインオプションがすべて表記されているが、実際にはsSMTPはそれらのオプションのほとんどを無視するだけだ。最後に、sSMTPの実装上、送信メールのヘッダの容量には制限が設けられている。そのため、あまりに長い受信者リストやあまりに長いサブジェクトは含めないようにしよう。多数の受信者に対してメールを送信する必要がある場合には、すべての受信者をコマンドラインで手動で列挙するのではなく、エイリアスを設定すれば良い。sSMTPは、その名の通り「シンプル」だ。設定には最低限の作業しか必要ではなく、長期的な保守もほとんど(あるいはまったく)必要ない。言えsSMTPはあらゆるユーザにふさわしいわけではなく、マシン上にユーザが一人しかいない場合の、技術者ではないホームユーザに対して最大の価値を発揮する。そのようなユーザにとってsSMTPは、メール管理を向上させるための簡単な方法となり得る。Inc.)のソフトウェアエンジニア長。ソフトウェア開発/管理における20年以上の経験があり、様々なオンライン/紙媒体の雑誌で100を越える記事を執筆してきた。GIMP関連の3冊を含む、オープンソース関連の複数の書籍の著者。