Javax.activation.UnsupportedDataTypeException:没有MIME类型文本/日历的对象Dch;方法=请求

人气:206 发布:2022-10-16 标签: java icalendar jakarta-mail spring-boot outlook-calendar

问题描述

我正在尝试使用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");

我希望现在还不算太晚,希望它能帮助你们所有人。

787