Senden Sie eine E-Mail von Java5 und Java6

Ich weiß, dass ähnliche Fragen schon oft gestellt wurden, aber ich denke, dass diese etwas anders sind :)

Ich schreibe ein Maven-Berichts-Plugin, das E-Mails an eine Liste von Benutzern sendet. Ich habe jetzt das Problem, dass der Code gut zu funktionieren scheint, wenn ich ihn mit java5 ausführe, aber mit java6 fehlschlägt. Tatsächlich ist das Plugin in Groovy geschrieben und verwendet die Commons-E-Mail-Dienstprogramme, um eine HTML-Nachricht zu senden:

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();

Das Projekt ist abhängig von javax.mail: mail: 1.4.1 und javax.activation: activation: 1.1.1.

Wenn ich ein Maven-Projekt mit meinem neuen Plugin starte, erhalte ich diese Ausnahme mit 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)

Mit Java5 habe ich keine Probleme.

Ich habe die folgenden Problemumgehungen versucht:

Fügen Sie die mailcap-Konfiguration programmgesteuert hinzu:

// 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" }

Dies funktioniert auch nicht mit Java6, aber es zeigt wirklich, dass der angeforderte Mimetyp nicht in der Mailcap registriert ist (siehe Schleifen mit 'println'-Protokollanweisungen).

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

Ich habe eine Datei mit dem Namen 'mailcap' erstellt und diese im 'META-INF'-Verzeichnis des Plugins abgelegt (siehehttp://java.sun.com/j2ee/1.4/docs/api/javax/activation/MailcapCommandMap.html). Aber das wird überhaupt nicht aufgegriffen.

Meine Frage ist also, ob jemand eine Idee hat, wie ich den Code / die Konfiguration auf Java5 und Java6 zum Laufen bekomme :)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage