Je sais que des questions similaires ont été posées à plusieurs reprises befor, mais je pense que celui-slitly différent :)envoyer un mail de java5 et java6
J'écris un plugin rapport Maven qui enverra des courriels à une liste de utilisateurs. J'ai maintenant le problème, que le code semble fonctionner correctement quand je l'exécute avec java5, mais échoue avec java6. le plug-in est actuellement writen Groovy et utilise les utilitaires email communes pour envoyer un message 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();
Le projet a des dépendances au javax.mail: mail: 1.4.1 et javax.activation: activation : 1.1.1.
Si je lance un projet Maven en utilisant mon nouveau plugin, que je reçois cette exception avec 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)
Avec java5 Je n'ai aucun problème.
J'ai essayé les solutions de contournement suivantes:
Ajouter la configuration mailcap programme:
// 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" }
Cela ne fonctionne pas non plus avec java6, mais il montre vraiment que le type MIME demandé ne soit pas enregistré dans le mailcap (voir les boucles avec les déclarations du journal '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]
J'ai créé un fichier appelé 'mailcap' et l'a placé dans le répertoire META-INF 'du plugin (voir http://java.sun.com/j2ee/1.4/docs/api/javax/activation/MailcapCommandMap.html). Mais ça ne se voit pas du tout.
Alors ma question est, si quelqu'un a une idée sur la façon dont je reçois le code/configuration de travail sur java5 et java6 :)
un cas courant est d'avoir en quelque sorte l'implémentation geronimo de javax.mail, qui est bogué. – Bozho
Merci pour ça! J'ai trouvé le fullanswer sur: http: //blog.hpxn.net/2009/12/02/tomcat-java-6-et-javamail-cant-load-dch/ et a été capable de résoudre le problème en appelant ceci: Thread.currentThread(). setContextClassLoader (getClass(). getClassLoader()) – domi
Ah, le plus excellent –