我正在尝试使用 php 和 sendgrid 在 Outlook 上发送日历邀请。所以我需要创建一个 ics 文件,这不是问题。问题是我需要设置标题。 Gmail 会将 ics 文件识别为日历邀请,但 Outlook 不会。这是我想出的完整代码,但我不会这样做。请帮忙。我搜索了每个博客以了解如何在 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] /cdn-cgi/l/email-protection")
->setFrom("[email protected] /cdn-cgi/l/email-protection")
->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>
不幸的是,这是当前 Web 端点的限制。对于此用例,您需要通过 SMTP 而不是 HTTP 发送。使用smtpapi-php
库来构建您的 X-SMTPAPI 标头(如果您正在使用它们)。然后使用您选择的库构建 SMTP 消息,添加自定义标头(如果需要,包括 X-SMTPAPI),然后发送。
使用 Swift Mailer 作为 SMTP 传输的示例 https://github.com/sendgrid/smtpapi-php#sendgrid-smtp-example
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] /cdn-cgi/l/email-protection'));
$message->setFrom('[email protected] /cdn-cgi/l/email-protection');
$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');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)