Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)

[目次][用語][索引][前へ][次へ]

8.3 JavaMailを利用する場合の注意事項

この節では,JavaMailを利用する場合の注意事項について説明します。

<この節の構成>
(1) メソッドの例外発生について
(2) POP3でのSEENフラグの動作について
(3) JavaMailのプロバイダについて
(4) レスポンスコードについて
(5) アプリケーションでメールサーバとの接続およびメールの受信をしたときの注意
(6) JavaMailの仕様との相違点について
(7) MimeUtility APIの挙動差について

(1) メソッドの例外発生について

次のクラスのメソッドでは,JavaMail仕様どおりに例外が発生しません。

項番 クラス名 メソッド名
1 javax.mail.Message setFlag,setFlags
2 javax.mail.Folder setFlags

READ_ONLYを設定したjavax.mail.Folderオブジェクトから取得したjavax.mail.Messageオブジェクトに対して,表中に示したメソッドでフラグの値を変更しても,READ_WRITEを設定したときと同様に正しくフラグが設定されます。

ただし,POP3の場合,READ_ONLYでフォルダをオープンし,メッセージにDELETEDフラグを設定しても,実際にはメールは削除されません。

(2) POP3でのSEENフラグの動作について

JavaMail仕様ではMessageのgetInputStreamメソッドとgetContentメソッドを使用した場合,SEENフラグが設定される仕様となっていますが,実際にはSEENフラグは設定されません。

(3) JavaMailのプロバイダについて

アプリケーションサーバで使用できるJavaMailのプロバイダは,アプリケーションサーバがデフォルトで提供するSMTP,SMTPSおよびPOP3のプロバイダだけです。javamail.providersファイルを使用して別のプロバイダに差し替えた場合の動作は保証しません。

(4) レスポンスコードについて

JavaMailが不正と見なすレスポンスコードは厳密なRFC仕様とは異なり,RFC仕様で不正と見なすレスポンスコードを不正と見なさない場合があります。そのため,RFC仕様以外の不正なレスポンスを受け取ったことを示すメッセージ(KDJE59111-EまたはKDJE59112-E)ではなく,異常値のレスポンスコードを受け取ったことを示すメッセージ(KDJE59107-E,KDJE59108-E,KDJE59109-EまたはKDJE59110-E)を出力する場合があります。

(5) アプリケーションでメールサーバとの接続およびメールの受信をしたときの注意

アプリケーションでメールサーバとの接続およびメールの受信をしたあとに,次のメソッドを呼ばないでアプリケーションの停止またはリロードを実行すると,KDJE59106-Eメッセージを出力する場合があります。

この場合,それぞれのcloseメソッドを呼んでいるかどうかを確認してください。

なお,KDJE59106-Eメッセージは出力しますが,アプリケーションの停止およびリロードの処理には影響ありません。また,JavaMailの動作にも影響はありません。

(6) JavaMailの仕様との相違点について

メールのヘッダで,Reply-Toヘッダフィールドに「Reply-To:」だけが指定され,アドレスの指定がない場合,アプリケーションサーバのJavaMailでは,javax.mail.MimeMessageクラスのgetReplyToメソッドに,getFromメソッドの戻り値を返さないで,長さ0のjavax.mail.Addressオブジェクトの配列を返します。

(7) MimeUtility APIの挙動差について

javax.mail.internet.MimeUtilityクラスのencodeメソッドでエンコード方式に"base64"を用いた場合,Component Containerのバージョンおよび戻り値として得たOutputStreamに対するcloseメソッドの実行有無により,末尾への改行("\r\n")付与の有無が次のように異なります。

Component Containerのバージョン OutputStream.closeメソッドの実行の有無 末尾への改行付与
09-00以前 付与しない
付与しない
09-50以降 付与する
付与しない

MimeUtility.encodeメソッドの戻り値として得たOutputStreamの末尾に不要な改行が存在する場合は,改行文字を削除してください。