我知道类似的问题发送邮件已经被问了很多次befor,但我认为这一个slitly不同:)从Java5中和的Java6
我正在写一个Maven插件报告将发送电子邮件到列表用户。我现在有这个问题,当我使用java5运行代码时,代码似乎工作正常,但与java6一起失败。 Actualy该插件在Groovy writen,并使用公共电子邮件工具来发送一个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:邮箱:1.4.1和javax.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工作,但它确实表明,所请求的MIME类型未被登记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: [email protected] Replaced COMMAND: [email protected]
我创建了一个名为 'mailcap的' 文件并把它放在插件的 'META-INF' 目录(见http://java.sun.com/j2ee/1.4/docs/api/javax/activation/MailcapCommandMap.html)。但是这根本没有得到回应。
所以我的问题是,是否有人对我如何获取代码/配置上Java5的和的Java6 :)
一个常见的情况是以某种方式拥有javax.mail的geronimo实现,这是buggy。 – Bozho 2009-12-28 15:35:57
感谢您的支持!我真的发现fullanswer在:http://blog.hpxn。net/2009/12/02/tomcat-java-6-and-javamail -cant-load-dch/ ans通过调用以下代码可以解决此问题: Thread.currentThread().setContextClassLoader(getClass())。 getClassLoader()) – domi 2009-12-28 17:52:12
啊,最优秀的 – 2009-12-29 05:18:34