IBM(Lotus)Notes无法识别iCal(.ics)文件

时间:2016-01-14 22:00:17

标签: php lotus-notes icalendar sendgrid

我正在从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 个答案:

答案 0 :(得分:5)

我通过将邮件正文与Google Mail邀请(在Notes中有效)进行比较来诊断出部分问题。通过SendGrid web api附加icalendar ics文件时有几个明显的问题。

邮件需要包含多个部分:正文,内联文本/日历对象和附加的.ics文件。

Outlook和Google用户附件。我认为Notes使用内联数据,因为它似乎忽略了.ics附件。

我发现了这个与StackOverflow相关的问题: How to add headers in 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字符串。

对不起,这已经很久了,但很难找到有关如何正确执行此操作的信息。

答案 1 :(得分:3)

这可能是两个问题之一:

首先,您应该至少为您要向其发送邀请的用户有一位与会者。

如果这不起作用,Lotus Notes可能无法识别您的电子邮件的MIME结构,在这种情况下,您可能希望在您的问题中包含整个MIME邮件。