我正在尝试创建一个 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 文件,以便在谷歌日历中修改现有的事件?
我将 UID 用于事件,以便 google 不会创建重复条目。但是,当我通过电子邮件发送第二个带有修改事件(带有 uid)的 ics 文件时,“添加到谷歌日历”按钮不会出现。如果我尝试从谷歌日历导入功能手动导入 ics 文件,则会收到此错误消息
Could not upload your events because you do not have sufficient access on the target calendar.
如果我每次设置不同的 UID,导入过程将起作用,但会创建重复条目。
我也尝试使用
REQUEST
而不是 PUBLISH
方法谢谢
最佳答案
我能够使用以下方法与 Gmail 一起使用:
METHOD
: 设置为 REQUEST
SEQUENCE
: 设置为 0
在第一次请求时,每次加 1 ATTENDEE
: 通过电子邮件地址 其他变化会产生不良影响:
Office 365 将 ICS 文件发送到可以更新的 Gmail,以便用于引用商业实现。您可以查看 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 文件中发送多个事件时,有时 Gmail 需要一秒钟左右的时间才能在我的测试中以正确的时间显示这两个事件。
关于email - 如何使用 ICS 文件在 Google 日历中添加/修改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50422635/