javax.activation.UnsupportedDataTypeException:MIME类型文本/日历没有对



我正在尝试使用java邮件发送日历会议邀请。但我面临着以下错误。我搜索过堆栈溢出。所有有相关错误的答案都是邮寄的。

MIME类型文本/日历没有对象DCH;method=REQUEST

代码:

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) 

问题已得到解决。将邮件更新至1.4.7。此外,服务器端也存在一些与AmazonSES服务相关的问题。

问题是,没有配置的类知道如何将calendarContent对象(无论是什么(转换为MIME类型文本/日历格式的字节流。如果您可以自己进行转换,将对象转换为字节数组或字符串,那么JavaMail就可以在不进行进一步配置的情况下处理它。如果你想将系统配置为能够为你进行转换,你需要配置JavaBeans激活框架,并且你需要提供一个进行转换的类。由于您只是自己做这件事,而不是试图让其他人轻松处理,因此最简单的方法是我首先描述的方法——将calendarContent对象转换为字节数组/流或字符串。

几天前我遇到了同样的问题,就在今天,我找到了一个100%解决问题的解决方案。

JavaMail依赖于一些配置文件来将MIME类型映射到Java类(例如,multipart/mixed到javax.mail.internet.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");

我希望现在还为时不晚,希望它能帮助到大家。

最新更新