2016-07-21 6 views
1

ich meine Bewerbung vor kurzem aus dem Spiel migriert 2.3 2.5 nach dieser Anleitung spielen https://www.playframework.com/documentation/2.5.x/Migration25 und ich Play-Mailer aktualisieren, nach dem, was hier angegeben https://github.com/playframework/play-mailerkönnen nicht mit Play Asynchron-E-Mails senden 2.5

Jetzt ist mein App nicht mehr kann E-Mails senden. Ich habe ein Injector Constructor für Mailer Beispiel Injizieren

@Inject public SmtpConnector(MailerClient mailer) 
{ 
    this.mailerClient = mailer; 
    MailcapCommandMap mc = (MailcapCommandMap) MailcapCommandMap.getDefaultCommandMap(); 
    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("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
    CommandMap.setDefaultCommandMap(mc); 
} 

ich die E-Mail senden Methode in einem Asynchron-Aufgabe auszuführen:

CompletableFuture.runAsync(() -> mailerClient.send(email)).exceptionally(exc -> {exc.printStackTrace(); return null;}); 

Aber ich halte einen Fehler über den Mangel an suport über MIME-Typ immer mehrt:

... java.util.concurrent.CompletableFuture $ AsyncRun.run (CompletableFuture.java:1626) ... 5 weitere verursacht durch: javax.mail.MessagingException: IOException während m Senden Essage; verschachtelte Ausnahme ist: javax.activation.UnsupportedDataTypeException: kein Objekt DCH für MIME-Typ multipart/alternative; boundary = "---- = _ Part_0_1284684208.1469102367572" bei com.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:1177) bei javax.mail.Transport.send0 (Transport.java:195) bei javax.mail .Transport.send (Transport.java:124) bei org.apache.commons.mail.Email.sendMimeMessage (Email.java:1411) ... 14 mehr verursacht von: javax.activation.UnsupportedDataTypeException: kein Objekt DCH für MIME-Typ mehrteilig/alternativ; boundary = "---- = _ Part_0_1284684208.1469102367572" bei javax.activation.ObjectDataContentHandler.writeTo (DataHandler.java:896) bei javax.activation.DataHandler.writeTo (DataHandler.java:317) bei javax.mail.internet.MimeBodyPart .writeTo (MimeBodyPart.java:1485) unter javax.mail.internet.MimeMessage.writeTo (MimeMessage.java:1773) unter com.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:1121) ... 17 mehr

Aber:

Gibt es einen Workaround? Gibt es eine (andere) Möglichkeit, Emails mit einer Java API mit Play Framework 2.5 zu versenden?

UPDATE 1:

Nach jmehrens Vorschlag, ich aktiviert, um die Debug-Flag, das ist, was ich habe:

kann nicht geladen werden DCH com.sun.mail.handlers.multipart_mixed; Ausnahme: java.lang.ClassNotFoundException: com/sun/mail/Handler/multipart_mixed

Und nach diesem GitHub.com/playframework/Play-Mailer/Themen/104 das Problem, indem sie nicht den Aufruf der Methode aus dem Kontext des Play-Controller

UPDATE 2 ausgelöst scheint: Klasse Ausgang von Anfang an: Hier haben Sie die -verbose finden bis Ausnahme: s000.tinyupload.com/?file_id=50323853839855936002

UPDATE 3:

Hier haben Sie den Klassenlader von getClass finden() abgeladen, wie jmehrens vorgeschlagen: s000.tinyupload.com/? file_id = 51200633758480523188

+0

Ist es möglich, die Systemeigenschaft 'javax.activation.debug = true' fügen Sie die Ausgabe auf die Frage zu setzen? Sie sollten auch versuchen, den Classloader-Baum für 'javax.mail.Session',' javax.activation.DataHandler', den aktuellen Kontext-Classloader und den Classloader von 'mailerClient' zu drucken. – jmehrens

+0

Sieht aus wie ein Problem mit dem Layout des aufrufenden Classloaders. Konnten Sie den Classloader-Baum drucken? [Hier sind einige Codezeilen 210-215 und Zeilen 268-276] (https://java.net/projects/javamail/sources/mercurial/content/logging/src/main/java/MailHandlerDemo.java?rev=838) – jmehrens

Antwort

2

Dies behebt das Problem:

CompletableFuture.runAsync(() -> { 
Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); 
mailerClient.send(email);}, Executors.newSingleThreadExecutor()).exceptionally(exc -> { 
exc.printStackTrace(); 
return null;}); 
+0

Danke. Ich denke, hier sollte ein [link to issue] (https://github.com/playframework/play-mailer/issues/104) stehen. – MipH

Verwandte Themen