James

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

環境設定

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

起動・停止

JAMES_HOME\bin\run.batを実行します。Linuxのときは./run.shで。エラーが出た場合は、SMTP(ポート25),POP3(ポート110)を別のアプリが使用している場合がありますので、Active Portsで調べましょう。 停止は起動しているサーバに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です。整理してないので汚いです。

リンク

参考書籍


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-01-13 (木) 16:54:00 (7063d)