PHP在一封电子邮件中向Outlook发送多个事件请求

时间:2015-01-13 13:03:56

标签: php email calendar icalendar outlook-2010

我试过下面的代码&能够在一个嵌入式ics中发送多个事件到谷歌日历。但是,如果我在MS Outlook 2010中打开相同的邮件,则只有第一个日期会显示在Outlook日历中。

以下是我的代码。

<?php 
$ical4 = 'BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 10.0 MIMEDIR//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20150310T183001Z
DTEND:20150310T182959Z
DTSTAMP:20150310T183000Z
UID:2015-03-10_leave_24@gmail.com
ORGANIZER:MAILTO:organizer@gmail.com
ATTENDEE:MAILTO:testuser1@gmail.com
DESCRIPTION:Test E1 Desc
STATUS:CONFIRMED
SEQUENCE:0
SUMMARY:Test E1
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20150311T183001Z
DTEND:20150311T182959Z
DTSTAMP:20150310T183000Z
UID:2015-03-11_leave_25@gmail.com
ORGANIZER:MAILTO:organizer@gmail.com
ATTENDEE:MAILTO:testuser1@gmail.com
DESCRIPTION:Test E2 Desc
STATUS:CONFIRMED
SEQUENCE:0
SUMMARY:Test E2
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR';


$from_name = "My Name";
    $from_address = "myname@mydomain.com";
    $subject = "Test Events_1";

//Create Mime Boundry
    $mime_boundary = "----Meeting Booking----".md5(time());

    //Create Email Headers
    $headers = "From: ".$from_name." <".$from_address.">\n";
    $headers .= "Reply-To: ".$from_name." <".$from_address.">\n";

    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\n";
    $headers .= "Content-class: urn:content-classes:calendarmessage\n";

    //Create Email Body (HTML)
    $message = "";
    $message .= "--$mime_boundary\n";
    $message .= "Content-Type: text/html; charset=UTF-8\n";
    $message .= "Content-Transfer-Encoding: 8bit\n\n";

    $message .= "<html>\n";
    $message .= "<body>\n";
    $message .= '<p>Dear user,</p>';
    $message .= '<p>Here is my HTML Email / Used for Meeting Description</p>';    
    $message .= "</body>\n";
    $message .= "</html>\n";
    $message .= "--$mime_boundary\n";

$message .= 'Content-Type: text/calendar; name="meeting.ics";method=REQUEST; charset=utf-8\n';
$message .= 'Content-Disposition: inline;\n';
    $message .= "Content-Transfer-Encoding: 2048bit\n\n";
    $message .= $ical4; 

    //SEND MAIL
    $mail_sent = @mail( $email, $subject, $message, $headers );

    if($mail_sent)     {
        return true;
    } else {
        return false;
    }   

请注意,如果我将ical内容复制到.ics文件&amp;导入到MS Outlook 2010,它会成功更新两个事件。但是,我需要通过使用php发送邮件来自动更新outlook日历。

有什么方法可以将一个电子邮件中的多个事件发送到MS Outlook 2010,以便它自动添加到Outlook日历中吗?

1 个答案:

答案 0 :(得分:0)

基本上,这不起作用。 iMip消息往往只有1个事件。

然而,解决它的一种方法是将其转换为具有两个实例的重复事件。

为此,您需要确保UID对于这两封邮件都相同,其中一封邮件的邮件为RECURRENCE-ID。初始(主事件)需要RDATERRULE才能使事件重复出现,第二个事件将作为被覆盖的实例。

我不知道RDATE对每个客户端的效果如何,我不知道Outlook 2010是否支持它。我知道RRULE得到广泛支持。

相关问题