【问题标题】:Send ICS file via SMTP not correctly displayed in Outlook?通过 SMTP 发送 ICS 文件在 Outlook 中未正确显示?
【发布时间】:2018-11-20 20:23:22
【问题描述】:

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

这里是涉及的功能:

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

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

它应该如何工作:

但它是这样显示的:

【问题讨论】:

    标签: java spring-boot outlook jakarta-mail icalendar


    【解决方案1】:

    对 addHeaderLine 的所有调用都不是有效的 MIME 标头,所以我不知道您想用它来完成什么。

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

    【讨论】:

    • 我按照你在这里告诉我的做了,但它没有解决问题(如果你想再看一遍,我的问题已编辑)。问题是否与用于发送电子邮件的帐户有关?因为我使用的是 gmail smtp 服务器。可能和问题有关。
    • 代码看起来更好。将正确工作的邮件的 MIME 内容与您正在创建的邮件的 MIME 内容进行比较。您可以在JavaMail debug output 中查看您发送的邮件的 MIME 内容。
    • 顺便说一句,在 eventIcs 中,明确使用 StringBuffer 根本没有帮助。您也可以使用连接(“+”)构造一个 String 对象。实际上,您正在构造字符串,然后将该字符串附加到 StringBuffer。
    • 我找到了解决方案,REQUEST 标头丢失:messageBodyEvent.dataHandler = ByteArrayDataSource(createEvent(), "text/calendar; method=REQUEST")。它完全适用于 gmail smtp 服务器。但是现在我正在使用我公司的凭据登录到 Outlook 服务器,它会引发一个奇怪的错误:STOREDRV.Submission.Exception:InvalidRecipientsException; Failed to process message due to a permanent exception with message A message can't be sent because it contains no recipients.... 每当我删除 REQUEST 标头时,它都会正确发送邮件。怎么了?
    • 最好针对新问题发布新问题。 JavaMail debug output 可能会帮助我们找出问题所在。
    猜你喜欢
    • 2013-04-24
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多