【问题标题】:PHP | Sending email invitation in outlookPHP |在 Outlook 中发送电子邮件邀请
【发布时间】:2015-02-26 18:49:45
【问题描述】:

我正在尝试创建在 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

问候

【问题讨论】:

    标签: php calendar outlook phpmailer


    【解决方案1】:

    您不能只设置多个内容类型标头并希望它有效!这就是为什么存在 PHPMailer 之类的库来帮助您避免做这些愚蠢的事情的原因!

    问题在于 Outlook 没有遵循适当的标准。像这样的消息应该被格式化为multipart/alternative 结构(就像典型的组合plain/html 消息),其中一个部分是text/calendar 类型。 Outlook 希望这是一个multipart/related 结构,通常用于附件。 this PHPMailer bug report对此问题有很好的讨论。

    PHPMailer 与一个简单的 vcal 生成器类捆绑在 'extras' 文件夹中,单元测试有 an example of how to use it。

    正如您将从错误报告中了解到的那样,这并没有解决,而且工作解决方案在任何环境中都非常混乱,因为您需要实现两个 MIME 结构(具有重复数据)才能使其在 Outlook 和邮箱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      相关资源
      最近更新 更多