13

我在过去几天创建了一个构建 .ics 文件(ical)的应用程序

它是用 php 编码的,基本功能可以正常工作(时区、Vevent 等),但是当我将 VALARM 添加到这些 VEVENT 的既不是谷歌日历也不是 Outlook 2010 中时,会将通知添加到他们的日历中

ics 文件的片段:

BEGIN:VEVENT
UID:f2f5672145d92702c71504ceccf77167@dyndns.org
DTSTAMP:20120420T174122Z
DTSTART;TZID=Europe/Berlin:20120416T081000
DTEND;TZID=Europe/Berlin:20120416T091000
LOCATION:A102 - Teori Frh.
SUMMARY:Hold: 2.B Kemi B
DESCRIPTION:Lærer: Jeppe Byrialsen Jensen (JBJ) Noter: Lab øvelser om alkoholers blandbarhed
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:Hold: 2.B Kemi B
TRIGGER:-P0DT0H30M0S
END:VALARM
END:VEVENT

编辑:如果你从文件中导入它似乎可以工作,但遗憾的是我需要从网站导入它。

4

6 回答 6

7

我们遇到了同样的问题,但发现\n在每行末尾使用的示例代码片段需要使用\r\n

http://severinghaus.org/projects/icv/上的 iCal 验证器将此突出显示为警告,尽管 iCal 文件可以正常工作,但 Outlook 2010 中未设置提醒警报。

这是一个示例 iCal 文件,它在 Outlook 2010 中打开时完全符合预期,包括将提醒设置为 1 小时(只要换行符为\r\n):

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Keeble Smith//NONSGML GETONCOURT.COM//EN
BEGIN:VEVENT
DTSTART:20130514T190000Z
DTEND:20130514T194000Z
LOCATION:Court 2\, Demo Squash Club
DESCRIPTION:View this court booking on getoncourt.com: http://democlub.getoncourt.com/booking-details/dmo3106
SUMMARY:Squash court booking for John Smith - DMO3106
BEGIN:VALARM
TRIGGER:-PT60M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

还要注意转义的特殊字符。确保在 TEXT 值中转义以下内容(但不是 EOL 实例):

\  to  \\
;  to  \;
,  to  \,
\n to  \\n
于 2013-05-14T10:35:07.017 回答
2

我有同样的问题。我导出了在 Google 日历中创建的日历,VALARM 部分看起来与我导出的完全相同。我觉得这是谷歌方面的问题。我已经看到这个问题在 Stack Overflow 上被问了 2 到 3 次而没有答案。

于 2012-04-28T01:51:38.043 回答
1

could you clarify what you mean by "not registering". For instance I copied your code and imported it in google calendar and it clearly shows Reminder : pop-up 30mn in the property of the event.

Is it that you expect to see an item in the calendar where the alarm should take place. I believe this is not what the RFC5545 implies as a behaviour for VALARM.

于 2012-05-10T12:22:11.513 回答
1

MS 声明 Outlook 忽略了几个标准警报设置,请参阅:http: //msdn.microsoft.com/en-us/library/ee624781 (v=exchg.80).aspx

我发现在 Outlook 2013 中并非如此。我删除了:

操作:显示 描述:提醒

并且警报在 Outlook 2013 中对我有用。

似乎是 MS Outlook 不遵循 RFC5545 标准,也不遵循自己的实现标准的情况。

于 2014-10-22T03:13:28.723 回答
0

就其价值而言,这本身并不是一个错误,而是日历实施者选择的与 RFC 兼容的选择。见http://sourceforge.net/p/dday-ical/discussion/656447/thread/01111137#23c5

我认为担心的是,如果动作是音频,那么当触发事件发生时,客户端必须运行附件(可能是声音文件)。但是,不能保证声音文件确实是声音文件,而不是更邪恶的东西。

现在,我不知道为什么它会忽略显示动作的 valarms。

于 2012-09-17T14:57:29.173 回答
0

如果有人仍然对此有疑问。事件前 15 分钟发出警报的 Ics。在 2013 年展望中进行了测试。

BEGIN:VCALENDAR
PRODID:-//MyTestProject//EN
VERSION:2.0
BEGIN:VEVENT
SUMMARY;LANGUAGE=sv-se:Room
UID:1af3ef4f-5997-4cf0-bde2-1f8705cfaef1
SEQUENCE:0
BEGIN:VALARM
TRIGGER:-PT15M
DESCRIPTION:Booking
ACTION:DISPLAY
END:VALARM  
CLASS:PUBLIC
DTSTAMP:20190221T132418
DTSTART:20190423T104000
DTEND:20190423T111000  
LOCATION:USA
END:VEVENT
END:VCALENDAR

还有一些c#代码供参考。日期时间等

var icalStringbuilder = new StringBuilder();
    icalStringbuilder.AppendLine("BEGIN:VCALENDAR");
    icalStringbuilder.AppendLine("PRODID:-//MyTestProject//EN");
    icalStringbuilder.AppendLine("VERSION:2.0");

    icalStringbuilder.AppendLine("BEGIN:VEVENT");
    icalStringbuilder.AppendLine("SUMMARY;LANGUAGE=sv-se:Room");
    icalStringbuilder.AppendLine("UID:" + Guid.NewGuid());
    icalStringbuilder.AppendLine("SEQUENCE:0");
    icalStringbuilder.AppendLine("BEGIN:VALARM");
    icalStringbuilder.AppendLine("TRIGGER:-PT15M");
    icalStringbuilder.AppendLine("DESCRIPTION:Booking");
    icalStringbuilder.AppendLine("ACTION:DISPLAY");
    icalStringbuilder.AppendLine("END:VALARM");
    icalStringbuilder.AppendLine("CLASS:PUBLIC");
    icalStringbuilder.AppendLine($"DTSTAMP:{DateTime.UtcNow:yyyyMMddTHHmmss}");
    icalStringbuilder.AppendLine($"DTSTART:{starttimeDataTimeFormatVariable:yyyyMMddTHHmmss}");
    icalStringbuilder.AppendLine($"DTEND:{endtimeDataTimeFormatVariable:yyyyMMddTHHmmss}");
    icalStringbuilder.AppendLine("LOCATION:USA");
    icalStringbuilder.AppendLine("END:VEVENT");
    icalStringbuilder.AppendLine("END:VCALENDAR");
于 2019-02-21T13:50:45.597 回答