James
Jamesって?
JamesはJavaで書かれたメールサーバです。
SMPT、POP3などのプロトコルに対応しています。
James単体でメールサーバとして機能するため、
他にメールサーバを使わずに、注文確認メールを送ったり、
メーリングリストを運用したりできます。
面白いのはMailetという仕組みで、
到着したメールをトリガーにMailetという
プログラムを呼び出すことが出来ます。
機能的にはHTTPサーブレットのメール版と考えられますが、
サーブレットAPIとは異なるインターフェイスで作られています
(SMTPサーブレットとかではない)。
インターネットの一番の使い道と言えばメールでしょう。
メールでJavaでJakarta、それがJamesです。
詳しくないので、利点や使い道をうまく理解できず、
説明もできませんが、とりあえず観単に使ってみました。
実行してみる
DocumentationのInstallに書かれているステップがちゃんと短い要約になっているので、それに従ってインストール、実行します。
設定を変えなければ、けっこう簡単です。
ここではWindowsXP + JDK1.4のローカル環境で実行してみました。
ダウンロードしたファイルを展開し、任意のディレクトリに配置します。
binディレクトリのrun.bat(run.sh)を実行すると、Jamesが起動します。
うまくいくと、こんな感じになります。
C:\apps\james-2.0a3\bin>run
Phoenix 4.0a4
Application file:/C:/apps/james-2.0a3/apps/james.sar uses a deprecated packaging
format.
James 2.0a3-cvs
Started POP3 Server plain:110
Started SMTP Server plain:25
Started NNTP Server plain:119
終了はとりあえずCTRL+S(強制終了)です。
Jamesの起動で私は30分はまりました。
ウィルスバスターのpop3Trapがpop3ポートを取っていて、
ウィルスバスターを終了してもポートを開放しないんです。
しょうがないから、タスクマネージャでプロセスを強制終了(ちゃんとした方法はあるかも)。
JVM already Bindとかいうメッセージを見かけたら、
netstat -aとかでポートを確認してみましょう。
メール送受信してみる
デフォルトではユーザーアカウントがないので、
送受信のためにユーザーを登録します。
telnetで4555ポートに接続し、
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\miya>telnet
Microsoft Telnet クライアントへようこそ
エスケープ文字は 'CTRL+]' です
Microsoft Telnet> open localhost 4555
ルートでログインし、ユーザーを作成します。
JAMES RemoteAdministration Tool 2.0a3-cvs
Please enter your login and password
Login id:
root
Password:
root
Welcome root. HELP for a list of commands
addUser hoge hoge
User hoge added
ここで私は10分はまりました。telnetで4555ポートに接続するっていうのが、
分からなかった(素人かな。。。)。
普通のメーラーを起動し、アカウントの設定を行い、
先ほど作ったアドレス(hoge@localhostなど)に送信します。
受信すると、ちゃんとメール出せてますねぇ〜。
ここでもまた、はまります。
外部のプロバイダを経由して送信してました。
それはlocalhostには届かんだろうて。。。
Mailetの作成
ようやく、やりたかったことを始められます。
簡単なMailetを作成します。
package hoge;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import org.apache.mailet.*;
public class HelloMailet extends GenericMailet{
/**
* @see org.apache.mailet.Mailet#service(Mail)
*/
public void service(Mail mail) throws MessagingException {
System.out.println("called HelloMailet...");
try{
MimeMessage message = mail.getMessage();
System.out.println("headers=");
Enumeration enum = message.getAllHeaderLines();
while(enum.hasMoreElements()){
System.out.println(enum.nextElement());
}
Address[] address = message.getFrom();
sendMail(address);
}catch(Exception e){
e.printStackTrace();
}
}
/**
* to宛にメール送信
*/
private void sendMail(Address[] to) throws MessagingException{
Properties prop = new Properties();
prop.setProperty("mail.from", "result@localhost");
prop.setProperty("mail.smtp.host", "localhost");
MimeMessage message = new MimeMessage(Session.getDefaultInstance(prop));
message.setFrom(new InternetAddress("result@localhsot"));
message.setRecipients(Message.RecipientType.TO, to);
String enc = "ISO-2022-JP";
message.setSubject("はろー", enc);
message.setText("届いたよ", enc);
Transport.send(message);
}
}
やってることは、受信メールのヘッダ一覧を表示し、到着確認メールを返信するってだけです。詳細の解説はおこがましすぎて出来ません
(JavaMailさわったのも初めてに近く、きっとおかしなことをしてそうです)。
Mailetの登録
先ほど作ったMailetを登録します。
作成したクラスをJamesが認識できる場所におきます。
クラスをjarにして、apps/james/libに置きます。
設定ファイルでMailetを登録します。
apps/james/conf/config.xmlが設定ファイルです。
まず、クラスを含むパッケージを登録します。
例ではhogeパッケージだったので、hogeを登録します。
80行目付近
<mailetpackages>
<mailetpackage>org.apache.james.transport.mailets</mailetpackage>
<mailetpackage>hoge</mailetpackage>
</mailetpackages>
次にHelloMailetを登録します。
以下では、あて先ユーザーがpuuだったときに、
HelloMailetを呼び出します
(条件の例はDocumentationのConfigrationに書いています)。
160行目付近
<processor name="transport">
<!-- Is the recipient is for a local account, deliver it locally -->
<mailet match="UserIs=puu" class="hoge.HelloMailet">
</mailet>
<mailet match="RecipientIsLocal" class="LocalDelivery">
</mailet>
Jamesを起動し、puu@localhostにメールを出します。
うまくいくと、コンソールに以下のように出力されます。
James 2.0a3-cvs
Started POP3 Server plain:110
Started SMTP Server plain:25
Started NNTP Server plain:119
called HelloMailet...
headers=
Return-Path:
Received: from localhost ([127.0.0.1])
by miyax (JAMES SMTP Server 2.0a3-cvs) with SMTP ID 680
for ;
Sat, 7 Sep 2002 02:17:06 +0900
Date: Sat, 07 Sep 2002 02:17:06 +0900
From: hoge
Subject: aaa
To: puu@localhost
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-Mailer: TuruKame 1.98 (WinNT,501)
Message-Id:
でもって、返信メールも届いてますね?
それから
せっかくBフレッツをつないだことだし、
インターネットにつながるJamesメールサーバを立ててみようかな。
そして、写メールバトラーでも作ってみようかと思いましたが、
実現するのはいつの日か。
参考
(2002/9/7)
もどる