我知道类似的问题已经被问过很多次了,但我认为这个问题有点不同:)
我正在编写一个 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 上运行:)