Java 无法使用Play 2.5发送异步电子邮件
我最近根据本指南将我的应用程序从play 2.3迁移到play 2.5 我也根据这里指定的内容更新play mailer 现在我的应用程序不再能够发送电子邮件。我为注入mailer实例创建了一个注入器构造函数Java 无法使用Play 2.5发送异步电子邮件,java,jakarta-mail,playframework-2.5,Java,Jakarta Mail,Playframework 2.5,我最近根据本指南将我的应用程序从play 2.3迁移到play 2.5 我也根据这里指定的内容更新play mailer 现在我的应用程序不再能够发送电子邮件。我为注入mailer实例创建了一个注入器构造函数 @Inject public SmtpConnector(MailerClient mailer) { this.mailerClient = mailer; MailcapCommandMap mc = (MailcapCommandMap) MailcapCo
@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);
}
我在异步任务中执行send email方法:
CompletableFuture.runAsync( () -> mailerClient.send(email) ).exceptionally(exc -> {exc.printStackTrace(); return null;});
但我一直收到一个错误,关于mimetype multipart缺乏支持:
。。。
java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626)。。。另外5个原因:javax.mail.MessagineException:IOException发送消息时发生;嵌套异常为:javax.activation.UnsupportedDataTypeException:没有MIME类型multipart/alternative的对象DCH;boundary=“---=”com.sun.mail.SMTPTransport.sendMessage(SMTPTransport.java:1177)上的Part_0_1284684208.1469102367572”,javax.mail.Transport.send0(Transport.java:195)上的javax.mail.Transport.send(Transport.java:124)上的org.apache.commons.mail.Email.Email.sendMimeMessage(Email.java:1411)。。。14更多原因:javax.activation.UnsupportedDataTypeException:没有MIME类型multipart/alternative的对象DCH;boundary=“----=\u Part\u 0_1284684208.1469102367572”在javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:896)在javax.activation.DataHandler.writeTo(DataHandler.java:317)在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485)在javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1773)在在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1121)上。。。还有17个
但是:
- 如上所示,我在喷油器构造函数中设置了它们
- 我没有更改IDE/类路径中的任何内容(只是build.sbt中的sbt/包版本)
- 我尝试了这里所有的建议,但没有结果。当前的线程上下文方法导致了一个安全异常
CompletableFuture.runAsync( () -> {
Thread.currentThread().setContextClassLoader( getClass().getClassLoader() );
mailerClient.send(email);}, Executors.newSingleThreadExecutor()).exceptionally(exc -> {
exc.printStackTrace();
return null;});
是否可以设置系统属性javax.activation.debug=true将输出添加到问题?您还应该尝试打印
javax.mail.Session
、javax.activation.DataHandler
、当前上下文类加载器和mailerClient
的类加载器的类加载器树。调用类加载器的布局似乎有问题。你能打印类加载器树吗?谢谢我想这里应该是个好地方。