【问题标题】:Can the Alarm/Reminder of iCalendar Event be disabled via iCal file?可以通过 iCal 文件禁用 iCalendar 事件的警报/提醒吗?
【发布时间】:2020-01-07 22:55:06
【问题描述】:

简介:

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


警告:

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


研究:

根据iCalendar specifications,可以设置 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

我是否遗漏了一些明显的东西?

谢谢。

【问题讨论】:

    标签: outlook icalendar


    【解决方案1】:

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

    【讨论】:

    • 这是我的后备计划,但似乎必须有一种方法来完全阻止警报。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2017-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多