我正在我的网络应用程序中动态创建一个ical事件,当有人取消应用程序上的约会时,我们会在他们的电子邮件中生成一个删除事件* .ics文件,以删除其日历中的事件。
创建工作正常但当我们尝试删除我们创建的约会时,它不会将其从日历中删除
创建Ical事件代码:
string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//dev.com//iCal//EN",
"X-WR-CALNAME:development",
"X-WR-RELCALID:928C8448-048A-4aa2-BE27-A920773AF3DC",
"X-FUNAMBOL-ALLDAY:0",
"METHOD:REQUEST",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:1",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" + Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"LOCATION: " + Args.EventLocation,
"ORGANIZER: test@outlook.com",
"DESCRIPTION;ENCODING=ESCAPED-CHAR:" + Args.EventName,
"SUMMARY:" + Args.EventDescription,
"STATUS:CONFIRMED",
"TRANSP:OPAQUE",
"PRIORITY:" + Args.EventPriority.ToString(),
"END:VEVENT",
"END:VCALENDAR"
};
创建一个事件在iphone / android / outlook
上完美运行删除活动部分:
string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"METHOD:CANCEL",
"X-WR-CALNAME:development",
"X-WR-RELCALID:928C8448-048A-4aa2-BE27-A920773AF3DC",
"PRODID:-//dev.com//iCal//EN",
"X-FUNAMBOL-ALLDAY:0",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:2",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" + Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"LOCATION: " + Args.EventLocation,
"DESCRIPTION;ENCODING=ESCAPED-CHAR:" + Args.EventName,
"SUMMARY:" + Args.EventDescription,
"ORGANIZER: test@outlook.com",
"PRIORITY:" + Args.EventPriority.ToString(),
"STATUS:CANCELLED",
"TRANSP:OPAQUE",
"END:VEVENT",
"END:VCALENDAR"
};
当我单击生成的此文件以删除已创建的事件时,它不会删除该事件,有时会复制该事件。
创建和删除时的UID是相同的。
答案 0 :(得分:0)
首先,仔细检查UID。我知道你说他们是一样的,但检查一下!空白?情况?
接下来,将PRODID放在第二行,直接在BEGIN之后(当他们告诉你将VERSION放在第二行时忽略验证器。)这听起来微不足道,甚至没有使用该字段,但Outlook尤其是挑剔的挑剔。复制一个工作示例。测试并告诉我我是否错了。
接下来,SEQUENCE从0开始索引。客户可以将SEQUENCE:1解释为更新,并想知道原始邀请在哪里。
接下来,检查电子邮件的结构和mime类型标题。通过发送包含Content-type:text / calendar的简单单部分电子邮件,我获得了最佳结果;方法=" [REQUEST /取消]"在MIME标题中。
仍然无法使用?尝试添加ATTENDEE元素,需要参与,rsvp为true等,重复收件人的电子邮件地址。
还有问题吗?使用在线Icalendar验证器检查输出,但也复制一个工作示例。从gmail和/或outlook发送邀请,然后取消邀请。一切都很重要 - 消息的结构,Icalendar中字段的顺序,电子邮件的MIME标题。发送到GMail可以通过gmail show original选项确切地看到收到的内容。
我注意到你没有做任何包装。 Ical行数限制为75个字符,不多,溢出行必须以空格开头。验证员会很快告诉你。
答案 1 :(得分:0)
差异可能还在于日历应用程序是否已“订阅”或“导入”了ics文件?订阅的事件应该更新,导入的事件通常可能不会,因为用户可能已经更改它们 - 可能因日历应用程序而异。
答案 2 :(得分:0)
尝试将PUBLISH
用作METHOD
,将0
用作SEQUENCE
作为提交,1
用作SEQUENCE
进行删除。
提交示例:
string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//site.domain//iCal//EN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:0",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" + Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"SUMMARY:" + Args.EventDescription,
"STATUS:CONFIRMED",
"END:VEVENT",
"END:VCALENDAR"
};
擦除示例:
string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//site.domain//iCal//EN",
"METHOD:CANCEL",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:1",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" + Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"SUMMARY:" + Args.EventDescription,
"STATUS:CANCELLED",
"END:VEVENT",
"END:VCALENDAR"
};