2015-04-29 4 views
3

Я пытаюсь отправить приглашение календаря в Outlook, используя php и sendgrid. Поэтому мне нужно создать файл ics, который не является проблемой. Проблема в том, что мне нужно установить заголовки. Gmail распознает файл ics как приглашение календаря, но в Outlook нет. Это весь код, который я придумал, но я никуда не буду. Пожалуйста помоги. Я искал каждый блог, чтобы узнать, как я могу добавлять заголовки, такие как контент-тип и контент-расположение в sendgrid, но безрезультатно.Как добавить заголовки в sendgrid?

<html> 
<head> 
    <title>PHP Test</title> 
</head> 
<body> 

<?php 

include("/Users/aaa/Downloads/sendgrid-php/sendgrid-php.php"); 
include('/Users/aaa/Downloads//smtpapi-php/smtpapi-php.php'); 


$sendgrid = new SendGrid("uname", "pass"); 
$email = new SendGrid\Email(); 

$ical = " 
Content-Type: text/calendar;method=request 
MIME-Version: 1.0 
BEGIN:VCALENDAR 
METHOD:REQUEST 
VERSION:2.0 
PRODID:-//hacksw/handcal//NONSGML v1.0//EN 
BEGIN:VEVENT 
UID:" . md5(uniqid(mt_rand(), true)) . "@time.co 
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z 
DTSTART:20150429T170000Z 
DTEND:20150429T035959Z 
SUMMARY:New event has been added 
END:VEVENT 
END:VCALENDAR"; 

$filename = "invite.ics"; 
$file = fopen($filename, 'w'); 
fwrite($file, $ical); 
fclose($file); 


$email->addTo("[email protected]") 
    ->setFrom("[email protected]") 
    ->setSubject("Subject") 
    ->setAttachment($filename) 
    ->addHeader('Content-Type', 'multipart/alternative') 
    ->addHeader('Content-Disposition', 'inline'); 

$sendgrid->send($email); 

var_dump($sendgrid); 

try { 
    $sendgrid->send($email); 
} catch(\SendGrid\Exception $e) { 
    echo $e->getCode(); 
    foreach($e->getErrors() as $er) { 
     echo $er; 
    } 
} 

?> 

</body> 
</html> 

ответ

3

К сожалению, это ограничение текущей конечной точки сети. Для этого случая использования вам необходимо отправить через SMTP вместо HTTP. Используйте библиотеку smtpapi-php для создания заголовков X-SMTPAPI, если вы их используете. Затем создайте свое SMTP-сообщение с выбранной вами библиотекой, добавьте свои собственные заголовки (включая X-SMTPAPI, если необходимо) и отправьте их.

Example using Swift Mailer as the SMTP transport

use Smtpapi\Header; 

$transport = \Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587); 
$transport->setUsername('sendgrid_username'); 
$transport->setPassword('sendgrid_password'); 

$mailer = \Swift_Mailer::newInstance($transport); 

$message = new \Swift_Message(); 
$message->setTos(array('[email protected]')); 
$message->setFrom('[email protected]'); 
$message->setSubject('Hello'); 
$message->setBody('%how% are you doing?'); 

$header = new Header(); 
$header->addSubstitution('%how%', array('Owl')); 

$message_headers = $message->getHeaders(); 
$message_headers->addTextHeader(HEADER::NAME, $header->jsonString()); 

try { 
    $response = $mailer->send($message); 
    print_r($response); 
} catch(\Swift_TransportException $e) { 
    print_r('Bad username/password'); 
} 
Смежные вопросы