Php 会议邀请不';我的日历上没有显示

Php 会议邀请不';我的日历上没有显示,php,office365,meeting-request,Php,Office365,Meeting Request,我有使用php发送会议邀请的工作代码,每件事对我来说都很好,电子邮件邀请发送到所有选定的电子邮件地址。但我面临的一个问题是,由该代码生成的会议邀请不会显示在我的日历中,尽管它会显示给所有与会者 这是我的会议邀请功能 function send_calendar_invite ($to,$str_cc,$str_bcc,$subject,$body,$from_addr,$from_name,$from_password,$meeting_date,$meeting_duration,$meeti

我有使用php发送会议邀请的工作代码,每件事对我来说都很好,电子邮件邀请发送到所有选定的电子邮件地址。但我面临的一个问题是,由该代码生成的会议邀请不会显示在我的日历中,尽管它会显示给所有与会者

这是我的会议邀请功能

function send_calendar_invite ($to,$str_cc,$str_bcc,$subject,$body,$from_addr,$from_name,$from_password,$meeting_date,$meeting_duration,$meeting_location)
{

  if($str_cc!='')
  {
    $cc_addr=explode(",",$str_cc);
    $cc_cnt=count($cc_addr);
  }

  if($str_bcc!='')
  {
    $bcc_addr=explode(",",$str_bcc);
    $bcc_cnt=count($bcc_addr);
  }

  $to_addr = explode(",",$to);
  $to_cnt=count($to_addr);


  //Convert MYSQL datetime and construct iCal start, end and issue dates
  $meetingstamp = strtotime($meeting_date. " UTC");    
  $dtstart= gmdate("Ymd\THis",$meetingstamp);
  $dtend= gmdate("Ymd\THis",$meetingstamp+$meeting_duration);
  $todaystamp = gmdate("Ymd\THis");
  
  //Create unique identifier
  $cal_uid = date('Ymd').'T'.date('His')."-".rand()."@outlook.com";

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


  //Create Email Body (HTML)
  $message = '';
  $message .= "<html>\n";
  $message .= "<body>\n";
  $message .= '<p>Hi All,</p>';
  $message .= $body;    
  $message .= "</body>\n";
  $message .= "</html>\n";
  
  
  //Create ICAL Content (Google rfc 2445 for details and examples of usage) 
  $ical = 'BEGIN:VCALENDAR' . "\r\n" .
  'PRODID:-//Microsoft Corporation//Outlook 10.0 MIMEDIR//EN' . "\r\n" .
  'VERSION:2.0' . "\r\n" .
  'METHOD:REQUEST' . "\r\n" .
  'BEGIN:VTIMEZONE' . "\r\n" .
  'TZID:Eastern Standard Time' . "\r\n" .
  'BEGIN:STANDARD' . "\r\n" .
  'DTSTART:16011104T020000' . "\r\n" .
  'RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11' . "\r\n" .
  'TZOFFSETFROM:-0400' . "\r\n" .
  'TZOFFSETTO:-0500' . "\r\n" .
  'TZNAME:Eastern Standard Time' . "\r\n" .
  'END:STANDARD' . "\r\n" .
  'BEGIN:DAYLIGHT' . "\r\n" .
  'DTSTART:16010311T020000' . "\r\n" .
  'RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3' . "\r\n" .
  'TZOFFSETFROM:-0500' . "\r\n" .
  'TZOFFSETTO:-0400' . "\r\n" .
  'TZNAME:Eastern Standard Time' . "\r\n" .
  'END:DAYLIGHT' . "\r\n" .
  'END:VTIMEZONE' . "\r\n" .  
  'BEGIN:VEVENT' . "\r\n" .
  'ORGANIZER;CN="'.$from_name.'":MAILTO:'.$from_addr. "\r\n";
  for($i=0;$i<$to_cnt;$i++)
  {
      $ical .='ATTENDEE;CN="'.$to_addr[$i].'";ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:'.$to_addr[$i]. "\r\n";
  }
  $ical .='LAST-MODIFIED:' . date("Ymd\TGis") . "\r\n" .
  'UID:'.date("Ymd\TGis", strtotime($startTime)).rand()."@outlook.com \r\n" .
  'DTSTAMP:'.date("Ymd\TGis"). "\r\n" .
  'DTSTART;TZID="Eastern Standard Time":'.$dtstart. "\r\n" .
  'DTEND;TZID="Eastern Standard Time":'.$dtend. "\r\n" .
  'TRANSP:OPAQUE'. "\r\n" .
  'SEQUENCE:1'. "\r\n" .
  'SUMMARY:' . $subject . "\r\n" .
  'LOCATION:' . $meeting_location . "\r\n" .
  'CLASS:PUBLIC'. "\r\n" .
  'PRIORITY:5'. "\r\n" .
  'BEGIN:VALARM' . "\r\n" .
  'TRIGGER:-PT15M' . "\r\n" .
  'ACTION:DISPLAY' . "\r\n" .
  'DESCRIPTION:Reminder' . "\r\n" .
  'END:VALARM' . "\r\n" .
  'END:VEVENT'. "\r\n" .
  'END:VCALENDAR'. "\r\n";



  $mail = new PHPMailer(true);                              // Passing `true` enables exceptions
  try {
      //Server settings
     //$mail->SMTPDebug = 2;                                 // Enable verbose debug output
      $mail->isSMTP();                                      // Set mailer to use SMTP
      $mail->Host = 'smtp.office365.com';  // Specify main and backup SMTP servers
      $mail->SMTPAuth = true;                               // Enable SMTP authentication
      $mail->Username = $from_addr;                 // SMTP username
      $mail->Password = $from_password;                           // SMTP password
      $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
      $mail->Port = 587;                                    // TCP port to connect to
      //Recipients
      $mail->setFrom($from_addr, $from_name);
      for($i=0;$i<$to_cnt;$i++)
      {
        $mail->addAddress(trim($to_addr[$i]));
      }
      
    
    $mail->addReplyTo($from_addr, $from_name);

    if($cc_cnt>=0)
    {
      for($i=0;$i<$cc_cnt;$i++)
      {
        //echo $cc_addr[$i] . "test";
        $mail->addCC(trim($cc_addr[$i]));
      }
    }

    if($bcc_cnt>=0)
    {
      for($i=0;$i<$bcc_cnt;$i++)
      {
        $mail->addBCC(trim($bcc_addr[$i]));
      }
    }
  

    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = $subject;
    $mail->Body    = $message;
    $mail->AltBody = $message;
    $mail->AddStringAttachment("$ical", "meeting.ics", "base64", "text/calendar; charset=utf-8; method=REQUEST");

    $mail->send();
    //echo 'Message has been sent';
    return "sent";
  } catch (Exception $e) {
      //echo 'Message could not be sent.';
      //echo 'Mailer Error: ' . $mail->ErrorInfo;
    return "failed";
  }

}
函数发送日历邀请($to、$str\u cc、$str\u bcc、$subject、$body、$from\u addr、$from\u name、$from\u password、$meeting\u date、$meeting\u duration、$meeting\u location)
{
如果($str_cc!='')
{
$cc_addr=explode(“,”,$str_cc);
$cc_cnt=计数($cc_addr);
}
如果($str_bcc!='')
{
$bcc_addr=爆炸(“,”,$str_bcc);
$bcc\u cnt=计数($bcc\u addr);
}
$to_addr=分解(“,”,$to);
$to_cnt=计数($to_addr);
//转换MYSQL日期时间并构造iCal开始、结束和发布日期
$meetingstamp=strottime($meeting_date.“UTC”);
$dtstart=gmdate(“Ymd\THis”,$meetingstamp);
$dtend=gmdate(“Ymd\THis”、$meetingstamp+$meeting\u持续时间);
$todaystamp=gmdate(“Ymd\THis”);
//创建唯一标识符
$caluid=date('Ymd').'T'.date('His').“-”.rand().“@outlook.com”;
//创建电子邮件标题
$headers=“From:”.$From\u name.\n”;
$headers.=“回复:”.$from_name.“\n”;
//创建电子邮件正文(HTML)
$message='';
$message.=“\n”;
$message.=“\n”;
$message.='大家好,

'; $message.=$body; $message.=“\n”; $message.=“\n”; //创建ICAL内容(谷歌rfc 2445了解详细信息和使用示例) $ical='开始:VCALENDAR'。“\r\n”。 'PRODID:-//Microsoft Corporation//Outlook 10.0 MIMEDIR//EN'。“\r\n”。 '版本:2.0'。“\r\n”。 '方法:请求'。“\r\n”。 '开始:VTIMEZONE'。“\r\n”。 “TZID:东部标准时间”。“\r\n”。 “开始:标准”。“\r\n”。 “DTSTART:16011104T020000”。“\r\n”。 'RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11'。“\r\n”。 'TZOFFSETFROM:-0400'。“\r\n”。 'Tzoffetto:-0500'。“\r\n”。 “TZNAME:东部标准时间”。“\r\n”。 “结束:标准”。“\r\n”。 “开始:日光”。“\r\n”。 “DTSTART:16010311T020000”。“\r\n”。 'RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3'。“\r\n”。 'TZOFFSETFROM:-0500'。“\r\n”。 'Tzoffetto:-0400'。“\r\n”。 “TZNAME:东部标准时间”。“\r\n”。 “结束:日光”。“\r\n”。 '结束:VTIMEZONE'。“\r\n”。 '开始:VEVENT'。“\r\n”。 'ORGANIZER;CN=“'.$from_name.'”:MAILTO:'.$from_addr.\r\n”; 对于($i=0;$iSMTPDebug=2;//启用详细调试输出 $mail->isSMTP();//设置邮件程序以使用SMTP $mail->Host='smtp.office365.com';//指定主smtp服务器和备份smtp服务器 $mail->SMTPAuth=true;//启用SMTP身份验证 $mail->Username=$from\u addr;//SMTP用户名 $mail->Password=$from\u Password;//SMTP密码 $mail->SMTPSecure='tls';//启用tls加密,也接受'ssl' $mail->Port=587;//要连接的TCP端口 //接受者 $mail->setFrom($from\u addr,$from\u name); 对于($i=0;$iaddAddress(trim($to_addr[$i])); } $mail->addReplyTo($from\u addr,$from\u name); 如果($cc\u cnt>=0) { 对于($i=0;$iaddCC(trim($cc_addr[$i])); } } 如果($bcc\u cnt>=0) { 对于($i=0;$iaddBCC(trim($bcc_addr[$i])); } } //内容 $mail->isHTML(true);//将电子邮件格式设置为HTML $mail->Subject=$Subject; $mail->Body=$message; $mail->AltBody=$message; $mail->AddStringAttachment(“$ical”、“meeting.ics”、“base64”、“文本/日历;字符集=utf-8;方法=请求”); $mail->send(); //回音“消息已发送”; 返回“已发送”; }捕获(例外$e){ //echo“无法发送消息”; //回显“邮件错误:”。$mail->ErrorInfo; 返回“失败”; } }

请帮助我,会议邀请没有出现在我的日历中的错误是什么。

Quick fix可能会将你自己也添加为与会者?也就是说,组织者也应该是与会者。这是否回答了你的问题?我想我猜到了。回想一下,vcal内容上的规范总是零碎到不存在。我还添加了我自己作为与会者e、 但它仍然没有在我的日历中显示时间段。投票重新打开。它只是与你的日历有关吗?在其他机器上测试还是什么?我想我的代码中缺少了什么,我不知道是什么。我尝试了3个不同的outlook帐户。但我无法在我的日历中获取时间段。