0

我正在尝试通过 PhpMailer 发送一个 .ics 文件,以使用户能够轻松导入它。

这在将其发送到 Outlook 时可以正常工作,但 Gmail 无法识别该文件,因此无法将其导入谷歌日历。

我的 ics 文件如下所示:

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Romance Standard Time
BEGIN:STANDARD
DTSTART:16011028T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
DTSTART:16010325T020000
BEGIN:DAYLIGHT
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
CLASS:PUBLIC
DESCRIPTION:
DTEND;TZID="Romance Standard Time":20130815T154000
DTSTAMP:20130814T094035Z
DTSTART;TZID="Romance Standard Time":20130815T144000
SUMMARY:Your appointment
LOCATION:1000 Brussels
END:VEVENT
END:VCALENDAR

然后我的 php 代码如下所示:

$mail->AddAttachment('../linkToIcs.ics');

该文件可以正常附加,但 Gmail 无法识别。然后我尝试将其添加为字符串附件

if (pathinfo($attachment, PATHINFO_EXTENSION) == 'ics') {
    $contents = file_get_contents($attachment);
    $mail->AddStringAttachment(
        $contents,
        pathinfo($attachment, PATHINFO_BASENAME),
        '7bit',
        'text/calendar'
    );
}

将其正确添加为附件,但在 Gmail 中再次未被识别为“可导入”日历事件。

我还应该注意,同一封电子邮件中有一个 HTML 正文。

关于为什么这不起作用的任何解释都会很棒。

4

2 回答 2

1

忘记回答了。。

我通过在 DTEND 和 DTSTART 之后删除 TZID 来修复它,显然这不是 Gmail 识别的。

于 2013-09-02T13:25:16.107 回答
0

我为谷歌检查了以下内容PRODID。有用。但我不确定我们是否真的可以使用它。我是新手iCalendar

-//Google Inc//Google Calendar 70.9054//EN 

使用 gmail 时,您的 PRODID 对我不起作用。

于 2013-08-19T12:27:20.437 回答