自宅のメールサーバとして使っているJames2.2を2.3.1にアップグレードしたので、その備忘録。
途中に出てくる2.2から2.3へのファイルコピーをしない場合は、新規のインストール手順にもなります。
下準備
http://james.apache.org/download.cgiより、james-binary-2.3.1.tar.gzをゲット。
適当なディレクトリに展開(以下展開フォルダをJAMES_ROOTとする)
展開後、JAMES_ROOT/bin/run.shを実行し、Jamesを起動。
エラーが出ても出なくてもよいので、起動が終わったら停止させる。
JAMES_ROOT/apps/jamesフォルダ以下に、SAR-INFやconfといったディレクトリが出来ているかどうか
確認する。
(JamesはAvalonというフレームワーク用フレームワーク上で動作しています。
Avalon先生は起動時にappsディレクトリ以下のserファイルを展開するようなので、とりあえず起動させることで展開を促します)
ファイルコピー
James2.2下のapp/james/varフォルダを、JAMES_ROOT/apps/james/varにコピーする。
(このvar以下がデータ領域で、コピーすることでメールボックスとユーザー情報がすべて移行できます)
設定
JAMES_ROOT/apps/james/SAR-INF/cofig.xmlに設定を行います。
2.2から記述が若干変わっているため、2.2を2.3に変更するより、2.3のデフォルト設定に2.2を足したほうが早いと思います。
うちの場合は特に複雑なことはしていないのですが、SMTPAuthを使用しているのでその設定を行います。
・35行目 postmastarのタグに管理者用のメールアドレスを設定 ・56行目 メールサーバのドメインを設定(もしかしたらいらないかも) ・535行目 <mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor"> <processor> relay-denied </processor> <notice>550 - Requested action not taken: relaying denied</notice> </mailet> の部分をコメントアウトする。 この設定は、送信者のIPアドレスを見て送信するかどうかを決める設定です。 従って、デフォルトは127.0.0.1からの送信しか認めてくれません。 Jamesを導入して何故かメールが送れない時は、大体ここの設定で止まってしまってる パターンと思います。 うちの場合はSMTPAuthを使ため、この設定がなくてもよいのでコメントアウトします。 もしSMTPAuthを使わず、かつ特定のIPやドメインからの利用しか認めなくしたい場合は、 <mailet match="RemoteAddrNotInNetwork=127.0.0.1,hoge.co.jp,192.168.1.*, " class="ToProcessor"> <processor> relay-denied </processor> <notice>550 - Requested action not taken: relaying denied</notice> </mailet> みたいにするとよいようです。 SMTPAuthを使わずにここの部分をコメントアウトすると、どこの誰でも送信できるように なります。 ・874行名 authRequiredのタグをtrueにする。この設定で、送信にSMTPAuthが必要になります。
最後に再起動
JAMES_ROOT/bin/run.shを実行し、Jamesを起動します。
ちなみに
ユーザーの追加削除、Jamesの停止などの制御は、制御用ポートを通じて行います。
Jamesが4555番ポートに制御用のソケットを開けているので、
telnet localhost 4555
Loginid :root
Password:root
でログインすることで、制御を行えます。
ユーザーとパスワードはデフォルトでroot:rootですが、JAMES_ROOT/apps/james/SAR-INF/cofig.xmlの797行目あたりを書き換えるとユーザーとパスワードを変更できるので、やっておいたほうがよいかと思います。
昨今のOSにはデフォルトで優秀なメールサーバが入っているので、わざわざJamesを使う理由は
ないのですが、JamesにはServletに似た「Mailet」という仕組みがあって、それがウリに
なってます。
Mailetを使うと、特定の条件をトリガーにして、(例えばhatena@で始まるメールアドレスに送られてきた時とか)特定のMailetを起動する事が出来ます。
Mailet内では送信されてきたメールのデータに簡単にアクセスすることが出来るので、
「送信者のアドレスをDBにしまう」とか、「添付の写真をファイルとして保存する」とかが
簡単に出来ます。
もしこういうことをする必要がある案件があった場合は、Jamesを使ってみるのも
悪くないかと思います。
JREさえ入っていれば簡単に動きますし、なによりJavaでコーディングできますので。