【问题标题】:Outlook 2003 does not import .ics calendar while outlook 2007 doesOutlook 2003 不会导入 .ics 日历,而 Outlook 2007 会
【发布时间】:2011-08-05 22:40:34
【问题描述】:

我有一个使用 PHP 手动创建的 .ics 文件,如下所示:

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
CLASS:PUBLIC
DESCRIPTION:Some description here
LOCATION:Scheduled PTO
DTEND;VALUE=DATE:20101104
DTSTART;VALUE=DATE:20101103
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=en-us:PTO - 8.00 hour(s)
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
END:VEVENT
END:VCALENDAR

这在导入到 Outlook 2007(以及 Google 日历)时可以正常工作。在 Outlook 2003 中,我收到以下错误:

“如果您尝试以 iCalendar 格式保存周期性农历,则可能会出现此错误。为避免此错误,请将约会选项设置为公历而不是农历。”

我需要在 .ics 文件中进行更改以使其与 Outlook 2003 一起使用吗?

(我目前没有可以测试的 Outlook 2003)

【问题讨论】:

  • PHP 无法生成 .ics 文件。然而,一个用 PHP 编写的库可以,也许你在你的帖子中命名它?
  • 对不起,我不使用库,我手动创建 ics 文件。问题已更新...

标签: php outlook-2003 icalendar


【解决方案1】:

所以,在对 2003 年的测试系统进行了一些试验和错误之后,我发现添加了以下内容:

DTSTAMP:20101103T120000Z

允许 Outlook 2003 导入 .ics 文件而不会破坏 2007、iCal 或 Google。
我也将 UID 行添加到我的最终 .ics 文件中。

所以,我的最终 .ics 文件如下所示:

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
CLASS:PUBLIC
DESCRIPTION:Some description here
LOCATION:Scheduled PTO
DTEND;VALUE=DATE:20101104
DTSTART;VALUE=DATE:20101103
DTSTAMP:20101103120000Z
UID: VACATIOND41D8CD98F00B204E9800998ECF8427E
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=en-us:PTO - 8.00 hour(s)
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
END:VEVENT
END:VCALENDAR

我所做的只是在 Outlook 2003 中创建一个手动条目,将其保存为 .ics 并比较我原来的缺失/不同之处。

现在一切正常。

更新 另外一项更改是,我删除了VERSION:2.0 位,这使所有工作更加可靠。

【讨论】:

  • 在 2003 年尝试过,但它不起作用。出现一条消息,指出某些字段无效。虽然在 2010 年工作。您的意思是它适用于 2010 年和 2007 年吗?
【解决方案2】:

添加:

CALSCALE:GREGORIAN
METHOD:PUBLISH 

这对我有用。

【讨论】:

    【解决方案3】:

    删除“VERSION:2.0”是在 Outlook 2003 中为我打开第 3 方 .ics 会议所需的全部内容。

    【讨论】:

      【解决方案4】:

      确实,2003 年确实需要以下三个字段:METHOD 字段发布在 VEVENT 部分之外,VEVENT 部分内发布 DTSTAMPUID 字段。 DTSTAMP 必须是一个有效的时间戳,这样您就可以复制在DTSTART 下找到的值,并且 UID 可以是它出现的任意字符串。

      METHOD:PUBLISH
      DTSTAMP;VALUE=DATE-TIME:$COPY_VALUE_AT_DTSTART
      UID:placeholder
      

      我还遇到过包含ATTENDEE# 字段的日历事件,例如ATTENDEE#<Client 300000 "Jane Doe">。我删除了该行并获取了要导入的文件。所有这些格式错误的 ics 文件都失败并显示一条消息

      Microsoft Office Outlook

      无法导入 vCalendar 文件。

      显示帮助 >>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        • 1970-01-01
        • 2011-03-25
        相关资源
        最近更新 更多