James

自宅のメールサーバとして使っている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でコーディングできますので。