我正在开发ic发送方功能。 但是我在使用Office 365和Outlook时遇到了一些麻烦。 当我将ics文件发送到Google邮件时,我没有任何问题。 我的活动显示在gmail中。 但是,当我发送到Outlook或Office 365时,我的约会没有出现,但它出现在电子邮件附件(ATT00001.ics)中。 这是发送邮件的代码
private void generateIcal(MimeMessage message) throws MessagingException, IOException {
message.addHeaderLine("method=REQUEST");
message.addHeaderLine("charset=UTF-8");
message.addHeaderLine("component=VEVENT");
message.setFrom(new InternetAddress(from));
message.setSubject(subj,"UTF-8");
StringBuffer sb = new StringBuffer();
// Create the message part
BodyPart messageBodyPart = new MimeBodyPart();
// Fill the message
messageBodyPart.setHeader("Content-Class", "urn:content-classes:calendarmessage");
messageBodyPart.setHeader("Content-ID", "calendar_message");
messageBodyPart.setDataHandler(new DataHandler(
new ByteArrayDataSource(txt, "text/calendar;charset=utf-8")));//very important
// Create a Multipart
Multipart multipart = new MimeMultipart();
// Add part one
multipart.addBodyPart(messageBodyPart);
// Put parts in message
message.setContent(multipart);
}
这会生成ics文件
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//TELELANGUE//NONSGML v1.0//EN
BEGIN:VEVENT
DTSTART:20180714T170000Z
DTEND:20180715T035900Z
SUMMARY:Fête à la Bastille
END:VEVENT
END:VCALENDAR
答案 0 :(得分:2)
感谢您的答复
最后,我找到了解决方案。 看起来,我们需要在BodyPart中设置“方法”和“名称”参数。
MessageBodyPart.setDataHandler(new DataHandler(
new ByteArrayDataSource(buffer.toString(), "text/calendar;method=REQUEST;name=\"meeting.ics\"")));
答案 1 :(得分:0)
1)解析ics。文件并将其设置为收件箱中的事件,以便您无需打开附件即可阅读事件信息。
2)添加交互性,以便您甚至可以直接从Inbox接受/拒绝邀请,而无需打开ics文件。 (这就是Gmail现在的功能)。
有关更多信息,请参见下面的链接: