快速概要:
我开发了一个项目管理系统,通过向销售代表发送 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
我遗漏了一些明显的东西吗?
谢谢你。
如果我没记错的话,如果缺少 VALARM 部分,至少某些版本的 Outlook 会将提醒设置为默认值(15 分钟)。您可以将闹钟设置为遥远的将来的日期吗?
如果我正确理解你的问题,接收端的客户端会自动添加一个(默认)警报,尽管原始 VEVENT 中没有指定警报。
iCalendar 或 iMIP/iTIP 中无法明确传达任何警报不应与事件关联的信息。就 iMIP/iTIP 而言,在您发送的 VEVENT 中添加警报实际上是一种不好的做法。毕竟,我心目中的最佳闹钟可能不是你的。
就您的示例而言,这可能是由于 TRANSP 属性设置为 TRANPARENT (您不关心它,因为它不会消耗您的时间),但这是一个相当疯狂的猜测。
iCalendar 中无法指定 VALARM 组件并将其标记为“禁用”。它要么存在并且处于活动状态,要么根本不存在。
某些客户端(例如 Outlook)没有禁用警报(以及稍后能够重新启用它)的概念。据我所知,唯一支持禁用警报想法的客户端是 Notes,但可能还有其他客户端。
实现此目的的唯一方法是使用并非每个人都支持的 X- 属性,或者简单地删除有问题的 VALARM。
您可以考虑在系统中设置“发送警报”首选项,以便用户可以指示是否希望您发送警报。如果用户选择退出,则只需从您生成的内容中删除 VALARM 组件,然后再将其发送给他们即可。
嗯,我也有同样的问题。我创建了一个 .ics 来根据 Excel 中的表格批量导入几十个日历保留。我没有定义 VALARM,但是当使用 mac 日历导入时,它本机继承了它并应用了我的默认警报。比较有和没有设置警报的事件,我发现所有事件都有 VALARM 块,但我标记为无提醒的所有事件都设置了完全相同的触发值。看起来将其值设置为 4/1/1976 的 00:55:45Z 是模棱两可的无警报。
BEGIN:VALARM
X-WR-ALARMUID:#####
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
X-APPLE-DEFAULT-ALARM:TRUE
ACTION:NONE
END:VALARM
这就是为什么 4/1/1976 哈哈。典型的编程方式,选择的随机日期或名称背后总是有一个原因。有点像Python的名字... “创始人史蒂夫·乔布斯和史蒂夫·沃兹尼亚克于 1976 年 4 月 1 日创建了苹果电脑,[1] 并于 1977 年 1 月 3 日[2] 在加利福尼亚州库比蒂诺成立了公司。” - 维基百科
这是我的第一个默认警报的代码(VALARM 不是造成差异的原因):
BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST (or CANCEL based on your application)
BEGIN:VEVENT
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:[email protected]
ORGANIZER;CN=\"Name of Organizer\":MAILTO:[email protected]
DTSTAMP;TZID=America/Chicago:20240103T170800
DTSTART;TZID=America/Chicago:20240103T170800
DTEND;TZID=America/Chicago:20240103T180800
TRANSP:OPAQUE
SEQUENCE:0
STATUS:CONFIRMED (or CANCELLED based on your application)
UID:1234
DTSTAMP:20240104T080000Z
SUMMARY:Event 1
DESCRIPTION:n/a
LOCATION:Dome 1
PRIORITY:5
X-MICROSOFT-CDO-IMPORTANCE:1
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR
有效的代码:(ATTENDEE;PARTSTAT=DELEGATED
;CN='与会者姓名';[电子邮件受保护]:MAILTO:[电子邮件受保护]是唯一的区别!)
BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST (or CANCEL based on your application)
BEGIN:VEVENT
ATTENDEE;PARTSTAT=*DELEGATED*;CN='Attendee Name';[email protected]:MAILTO:[email protected]
ORGANIZER;CN=\"Name of Organizer\":MAILTO:[email protected]
DTSTAMP;TZID=America/Chicago:20240103T170800
DTSTART;TZID=America/Chicago:20240103T170800
DTEND;TZID=America/Chicago:20240103T180800
TRANSP:OPAQUE
SEQUENCE:0
STATUS:CONFIRMED (or CANCELLED based on your application)
UID:1234
DTSTAMP:20240104T080000Z
SUMMARY:Event 1
DESCRIPTION:n/a
LOCATION:Dome 1
PRIORITY:5
X-MICROSOFT-CDO-IMPORTANCE:1
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR