Outlook更新后,iCal日历事件不再取消

时间:2019-09-04 10:23:14

标签: outlook phpmailer icalendar

我有一个生成电子邮件的系统,包括嵌入式iCalendar事件,这些电子邮件将发送给相关人员。 该事件是从任务创建的。 可以编辑任务,依次更新会议时间等。 也可以取消任务,通过取消任务再次更新会议。 一切都运行了一年多。 但是大约6周前,办公室进行了更新,其中包括对Outlook的非常明显的更新(会议/活动请求的显示方式现在已经大不相同,因此Outlook团队在该领域进行了一些重要的工作)-问题是更新已中断iCalendar事件取消。 初次会议仍然可以正常进行,编辑也可以。但是当取消而不是执行嵌入式iCalendar事件时,我现在得到的标题为:“不支持的日历message.ics”

我正在使用PHPMailer发送电子邮件,并使用该库提供的ical功能将生成的iCalendar事件附加到电子邮件。

我已尽力调试,这并不容易,因为他们似乎也已删除了查看完整电子邮件来源的任何方法。 但是,我尝试将iCalendar事件简化为绝对准系统,没有运气。 因此,我已指示PHPMailer转储完整的电子邮件。出于调试目的-输出如下:

事件创建:

Content-Type: multipart/alternative;
        boundary="b1_ee3827bf9d86f19f6cb13cbcbc05bb33"
Content-Transfer-Encoding: 8bit^M
^M
This is a multi-part message in MIME format.

--b1_ee3827bf9d86f19f6cb13cbcbc05bb33
Content-Type: text/plain; charset=us-ascii

[test] testing iCal


--b1_ee3827bf9d86f19f6cb13cbcbc05bb33
Content-Type: text/html; charset=us-ascii

Details:</b></u><br /><i>Off-Site</i><br /><u><b>Technical Contact Name:</b></u> Test User<br /><u><b>Technical Contact Number:</b></u> 12345<br /><u><b>Technical Contact e-mail:</b></u> anothertest@test.com<br /><u><b>Work to be done:</b></u><br /><p>[test] testing iCal</p>


--b1_ee3827bf9d86f19f6cb13cbcbc05bb33
Content-Type: text/calendar; method=REQUEST; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 10.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:STANDARD
DTSTART:20091101T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20090301T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
LAST-MODIFIED:20190902T151649
UID:d7f4bed92a83499c81392678cd655aeb
DTSTAMP:20190902T151649
DTSTART;TZID="Europe/London":20190906T090000
DTEND;TZID="Europe/London":20190906T170000
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:"test task"
LOCATION:
STATUS:CONFIRMED
ORGANIZER;CN="xxxx@xxxx.com":MAILTO:xxxx@xxxx.com
ATTENDEE;CN="xxxx@xxxx.com";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED;MAILTO:xxxx@xxxx.com
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
CLASS:PUBLIC
PRIORITY:5
END:VEVENT
END:VCALENDAR



--b1_ee3827bf9d86f19f6cb13cbcbc05bb33--

更新事件:

Content-Type: multipart/alternative;
        boundary="b1_23a19fb87bb01c1c2ae6e3fede170549"
Content-Transfer-Encoding: 8bit^M
^M
This is a multi-part message in MIME format.

--b1_23a19fb87bb01c1c2ae6e3fede170549
Content-Type: text/plain; charset=us-ascii

[test] testing iCal - updated


--b1_23a19fb87bb01c1c2ae6e3fede170549
Content-Type: text/html; charset=us-ascii

<b>Delivery Details:</b></u><br /><i>Off-Site</i><br /><u><b>Technical Contact Name:</b></u> Test User<br /><u><b>Technical Contact Number:</b></u> 12345<br /><u><b>Technical Contact e-mail:</b></u> anothertest@test.com<br /><u><b>Work to be done:</b></u><br /><p>[test] testing iCal - updated</p>


--b1_23a19fb87bb01c1c2ae6e3fede170549
Content-Type: text/calendar; method=REQUEST; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 10.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:STANDARD
DTSTART:20091101T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20090301T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
CATEGORIES:Louis Marchant
LAST-MODIFIED:20190902T152651
UID:d7f4bed92a83499c81392678cd655aeb
DTSTAMP:20190902T152651
DTSTART;TZID="Europe/London":20190907T090000
DTEND;TZID="Europe/London":20190907T170000
TRANSP:OPAQUE
SEQUENCE:2
SUMMARY:"test event"
LOCATION:
STATUS:CONFIRMED
ORGANIZER;CN="xxxx@xxxx.com":MAILTO:xxxx@xxxx.com
ATTENDEE;CN="xxxx@xxxx.com";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED;MAILTO:xxxx@xxxx.com
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
CLASS:PUBLIC
PRIORITY:5
END:VEVENT
END:VCALENDAR



--b1_23a19fb87bb01c1c2ae6e3fede170549--

取消事件-不再起作用:

Content-Type: multipart/alternative;
        boundary="b1_87ddce1a469e89e0c0caa7b0a82efd5e"
Content-Transfer-Encoding: 8bit^M
^M
This is a multi-part message in MIME format.

--b1_87ddce1a469e89e0c0caa7b0a82efd5e
Content-Type: text/plain; charset=us-ascii

Meeting Cancelled


--b1_87ddce1a469e89e0c0caa7b0a82efd5e
Content-Type: text/html; charset=us-ascii

Meeting Cancelled


--b1_87ddce1a469e89e0c0caa7b0a82efd5e
Content-Type: text/calendar; method=REQUEST; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 10.0 MIMEDIR//EN
VERSION:2.0
METHOD:CANCEL
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:STANDARD
DTSTART:20091101T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:20090301T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
CATEGORIES:Louis Marchant
LAST-MODIFIED:20190902T152921
UID:d7f4bed92a83499c81392678cd655aeb
DTSTAMP:20190902T152921
DTSTART;TZID="Europe/London":20190907T090000
DTEND;TZID="Europe/London":20190907T170000
TRANSP:OPAQUE
SEQUENCE:2
SUMMARY:"Louis Marchant - Offsite - 2 Circles Communication Limited 602"
LOCATION:
STATUS:CANCELLED
ORGANIZER;CN="xxxx@xxxx.com":MAILTO:xxxx@xxxx.com
ATTENDEE;CN="xxxx@xxxx.com";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED;MAILTO:xxxx@xxxx.com
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
CLASS:PUBLIC
PRIORITY:5
END:VEVENT
END:VCALENDAR



--b1_87ddce1a469e89e0c0caa7b0a82efd5e--

任何见解都会有所帮助,因为我不了解新想法。尽管我怀疑这可能根本不再可行,但我强烈希望事实并非如此。

2 个答案:

答案 0 :(得分:1)

PHPMailer的iCal支持存在一些局限性,其中一些局限性在于在不同客户端中对它的支持方式极为不一致。 This issue讨论了其中一些问题。

一个单独的问题与iCal events other than REQUEST有关,尤其是在Outlook中。在您的示例中可以看到此问题:

Content-Type: text/calendar; method=REQUEST; charset=iso-8859-1

METHOD:CANCEL

请注意,两个方法名称不匹配;这是因为PHPMailer当前仅支持REQUEST类型的消息,并且Outlook很可能不喜欢这种不匹配的情况。我在第二个问题中提出的建议是,PHPMailer可以扫描ICal属性中提供的iCal数据的内容并提取方法值,然后在该元素所用的内容类型标头中使用它。

PHPMailer当前不执行此操作-但是,如果您希望为其添加支持并提交请求请求,将非常欢迎。

答案 1 :(得分:1)

更新Outlook后,我遇到了同样的问题。我能够成功创建事件,但是当我尝试取消事件时,cal_event未像以前那样嵌入邮件中。而是发送带有不受支持的.ics附件的邮件。

我为此找到了解决方案。这对我有用。

问题:

$mail->addCustomHeader('Content-type',"text/calendar; name=event.ics; method=REQUEST; charset=UTF-8;");

将方法类型从REQUEST更改为CANCEL

解决方案:

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