为什么outlook嗅探器不能处理我的icalcalendar邀请?

本文关键字:icalcalendar 邀请 我的 处理 outlook 嗅探器 不能 为什么 | 更新日期: 2023-09-27 18:08:51

由我的ASP.net应用程序生成的邀请,作为带有。ics附件的电子邮件发送到Outlook 2010,不被嗅探器处理。因此,它们不会在日历中显示为暂定的,也无法在预览窗格中使用。ics附件似乎是有效的,可以通过双击在outlook中打开。同样的邀请发送到Gmail处理没有担心。对于同一个问题,我已经排除了许多公认的解决方案……

  • Outlook配置正确,并处理Gmail邀请没有问题
  • 消息以Content-Type: multipart/mixed的形式发送,附件为text/calendar。
  • 邀请函包含主办方和参会人员。

我的邀请和gmail的最明显的区别是没有DKIM签名,但其他人没有这个也成功了。更一般地说,有没有人发现任何微软文档的操作,日志或故障排除嗅探器?

这是我的。ics附件

BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20140617T083644Z
DTEND:20140617T093644Z
DTSTAMP:20140617T083647Z
ORGANIZER;CN=sby@dimo-gestion.fr:mailto:sby@dimo-gestion.fr
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
 FALSE;CN=bbsimonbb@gmail.com;X-NUM-GUESTS=0:mailto:bbsimonbb@gmail.com
CREATED:20140617T083647Z
DESCRIPTION:Description of flying to Sligo
LAST-MODIFIED:20140617T083647Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Fly to Sligo
TRANSP:OPAQUE
UID:20140617T083647Z
END:VEVENT
END:VCALENDAR

属性X-MS-OLK-FORCEINSPECTOROPEN,这里指定的,没有帮助。

我的文件传递了这个问题中提到的三个iCalendar验证器

我的天啊,互联网被那些无法将邀请发送到Outlook的人堵塞了。这里,这里,还有这里。

大家一致认为你需要加上";method=REQUEST",在日历MIME部分头部的内容类型后面。问题是,.net System.Net.Mail库似乎不提供低级访问来设置这条线。

为什么outlook嗅探器不能处理我的icalcalendar邀请?

好了,我破解了。对我有效的解决方案是将这两个建议结合起来。文本/日历部分必须是消息的唯一部分,并且方法=REQUEST必须出现在Content-Type头中。

要在。net中实现这一点,你可以像下面这样使用AlternateViews…

MailMessage msg = new MailMessage();
msg.From = new MailAddress("gonzo@work");
msg.To.Add("gonzo@home");
System.Net.Mime.ContentType mimeType = new System.Net.Mime.ContentType("text/calendar; method=REQUEST");
AlternateView icalView = AlternateView.CreateAlternateViewFromString(icalendarString, mimeType);
icalView.TransferEncoding = TransferEncoding.SevenBit;
msg.AlternateViews.Add(icalView);
client.Send(msg);

的好处是,在没有正文、附件或其他替代视图的情况下,.net足够聪明地用构造一个只有一部分的邮件。使用alternateView仍然是必要的,因为这是控制Content-type header的唯一方法。这个技巧对于任何想要在。net中设置简单的单部分邮件的Content-Type的人都很有用。生成的邮件如下所示:

MIME-Version: 1.0
From: gonzo@work
To: gonzo@home
Subject: Fly to Sligo
Content-Type: text/calendar; method=REQUEST
Content-Transfer-Encoding: 7bit
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//www.notilus.com//Dimo Gestion Notilus//FR
CALSCALE:GREGORIAN
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
DTSTART:20140619T080132Z
DTEND:20140619T090132Z
DTSTAMP:20140619T080132Z
ORGANIZER;CN=gonzo@work:mailto:gonzo@work
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=
 FALSE;CN=gonzo@home;X-NUM-GUESTS=0:mailto:gonzo@home
CREATED:20140619T080132Z
DESCRIPTION:Description of flying to Sligo
X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//E
 N">'n<html>'n<body>'n<table border="1"><tr><td>'n<b>HTML</b> Description o
 f flying to Sligo'n</td></tr><tr><td>'n<ul><li>HTML has certain advantages
 </li></ul>'n</td></tr></table>'n</body>'n</html>
LAST-MODIFIED:20140619T080132Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Fly to Sligo
TRANSP:OPAQUE
UID:20140619T080132Z
END:VEVENT
END:VCALENDAR

非常感谢gmail,它轻松地构建了一个工作示例,以及神奇的"显示原始"选项。如上所述,google设法正确地处理了更复杂的消息,但您需要成为google程序员才能弄清楚这一点。

这很可能与您的消息MIME结构有关。您可能必须将icalendar流放在multipart/alternative(参见https://www.rfc-editor.org/rfc/rfc6047#section-4.2)中,或者更糟的是,使用包含multipart/alternative的multipart/mixed来容纳所有客户端。