- 追加された行はこの色です。
- 削除された行はこの色です。
- James へ行く。
#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]]~