以前にも同じような質問が何度も聞かれたことは知っていますが、これは少し違うと思います:)
ユーザーのリストにメールを送信するMavenレポートプラグインを作成しています。java5で実行するとコードは正常に機能しているように見えますが、java6では失敗するという問題があります。実際、プラグインはGroovyで記述されており、commons-emailユーティリティを使用してhtmlメッセージを送信します。
HtmlEmail email = new HtmlEmail();
email.setHostName(mailhost);
email.setSmtpPort(mailport);
email.setFrom(args.from);
email.addTo(args.receiver);
email.setSubject(args.subject);
email.setHtmlMsg(args.htmlmessage);
email.setDebug(log.isDebugEnabled());
email.send();
プロジェクトには、javax.mail:mail:1.4.1およびjavax.activation:activation:1.1.1への依存関係があります。
新しいプラグインを使用してMavenプロジェクトを実行すると、java6で次の例外が発生します。
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed;
boundary="----=_Part_0_11139111.1262007863993"
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:676)
at javax.mail.Transport.send0(Transport.java:189)
java5では問題はありません。
次の回避策を試しました。
プログラムでmailcap構成を追加します。
// add handlers for main mail MIME types MailcapCommandMap mc = (MailcapCommandMap)CommandMap.getDefaultCommandMap(); mc.getMimeTypes().each{ println "Original MIME-TYPE: $it" } mc.getAllCommands ("multipart/mixed").each { println "Original COMMAND: $it" } mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); mc.addMailcap("multipart/mixed;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); CommandMap.setDefaultCommandMap(mc); MailcapCommandMap mc2 = (MailcapCommandMap)CommandMap.getDefaultCommandMap(); mc2.getMimeTypes().each{ println "Replaced MIME-TYPE: $it" } mc2.getAllCommands ("multipart/mixed").each { println "Replaced COMMAND: $it" }
これもjava6では機能しませんが、要求されたmimetypeがmailcapに登録されていないことを実際に示しています(「println」ログステートメントのループを参照)。
Original MIME-TYPE: image/jpeg Original MIME-TYPE: image/gif Original MIME-TYPE: text/* Replaced MIME-TYPE: message/rfc822 Replaced MIME-TYPE: multipart/* Replaced MIME-TYPE: text/plain Replaced MIME-TYPE: text/xml Replaced MIME-TYPE: multipart/mixed Replaced MIME-TYPE: text/html Replaced MIME-TYPE: image/jpeg Replaced MIME-TYPE: image/gif Replaced MIME-TYPE: text/* Replaced COMMAND: javax.activation.CommandInfo@1e5d007 Replaced COMMAND: javax.activation.CommandInfo@bc8f01
「mailcap」というファイルを作成し、プラグインの「META-INF」ディレクトリに配置しました(http://java.sun.com/j2ee/1.4/docs/api/javax/activation/MailcapCommandMap.htmlを参照) 。 。しかし、これはまったく取り上げられません。
だから私の質問は、java5とjava6でコード/構成をどのように機能させるかについて誰かが何か考えを持っているかどうかです:)