outlook - 无法取消 ical 事件(可怕的“不支持的日历 message.ics”)
问题描述
我正在用 Python 编写一个系统,该系统使用 icalendar 库来生成 ical 邀请。这些效果非常好,但如果我尝试发送取消邮件,Outlook 只会显示可怕的“不支持的日历 message.ics”。我最初在邀请中遇到了这个问题,但通过修复我的日期格式解决了这个问题。
这是最初的邀请:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//myapp//myapp.example.com//
METHOD:REQUEST
BEGIN:VEVENT
SUMMARY:Weekly Review Meeting
DTSTART;VALUE=DATE-TIME:20200331T190000Z
DTEND;VALUE=DATE-TIME:20200331T200000Z
DTSTAMP;VALUE=DATE-TIME:20200325T193007Z
UID:1@myapp
SEQUENCE:0
ATTENDEE:me@example.com
CATEGORY:EVENT
CLASS:PUBLIC
DESCRIPTION:bla bla
LOCATION:Webex
ORGANIZER:donotreply@example.com
PRIORITY:5
STATUS:CONFIRMED
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR
然后取消:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//myapp//myapp.example.com//
METHOD:CANCEL
BEGIN:VEVENT
SUMMARY:Weekly Review Meeting
DTSTART;VALUE=DATE-TIME:20200331T190000Z
DTEND;VALUE=DATE-TIME:20200331T200000Z
DTSTAMP;VALUE=DATE-TIME:20200325T193011Z
UID:1@myapp
SEQUENCE:1
ATTENDEE:me@example.com
CATEGORY:EVENT
CLASS:PUBLIC
DESCRIPTION:
LOCATION:Webex
ORGANIZER:donotreply@example.com
PRIORITY:5
STATUS:CANCELLED
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
END:VALARM
END:VEVENT
END:VCALENDAR
相同的代码生成两者并以不同的方式设置METHOD
和STATUS
(DESCRIPTION
也不同)。我发送SEQUENCE
0 表示邀请,发送 1 表示取消。匹配对之间的 UID 始终是一致的。我错过了什么?
解决方案
我最终自己解决了这个问题。我会为后人分享我的学习成果。
电子邮件中的 MIME 类型也需要设置method=CANCEL
。这最终是我的问题。method
MIME 类型中的类型需要与METHOD
ical 文件中的匹配,并且两者都是 Outlook 正确处理它所必需的。
SEQUENCE
不应该为取消而增加,只是为了更新。
我还更新了所有地址 (ORGANIZER
和ATTENDEE
) 以包含mailto:
,但这似乎不是绝对必要的。
推荐阅读
- typescript - TypeScript noImplicitAny 为错误启用了隐式“任何”
- azure - 使用 Cassandra 和 Cosmos 的 Azure 迁移服务
- json - Druid parquet 摄取性能不佳
- vue.js - 组件可以在 vue-router 中知道它的子路由吗
- javascript - Invariant Violation:Invariant Violation:文本字符串必须在
零件 - django - Django 信号 - kwargs['update_fields'] 在通过 django admin 更新模型时始终为 None
- google-chrome - 为什么隐身标签加载网站的速度比打开正常标签的网站快得多?
- python - 在 python 代码中替换数组的值时遇到问题
- typescript - 仅当可以使用 Exclude<> 未定义参数时,如何在返回类型中包含未定义?
- r - 从最小值开始 y 轴,从 0 开始 x 轴,并使用 R 中的 matplot() 使它们相交