php - 动态创建ics文件并以附件形式发送电子邮件

时间:2015-04-20 22:51:16

标签: php google-calendar-api sendgrid

我需要动态创建日历邀请,并将ics文件作为附件发送。我正在使用sendgrid发送电子邮件。

这是我目前的PHP脚本:

include("/Users/path/sendgrid-php.php");
$sendgrid = new SendGrid("uname", "pass");
$email    = new SendGrid\Email();

$ical = "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true)) . "@test.com
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:New event
END:VEVENT
END:VCALENDAR";

header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=invite.ics');

$email->addTo("test@test.com")
    ->setFrom("test2@test2.com")
    ->setSubject("Test-Subject")
    ->setHtml("Test-Body")
    ->setAttachment($ical);

$sendgrid->send($email);

现在,每当我运行此脚本时,我的浏览器不会将ics文件作为附件发送到所提供的电子邮件地址,而是自动下载ics文件,关闭页面,并且不执行任何操作(不发送电子邮件) 。

请大家告诉我,我在哪里错了?我刚刚开始使用PHP,所以我很可能会犯一些愚蠢的错误。

感谢。

1 个答案:

答案 0 :(得分:1)

您看到的行为是由header()电话触发的。

header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=invite.ics');

这两行正在向客户端浏览器发送标题并触发下载。

SendGrid PHP examples中我根本没有看到他们设置这样的标题。