为什么我的icalendar邀请函不会被outlook嗅探器处理?

时间:2014-06-17 09:11:20

标签: c# icalendar outlook-2010

我的ASP.net应用程序生成的邀请函(由ics附件发送到Outlook 2010的电子邮件)不会被嗅探器处理。因此,它们在日历中不会显示为暂定,并且在预览窗格中不可用。 .ics附件似乎有效,可以通过双击在Outlook中打开。发送给Gmail的相同邀请无需担心。我已经排除了一些可以解决同一问题的解决方案......

  • 正确配置了Outlook,并且处理Gmail邀请没有问题
  • 邮件将作为Content-Type:multipart / mixed发送,附件为text / calendar。
  • DTEND跟随DTSTART!
  • 邀请函包括组织者和与会者。

我的邀请和Gmails之间最明显的区别是没有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

指定here X-MS-OLK-FORCEINSPECTOROPEN 属性没有帮助。

我的文件传递了this问题

中提到的三个iCalendar验证器

我的上帝互联网正在堵塞那些无法将他们的邀请带入Outlook的人们。 Hereherehere

共识似乎是您需要在日历MIME部分的标题中的内容类型之后添加“; method = REQUEST”。麻烦的是,.net System.Net.Mail库似乎没有提供设置此行的低级访问权限。狩猎仍在继续。

2 个答案:

答案 0 :(得分:2)

好的,我已经破解了。对我有用的解决方案是两个建议here的组合。文本/日历部分必须是邮件的唯一部分, method = 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标头的唯一方法。对于想要在.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,毫不费力地构建了一个工作示例,以及非常棒的“show original”选项。如上所述,谷歌以某种方式设法正确处理更复杂的消息,但你需要成为谷歌程序员来解决这个问题。

答案 1 :(得分:0)

这很可能与您的邮件MIME结构有关。您可能必须将icalendar流放在multipart / alternative(参见http://tools.ietf.org/html/rfc6047#section-4.2)中,或者更糟糕的是,包含multipart / alternative的multipart / mixed以容纳所有客户端。