Java 通过SMTP发送ICS文件在Outlook中未正确显示?
我正在尝试从后端服务器发送日历邀请 以下是所涉及的功能:Java 通过SMTP发送ICS文件在Outlook中未正确显示?,java,spring-boot,outlook,jakarta-mail,icalendar,Java,Spring Boot,Outlook,Jakarta Mail,Icalendar,我正在尝试从后端服务器发送日历邀请 以下是所涉及的功能: fun sendEventInvite(to: String, subject: String, text: String) { val message: MimeMessage = emailSender.createMimeMessage() message.setRecipient(Message.RecipientType.TO, InternetAddress(to)) message.subject
fun sendEventInvite(to: String, subject: String, text: String) {
val message: MimeMessage = emailSender.createMimeMessage()
message.setRecipient(Message.RecipientType.TO, InternetAddress(to))
message.subject = subject
val messageBodyText = MimeBodyPart()
messageBodyText.setText(text)
val messageBodyEvent = MimeBodyPart()
messageBodyEvent.dataHandler = ByteArrayDataSource(createEvent(), "text/calendar")
val multiPart = MimeMultipart()
multiPart.addBodyPart(messageBodyEvent)
message.setContent(multiPart)
emailSender.send(message)
}
下面是我如何格式化ICS文件:
fun createEvent(): String{
return "BEGIN:VCALENDAR\n" +
"VERSION:2.0\n" +
"PRODID:-//GRTgaz Corporation//NONSGML Togaz'er//FR\n" +
"METHOD:REQUEST\n" +
"BEGIN:VEVENT\n" +
"UID:d8f5a0777-bf6d-25d2-f14a-52e7fe3df810\n" +
"DTSTAMP:20181119T105044Z\n" +
"ORGANIZER;CN=Baptiste Arnaud:MAILTO:baptiste.arnaud95@gmail.com\n" +
"DTSTART:20181120T150000\n" +
"DTEND:20181120T153000\n" +
"SUMMARY:Description\n" +
"END:VEVENT\n" +
"END:VCALENDAR\n")
}
该文件内容应该是有效的,因为它与工作示例完全相同。那么问题来自邮件头?但我不确定少了什么
工作原理:
但它是这样显示的:
所有对addHeaderLine的调用都不是有效的MIME头,所以我不知道您想用它实现什么
MimeHelper的使用只是让事情变得混乱。直接调用mimessage对象上的相应方法,并在ics附件之前添加“text”作为多部分中的第一个MimeBodyPart。我按照您在这里告诉我的做了,但没有解决问题(如果您想再次查看,我的问题会被编辑)。问题是否与用于发送电子邮件的帐户有关?因为我使用gmail smtp服务器。可能与问题有关。代码看起来更好。将正常工作的邮件的MIME内容与正在创建的邮件的MIME内容进行比较。您可以在.BTW中看到正在发送的消息的MIME内容,在eventIcs中,显式使用StringBuffer根本没有帮助。您还可以使用连接(“+”)构造一个字符串对象。实际上,您正在构造字符串,然后将该字符串附加到StringBuffer。我找到了解决方案,缺少一个请求头:
messageBodyEvent.dataHandler=ByteArrayDataSource(createEvent(),“text/calendar;method=REQUEST”)
。它完全与gmail smtp服务器协同工作。但是现在我正在使用我公司登录到outlook服务器的凭据,它抛出了一个奇怪的错误:STOREDRV.Submission.Exception:InvalidRecipientsException;无法处理邮件,因为邮件存在永久性异常。无法发送邮件,因为它不包含收件人。
。。。每当我删除请求头时,它都会正确地发送邮件。出什么问题了?最好针对新问题发布一个新问题。这可能有助于我们找出问题所在。