Как использовать PHP PEAR для отправки электронного письма с календарем Outlook? - PullRequest
0 голосов
/ 06 февраля 2020

письма доставляются; однако они не приходят как приглашения 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;
}
}
...