通过 SMTP 发送 ICS 文件未在 Outlook 中正确显示?

Send ICS file via SMTP not correctly displayed in Outlook?

我正在尝试从我的后端服务器发送日历邀请。

这里是涉及到的函数:

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")
    }

该文件内容应该可以工作,因为它与工作示例完全相同。所以问题来自邮件 headers ?但我不确定缺少什么。

它应该如何工作:

但是显示是这样的:

所有对 addHeaderLine 的调用都不是有效的 MIME headers 所以我不知道你想用它完成什么。

MimeHelper 的使用只是令人困惑的事情。直接在MimeMessage object 上调用相应的方法,并添加"text" 作为multipart 中的第一个MimeBodyPart,在ics 附件之前。