2

快速简介:

我开发了一个项目管理系统,可以帮助我们的销售代表通过电子邮件发送 iCal 文件来跟踪事件。目前一切正常,但他们不想弹出提醒。相反,他们只希望事件出现在他们的日历上。


警告:

不幸的是,让他们更改电子邮件客户端的设置不是一个可接受的解决方案。


研究:

根据iCalendar 规范,可以设置 VALARM 组件以便定义警报/提醒,但我似乎无法弄清楚如何一起禁用警报。

这似乎适用于 Outlook 2013,但我不知道为什么:

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 15.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20130625T191929Z
DTEND;VALUE=DATE:20130627
DTSTAMP:20130625T174218Z
DTSTART;VALUE=DATE:20130626
LAST-MODIFIED:20130625T191929Z
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=en-us:test
TRANSP:TRANSPARENT
UID:040000008200E00074C5B7101A82E00800000000304147C0A971CE01000000000000000
    0100000004A6B73D79A177C4ABFF1E0DCAE7E273F
X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//E
    N">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server ve
    rsion 08.00.0681.000">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted f
    rom text/rtf format -->\n\n<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>\n\n</
    BODY>\n</HTML>
X-MICROSOFT-CDO-BUSYSTATUS:FREE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MS-OLK-AUTOFILLLOCATION:TRUE
END:VEVENT
END:VCALENDAR

我错过了一些明显的东西吗?

谢谢你。

4

4 回答 4

1

如果我没记错的话,如果缺少 VALARM 部分,至少某些版本的 Outlook 会将提醒设置为默认值(15 分钟)。你能把闹钟定在遥远的未来吗?

于 2013-06-25T18:41:06.340 回答
1

iCalendar 无法指定 VALARM 组件并将其标记为“已禁用”。它要么存在并且处于活动状态,要么根本不存在。

某些客户端(例如 Outlook)没有禁用警报(并且以后能够重新启用它)的概念。我所知道的唯一支持禁用警报的客户是 Notes,但可能还有其他客户。

实现这一点的唯一方法是使用并非每个人都支持的 X 属性,或者简单地删除有问题的 VALARM。

您可以考虑在系统中设置“发送警报”首选项,以便用户可以指示他们是否希望您发送它们。如果用户选择退出,则只需从您生成的内容中删除 VALARM 组件,然后再将其发送给他们。

于 2014-01-07T22:40:51.880 回答
1

如果我正确理解您的问题,接收端的客户端将自动添加(默认)警报,尽管原始 VEVENT 中未指定任何警报。

iCalendar 或 iMIP/iTIP 无法明确传达任何警报不应与事件相关联的信息。就 iMIP/iTIP 而言,在您发送的 VEVENT 中设置警报实际上是一种不好的做法。毕竟,我认为最好的警报可能不是你的。

就您的示例而言,这可能是由于 TRANSP 属性设置为 TRANPARENT (您不关心它,因为它不会消耗您的时间),但这是一个相当疯狂的猜测。

于 2013-06-26T16:37:29.817 回答
0

好吧,我有同样的问题。我创建了一个 .ics 来基于 Excel 中的表格批量导入几十个日历保留。我没有定义VALARM,但是当使用 mac 日历导入时,它本机继承了这个并应用了我的默认警报。比较设置和不设置警报的事件,我发现所有事件都有 VALARM 块,但我标记为没有提醒的所有事件都设置了完全相同的触发值。看起来在 00:55:45Z 将其设置为 1976 年 4 月 1 日的值是没有警报的模棱两可。

BEGIN:VALARM
  X-WR-ALARMUID:#####
  TRIGGER;VALUE=DATE-TIME:19760401T005545Z
  X-APPLE-DEFAULT-ALARM:TRUE
  ACTION:NONE
END:VALARM

这就是为什么 1976 年 4 月 1 日哈哈。典型的编程方式,选择随机日期或名称总是有原因的。有点像 Python 的名字……“创始人史蒂夫·乔布斯和史蒂夫·沃兹尼亚克于 1976 年 4 月 1 日[1] 创建了 Apple Computer,并于 1977 年 1 月 3 日[2] 在加利福尼亚州库比蒂诺成立了该公司。” - 维基百科

于 2020-01-07T14:37:09.440 回答