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のプロパティにセットする方法もあります。

つづく。