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;无法处理邮件,因为邮件存在永久性异常。无法发送邮件,因为它不包含收件人。
。。。每当我删除请求头时,它都会正确地发送邮件。出什么问题了?最好针对新问题发布一个新问题。这可能有助于我们找出问题所在。