SpringでのMIMEのサポート(Spring1.2.1)
SpringはMIMEもサポートしているらしいので,試してみた.
Springでの,MIMEサポートは以下のような状況である.
- MailSenderの実装クラスはJavaMailSender.
- MIME形式のメールを構築するためのヘルパークラスがある.
メール送信処理を記述する,MimeMailBLImplを以下に示す.
BeanFactoryにより,mailSenderにはJavaMailSenderImplが設定されている.
二つのメソッドprocessUniPart,processMultiPartが本頁の本題である.
前者が非マルチパートメール,後者がマルチパートメールを送信する.
Springでは,MIMEメッセージを作成するには,MimeMessagePreparatorを使用してJavaMailSenderImpl#send(MimeMessagePreparator)から呼び出すコールバックメソッドを実装する.
MimeMessagePreparator preparator = new MimeMessagePreparator() {
MimeMessagePreparatorはインタフェースで,サンプルのようにコールバックprepare(MimeMessage)メソッドを実装する.
このメソッド内で,具体的にどういったメールを生成するかといった処理を記述する.
SpringではMIMEメール生成のためのヘルパークラスとして,MimeMessageHelperがある.
いくつかのコンストラクタがあり,以下がもっとも設定の多いものである.
MimeMessageHelper(MimeMessage mimeMessage, boolean multipart, String encoding)引数について以下に記述する.
- mimeMessage.
- MimeMessageHeloperは内部でこれを編集するのだが,prepareメソッドの引数を渡すことで,JavaMailSenderImplに編集結果を渡す. したがって,決めでprepareメソッドの引数を渡す.
- multipart
- 作成するメールがマルチパートか否かのフラグを設定する. したがってサンプルでは,メソッドprocessUniPartではfalse,processMultiPartではtrueを設定している.
- encoding
- 文字コードを記述する. サンプルでは日本語を記述するので,ISO-2022-JP(定数MAIL_CHAR_SET)を設定している.
message.setSubject(origMessage.getSubject() + " / UniPart版サブジェクト");
message.setText("UniPart版メール本文.");
は,サンプルでコメントアウトされている
mimeMessage.setSubject(origMessage.getSubject() + " UniPart版サブジェクト", MAIL_CHAR_SET);
mimeMessage.setText("UniPart版メール本文.", MAIL_CHAR_SET);
と等価となる.
processMultiPartにあるように,MimeMessageHelperでは,
addInline addAttachmentなどが提供されており,マルチパートメールの作成を補助してくれる. なお,setTextは,addInlineやaddAttachmentより先に呼び出さなければならない.
MimeMessageHelperを使用すると,いちいちsetTextなどをする際に文字コードを指定する必要がない.
コンストラクタのものが設定される.
MimeMessageHelper#setTextには,その設定が楽になった分,HTMLメールか否かの引数がある.
- setText(String text)
- 通常のテキストを設定する.
- setText(String text, boolean html)
- 第二引数で,HTMLメールか否かを指定する. 第二引数に応じて,Content-Typeがtext/htmlに変化する.
- setText(String plainText, String htmlText)
- プレーンテキストと,HTMLテキストの両方を設定する. これは両方メールに記述し,メールクライアントにて表示を選択するようなメールである.
本頁のサンプルドライバを以下に示す.
サンプルを実行する前に,
conf/mail.confに,メールの設定を記述する. サンプルを実行すると実際にメールを送信するので,送信先などに注意する. 実行には,引数でマルチパートメールか否かを指定する.
$> java -jar springsample.jar falseあとは,宛先でメールを受信して内容を確認する.

