misc.‎ > ‎

テスト用転送無しメールサーバ

2005-09-23

メール送信などのテストで使うためにローカルに置くメールサーバを Apache James でつくってみました。送信を受け付けたメールを他のサーバに全く転送しません。

James は毎分 2,000通を超えるメールを処理できるそうで、 スパム拒否の機能などもデフォルトで入っていてかなり高機能です。 設定の変更だけでいろいろできそうですが、 Servlet と同じようにフィルタや機能を自分で実装することが可能で、使い道はかなり広いようです。

今回はほとんどインストールしたまま、設定の変更は 1箇所だけで済ませました。

情報源

Javaメールアプリケーションプラットフォーム Apache Jakarta:JAMES詳解 ISBN: 4775303171

用意したもの

  • Java2 SDK 1.4.2 – JDK または JRE 1.3 以降で動作すると思います。
  • Apache James – 現時点の最新版 2.2.0 を使いました。

インストールと設定

james-2.2.0.zip を適当なディレクトリに解凍します。 C:\opt\james-2.2.0 に置きました。

C:\opt\james-2.2.0\bin\run.bat を起動します ( Windows の場合 ) 。するとこんな感じで起動します。


C:\opt\james-2.2.0\apps\james.sar というのが Servlet なら WAR に相当するライブラリのようです。起動時に C:\opt\james-2.2.0\apps\james の下に次のようなディレクトリ構成が作成されます。


telnet localhost 4555 で管理コンソールにログインします。管理アカウントはデフォルトで root/root です。 help コマンドで次のようなコマンドの一覧が表示されます。


ユーザ test1 を追加しました。

adduser test1 password

C:\opt\james-2.2.0\apps\james\SAR-INF\config.xml を1箇所だけ変更しデフォルトの動作を「転送拒否」にします。

         <!-- Send remaining mails to the transport processor
          for either local or remote delivery -->
         <mailet match="All" class="ToProcessor">
            <!-- <processor> transport </processor> -->
            <processor> relay-denied </processor>
         </mailet>
      </processor>

最後に管理コンソールから shutdown して再起動して設定完了です。

動作の確認

メールクライアントに、ユーザ名 test1 サーバは smtp, pop とも localhost のアカウントを設定します。そして、自分宛 ( To: test1@localhost ) のメールを送信して、受信してみます。すると受信できません。ローカルのユーザの場合の設定などが何もないので relay-denied として処理されているからです。 C:\opt\james-2.2.0\apps\james\var\mail\relay-denied を見ると、次のような 2つのファイルができています。

4D61696C313132373437323636363735372D30.Repository.FileObjectStore
4D61696C313132373437323636363735372D30.Repository.FileStreamStore

これらのうち *.FileStreamStore のほうは次のような ASCII 形式のデータです。

Return-Path: <test1@localhost>
Received: from 127.0.0.1 ([127.0.0.1])
          by orange (JAMES SMTP Server 2.2.0) with SMTP ID 62
          for <test1@localhost>;
          Fri, 23 Sep 2005 19:51:06 +0900 (JST)
To: test1@localhost
Subject: =?iso-2022-jp?B?GyRCPCtKLDA4JWEhPCVrGyhC?=
From: "Test User #1 at Localhost" <test1@localhost>
Organization: localhost
Content-Type: text/plain; format=flowed; delsp=yes; charset=iso-2022-jp
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Date: Fri, 23 Sep 2005 19:50:55 +0900
Message-ID: <op.sxjxq5i8pxtr8j@orange>
User-Agent: Opera M2/8.5 (Win32, build 7702)

自分宛メール

Windows の場合このファイルの拡張子を *.eml にしてシステムのデフォルトのメールソフトで開くと次のように表示されます。


これらの 2つのファイルを Inbox のユーザアカウントのサブディレクトリ C:\opt\james-2.2.0\apps\james\var\mail\inboxes\test1 に移動すると、メールクライアントから受信できるようになります。

次にメールクライアントに test2@dummy.com というアカウントを作成し、メールサーバは localhost とします。

このアカウントから実在するメールサーバ宛てにメールを送信すると、それも relay-denied の対象となり、 C:\opt\james-2.2.0\apps\james\var\mail\relay-denied にデータが残ります。

Return-Path: <test2@dummy.com>
Received: from 127.0.0.1 ([127.0.0.1])
          by orange (JAMES SMTP Server 2.2.0) with SMTP ID 413
          for <test3@mmichi.com>;
          Fri, 23 Sep 2005 20:10:39 +0900 (JST)
To: test3@mmichi.com
Subject: =?iso-2022-jp?B?GyRCPEI6XyQ5JGslYSE8JWslNSE8JVAkS0F3Py4bKEI=?=
From: "Test User #1 at Localhost" <test2@dummy.com>
Organization: localhost
Content-Type: text/plain; format=flowed; delsp=yes; charset=iso-2022-jp
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Date: Fri, 23 Sep 2005 20:10:33 +0900
Message-ID: <op.sxjynvjmllssr8@orange>
User-Agent: Opera M2/8.5 (Win32, build 7702)

実在するメールサーバに送信

できました ↓