iCal(.ics)文件未被IBM(Lotus)Notes识别

4

我正在从PHP应用程序生成ICS文件,并通过SendGrid API作为附件发送电子邮件。

这个ICS文件在Gmail网页邮件和iPhone上运作良好。然而,IBM Notes不能将其识别为会议邀请。Notes显示了附件,但未将其视为事件邀请。

这是我的ICS文件:

BEGIN:VCALENDAR
PRODID:-//My Company//v1.1//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20160127T140000Z
DTEND:20160127T143000Z
DTSTAMP:20160114T213657Z
ORGANIZER;CN=Demo Two:
 mailto:demo2@example.com
UID:e93838a737b3f9ae75056968b22281b2
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=CHAIR;RSVP=FALSE
 ;CN=Demo Two:mailto:demo2@example.com
CREATED:20160114T213657Z
DESCRIPTION:another scheduled
LAST-MODIFIED:20160114T213657Z
LOCATION:See email
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:another scheduled
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

我正在尝试将同一个ICS文件发送给多个收件人,因此我不会在收件人的行中包含ATTENDEE行,只会包含CHAIR行。
我找不到任何关于Notes在其ICS文件中需要什么详细信息...
有什么想法出了问题吗?
2个回答

6
我通过将邮件正文与Google Mail邀请进行比较(Notes可以使用该功能)来诊断问题的一部分。通过SendGrid Web API附加icalendar ics文件存在几个明显的问题。
邮件需要包括几个部分:正文、内联文本/日历对象和附加的.ics文件。
Outlook和Google使用附加的文件,我认为Notes使用内联数据,因为似乎忽略了.ics附件。
我找到了相关的StackOverflow问题: 如何在sendgrid中添加头? 因此,我选择使用SwiftMailer构建消息,并使用适当的消息和附件标题。目前似乎运作良好,但我会在测试Notes时确认一下。
编辑:我已确认使icalendar邀请内联化确实有效,并且此邀请现在出现在Notes中。
邮件的每个部分都需要有自己的MIME类型。以下是邮件正文:
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<p>Hello,</p>
<p>This is a friendly reminder ...

以下是您需要翻译的内容:

这里是iCalendar邀请(请注意,您无法阅读iCalendar数据,因为它是base64编码的):

Content-Type: text/calendar; charset=UTF-8; method=PUBLISH; name=invite.ics
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=invite.ics

QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vU3RyaWRlLlRyYWluaW5nLy92
MS4xLy9FTg0KVkVSU0lPTjoyLjANCkNBTFNDQUxFOkdSRUdPUklBTg0KTUVU...

我通过像这样在SwiftMailer中添加附件来获得此输出:
$attachment = Swift_Attachment::newInstance($ical, 'invite.ics', 'text/calendar');
$attachment->setDisposition('inline');
$attachment->setContentType('text/calendar; charset=UTF-8; method=PUBLISH');
$message->attach ( $attachment );

在上面的代码片段中,$ical是一个格式正确的iCalendar字符串。
抱歉这篇文章有点长,但是关于如何正确地完成这个任务的信息非常难找到。

4
这可能是两个问题之一:
首先,你应该至少为接收邀请的用户添加一个参与者。
如果仍然无法解决问题,可能是由于Lotus Notes无法识别你的电子邮件的MIME结构。此时,建议将整个MIME消息包含在你的问题中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接