2016-07-21 14 views
1

と非同期メールを送信することができません私は最近、このガイドhttps://www.playframework.com/documentation/2.5.x/Migration25 次2.5を再生するには、プレイ2.3から自分のアプリケーションを移行していないと私はあまりにもプレイメーラーを更新ここhttps://github.com/playframework/play-mailerプレイ2.5

を指定したものによると今、私のアプリは、もはやあり電子メールを送信することができます。

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

しかし、私は、マルチパートMIMEタイプについての対応無しの欠如についてのエラーを取得しておく::私は、私は非同期タスクにメールを送る方法を実行メーラーインスタンス

@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); 
} 

を噴射するインジェクタコンストラクタを作成し

... java.util.concurrent.CompletableFuture $ AsyncRun.run(CompletableFuture.java:1626)... 5は、もっとによって引き起こさ:メートルを送信しているときにIOException:javax.mail.MessagingExceptionエッセージ;ネストされた例外は次のとおりです。javax.activation.UnsupportedDataTypeException:MIMEタイプmultipart/alternativeのオブジェクトDCHなし。 javax.mailのjavax.mail.Transport.send0(Transport.java:195)のcom.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1177)でのboundary = "---- = _ Part_0_1284684208.1469102367572" .Transport.send(Transport.java:124)at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1411)... 14もっとひどい原因:javax.activation.UnsupportedDataTypeException:オブジェクトがありませんMIMEタイプのDCHマルチパート/代替; (DataHandler.java:896)、javax.activation.DataHandler.writeTo(DataHandler.java:317)at javax.mail.internet.MimeBodyPart(javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:896))の境界は、 "---- = _ Part_0_1284684208.1469102367572" .writeTo(MimeBodyPart.java:1485)at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1773)at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1121)... 17もっと見る

しかし:あなたが上見ることができるように

回避策はありますか? Playフレームワーク2.5でJava APIを使用して電子メールを送信する方法がありますか?

UPDATE 1:

jmehrensの提案によると、私はそれが私が得たものだ、デバッグフラグを有効化:

は、DCHがcom.sun.mail.handlers.multipart_mixed読み込むことができません。 例外:java.lang.ClassNotFoundExceptionが:COM /日/メール/ハンドラ/

をmultipart_mixedそしてこのgithubのによります。COM/playframework/PLAY-メーラー/問題/ 104の問題は、プレイコントローラ

UPDATE 2のコンテキストからメソッドを呼び出すことではないによってトリガーようだ:最初からクラスの出力:ここでは、-verboseを見つけることができます 例外まで:s000.tinyupload.com/?file_id=50323853839855936002

UPDATE 3:s000.tinyupload.com/:あなたはjmehrensにより示唆されるようにダンプのgetClass()のクラスローダを見つけることができます。ここ

? file_id = 51200633758480523188

+0

されていますが、 'javax.activation.debug = true'に質問に出力を追加し、システムのプロパティを設定することが可能でしょうか?また、 'javax.mail.Session'、' javax.activation.DataHandler'、現在のコンテキストクラスローダー、 'mailerClient'のクラスローダーのクラスローダーツリーを出力してみるべきです。 – jmehrens

+0

呼び出し側クラスローダーのレイアウトに問題があるように見えます。クラスローダーツリーを印刷できましたか? [コード例210-215と268-276のコード例(https://java.net/projects/javamail/sources/mercurial/content/logging/src/main/java/MailHandlerDemo.java?rev=838) ) – jmehrens

答えて

2

この問題が修正されています。

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

ありがとうございました。私は[発行するリンク](https://github.com/playframework/play-mailer/issues/104)でなければならないと思います。 – MipH

関連する問題