Maiにアノテーションでメール設定をセット
diconでなくて、Maiに直接アノテーションでToとかFromとか設定出来ます。その場合は、Maiインタフェース名.diconとか作らなくていいです。
public interface TestMai { static final String FROM = "hoge@foo.com"; static final String TO = "rokugen@example.com"; void sendMail(TestData data); }
これでMai全体にFromとかToとか反映されます。メソッド単位にしたい時は、「メソッド名_TO」とかにしましょう。
public interface TestMai { static final String FROM = "hoge@foo.com"; static final String TO = "rokugen@example.com"; static final String sendMail2_TO = "kei@example.com"; void sendMail(TestData data); void sendMail2(TestData2 data); void sendMail3(TestData3 data); }
この場合、sendMailとsendMail3の実行時にToには「rokugen@example.com」が設定されて、sendMail2の実行時には「kei@example.com」が反映されます。
ToやCcやBccなど、複数指定するものには、配列での指定も出来ます。
さて、メールアドレスには、アドレス本体と別に名前をセットしたいですね。「六
この場合には、JavaMailのInternetAddress使うのが一般的(なのか?)ですが、これは初期化する時に例外キャッチしなきゃいけないので(マイッタマイッタ)、アノテーションに使えないのです。そこでS2Maiでアドレスと名前を保持するクラスを提供しています。org.seasar.mai.mail.MailAddressといいます。そのまんまですが。
static final MailAddress FROM = new MailAddress("hoge@foo.com","送信元名"); static final MailAddress[] TO = new MailAddress[]{new MailAddress("rokugen@example.com","六"), new MailAddress("mai@example.com","まい")};
MailAddressのコンストラクタの引数は、第一がメールアドレス、第二が名前になります。第二は省略可能です。MailAddress自体では、メールアドレスのフォーマットなど、規定に外れていても特にエラーは起きませんが、最終的にInternetAddressへとセットされるので、そこで例外が発生しますのでご注意下さい。
定数アノテーションには下記があります。
- SUBJECT
- FROM
- TO
- CC
- BCC
- REPLY_TO
- RETURN_PATH
ここで設定された値は、Maiインタフェース名_メソッド名.diconで設定されたものより優先されます。
さて、これだとアプリ側で動的にセットする事が出来ませんね。それではフォームからsubmitされたアドレスに返信したり出来ません。ので、POJOのプロパティにセットする方法もあります。
つづく。