首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Outlook-web-app不从我生成的icalendar导入事件。

Outlook-web-app不从我生成的icalendar导入事件。
EN

Stack Overflow用户
提问于 2017-04-06 08:07:35
回答 1查看 283关注 0票数 0

对于我的应用程序,我使用laravel 5.3和一个名为markuspoerschke/iCal的包,您可以找到这里

当学生想订阅他或她的日历时,我们会生成一个URL,这个URL可以被填充到Google和Outlook中。除了最后提到的outlook之外,它没有导入任何事件。

我们生成的ICS的外观示例。这包含一个具有“test”描述的事件。

代码语言:javascript
复制
BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:www.onderwijsonline.nl 
X-PUBLISHED-TTL:PT15M 
BEGIN:VEVENT 
UID:58e5f21fc2551 
DTSTART;TZID=Europe/Amsterdam:20170406T090000 
SEQUENCE:0 
TRANSP:OPAQUE DTEND;TZID=Europe/Amsterdam:20170406T140000 URL:http://oo.dev/calendar/event/420 
SUMMARY:Test 
CLASS:PUBLIC 
DTSTAMP:20170406T094535Z 
END:VEVENT 
END:VCALENDAR

调用包以生成以下内容的脚本:

代码语言:javascript
复制
public function getIcal($token = null)
    {
        $user = $this->userRepository->getByToken($token);

        $vCalendar = new \Eluceo\iCal\Component\Calendar('www.onderwijsonline.nl');
        $vCalendar->setPublishedTTL('PT15M');

        if (!is_null($user)) {

            /**
             * Calendar events
             */
            $events = $this->calendarRepository->getEventsForUser($user->id, Carbon::now()->subWeeks(2), Carbon::now()->addWeeks(6));
            foreach ($events as $event) {

                $vEvent = new \Eluceo\iCal\Component\Event();

                $vEvent
                    ->setUseTimezone(true)
                    ->setUseUtc(false)
                    ->setDtStart(Carbon::parse($event['start']))
                    ->setDtEnd(Carbon::parse($event['end']))
                    ->setNoTime(($event['allDay'] == 1 ? true : false))
                    ->setUrl($event['href'])
                    ->setDescription($event['description'])
                    ->setSummary($event['title']);

                $vCalendar->addComponent($vEvent);
            }

            /**
             * Project events
             */
            $events = $this->calendarRepository->getEventsForProjects($user->id, null, null);

            foreach ($events as $event) {
                $vEvent = new \Eluceo\iCal\Component\Event();

                $vEvent
                    ->setUseTimezone(true)
                    ->setUseUtc(false)
                    ->setDtStart(Carbon::parse($event['start']))
                    ->setDtEnd(Carbon::parse($event['end']))
                    ->setNoTime(($event['allDay'] == 1 ? true : false))
                    ->setUrl($event['href'])
                    ->setSummary($event['title']);

                $vCalendar->addComponent($vEvent);
            }

            /**
             * Timetable events
             */
            $events = $this->calendarRepository->getEventsForTimetables($user->id, Carbon::now()->subWeeks(2), Carbon::now()->addWeeks(6));
            foreach ($events as $event) {
                $vEvent = new \Eluceo\iCal\Component\Event();

                $vEvent
                    ->setUseTimezone(true)
                    ->setUseUtc(false)
                    ->setDtStart(Carbon::parse($event['start']))
                    ->setDtEnd(Carbon::parse($event['end']))
                    ->setNoTime(($event['allDay'] == 1 ? true : false))
                    ->setSummary($event['title']);

                $vCalendar->addComponent($vEvent);
            }
        }

        header('Content-Type: text/calendar; charset=utf-8');
        header('Content-Disposition: inline; filename=onderwijsonline.ics');

        return $vCalendar->render();
    }

正如我前面提到的,这种设置对于Google很好,但对于outlook则不适用。

有人知道为什么和如何解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-21 09:54:44

您使用的是TZID =Europe/阿姆斯特丹,但ics文件不包含与此TZID相对应的VTIMEZONE定义。因此,在开始之前:VEVENT应该有一个BEGIN:VTIMEZONE...END:VTIMEZONE组件。

至于为什么它仍然适用于Google,而不适用于Outlook:许多产品确实使用Olson,这样他们就可以忽略VTIMEZONE定义缺失的事实,而只是假设您的TZID=欧洲/阿姆斯特丹对应于它们的映射。

另一方面,微软有自己的一组TZID标识符。“中欧标准时间”),因此无法将您的欧洲/阿姆斯特丹映射到一个已知的定义。

最后,在堆栈溢出上至少会出现TRANSP、DTEND和URL属性。我假设这只是提交问题(?)时的格式问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43249331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档