Отправляйте события iCal с методом =PUBLISH в Exchange 2013, Outlook 2010, OWA

Мы отправляем события календаря в формате iCalendar нашим клиентам после подписки или отмены подписки на событие.

Содержимое iCalendar вложено в файл и встроено в сообщение электронной почты. Благодаря встраиванию Outlook 2010 раньше показывал событие и предлагал импортировать его в свой календарь. Thunderbird / Lightning работает точно так же.

Мы используем метод =PUBLISH, как указано в RFC 5546 - 3.2.1. Мы не хотим, чтобы клиенты "принимали" или "отклоняли" событие, поскольку это уже подтверждено системой бронирования. Это можно сделать с помощью метода =REQUEST.

Это работало как задумано, пока мы использовали Exchange 2007. С Exchange 2013 у нас странное поведение

  • в Outlook 2010: отображается электронная почта, отображается значок события, но вы не можете сохранить событие в своем календаре
  • в OWA: электронная почта не отображается!
  • в Thunderbird через IMAP: электронная почта не отображается. Вместо этого вы получаете странное электронное письмо с темой "Fehler beim Abrufen der folgenden Nachricht mithilfe des IMAP4-Protokolls: 1393431". (Ошибка при получении следующего сообщения по протоколу IMAP4).

Делая это с методом =REQUEST, кажется, все хорошо, даже для Outlook.

Я сократил нашу настройку, чтобы найти решение. Теперь я понятия не имею.

Событие iCalendar, основанное на минимальном опубликованном событии в RFC 5546

    НАЧАТЬ:VCALENDAR
    МЕТОД: ЗАПРОС
    PRODID:-// Пример /ExampleCalClient//EN
    VERSION:2,0
    НАЧАТЬ: VEVENT
    ОРГАНИЗАТОР;CN="а":MAILTO:a@example.com
    DTSTART:19970701T200000Z
    DTSTAMP:19970611T190000Z
    РЕЗЮМЕ: СТ. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
    UID:0981234-1234234-23@example.com
    СТАТУС: Подтверждена
    END: VEVENT
    END:VCALENDAR

PHP скрипт на основе swiftmailer

    setSubject ('Ваша тема')
    ->setFrom(array('a@example.com' => 'a'))
    ->setTo(массив ('b@example.com' => 'b'))
    //->attach(Swift_Attachment::fromPath('Minimal.ics'));

    // включить как встроенную часть
    $part = \Swift_MimePart::newInstance()
        ->setEncoder(\Swift_Encoding::getBase64Encoding())
        ->setContentType('text/calendar; method=PUBLISH')
        ->setBody(file_get_contents('Minimal.ics'));

    $ Сообщение-> присоединять ($ часть);

    $transport = Swift_SmtpTransport::newInstance('localhost', 25);
    // Создание почтовой программы с использованием созданного вами транспорта
    $mailer = Swift_Mailer::newInstance($transport);
    $ Mailer-> отправить ($ сообщение);

Полученное письмо

    Обратный путь: 
    [...] Идентификатор сообщения: Дата: Ср, 01 Июн 2016 16:29:34 +0000 Тема: Ваша тема От: a до: b 
    MIME-версия: 1.0 Тип контента: составная часть / альтернатива;
     border ="_=_swift_v4_1464798574_0bd8d119cc81344afaa03879bf961d51_=_"


    --_=_swift_v4_1464798574_0bd8d119cc81344afaa03879bf961d51_=_
    Content-Type: text/calendar; Метод = ПУБЛИКОВАТЬ; кодировка = UTF-8
    Content-Transfer-Encoding: base64

    QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6UkVRVUVTVA0KUFJPRElEOi0vL0V4YW1wbGUvRXhhbXBs
    ZUNhbENsaWVudC8vRU4NClZFUlNJT046Mi4wDQpCRUdJTjpWRVZFTlQNCk9SR0FOSVpFUjtDTj0i
    QWxleGFuZGVyIEJpZ2dhIjpNQUlMVE86QWxleGFuZGVyLkJpZ2dhQHNsdWItZHJlc2Rlbi5kZQ0K
    RFRTVEFSVDoxOTk3MDcwMVQyMDAwMDBaDQpEVFNUQU1QOjE5OTcwNjExVDE5MDAwMFoNClNVTU1B
    Ulk6U1QuIFBBVUwgU0FJTlRTIC1WUy0gRFVMVVRILVNVUEVSSU9SIERVS0VTDQpVSUQ6MDk4MTIz
    NC0xMjM0MjM0LTIzQGV4YW1wbGUuY29tDQpTVEFUVVM6Q09ORklSTUVEDQpFTkQ6VkVWRU5UDQpF
    TkQ6VkNBTEVOREFSDQo=

    --_=_swift_v4_1464798574_0bd8d119cc81344afaa03879bf961d51_=_-- 

Поведение не меняется, если

  • событие прилагается
  • событие цитируется для печати вместо base64
  • тело заполнено текстом / простым текстом и / или текстом / HTML
  • конец строки файла события - это dos (\r\n) или unix (\ n)

Thunderbird / Lightning и Googlemail работают как положено.

Итак, что с этим не так? Или это известное поведение Exchange 2013 / Outlook 2010? Или кто дьявол в этом случае?

0 ответов

Другие вопросы по тегам