PHPMailer正在将日历事件发送到outlook邮件

PHPMailer正在将日历事件发送到outlook邮件,php,email,outlook,calendar,phpmailer,Php,Email,Outlook,Calendar,Phpmailer,我知道有很多关于PHP的问题,我试了很多,但还是没有成功 我需要将日历事件发送到gmail&outlook,这是我用下面的脚本为gmail实现的,但对于outlook,ics文件已作为附件发送,而不是作为日历事件发送 $mail = new PHPMailer(); $mail->Host = "smtp.mandrillapp.com"; $mail->Username = SMTP_EMAIL; // defined as constant $mail->Passwor

我知道有很多关于PHP的问题,我试了很多,但还是没有成功

我需要将日历事件发送到gmail&outlook,这是我用下面的脚本为gmail实现的,但对于outlook,ics文件已作为附件发送,而不是作为日历事件发送

$mail = new PHPMailer();

$mail->Host = "smtp.mandrillapp.com"; 
$mail->Username = SMTP_EMAIL; // defined as constant
$mail->Password = SMTP_PASSWORD; // defined as constant
$mail->Port = 587;
$mail->IsSMTP(); // use SMTP
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->SMTPDebug  = 0;
$mail->isHTML(FALSE);
$mail->setFrom('k***@gmail.com', 'name');
$mail->addReplyTo('k***@gmail.com', 'name');

$mail->addAddress('v***@gmail.com', 'Gmail'); // to gmail
$mail->addAddress('k***@outlook.com','Outlook'); // to outlook
$mail->ContentType = 'text/calendar';

$ical = "BEGIN:VCALENDAR\r\n";
$ical .= "VERSION:2.0\r\n";
$ical .= "PRODID:-//LothCalendar//ATMRequest//EN\r\n";
$ical .= "METHOD:REQUEST\r\n";
$ical .= "BEGIN:VEVENT\r\n";
$ical .= "ORGANIZER;SENT-BY=\"MAILTO:k***@gmail.com\":MAILTO:ke***@outlook.com\r\n";
$ical .= "UID:".strtoupper(md5($event_id))."-lothcalendar.local\r\n";
// $ical .= "ATTENDEE;PARTSTAT=NEEDS-ACTION;CN=k***@outlook.com;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRUE:mailto:k***@gmail.com\r\n";
$ical .= "ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP= TRUE;CN=Namekeviveks:mailto:k***@gmail.com\r\n";
$ical .= "SEQUENCE:".$sequence."\r\n";
$ical .= "STATUS:".$status."\r\n";
$ical .= "DTSTAMPTZID=Asia/Calcutta:".date('Ymd').'T'.date('His')."\r\n";
$ical .= "DTSTART:".$start."T".$start_time."\r\n";
$ical .= "DTEND:".$end."T".$end_time."\r\n";
$ical .= "LOCATION:".$venue."\r\n";
$ical .= "SUMMARY:".$summary."\r\n";
$ical .= "DESCRIPTION:some sample event description\r\n";
$ical .= "BEGIN:VALARM\r\n";
$ical .= "TRIGGER:-PT15M\r\n";
$ical .= "ACTION:DISPLAY\r\n";
$ical .= "DESCRIPTION:Reminder\r\n";
$ical .= "END:VALARM\r\n";
$ical .= "END:VEVENT\r\n";
$ical .= "END:VCALENDAR\r\n";

$mail->Subject = "Invitation: Outlook Calendar Event";
$mail->AddStringAttachment($ical, "event.ics", "7bit", "text/calendar; charset=utf-8; method=REQUEST");

$mail->Body = "Test Outlook Calendar event mail";
$mail->Ical = $ical;
//send the message, check for errors
if(!$mail->send()) {
return false;
} else {
return true;
}
我已经试过了

1。自定义标题

    $mail->addCustomHeader('MIME-version',"1.0"); 
    $mail->addCustomHeader('Content-type',"text/calendar; name=event.ics; method=REQUEST; charset=UTF-8;"); 
    $mail->addCustomHeader('Content-type',"text/html; charset=UTF-8"); 
    $mail->addCustomHeader('Content-Transfer-Encoding',"7bit"); 
    $mail->addCustomHeader('X-Mailer',"Microsoft Office Outlook 12.0"); 
    $mail->addCustomHeader("Content-class: urn:content-classes:calendarmessage");
    
不适用于Gmail和Outlook(邮件作为ICS内容的普通文本发送)

2。轻松易学

    $invite = new EasyPeasyICS();
    $invite->addEvent('06-06-2016 08:00:00','06-06-2016 17:00:00',"TEST","TEST","");
    $mail->Ical = $invite->render(false);
不适用于Gmail和Outlook(邮件作为ICS内容的普通文本发送)

3。AddStringAttachment

    $mail->AddStringAttachment($ical, "event.ics", "7bit", "text/calendar; charset=utf-8; method=REQUEST");
    

在gmail中工作,但在outlook中将event.ics作为附件发送

问题是gmail不正确地处理日历-它只是坏了

如果您想让它们同时在Gmail和Outlook中工作,则需要将日历项作为
文本/日历
部分添加到
多部分/备选
消息中,并作为附件添加。这是非常愚蠢的,但当电子邮件客户端开发人员不阅读标准时就会发生这种情况,这对于gmail来说几乎是正常的,因为它在许多其他方面也被破坏了

你不能通过添加随机标题来蒙混过关;你试过的那些很可能会把事情弄糟


还有更多的细节,但不太可能很快解决。

我在Gmail、Office 365、MS Outlook、Zoho mail和iPhone mail应用程序中实现这一点的唯一方法是在MS Outlook中创建和预约,下载存档,用VS Code之类的文本编辑器打开它,并将其粘贴到StringAttachment中,而不使用EasyEasy,大概是这样的:

$ical_content = 'BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 16.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE
TZID:SA Pacific Standard Time
BEGIN:STANDARD
DTSTART:16010101T000000
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20191203T124654Z
DESCRIPTION:Cumbre LATAM 2019\n
DTEND;TZID="SA Pacific Standard Time":20191210T220000
DTSTAMP:20191203T124654Z
DTSTART;TZID="SA Pacific Standard Time":20191210T150000
LAST-MODIFIED:20191203T124654Z
LOCATION:The Westin Lima Hotel & Convention Center
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=es:Event
TRANSP:OPAQUE
UID:040000008200E00074C5B7101A82E00800000000A06260CDADA9D501000000000000000
    010000000FC95C5664F74B04B8AEB1601B7F04AD6
X-ALT-DESC;FMTTYPE=text/html:<html xmlns:v="urn:schemas-microsoft-com:vml" 
    xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-mic
    rosoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/


<!---- THERE IS A BUNCH OF CODE THAT OUTLOOK GENERATE HERE BUT IT OVERFLOWS THE ANSWER CAPACITY, BUT WITHOUT IT, THE APPOINTMENT DOESN'T WORK ----->


X-MICROSOFT-CDO-BUSYSTATUS:BUSY
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-AUTOFILLLOCATION:FALSE
X-MS-OLK-CONFTYPE:0
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR';


    $mail = new PHPMailer;      
    $mail->CharSet = 'UTF-8';                               // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = '';  // Specicfy main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = '';                 // SMTP username
    $mail->Password = '';                           // SMTP password
    $mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 465;

    $mail->setFrom('no-reply@appointment.pe', '');      
    $mail->addAddress($data['email'], $data['name']);       
    $mail->addReplyTo('no-reply@appointment.pe', '');           
    $mail->isHTML(true);
    $mail->Subject = $data['subject'];
    $mail->MsgHTML($data['body']); 
    $mail->addStringAttachment($ical_content,'ical.ics','base64','text/calendar');
$ical\u content='开始:VCALENDAR
PRODID:-//微软公司//Outlook 16.0 MIMEDIR//EN
版本:2.0
方法:发布
X-MS-OLK-FORCEINSPECTOROPEN:正确
开始:VTIMEZONE
TZID:SA太平洋标准时间
开始:标准
DTSTART:16010101T000000
TZOFFSETFROM:-0500
特佐菲托:-0500
完:标准
完:VTIMEZONE
开始:VEVENT
类别:公共
创建日期:20191203T124654Z
描述:Cumbre LATAM 2019\n
数据终端;TZID=“南太平洋标准时间”:20191210T220000
DTSTAMP:20191203T124654Z
DTSTART;TZID=“南太平洋标准时间”:20191210T150000
最后修改:20191203T124654Z
地点:利马威斯汀酒店及会议中心
优先次序:5
序列:0
总结;语言=事件
运输:不透明
UID:0400000008200E00074C5B7101A82E0080000000A06260CDADA9D501000000000000000
010000000FC95C5664F74B08AEB1601B7F04AD6
X-ALT-DESC;FMTTYPE=text/html: