我正在尝试创建一个在Outlook中发送的邀请电子邮件,用户通常可以选择接受在Outlook中填充日历的约会。我正在使用PHP邮件程序并遇到问题,请参阅下文:
用户应如何接收电子邮件的示例:
但是,当发送电子邮件时,它实际上并不发送邀请。而是发送文本,请参阅收到的电子邮件的下图(我已经审查了电子邮件和个人姓名):
老实说,我不知道有什么问题,下面是我的代码。请假设变量具有分配给它们的值,否则将会发布过多的信息: $participant_name = $userid_result["realname"];
$participant_email = $userid_result["email_primary"];
$to = $participant_email;
$organizer = 'jimmy Smith';
$organizer_email = 'jimmy@example.co.uk';
$participant_name_1 = $participant_name;
$participant_email_1= $participant_email;
$location = "N/A";
$date = $row_date_from;
$startTime = $row_date_from;
$endTime = $row_date_to;
$dateend = $row_date_to;
$subject = 'Holiday Request';
$desc = 'Email regarding your holiday request made on Vision';
$headers = 'Content-Type:text/calendar; Content-Disposition: inline; charset=utf-8;\r\n';
$headers .= "Content-Type: text/plain;charset=\"utf-8\"\r\n";
$message = "BEGIN:VCALENDAR\r\n
VERSION:2.0\r\n
PRODID:-//Vision/NONSGML v1.0//EN\r\n
METHOD:REQUEST\r\n
BEGIN:VEVENT\r\n
UID:" . md5(uniqid(mt_rand(), true)) . "example.com\r\n
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z\r\n
DTSTART:".$date."T".$startTime."00Z\r\n
DTEND:".$dateend."T".$endTime."00Z\r\n
SUMMARY:".$subject."\r\n
ORGANIZER;CN=".$organizer.":mailto:".$organizer_email."\r\n
LOCATION:".$location."\r\n
DESCRIPTION:".$desc."\r\n
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN".$participant_name_1.";X-NUM-GUESTS=0:MAILTO:".$participant_email_1."\r\n
END:VEVENT\r\n
END:VCALENDAR\r\n";
// $headers .= $message;
$zero = 0;
send_email($to,$subject,$message,$zero,$headers);
send_email函数的代码可以在这里阅读: http://pastebin.com/bxJFHUh8
此致
答案 0 :(得分:1)
您无法设置多个内容类型的标头,希望它能正常工作!这就是为什么像PHPMailer这样的库可以帮助你避免做这些愚蠢的事情!
问题是Outlook没有遵循适当的标准。像这样的消息应格式化为multipart/alternative
结构(如典型的组合普通/ html消息),其中一个部分是text/calendar
类型。 Outlook希望这是一个multipart/related
结构,通常用于附件。在this PHPMailer bug report中对这个问题进行了很好的讨论。
PHPMailer与' extras'中的简单vcal生成器类捆绑在一起。文件夹,单元测试有an example of how to use it。
正如您将从错误报告中收集的那样,这并没有得到解决,并且在任何环境中工作解决方案都非常混乱,因为您需要实现两种MIME结构(具有重复数据)才能在两者中工作Outlook和Gmail。