如何使用ICS文件

时间:2018-05-19 06:54:29

标签: email google-calendar-api icalendar

我试图创建一个ICS文件,通过电子邮件将事件添加到Google日历中。最后,日历将从桌面应用程序发送给多个用户。理想情况下,我希望能够在事件发生变化时修改日历(只是事件时间,我忽略了取消的事件)

这是我的ICS文件

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//MY COMPANY//Calendar//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:shift-439-emp-128@mycompany.com
DTSTART:20180604T090000
DTEND:20180604T153000
DTSTAMP:20180519T081800
SUMMARY:Morning shfit
LOCATION:Morning Location
DESCRIPTION:Morning shift
END:VEVENT
BEGIN:VEVENT
UID:shift-446-emp-128@mycompany.com
DTSTART:20180605T153000
DTEND:20180605T233000
DTSTAMP:20180519T081800
SUMMARY:Night shift
LOCATION:
DESCRIPTION:Night
END:VEVENT
END:VCALENDAR

当我将该文件通过电子邮件发送到我的Gmail帐户时,我可以看到"添加到Google日历"我可以用来将事件添加到我的原始日历的按钮。

现在,说事件发生了变化。

问题:如何使用新时间创建新的ICS文件,以便在Google日历中修改现有事件?

我将UID用于事件,以便Google不会创建重复的条目。但是,当我通过电子邮件发送带有修改事件的第二个ics文件(带有uid)时,"添加到谷歌日历"按钮不会出现。如果我尝试从谷歌日历导入功能手动导入ics文件,那么我收到此错误消息

  

无法上传您的活动,因为您在目标日历上没有足够的访问权限。

如果我每次都设置不同的UID,导入过程将会起作用,但会创建重复的条目。

我还尝试使用REQUEST代替PUBLISH方法

由于

1 个答案:

答案 0 :(得分:0)

我能够使用以下功能使用Gmail:

  • METHOD:设置为REQUEST
  • SEQUENCE:在第一次请求时设置为0,每次递增1
  • ATTENDEE:确定通过电子邮件地址
  • 接收电子邮件的Gmail用户

其他变化会产生不理想的效果:

  • 只看到两个事件中的一个
  • 不更新现有活动

Office 365将ICS文件发送到Gmail,可以对其进行更新,以便用于引用商业实施。您可以使用" Show Original"查看Outlook 365发送的请求。在Gmail中检索base64编码的日历正文。 Outlook 365使用了许多其他字段,因此检查它是有益的。

我在Go中使用SparkPost测试脚本,所以如果您有任何疑问或想要使用它,请告诉我。 SparkPost有一个免费套餐,但您仍需要配置出站发送域以使用它。

以下是修改后的请求示例。我只需增加SEQUENCE并更改在Gmail中更新请求的时间。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//MY COMPANY//Calendar//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
ATTENDEE;ROLE=REQ-PARTICIPANT;CN=example@gmail.com:MAILTO:example@gmail.com
UID:shift-1807-emp-128@mycompany.com
DTSTART:20180807T010000
DTEND:20180807T020000
DTSTAMP:20180601T033455
SEQUENCE:0
SUMMARY:Morning shift
LOCATION:Morning Location
DESCRIPTION:Morning shift
END:VEVENT
BEGIN:VEVENT
ATTENDEE;ROLE=REQ-PARTICIPANT;CN=example@gmail.com:MAILTO:example@gmail.com
UID:shift-1808-emp-128@mycompany.com
DTSTART:20180807T130000
DTEND:20180807T140000
DTSTAMP:20180601T033455
SEQUENCE:0
SUMMARY:Night shift
LOCATION:Night Location
DESCRIPTION:Night
END:VEVENT
END:VCALENDAR

值得注意的是,在单个ICS文件中发送多个事件时,有时会花费大约一秒钟的时间在我的测试中以正确的时间显示这两个事件。