ozacc-mail library

ozacc-mail libraryは、Spring FrameworkやSeasar2といったDIコンテナに組み込んで使用できるメール送信ライブラリです。DIコンテナ上での使用を想定していますが、DIコンテナ環境外での使用も可能です。

依存ライブラリ

ozacc-mail library 1.0 beta2の使用する際は、次のJARファイルをクラスパスに含めてください。

  • JavaMail 1.3.1 (mail.jar) [必須]
  • JavaBeans Activation Framework(JAF) 1.0.2 (activation.jar) [必須]
  • Jakarta Commons Logging 1.0.3 [必須]
  • JDOM b9[com.ozacc.mail.XMLMailBuilderを使用する場合]
  • Jakarta Velocity 1.4 [com.ozacc.mail.XMLMailBuilderのVelocityサポートを使用する場合]
  • Jakarta Commons Collection 1.4 [com.ozacc.mail.XMLMailBuilderのVelocityサポートを使用する場合]

SendMail 使用方法 with Spring

SendMailは、JavaMail APIをラップし、メール送信のための至極シンプルなインターフェースを提供しています。提供しているメソッド名はたった一つ、send()です。メールデータを表すcom.ozacc.mail.Mailインスタンスか、JavaMailのMimeMessageインスタンスを引数に指定すると、それを送信します。(これらの配列も指定可能です。)

SendMail(SendMailImpl)は、スレッドセーフな設計になっていますが、呼び出すスレッドの数だけSMTPサーバに接続します。通常の使用では問題にならないはずですが、メールサーバやその設定によっては注意が必要です。

SendMailの使用方法を、Springと連携させる場合を例にとって説明します。

▼applicationContext.xmlでのBean定義

<bean id="sendMail" class="com.ozacc.mail.impl.SendMailImpl">
    <!-- SMTPサーバ -->
    <property name="host"><value>smtp.example.com</value></property>
</bean>

▼Javaソース

// Mailインスタンスの生成
Mail mail = new Mail();
mail.setFrom("shop@example.com", "XXXオンラインショップ");
mail.addTo("misaki@foo.com", "伊東美咲さま");
mail.addBcc("order@example.com");
mail.setSubject("ご注文の確認");
mail.setText("お買い上げありがとうございました。\n\nご注文明細・・・");

// SendMailインスタンスの取得
SendMail sendMail = (SendMail)applicationContext.getBean("sendMail");

// メールの送信
sendMail.send(mail);

sendMail.send(mail)で、何らかの原因で送信に失敗すると、com.ozacc.mail.MailExceptionがスローされます。MailExceptionは非チェック例外なので、プログラムの要求に応じてキャッチしてください。

MailBuilder 使用方法 with Spring

MailBuilderを使用すると、ファイルに記述されたメールデータからMailインスタンスを生成できます。

さらに、MailBuilderインターフェースを継承したVelocityMailBuilderを使用すると、Velocityと連携して動的にメールデータを生成し、そのデータからMailインスタンスを生成できます。

現バージョンでは、XMLのメールデータを扱うXMLMailBuilderが提供されています(XMLMailBuilderVelocityMailBuilderを継承しており、実装クラスはJDomXMLMailBuilderです。)。ここではその使用方法を、Springと連携させる場合を例にとって説明します。

▼applicationContext.xmlでのBean定義

<bean id="sendMail" class="com.ozacc.mail.impl.SendMailImpl">
    <property name="host"><value>smtp.example.com</value></property>
</bean>

<bean id="mailBuilder" class="com.ozacc.mail.impl.JDomXMLMailBuilder" />

▼Javaソース

// MailBuilderインスタンスの取得
MailBuilder mailBuilder = (MailBuilder)applicationContext.getBean("mailBuilder");

// メールデータXMLファイルのパス (クラスパス上)
String path = "/com/example/mail/mail-template.xml";

// Mailインスタンスを生成
Mail mail = mailBuilder.buildMail(path);

// SendMailインスタンスの取得
SendMail sendMail = (SendMail)applicationContext.getBean("sendMail");

// メールの送信
sendMail.send(mail);

▼mail-template.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mail PUBLIC "-//OZACC//DTD MAIL//EN" "http://www.ozacc.com/library/dtd/ozacc-mail.dtd">
<mail>

	<returnPath email="return@example.com" />
	
	<from email="from@example.com" name="差出人" />
	
	<recipients>
		<to email="to1@example.com" name="宛先1" />
		<cc email="cc1@example.com" name="CC1" />
		<bcc email="bcc@example.com" />
		<cc email="cc2@example.com" />
		<to email="to2@example.com" />
	</recipients>
	
	<replyTo email="reply@example.com" />
	
	<!-- subject(件名)の前後のホワイトスペース(半角スペース、タブ、改行)は削除されます。 -->
	<subject>
		件名
	</subject>
	
	<!-- body(本文)の前後のホワイトスペース(半角スペース、タブ、改行)は削除されます。 -->
	<body>
		本文
	</body>
	
</mail>

Velocityとの連携については、テストケース(src/test/com/ozacc/mail/impl/JDomXMLMailBuilderTest)を参照してください。