我正在从 PHP 应用程序生成 ICS 文件并将它们作为附件通过电子邮件发送(通过 SendGrid api)。

ICS 文件适用于 Gmail 网络邮件和 iPhone。但是,IBM Notes 不会将它们识别为 session 邀请。 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:[email protected]
UID:e93838a737b3f9ae75056968b22281b2
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=CHAIR;RSVP=FALSE
 ;CN=Demo Two:mailto:[email protected]
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。

我在其 ICS 文件中找不到有关 Notes 要求的任何详细信息...

任何想法出了什么问题?

最佳答案

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

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

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

我发现了这个相关的 StackOverflow 问题:
How to add headers in sendgrid?

因此,我采用了在 SwiftMailer 中构建消息的路线,并带有适当的消息和附件 header 。到目前为止,它似乎工作正常,但我会在 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 字符串。

抱歉,这已经很长时间了,但是很难找到有关如何正确执行此操作的信息。

关于php - IBM (Lotus) Notes 无法识别 iCal (.ics) 文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34800582/

10-11 08:20