JamesJavaで作成されているメールサーバです。これが他とは違うのはメールアプリケーションを意識して作られていることです。またデータベースを使用することも可能です。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に
メールアプリケーションサンプルまず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です。整理してないので汚いです。 リンク
参考書籍 |