календарь — PHP | Отправка электронного приглашения в Outlook

Я пытаюсь создать приглашение по электронной почте, которое отправляется в Outlook, у пользователя обычно есть выбор принять встречу, которая заполняет календарь в Outlook. Я использую почтовую программу PHP и у меня возникли проблемы, см. Ниже:

Пример того, как пользователь должен получить электронное письмо:
введите описание изображения здесь

Однако, когда электронное письмо отправлено, оно фактически не отправляет приглашение. Вместо этого отправляется текст, см. Рисунок ниже полученного электронного письма (я подверг цензуре электронный адрес и личные имена):
введите описание изображения здесь

Я, честно говоря, не знаю, что не так, ниже мой код. Предположим, что переменным присвоены значения, так как в противном случае будет слишком много сообщений:

                $participant_name = $userid_result["realname"];
$participant_email = $userid_result["email_primary"];

$to = $participant_email;

$organizer          = 'jimmy Smith';
$organizer_email    = '[email protected]';

$participant_name_1 = $participant_name;
$participant_email_1= $participant_email;

$location           = "N/A";
$date               = $row_date_from;
$startTime          = $row_date_from;
$endTime            = $row_date_to;
$dateend            = $row_date_to;
$subject            = 'Holiday Request';
$desc               = 'Email regarding your holiday request made on Vision';

$headers = 'Content-Type:text/calendar; Content-Disposition: inline; charset=utf-8;\r\n';
$headers .= "Content-Type: text/plain;charset=\"utf-8\"\r\n";

$message = "BEGIN:VCALENDAR\r\n
VERSION:2.0\r\n
PRODID:-//Vision/NONSGML v1.0//EN\r\n
METHOD:REQUEST\r\n
BEGIN:VEVENT\r\n
UID:" . md5(uniqid(mt_rand(), true)) . "example.com\r\n
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z\r\n
DTSTART:".$date."T".$startTime."00Z\r\n
DTEND:".$dateend."T".$endTime."00Z\r\n
SUMMARY:".$subject."\r\n
ORGANIZER;CN=".$organizer.":mailto:".$organizer_email."\r\n
LOCATION:".$location."\r\n
DESCRIPTION:".$desc."\r\n
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN".$participant_name_1.";X-NUM-GUESTS=0:MAILTO:".$participant_email_1."\r\n
END:VEVENT\r\n
END:VCALENDAR\r\n";

//  $headers .= $message;
$zero = 0;
send_email($to,$subject,$message,$zero,$headers);

Код для функции send_email можно прочитать здесь:
http://pastebin.com/bxJFHUh8

С уважением

1

Решение

Вы не можете просто установить несколько заголовков типа контента и надеяться, что это сработает! Вот почему существуют такие библиотеки, как PHPMailer, чтобы помочь вам избежать таких глупостей!

Проблема в том, что Outlook не соответствует соответствующим стандартам. Такое сообщение должно быть отформатировано как multipart/alternative структура (как типичные комбинированные обычные / HTML-сообщения), в которой одна из частей является text/calendar тип. Outlook хочет, чтобы это было multipart/related вместо структуры, как это обычно используется для вложений. Существует хорошее обсуждение этой проблемы в этот отчет об ошибке PHPMailer.

PHPMailer поставляется с простым классом генератора vcal в папке «extras», а модульные тесты пример того, как его использовать.

Как вы поймете из отчета об ошибке, это не решается, и рабочее решение довольно грязное в любой среде, так как вам нужно реализовать обе структуры MIME (с дублирующимися данными), чтобы они работали как в Outlook, так и в gmail.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]