Php 会议邀请不';我的日历上没有显示
我有使用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
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帐户。但我无法在我的日历中获取时间段。