MVC 应用程序生成的带有事件邀请的电子邮件未与 outlook.com 中的日历同步

Emails with event invite generated by MVC application not synced with calendar in outlook.com

我正在创建 ASP.NET MVC5 应用程序。一项功能是发送带有活动邀请的电子邮件。在 Gmail 客户端中,此类生成的电子邮件工作正常。但在 outlook.com 中,即使电子邮件有正确的按钮 - accept/tentative/decline - 点击它们也不会将其同步到日历本身。

我在这里得到了一些启发:

Whosebug Q1

Whosebug Q3

这是我当前的实现:

我正在使用 DDay.ical 库来创建事件:

IICalendar iCal = new iCalendar();
iCal.Version = "2.0";
iCal.Method = "REQUEST";
iCal.ProductID = "my@product.com";

Event evt = iCal.Create<Event>();
evt.UID = Guid.NewGuid().ToString();
evt.Class = "PUBLIC";
evt.Created = new iCalDateTime(DateTime.Now);
evt.DTStamp = new iCalDateTime(DateTime.Now);
evt.Start = new iCalDateTime(DateTime.Now.AddHours(2));
evt.End = new iCalDateTime(DateTime.Now.AddHours(4));
evt.Location = "Party room";
evt.Description = "Awesome party";
evt.Summary = "Lets get wasted";
evt.Priority = 5;
evt.Transparency = TransparencyType.Transparent;

string res = new iCalendarSerializer().SerializeToString(iCal);
return res;

我将此事件打包到电子邮件中作为替代视图:

MailMessage email = new MailMessage();

email.To.Add(addressesToJoined);
email.Subject = Party;
email.Body = "";

if (!String.IsNullOrEmpty(calendarEvent))
{
    System.Net.Mime.ContentType calendarType = new System.Net.Mime.ContentType("text/calendar");
    calendarType.Parameters.Add("method", "REQUEST");

    AlternateView ICSview = AlternateView.CreateAlternateViewFromString(calendarEvent, calendarType);

    email.AlternateViews.Add(ICSview);

}

这是 .ics 本身:

BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST
PRODID:my@product.com
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20151115T152442
DESCRIPTION:Awesome party
DTEND:20151115T192442
DTSTAMP:20151115T142442Z
DTSTART:20151115T172442
LOCATION:Party room
PRIORITY:5
SEQUENCE:0
SUMMARY:Lets get wasted
TRANSP:Transparent
UID:1735cdca-cb36-4e6b-a1ec-4fb4149f798a
END:VEVENT
END:VCALENDAR

当这封电子邮件到达 Gmail 客户端时,我可以正确地看到带有将事件添加到日历中的选项的邀请,效果很好。

但在 outlook.com 中,即使电子邮件本身被正确识别为邀请并且我可以看到 accept/tentative/decline 按钮,它也无法按预期工作。例如,当我单击接受选项时,将创建新的回复电子邮件,当我将其发送出去时,我希望事件将设置在我的日历中,但是没有同步事件。

有人可以看看为什么 outlook.com 中的日历中的事件不同步吗? 另外,在 outlook.com 中是否可以只在日历中设置事件,而不发送回复电子邮件? - 邀请由系统自动生成,无需回复。

谢谢

我终于找到了解决方案 - .ics 中的 VEVENT 部分缺少 ORGANIZER 参数。 Gmail 能够处理,Outlook.com 不能。所以诀窍是在设置 DDay.iCal.Event 对象时添加以下行:

evt.Organizer = new Organizer("organizer@mail.com");

其他一切都保持不变,所以在 Gmail 和 Outlook.com 中都有效的 .ics 的最终外观是这样的:

BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST
PRODID:my@product.com
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:20151115T152442
DESCRIPTION:Awesome party
DTEND:20151115T192442
DTSTAMP:20151115T142442Z
DTSTART:20151115T172442
LOCATION:Party room
ORGANIZER:mailto:organizer@email.com
PRIORITY:5
SEQUENCE:0
SUMMARY:Lets get wasted
TRANSP:Transparent
UID:1735cdca-cb36-4e6b-a1ec-4fb4149f798a
END:VEVENT
END:VCALENDAR

现在可以正常使用了。