Javax.activation.UnsupportedDataTypeException:没有MIME类型文本/日历的对象Dch;方法=请求
我正在尝试使用Java邮件发送日历会议邀请。但我面临着下面的错误。我在堆栈溢出上进行了搜索。所有有相关错误的答案都是邮寄的。
MIME类型文本/日历没有对象DCH;方法=请求
编码:
BodyPart calendarPart = new MimeBodyPart();
calendarPart.addHeader("Content-Class", "urn:content-classes:calendarmessage");
calendarPart.setContent(calendarContent, "text/calendar;method=REQUEST");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(calendarPart);
MimeMessage message = new MimeMessage(session);
message.addHeaderLine("method=REQUEST");
message.addHeaderLine("charset=UTF-8");
message.addHeaderLine("component=VEVENT");
message.setSubject(meetingSubject);
message.setContent(multipart);
Transport.send(message);
错误跟踪:
Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type text/calendar;method=REQUEST
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:885)
at javax.activation.DataHandler.writeTo(DataHandler.java:316)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:865)
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:462)
at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:103)
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:883)
at javax.activation.DataHandler.writeTo(DataHandler.java:316)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1485)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1773)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1121)
解决方案
几天前我遇到了同样的问题,就在今天我找到了一个解决方案,百分之百解决了我的问题。
Java Mail依赖于一些配置文件将MIME类型映射到Java类(例如,将多部分/混合映射到javax.mail.interet.MimeMultipart)。这些配置文件是使用应用程序的ClassLoader加载的。如果ClassLoader不能正常工作(在我的例子中,由于依赖项冲突),将找不到这些配置文件。
只需将以下代码添加到您的方法的乞讨中:
final MimetypesFileTypeMap mimetypes = (MimetypesFileTypeMap) MimetypesFileTypeMap.getDefaultFileTypeMap();
mimetypes.addMimeTypes("text/calendar ics ICS");
final MailcapCommandMap mailcap = (MailcapCommandMap) MailcapCommandMap.getDefaultCommandMap();
mailcap.addMailcap("text/calendar;; x-java-content-handler=com.sun.mail.handlers.text_plain");
我希望现在还不算太晚,希望它能帮助你们所有人。
相关文章