如何获取ics日历邀请自动添加到日历

Bri*_*n C 10 icalendar outlook calendar

我正在使用节点包生成 .ics 日历邀请ical-generator,并通过 mandrill 在电子邮件中发送附件。

.ics 日历邀请包含特定时间和日期的一项活动的信息。

生成文件示例:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
METHOD:REQUEST
NAME: xxxx Events
X-WR-CALNAME: xxxxx
BEGIN:VEVENT
UID:5wzd@xxx.com
SEQUENCE:0
DTSTAMP:20180318T202459Z
DTSTART:20180330T230000Z
DTEND:20180330T230000Z
SUMMARY:test
LOCATION:test
DESCRIPTION:test
ORGANIZER;CN="info":mailto:info@xxxx.com
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)

现在,用户会收到作为电子邮件附件的日历邀请,如果他们打开附件并单击“添加到日历”(在 Outlook 中),则可以将该事件添加到其日历中。

我需要进行哪些更改,以便邮件客户端自动解析日历邀请并将其添加到用户的日历中(在 meetup 和 eventbrite 等网站的电子邮件确认中可以找到类似的功能)。

不确定我是否了解电子邮件客户端、日历系统或 .ics 文件如何工作的上下文知识,以建立一个解决此问题的框架

非常感谢任何建议或资源指示!谢谢你!

Fer*_*nda 12

为了自动添加事件,您需要考虑三点:

  1. 电子邮件标头
  2. iCalendar方法
  3. “VEVENT”日历组件的与会者信息

电子邮件标头

为了让电子邮件客户端正确解析附加的 .ics 文件,您应该将计划方法和 MIME 信息添加到电子邮件标头。这是由iCalendar 基于消息的互操作性协议 (RFC 2447)指定的。

因此,您的标头应包含Content-Type、 Content-Transfer-Encoding和Content-Disposition,如下例所示:

Content-Type: text/calendar; charset=utf-8; method=REQUEST; name=invite.ics'
Content-Transfer-Encoding: Base64
Content-Disposition: attachment; filename=invite.ics
Run Code Online (Sandbox Code Playgroud)

iCalendar方法

当在 MIME 消息实体中使用时,“METHOD”的值必须与 Content-Type“method”相同。它只能在 iCalendar 对象中出现一次。该字段的值由iCalendar 传输独立互操作协议 (iTIP) (RFC 5546)定义。为了请求召开会议,该值应该是“REQUEST”。

METHOD:REQUEST
Run Code Online (Sandbox Code Playgroud)

“VEVENT”日历组件的与会者信息

此属性是特定“参加者”相对于事件的状态。它用于安排,并由每个参加者的“ATTENDEE”属性中的“PARTSTAT”参数定义。

ATTENDEE;PARTSTAT=ACCEPTED;CN="Jane 
 Doe";EMAIL=jdoe@gmail.com:MAILTO:jdoe@gmailcom
Run Code Online (Sandbox Code Playgroud)

以下是最小 .ics 文件的示例:

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
UID:<unique-id>@<site>.com
DTSTAMP:20210605T073803Z
DTSTART;TZID=America/Guayaquil:20210614T030000
DTEND;TZID=America/Guayaquil:20210614T040000
SUMMARY:My Event
ORGANIZER;CN="Juan Perez":mailto:jperez@organizer.com
ATTENDEE;PARTSTAT=ACCEPTED;CN="Jane 
 Doe";EMAIL=jdoe@gmail.com:MAILTO:jdoe@gmailcom
URL;VALUE=URI:https://<site>.com/event/5960492994476830083
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)

欲了解更多详情,请看我的要点。


anm*_*ari 0

您能做的最好的事情就是确保 ics 文件设置良好,其中包含文本/日历标题等。

提供系统不能强制用户设备如何处理文件,它完全在接收者及其设备设置的控制范围内。例如,我将我的 Windows 电脑设置为在文本编辑器中打开 ics 文件,而我的 iPhone 将尝试添加到日历(icloud 的),但我实际上使用谷歌日历。Gmail 过去不会自动添加邀请,除非邀请已发送到 Gmail 地址,而我将其他域用于个人/家庭与工作,这些都转到 Gmail。我不确定这是否仍然是一个问题。我不想添加自动功能。

根据您开发的系统类型,您可能需要考虑让收件人订阅一次个人 ics URL,而不是一直发送单独的邀请。如果订阅,那么未来的活动/课程等将自动显示。我喜欢系统这样做,但很多时候他们不这样做。EG:单独报名参加的课程。