javax.activation.UnsupportedDataTypeException:尝试发送电子邮件时,MIME类型为image / png的对象没有DCH

问题描述

我将项目从Java 8更新到了14。我还更新了项目pom.xml中的一系列依赖项。现在,每当尝试通过应用程序发送电子邮件时,我都会遇到问题。我尝试了许多在网上找到的不同解决方案,但似乎没有一个适合我。这是错误日志:

javax.mail.MessagingException: IOException while sending message;
  nested exception is:
    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type image/png
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1365)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:88)
    at 
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
    at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type image/png
    at javax.activation.ObjectDataContentHandler.writeto(DataHandler.java:885)
    at javax.activation.DataHandler.writeto(DataHandler.java:316)
    at javax.mail.internet.MimeBodyPart.writeto(MimeBodyPart.java:1687)
    at javax.mail.internet.MimeBodyPart.writeto(MimeBodyPart.java:991)
    at javax.mail.internet.MimeMultipart.writeto(MimeMultipart.java:561)
    at com.sun.mail.handlers.multipart_mixed.writeto(multipart_mixed.java:84)
    at javax.activation.ObjectDataContentHandler.writeto(DataHandler.java:883)
    at javax.activation.DataHandler.writeto(DataHandler.java:316)
    at javax.mail.internet.MimeBodyPart.writeto(MimeBodyPart.java:1687)
    at javax.mail.internet.MimeMessage.writeto(MimeMessage.java:1906)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1315)
    ... 16 more
2020-09-02 17:00:03 INFO  EmailDirectSignOneTimeLogin:79 - direct sign url: http://localhost:3000/direct_sign/czDSIg3Fms
FINISHED JOB

任何帮助将不胜感激。如果您需要更多信息,请对此问题发表评论

解决方法

这可以使用有关您要执行的操作的更多信息,但是在处理同一问题时,我碰巧发现了这个问题,并且还发现了this question并获得了以下在Java 11中有效的代码:

            part = new MimeBodyPart();
            ByteArrayDataSource source = new ByteArrayDataSource(logoBytes,"image/png");
            DataHandler handler = new DataHandler(source);
            part.setDataHandler(handler);
            part.setHeader("Content-ID","<Logo>");
            multipart.addBodyPart(part);