27

我们的要求之一是创建 iCalendar 文件 (.ics) 并将它们作为附件发送到电子邮件中。我们正在使用DDay.Ical.dll创建 ics 文件,如下所示:

// Create a new iCalendar
iCalendar iCal = new iCalendar();

// Create the event, and add it to the iCalendar
Event evt = iCal.Create<Event>();

// Set information about the event
evt.Start = new iCalDateTime(SomeStartTime);
evt.End = new iCalDateTime(SomeEndTime);
evt.Location = "At so and so place";
evt.Description = "Some Description";
evt.Summary = "About Some Subject";
iCal.Method = "PUBLISH";

// Serialize (save) the iCalendar
iCalendarSerializer serializer = new iCalendarSerializer();
serializer.Serialize(iCal, @"iCalendar.ics");

完整的流程是:

  1. 用户 1 为特定日期和时间创建 iCal 文件并将其发送给用户 2。
  2. User2 将打开 ics 文件并接受邀请。将在 User2 的 LOCAL Outlook 中创建一个约会项目。

现在,假设由于某种原因取消了约会,那么 User1 必须创建一个 ics 文件并将其发送给 User2,以便 User2 可以从本地 Outlook 取消他的事件。

如何创建这样的ics文件?

4

4 回答 4

27

文件的创建方式与原始 ics 文件相同。事件状态会有所不同。UID 将标识事件,序列号将指示更新的优先级,然后将记录事件详细信息(更改或取消)

如果您想在发出邀请后更改/取消事件,则需要通过其 UID 来识别事件/约会,并分配比原始 ics 事件更大的 SEQUENCE 编号。

UID(唯一标识符):https ://www.rfc-editor.org/rfc/rfc5545#page-117

序列:https ://www.rfc-editor.org/rfc/rfc5545#page-138

并设置事件状态

             / "CANCELLED"    ;Indicates event was cancelled.

状态: https ://www.rfc-editor.org/rfc/rfc5545#page-92

哦 - 和方法 如果您需要发送一个事件的取消,UID 应该与原始事件相同,并且组件属性应该设置为取消 Ex。方法:取消状态:取消

当然,如果收件人随后实际单击以将其加载/订阅到与第一次相同的日历应用程序中,这只会“取消”该事件。对于已“订阅”远程 ics 的应用程序 - 当他们下一次执行“更新”时,检查是否应处理更新并覆盖原始事件。

于 2012-05-12T07:03:24.220 回答
12

旧线程,但只是想提供我的意见。

Outlook 在取消 ics 上显示“不支持的格式”也有问题。尝试将 METHOD 更改为 REQUEST,某种程度上解决了 Outlook 中的问题,但 Gmail 和其他人处理得不好,看起来像邀请,带有是/否/也许按钮。

经过大量(大量)寻找解决问题后,我终于意识到问题不在 ics 文件中,而是文件如何附加到电子邮件中。我用方法添加它:请求。将其更改为 method:CANCEL 后,它在所有客户端都运行良好。

contype = new System.Net.Mime.ContentType("text/calendar");
//contype.Parameters.Add("method", "REQUEST");
contype.Parameters.Add("method", "CANCEL");
contype.Parameters.Add("charSet", "utf-8");
contype.Parameters.Add("name", "invite.ics");
于 2021-03-22T10:02:15.947 回答
7

使用任何文本文件编辑器(例如Visual Studio Code )编辑ics 文件中的所有事件并再次导入修改日历:

在此处输入图像描述

于 2020-03-03T10:45:28.960 回答
4

当我发送包含用于删除事件的 ics 文件的邮件时遇到问题,但在 Outlook 中它显示我不支持格式然后我在网上的某个地方找到了,我发现我只需要将 METHOD: CANCEL 更改为MEHTHOD: REQUEST

在此处输入图像描述

当我在 Outlook 中导入它时 在此处输入图像描述

于 2020-06-02T08:13:36.237 回答