我正在尝试在PHP中创建一个邮件给用户的.ics文件。该解决方案在Gmail中运行良好(我得到了一个花哨的邀请,所有信息都显示在正确的位置),但Outlook似乎根本不认识它。我收到一封没有附件的空电子邮件,据我所知,没有任何事件被添加到任何日历中。
我怀疑问题出在标题的某处,但我对邮件协议的经验很少,而且无法查明它。我整天都在摆弄这个,请帮忙:(
更新:出于一些奇怪的原因,我确实收到了邀请,并在iPhone上显示为与我的Exchange帐户同步的附件。桌面Outlook失败了。为什么呢?
以下是代码中的所有荣耀。
$message =
"BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTAMP: $timestamp
DTSTART: $datestart
DTEND: $dateend
UID: $uniqueid
LOCATION: $address
DESCRIPTION: $description
URL;VALUE=URI: $uri
SUMMARY: $summary
END:VEVENT
END:VCALENDAR";
// Mail parameters
$newline = "\r\n";
$headers = "From: InnovationskontorEtt Dashboard <admin@innovationskontorett.se>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/calendar; charset=utf-8; name=inbjudan.ics; method=REQUEST".$newline;
$headers .= "Content-Disposition: inline; filename=inbjudan.ics".$newline;
$headers .= "Content-Transfer-Encoding: 7bit";
$subject = $summary;
$to = 'maija.vilkina@liu.se';
/*mail send*/
if(mail($to, $subject, $message, $headers)) : ?>
<div class="alert alert-warning">
Evenemanget skickades till din kalender.
</div>
<?php else : ?>
<div class="alert alert-danger">
Det gick inte att skicka evenemanget till din kalender.
</div>
<?php endif; ?>
答案 0 :(得分:1)
通常,最佳做法是至少发送一个多部分/替代方案,以便不了解文本/日历格式的客户可以向用户显示可读消息。有关示例,请参阅http://tools.ietf.org/html/rfc6047#section-4.2。
然后,要邀请成为实际邀请,它需要至少有一个ORGANIZER和一个ATTENDEE属性。有关必填属性列表,请参阅http://tools.ietf.org/search/rfc5546#section-3.2.2。这应该可以解决您的问题。
最后,向我们展示发送的实际MIME消息比显示代码更有用,至少就检测Outlook的互操作问题而言。