MVC应用程序生成的事件邀请的电子邮件未与outlook.com

时间:2015-11-15 15:01:13

标签: asp.net-mvc-5 icalendar outlook.com

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

我从这里获得了一些灵感:

StackOverflow Q1
StackOverflow Q2
StackOverflow 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中,即使电子邮件本身被正确识别为邀请,我也可以看到接受/暂定/拒绝按钮,但它不能按预期工作。当我点击例如接受选项时,会创建新的回复电子邮件,当我将其发送出去时,我希望,该事件将在我的日历中设置,但是没有事件同步。

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

由于

1 个答案:

答案 0 :(得分:1)

最后我找到了一个解决方案 - 在.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

现在工作正常。