编程语言
首页 > 编程语言> > php – iCal(.ics)文件无法被IBM(Lotus)Notes识别

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

作者:互联网

我正在从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.

我无法在其ICS文件中找到有关Notes所需内容的任何详细信息……

有什么想法会出错吗?

解决方法:

我通过将邮件正文与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字符串.

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

标签:sendgrid,lotus-notes,php,icalendar
来源: https://codeday.me/bug/20190724/1526025.html