【问题标题】:PHP send multiple event requests in one email to OutlookPHP 在一封电子邮件中向 Outlook 发送多个事件请求
【发布时间】:2015-01-13 13:03:56
【问题描述】:

我尝试了以下代码,并且能够将多个事件在一个嵌入式 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 文件并导入到 MS Outlook 2010,它会通过两个事件成功更新。但是,我需要通过使用 php 发送邮件来自动更新 Outlook 日历。

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

【问题讨论】:

    标签: php email calendar icalendar outlook-2010


    【解决方案1】:

    基本上,这是行不通的。 iMip 消息往往只有 1 个事件。

    但是,解决此问题的一种方法是将其转换为具有两个实例的重复事件。

    为此,您需要确保两条消息的UID 相同,并且其中一条消息具有RECURRENCE-ID。初始(主事件)需要RDATERRULE 以使事件重复发生,而第二个事件将充当被覆盖的实例。

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

    【讨论】:

    • 谢谢您,此解决方案有效。但是我需要另一个澄清。将事件作为重复事件发送后,我需要通过第二封邮件使用不同的详细信息更新每个重复事件。例如。重复事件有 4 天。在下一封电子邮件中,我想将第一个事件摘要更新为“E1 已批准并通过”,将第二个事件摘要更新为“E2 被拒绝”,第三个事件未更改,第四个事件应取消。这可以做到吗?如果是,如何?我曾尝试增加 SEQUENCE,但它对我不起作用。非常感谢你能给出一个代码示例。
    • 我遇到的另一个问题是,默认情况下不添加事件。我必须双击电子邮件主题,然后才将事件添加到 Outlook 日历中。有解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2013-08-22
    • 1970-01-01
    • 2015-05-17
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多