Добавление встреч в Outlook организатора через iCalendar

Моя ситуация: Назначения хранятся во внешней CMS. Я хочу отправить встречи (через PHP/PHPMailer) почтовому клиенту конечного пользователя (Outlook). Пользователь (организатор) должен иметь возможность отправлять встречи себе и другим участникам, а он (организатор) должен получать все ответы от участников.

Я могу отправить встречу всем пользователям (организатору и участникам), но если участник ответит на встречу, организатор получит уведомление, но оно не будет видно для записи календаря организаторов. Он даже не видит систему "Отслеживание", чтобы следить за тем, кто принял или отклонил приглашение.

Это трудно описать, но, надеюсь, моя проблема прояснилась.

Вот моя настройка:

$mail = new \PHPMailer();
$mail->isSMTP();                  
$mail->isHTML(false);
// Settings...
$mail->ContentType = 'text/calendar';
$mail->addCustomHeader('MIME-version',"1.0");
$mail->addCustomHeader('Content-type',"text/calendar; method=REQUEST; charset=UTF-8");
$mail->addCustomHeader('Content-Transfer-Encoding',"7bit");
$mail->addCustomHeader('X-Mailer',"Microsoft Office Outlook 12.0");
$mail->addCustomHeader("Content-class: urn:content-classes:calendarmessage");

$mail->AddAddress('[email protected]');
$mail->AddAddress('[email protected]');

// Event data
$summary = 'Test event';
$location = 'Room 001';
$start = '20180310';
$start_time = '160000';
$end = '20180310';
$end_time = '163000';
$event_id = 123456;
$sequence = 0;
$status = 'CONFIRMED';

$mail->Subject = $summary";

$ical = "BEGIN:VCALENDAR\r\n";
$ical .= "VERSION:2.0\r\n";
$ical .= "PRODID:-//Company//Anything//DE\r\n";
$ical .= "METHOD:REQUEST\r\n";
$ical .= "BEGIN:VEVENT\r\n";
$ical .= ORGANIZER;CN=\"Organizer\":MAILTO:[email protected]\r\n";
$ical .= "ATTENDEE;CN=\"Anybody\";ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:MAILTO:[email protected]\r\n";
$ical .= "UID:" . strtoupper(md5($event_id)) . "-example.com\r\n";
$ical .= "SEQUENCE:" . $sequence . "\r\n";
$ical .= "STATUS:" . $status . "\r\n";
$ical .= "DTSTAMPTZID=Europe/Berlin:" . date('Ymd') . 'T' . date('His') . "\r\n";
$ical .= "DTSTART:" . $start . "T" . $start_time . "\r\n";
$ical .= "DTEND:" . $end . "T" . $end_time . "\r\n";
$ical .= "LOCATION:" . $location . "\r\n";
$ical .= "SUMMARY:" . $summary . "\r\n";
$ical .= "DESCRIPTION:AnyText\r\n";
$ical .= "BEGIN:VALARM\r\n";
$ical .= "TRIGGER:-PT15M\r\n";
$ical .= "ACTION:DISPLAY\r\n";
$ical .= "DESCRIPTION:Reminder\r\n";
$ical .= "END:VALARM\r\n";
$ical .= "END:VEVENT\r\n";
$ical .= "END:VCALENDAR\r\n";

// Send mail via PHPMailer...

Любые предложения, как поместить событие в календарь организатора (из внешнего приложения), который затем сможет получать ответы от участников?


person Danny    schedule 06.03.2018    source источник


Ответы (1)


Во-первых, я бы порекомендовал использовать класс ical builder, а не создавать свой собственный вручную.

PHPMailer имеет некоторую встроенную поддержку iCal, что делает это легко:

$ical = "your ical data in here, generated however you like";
$mail->Ical = $ical;

Имейте в виду, что поддержка iCal в клиентах сильно различается; сложно создать элементы iCal, которые одновременно работают в gmail и Outlook.

person Synchro    schedule 06.03.2018