【问题标题】:Outlook not importing multiple events in an ics fileOutlook 未在 ics 文件中导入多个事件
【发布时间】:2014-09-11 20:49:09
【问题描述】:

我对生成的 iCal 文件有疑问。

它似乎正确地生成了代码,并且 .ics 文件加载了多个事件,但是当我在 Outlook 中打开该文件时,它只会将第一个事件导入我的日历,其余的不会添加。

这是生成的 iCal 文件

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-WR-CALNAME: Calendar
CALSCALE:GREGORIAN
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
DTSTART:19810329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
TZNAME:BST
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
DTSTART:19961027T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:GMT
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART:20140906T090000
DTEND:20140906T170000
UID:224
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Explore the College with current students\, chat with the Director of Studies in your subject\, meet our admissions tutors\,
URL;VALUE=URI:http://www.domain.com/events-224
SUMMARY:Open Day (undergraduate)
END:VEVENT
BEGIN:VEVENT
DTSTART:20141208T000000
DTEND:20141212T000000
UID:416
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Admissions Interviews
URL;VALUE=URI:http://www.domain.com/events-416
SUMMARY:Admissions Interviews
END:VEVENT
BEGIN:VEVENT
DTSTART:20141215T000000
DTEND:20141218T000000
UID:417
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Admissions Interviews
URL;VALUE=URI:http://www.domain.com/events-417
SUMMARY:Admissions Interviews
END:VEVENT
BEGIN:VEVENT
DTSTART:20150112T000000
DTEND:20150116T000000
UID:419
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Admissions Interviews
URL;VALUE=URI:http://www.domain.com/events-419
SUMMARY:Admissions Interviews
END:VEVENT
BEGIN:VEVENT
DTSTART:20150314T000000
DTEND:20150314T000000
UID:67
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Explore the College with current students\, chat with the Director of Studies in your subject and meet our admissions tutors. 

URL;VALUE=URI:http://www.domain.com/events-67
SUMMARY:Admissions Open Day (Arts)
END:VEVENT
BEGIN:VEVENT
DTSTART:20150425T000000
DTEND:20150425T000000
UID:73
DTSTAMP:20140721T102908
LOCATION:
DESCRIPTION:Explore the College with current students\, chat with the Director of Studies in your subject and meet our admissions tutors.
URL;VALUE=URI:http://www.domain.com/events-73
SUMMARY:Admissions Open Day (Sciences)
END:VEVENT
END:VCALENDAR

以下是设置iCal文件页眉页脚的变量

$iCalHeader = "" .
        "BEGIN:VCALENDAR\n" .
        "PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN\n" .
        "VERSION:2.0\n" .
        "METHOD:PUBLISH\n";

    $iCalHeaderBottom = "CALSCALE:GREGORIAN\n" .
        "X-MS-OLK-FORCEINSPECTOROPEN:TRUE\n" .
        "BEGIN:VTIMEZONE\n" .
        "TZID:Europe/London\n" .
        "BEGIN:DAYLIGHT\n" .
        "TZOFFSETFROM:+0000\n" .
        "TZOFFSETTO:+0100\n" .
        "DTSTART:19810329T010000\n" .
        "RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\n" .
        "TZNAME:BST\n" .
        "END:DAYLIGHT\n" .
        "BEGIN:STANDARD\n" .
        "TZOFFSETFROM:+0100\n" .
        "TZOFFSETTO:+0000\n" .
        "DTSTART:19961027T020000\n" .
        "RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\n" .
        "TZNAME:GMT\n" .
        "END:STANDARD\n" .
        "END:VTIMEZONE\n";

    $iCalFooter = "END:VCALENDAR";

最后是生成事件的代码

$iCal .= "BEGIN:VEVENT\n".
                "DTSTART:" . date('Ymd\THis', strtotime($row2["EVENT_StartDateTime"])) ."\n".
                "DTEND:" . date('Ymd\THis', strtotime($row2["EVENT_EndDateTime"])) . "\n".
                "UID:" . $row2["EVENT_ID"] . "\n".
                "DTSTAMP:" . date('Ymd\THis', time()) . "\n".
                "LOCATION:$address\n".
                "DESCRIPTION:" . $this->escapeString($description) . "\n".
                "URL;VALUE=URI:http://www.domain.com/events-" . $row2["EVENT_ID"] . "\n".
                "SUMMARY:" . $this->escapeString($title) . "\n".
                "END:VEVENT\n";

它适用于第一个事件,所以我认为为每个事件生成的代码没有问题,我做了一些研究,但似乎找不到解决方案,是否有额外的声明需要在每个事件之间使用吗?

或者也许 Outlook 不支持单个 iCal 中的多个事件,因此只导入第一个?

任何帮助或建议将不胜感激。

提前致谢。

【问题讨论】:

    标签: php outlook icalendar


    【解决方案1】:

    回答这个问题可能太晚了,但可能对其他人有所帮助。

    https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxcical/d2a0a079-02a6-4643-9e78-0ac35998e1fb

    X-MS-OLK-FORCEINSPECTOROPEN

    如果此属性设置为 TRUE,则 iCalendar 流应该 作为单个日历对象导入,而不管 iCalendar 中存在多少 VEVENT 组件。请注意,包含多个 VEVENT 组件的 iCalendar 文件可以通过使用部分中指定的 RECURRENCE-ID 属性来表示单个约会

    【讨论】:

      【解决方案2】:

      您的 Icalendar 传递了 this validator,但请尝试为每个事件添加一个 ORGANIZER。这个字段是我阅读the spec的必填项。

      这可能是预期问题。当您说“导入”时,您如何发送/打开日历以及您希望发生什么?一般来说,outlook 和其他客户对 Icalendars 有两种处理方法。如果 Icalendar 包含一个事件,METHOD=REQUEST,并且是lucky,它将显示为邀请,并带有一个按钮,可以直接将其添加到用户的日历中。 (如果非常幸运,并且收件人的电子邮件在参加者字段中,则该事件可能会在未预览或在邮件视图中打开之前在日历中显示为灰色。否则会在预览后出现。)

      如果它有多个事件或任何其他小问题,它将显示为附件(如果通过邮件接收),用户将不得不四处寻找才能打开它。通过邮件接收或从 URL 打开的多事件日历被视为单独的日历。没有建议将他们的事件添加到用户的日历中,但如果用户知道自己在做什么,则可以选择并拖动事件。

      【讨论】:

      • 在Outlook中打开ical文件时,Outlook似乎不会导入进行多个约会,但是使用导入功能会拉动所有事件,虽然这并不理想,我到目前为止还无法通过使用 Outlook 打开文件,让它从文件中提取所有事件。
      • 您添加了组织者吗?它改变了什么吗?你会考虑接受我的回答吗?
      【解决方案3】:

      如果您打开日历,就会发生这种情况。如果你 import 它,那么它工作正常:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-14
        • 2019-04-21
        • 2021-07-21
        • 2014-08-16
        • 1970-01-01
        • 2019-01-21
        • 2010-12-21
        • 1970-01-01
        相关资源
        最近更新 更多