#freeze
* [[James]]
Javaで作成されているメールサーバです。これが他とは違うのはメールアプリケーションを意識して作られていることです。またデータベースを使用することも可能です。JDBCでいろいろなDBが使用可能ですが、サンプルとして、mysql,oracle,postgresql,db2,sapdb,hypersonic,ingresなどがあります。

#contents

** 環境設定
http://jakarta.apache.orgからJamesをダウンロードしましょう。適当なディレクトリに解凍してください。その場所をJAMES_HOMEとします。JAVAで動きますので、[[JDK]]はインストールしておいてください。

**起動・停止
JAMES_HOME\bin\run.batを実行します。Linuxのときは./run.shで。エラーが出た場合は、SMTP(ポート25),POP3(ポート110)を別のアプリが使用している場合がありますので、[[Active Ports>http://www.protect-me.com/freeware.html]]で調べましょう。
停止は起動しているサーバにtelnetでポートは4555で入ります。ユーザ、パスワードはデフォルトでroot,rootです。shutdownと打ち込めば終了します。ログはJAMES_HOME\apps\james\logsにありますので、不正に中継されていないかチェックしておきましょう。

**administrator_account変更
JAMES_HOME\apps\james\SAR-INF\config.xmlの<remotemanager>に<administrator_accounts>があります。デフォルトではroot,rootになってますので、
まず、telnetでポート4555にログインし、adduser [username] [password]で新しい管理者を追加したユーザ、パスワードに変更します。必ず変更してきましょう。

** レポジトリをDBに
-data-source追加
JAMES_HOME\apps\james\SAR-INF\config.xmlの<database-connections>の<data-sources>に以下を追加(oracleの場合)
 <data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
  <driver>oracle.jdbc.driver.OracleDriver</driver>
  <dburl>jdbc:oracle:thin:@test:1521:testdb</dburl>
  <user>user</user>
  <password>password</password>
  <max>20</max>
 </data-source>
-使用するdbのjarをJAMES_HOME\libにコピー
-レポジトリ変更
 <inboxRepository>
  <repository destinationURL="file://var/mail/inboxes/" type="MAIL"/>
 </inboxRepository>
上記をコメントにし、(<!-- -->でくくる)以下のコメントを取る。
 <inboxRepository>
  <repository destinationURL="db://maildb/inbox/" type="MAIL"/>
 </inboxRepository>
-james再起動~
DBにテーブルができているか確認します。

** メールアプリケーションサンプル
まずEclipseでプロジェクトを作成します。といいたいとろこですが、最初にJamesのjarを展開しておきます。JAMES_HOME\appsにあるjames.sarを適当なディレクトリにコピーして展開します。このディレクトリをJAMES_TMPとします。
 jar xvf james.sar
プロジェクト作成後、プロジェクトのプロパティよりJavaのビルドパスを設定し、先ほど作成したJARを追加します。
またリモートデバックの設定もおこなっておきましょう。JAMES_HOME\bin\run.batに
 rem set DEBUG=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=yp
という行があります。remを消しておきます。
Eclipseのほうは、実行>デバッグ>リモートJavaアプリケーションでホスト:localhost ポート8000にしてデバックします。JAMES_HOME\bin\run.batは動かしておいてください。
 package test;
 import java.util.Properties;
 import javax.mail.Message;
 import javax.mail.MessagingException;
 import javax.mail.Session;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeUtility;
 import org.apache.mailet.GenericMailet;
 import org.apache.mailet.Mail;
 public class TestMailet extends GenericMailet {
    public void service(Mail objMail) throws MessagingException {
        try {
            MailAddress sender = objMail.getSender();
        		Properties props = System.getProperties();
        		Session session = Session.getDefaultInstance(props);
        		MimeMessage message = new MimeMessage(session);
        		InternetAddress objFrm = new InternetAddress("root@localhost", "rootから");
        		message.setFrom(objFrm);
        		InternetAddress objTo = new InternetAddress("test@localhost", "testへ");
        		message.setRecipient(Message.RecipientType.TO, objTo);
            //日本語を使う為、キャラクターコードをISO-2022-JPにしてエンコード、メールのヘッダー部分の為、MIMEの"B"encodingを使用
        		message.setSubject(MimeUtility.encodeText("テストです。ヘッダ","ISO-2022-JP","B"));
        		message.setText("テストです。ボディ","iso-2022-jp");
        		message.setSentDate(new Date());
        		getMailetContext().sendMail(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 }
またjames\SAR-INFのconfig.xml
 <processor name="root">
の下に
  <mailet match="UserIs=root" class="test.TestMailet"/>
を追加しておきます。このときのjames\SAR-INF\config.xmlはJAMES_HOME\james\SAR-INF\config.xmlではなく、JAMES_TMP\james\SAR-INF\config.xmlです。

 <?xml version="1.0" encoding="Shift_JIS" ?>
 <project name="jamestest" default="jarsar" basedir=".">
    <property name="app.jar" value="jamestest.jar"/>
	<property name="classes.dir" value="classes"/>
	<property name="jameslib.dir" value="james/SAR-INF/lib"/>
	<property name="james.dir" value="james/"/>
	<property name="james.sar" value="james.sar"/>
	<property name="james.home" value="H:/james-2.2.0/apps/"/>
	<target name="jar" description="JAR作成">
		<delete file="${app.jar}" />
		<jar jarfile="${app.jar}" basedir="${classes.dir}"/>
	</target>
	<target name="jarcopy" depends="jar" description="Jarをコピー">
		<copy todir="${jameslib.dir}" overwrite="true">
			<fileset file="${app.jar}"/>
		</copy>
	</target>
	<target name="jarsar" depends="jarcopy" description="sarを作成">
		<delete file="${james.dir}${james.sar}" />
		<jar jarfile="${james.dir}${james.sar}" basedir="${james.dir}"/>
	</target>
	<target name="james" depends="jarsar" description="james環境作成">
		<delete dir="${james.home}james/SAR-INF" />
		<copy todir="${james.home}" overwrite="true">
			<fileset file="${james.dir}${james.sar}"/>
		</copy>
	</target>	
 </project>
実行用のANTです。整理してないので汚いです。

** リンク
- http://wiki.apache.org/james/JamesQuickstart~
- [[Addressクラス>http://www.javadrive.jp/javamail/smtp/index4.html]] InternetAddressの使い方
- [[自動応答おみくじメーレット>http://www.kobu.com/java2/omikuji.html]]
- [[Java Sticky Note>http://salicaceae.net/james/]]
-『JAVA PRESS』Vol.30「メールアプリケーションサーバ実践活用講座」

** 参考書籍
-[[Javaメールアプリケーションプラットフォーム Apache Jakarta:JAMES詳解>http://www.amazon.co.jp/exec/obidos/ASIN/4775303171/worried-22]]~

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS