письма доставляются; однако они не приходят как приглашения Outlook. Вместо этого они приходят в виде обычного электронного письма с переменными vcalendar в теле письма - все в одном абзаце, если я отправляю как HTML (setHTMLBody), или все в списке, если я отправляю как обычный текст (setTXTBody).
Я думаю, что проблема здесь -
$mime->setTXTBody($body);
$body = $mime->get();
Я не знаю, как отформатировать его, чтобы он прибыл в качестве приглашения Outlook.
Есть ли другие параметры, кроме setTXTBody и setHTMLBody?
Должен ли я прикреплять файл .ics?
Или нужно изменить тип содержимого?
$contentype = 'text/calendar; Content-Disposition:inline; charset=utf-8;';
Вот весь код. Он приходит со страницы календаря, на которой люди могут назначить встречу для телефонного звонка продолжительностью в один час.
function send_the_outlook_invite ($email, stdClass $profile, $start)
{
require_once "Mail.php";
require_once "Mail/mime.php";
// 60-minute phone call
$timestamp = strtotime($start);
$startFormatted = gmdate('Ymd', $timestamp);
// 7 hours has to be added to the time to have it show up correctly on the Outlook Calendar +60 minutes on end time for 60-minute call
$starttime = (int) date('H00', $timestamp + 60 * 60 * 7);
$endtime = $starttime + 100;
// Header values
$mimever = '1.0';
$contentype = 'text/calendar; Content-Disposition:inline; charset=utf-8;';
$email_date = date('r', $_SERVER['REQUEST_TIME']);
$mid = '<' . md5($_SERVER['REQUEST_TIME']) . $_SERVER['REQUEST_TIME'] . '@' . $_SERVER['SERVER_NAME'] . '>';
$to = $email;
$from = "sender@example.com>";
$subject = "Call ".$profile->fullname." (".$profile->city.", ".$profile->state.")";
$version = "2.0";
$prodid = '-//Microsoft Corporation//Outlook MIMEDIR//EN';
$uid = md5(uniqid(mt_rand(), TRUE)) . 'example.com';
$dtstamp = gmdate('Ymd') . 'T' . gmdate('His') . 'Z';
$dtstart = $startFormatted . 'T' . $starttime . '00Z';
$dtend = $startFormatted . 'T' . $endtime . '00Z';
$summary = $subject;
$location = "Office";
$desc = <<<DESC
$profile->fullname, $profile->phone, $profile->email
DESC;
$headers = array (
'MIME-Version' => $mimever,
'Content-Type' => $contentype,
'Date' => $email_date,
'Message-ID' => $mid,
'To' => $to,
'From' => $from,
'Subject' => $subject
);
$body = "BEGIN:VCALENDAR\r\n
VERSION:$version\r\n
PRODID:$prodid\r\n
METHOD:REQUEST\r\n
BEGIN:VEVENT\r\n
UID:$uid\r\n
DTSTAMP:$dtstamp\r\n
DTSTART:$dtstart\r\n
DTEND:$dtend\r\n
SUMMARY:$summary\r\n
LOCATION:$location\r\n
DESCRIPTION:$desc\r\n
END:VEVENT\r\n
END:VCALENDAR\r\n";
include("/postmaster.php");
$smtp = Mail::factory('smtp', array(
'host' => $postmaster['host'],
'auth' => $postmaster['auth'],
'port' => $postmaster['port'],
'username' => $postmaster['username'],
'password' => $postmaster['password']
));
$mime = new Mail_mime();
$mime->setTXTBody($body);
$body = $mime->get();
$headers = $mime->headers($headers);
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
return FALSE;
} else {
return TRUE;
}
}