<% Include("/hsphere/local/home/terraint/common.phps");%>Apache James:Java メールサーバー - Routing mail from sendmail through James - Java Mail and News server, SMTP POP3 NNTP
The ASF -- Apache Software FoundationJAMES - Java Apache Mail Enterprise Server

James

ダウンロード

ドキュメント

プロジェクト

関連プロジェクト

有益な情報

日本語訳 (Translations)

オリジナル

課題

この文書では、/usr/sbin/sendmailで生成される全てのメールあるいは同一ホストのJamesを通じたローカルメール(@hostの無いローカルアドレスへのメールを含む)のルーティングの為のsendmailの設定方法を記述しております。
ここでは、全てのsendmail設定ファイルの場所はRedhat Linux 7.2のものを仮定しており、他のインストール版では異なった場所となるでしょう。
この文書の情報につき、質的な責任を負うものでは一切ありません。
変更*前*に、設定ファイルのバックアップを必ず行って下さい。

解決策
Step 1: SMTPデーモンとして稼動中のsendmailの停止

ローカルホストからローカルユーザへのメールの配達を含む、全てのことをJamesにさせたいとお考えですね。
まず始めのステップは、ポート25で立ち上がっているSMTPデーモンであるSendmailを止める事です。さもないと、自身に対してメールをルーティングしてしまい、その後何が起こってしまうかはわかりません。
sendmailの設定ファイル(/etc/sysconfig/sendmail)を開き、

DAEMON=yes
の行を
DAEMON=no
に変更ください。
[root@apache root]# /etc/rc.d/init.d/sendmail restart
コマンドでsendmailを立ち上げなおします。これにより、外に出るキューに関してsendmailが処理し、受信メール用のポート25はリスニングしなくなります。

Step 2: リレーを使うようsendmailをセットアップ

はい、ここまではこれで結構です。次に、(ルールを無視して)Jamesを通じて全てをリレーするようsendmailに知らせます。Jamesは、"local relay"(不適切な全てのローカルアドレスの宛先)の役割や、"mail hub"(適切な全てのローカルアドレスの宛先)の役割、"smart relay"(その他全てのアドレスの宛先)の役割をsendmailの代わりに引き受けます。それによって、全てのものをキャッシュします。
/etc/sendmail.cfファイルを開き、

  • DS で始まる行を探し、DSesmtp:localhostに変更
  • DR で始まる行を探し、DResmtp:localhostに変更
  • DH で始まる行を探し、DHesmtp:localhostに変更
それほど難しくはないですよね?
sendmailに対し、esmtpと呼ばれる"mailer"を使い、ESMTPを利用してメールをlocalhostから各々の役割にリレーさせる、というのが、今行った事です。 勿論、健全な考えを持った人なら誰もがlocalhostへのメールのリレーをしようとは思わないでしょう。何故なら永遠にループするから・・そうですよね?

Step 3: ループバックに関してsendmailが警告を出さないようにする

sendmailの開発者は、(賢明にも)sendmailによって送られたメールが自分自身に戻ってこないような機能をデフォルトで入れてビルドしており、外部に行くメールの宛先が自分のマシンであるかどうかを判断する為の素早いチェック機能を付与する事でそれを達成しています。もしそのような形でメールを送ろうとすれば、config error: mail loops back to meというメッセージが流れる事でしょう。
しかし、我々はlocalhostにメールをリレー*したい*のであり、sendmailは我々のメールを受け取らずJamesが受け取るため、loopを発生させるような事はありません (Step1にしたがっていることを再度確認ください)。
ですから、/etc/sendmail.cfを再び開き、ファイルの末尾まで移動し、esmtp mailerの宣言がある箇所すなわち以下のような箇所にあたるまで上にスクロールさせて下さい:

Mesmtp,		P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
		T=DNS/RFC822/SMTP,
		A=TCP $h
まあ、こんな感じの変更を加える事になります:
Mesmtp,		P=[IPC], F=kmDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
		T=DNS/RFC822/SMTP,
		A=TCP $h
しかし、厳密に言うと、"F="行にkを加えた事になります:F=mDFMuXaF=kmDFMuXaになります。
繰り返しになりますが、sendmailはループバックのテストをスキップし、esmtp mailer を通した状態にしたままスキップします( And again, thats it, sendmail will now skip the loopback test on mail leaving through the esmtp mailer)。

いくつかのテストを実行しなければなりません。
以下の各コマンドを試してみて下さい。ただし、[] 内は其々記述どおりに置き換えてください。

/[root@apache root]# mail -v [real-localusername]

[root@apache root]# mail -v [nonexistant-localusername]

[root@apache root]# mail -v [real-localusername]@localhost

[root@apache root]# mail -v [real-localusername]@[myhostname.mydomainname]

[root@apache root]# mail -v [real-username]@[real-remote-account]
Sendmail は STDOUT(標準出力)とやり取りを行いますので、各々のメールに対して何が行われているかがわかるでしょう。

Step 4: If that wasn't enough James requires SMTP AUTH

SMTP AUTH is a different Kettle of Fish.
The scenario is that you're using SMTP AUTH on James to restrict SMTP relaying to authenticated users, allowing them to connect from any IP address but still not letting James become an open relay for spam, cool.
However you now want to let sendmail relay through James, so you need to tell it how to authenticate.
So open /etc/sendmail.cf again and this time..

  • Look for the line beginning O AuthMechanisms= If this line is commented out with a leading #, remove the # then make sure LOGIN and PLAIN are at the beginning of this line like this O AuthMechanisms=LOGIN PLAIN GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5
  • Look for the line beginning O DefaultAuthInfo= If this line is commented out with a leading #, remove the # then make this line O DefaultAuthInfo=/etc/mail/default-auth-info
  • Create a user account on James for sendmail to login as.
  • Create the file /etc/mail/default-auth-info
  • It should contain this
    username
    username
    password
    localhost
    Yes the username appears twice.
  • Replace username and password with the details of the account you just created.
  • This file has to be chmod'ed 600 (-rw------) or sendmail won't read it.
  • Look for the line beginning O AuthOptions= If this line is commented out with a leading #, remove the # and it should be O AuthOptions=A

ほら、御覧!

これで、Step3のテストをする準備ができました。全てのメールは受け付けられます。拒否される可能性が高いものは最後のものです。

はい、これで終わりです。幸運を祈ります :-)
Danny Angus


Copyright © 1999-2004, Apache Software Foundation
Translated into Japanese by Tetsuya Kitahata, powered by Terra-International, Inc.
<% orig();%>