通过 webdav 在 icloud 日历上创建活动时发送邀请

Posted

技术标签:

【中文标题】通过 webdav 在 icloud 日历上创建活动时发送邀请【英文标题】:Send invitation when creating an event on icloud calendar via webdav 【发布时间】:2014-11-28 18:21:37 【问题描述】:

我正在使用 webdav 协议在 icloud 日历上创建活动,并提出以下请求:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
BEGIN:VEVENT
UID:UID@webddav.com
DTSTART:START_DATE
DTEND:END_DATE
SUMMARY:New event
ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:EMAIL1
ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:EMAIL2
END:VEVENT
END:VCALENDAR

一切正常,参与者甚至被添加到活动中,但我希望服务器向他们发送活动邀请。

有谁知道这是否/怎么可能?

【问题讨论】:

嗨@Nico,我在为 iCloud 日历创建新事件时遇到问题。不知何故,它总是产生400 Bad Request。我已经使用 PUT 作为方法,将 If-None-Match: * 设置为标题并将此 https://p46-caldav.icloud.com/[USER_ID]/calendars/work/dfsfsdfsfsfsfsdfsdfsdf.ics 设置为 uri destination 。你知道会发生什么吗? 【参考方案1】:

是的,这是可能的。 iCloud 日历支持 RFC 6638 中所述的日程安排。请注意,如果与会者有 iCloud 帐户(电子邮件注册为与 iCloud 一起使用的 Apple-ID),服务器将不会发送电子邮件。它会将会议请求直接放入与会者的 iCloud 日历中,并将匹配的 iTIP 放入与会者收件箱 DAV 集合中。

在您的情况下,iCloud 不会检测到您是活动的组织者,因此不会将活动安排为会议。要解决此问题,您需要添加适当的 ORGANIZER 行。如果您不想混淆 iCal.app,很可能是匹配的 ATTENDEE 行。

示例:

ORGANIZER;CN=Mister Awesome:mailto:awesome@icloud.com
ATTENDEE;CN=Mister Awesome:mailto:awesome@icloud.com
ATTENDEE;CN=Donald Duck:mailto:donald@icloud.com
ATTENDEE;CN=Nicola Tesla:mailto:nicola.tesla@googlemail.com

假设 Nicola 没有在 iCloud 中注册,他会收到一封电子邮件邀请(包含一些网页和 iMIP 请求的多部分电子邮件)。 Donald 不会收到电子邮件,会议将立即显示在他的日历中,并且他会在 iCal 中收到一个通知框。

重要的是组织者的电子邮件与您用于创建活动的 iCloud 帐户相匹配。即当 PUT 事件时,您必须以 awesome@icloud.com 登录。

请注意,反过来也是如此。如果您想回复会议邀请(例如,通过将与会者的 PARTSTAT 设置为 ACCEPTED),您可能需要以该会议与会者的身份登录。

P.S.:iCloud 用户可以在 iCloud 日历 web 应用首选项中调整电子邮件行为。

【讨论】:

同样的方法适用于更新。但请记住,只有组织者可以更新事件属性(如开始/结束日期)。与会者只能更新他们的参与状态(以及一些个人属性,如警报)。如果不起作用,最可能的原因是身份不匹配。 “只有组织者可以更新活动属性”——假设这不是共享日历。在共享日历中,所有具有写入权限的共享者都可以更新活动(并将代表组织者行事)

以上是关于通过 webdav 在 icloud 日历上创建活动时发送邀请的主要内容,如果未能解决你的问题,请参考以下文章

iOS EKEvent Store 在循环中重新创建 iCloud 日历,不会保存本地。

在 iOS 上的 iCloud 上添加日历

CalDAV 请求 gGt iCloud 日历事件

检索显示奇怪行为的日历项目(Outlook API、WebDAV)

ICloud Caldav连接获取日历

如何在 Android 应用程序中将 iCloud 日历与 xamarin 同步?