我正在寻找一种在c#(asp.net)中生成iCalendar文件(*.ics)的好方法.我找到了一些资源,但缺少的一点是它们支持quoted-printable字段 - 具有回车符和换行符的字段.
例如,如果描述字段编码不正确,则只显示第一行并可能破坏*.ics文件中的其余信息.
我正在寻找可以生成*.ics文件的现有类和/或可以生成带引号的可打印字段的类.
我们的java应用程序使用ical4j生成ICalendar文件,并将它们作为HTML电子邮件通知的一部分发送给用户.几个用户(会议的组织者)报告会议的"接受","拒绝"等按钮显示为灰色,并且不可点击.会议未添加到组织者的日历中.
如何强制为管理器添加会议?
我暂时配置服务器以将.ics文件作为附件(而不是内联)发送,以便我可以通过基于Web的ICalendar验证器运行它.验证器给了我一个警告,说明Version属性应该是第一个属性,但没有发现任何其他问题.
除了组织者之外,ICalendar通常适用于每个用户.
我能够在自己的Outlook帐户上重现该问题.我注意到,如果我通过gmail邮件服务器发送会议通知,它会正常工作; 但是,当它来自我们的内部Outlook服务器时,它不会被添加到日历中.
灰显的会议控件下方会显示一条消息:"作为会议组织者,您无需回复此会议."
我们的系统生成的示例ICalendar文件:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//MyCompany//Product//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTAMP:20101202T210423Z
UID:77B17E9B-BE02-476E-816B-ED9558EE7D2A
DTSTART:20101230T133000
DTEND:20101230T143000
SUMMARY:Review Meeting for A1 CI Review #123456
LOCATION:BLDG - 123
CREATED:20101202T210423Z
LAST-MODIFIED:20101202T210423Z
TZID:America/New_York
ORGANIZER;CN="ORGANIZER, THE";SENT-BY="mailto:noemail@mycompany.com":mailto:myemail@mycompany.com
ATTENDEE;ROLE=REQ-PARTICIPANT;CN="ATTENDEE, SOME":mailto:noemail@mycompany.com
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)
编辑:
我尝试将会议组织者添加为"可选"参与者.没有骰子; 同样的行为.
再次编辑这个问题以反映我在这个问题上的进展.
我正在使用DDay库来创建iCal事件,以便我的网站用户可以在他们的日历中添加内容.
我希望他们在Office 2010中添加约会而不是会议请求(希望其他人也是如此).当我使用库并将方法设置为PUBLISH时,它确实显示为约会,但它报告在日历中找不到会议.然后,当我点击不需要回复时,该项目将被删除,并且不会保留在他们的日历中.
如果我将方法更改为REQUEST,它将显示为会议请求.这可能是第二好的选择,但'to'字段是空白的.如果这是我能做的最好的,我怎样才能设置'到'字段?我想我会让他们回应自己.
private static string CreateCalendarEvent(
string title, string body, DateTime startDate, double duration,
string location, string organizer, string eventId, bool allDayEvent)
{
// mandatory for outlook 2007
if(String.IsNullOrEmpty(organizer))
throw new Exception("Organizer provided was null");
var iCal = new iCalendar
{
Method = "PUBLISH",
Version = "2.0"
};
// "REQUEST" will update an existing event with the same UID (Unique ID) and a newer time stamp.
//if (updatePreviousEvent)
//{
// iCal.Method = "REQUEST";
//}
var evt = iCal.Create<Event>(); …Run Code Online (Sandbox Code Playgroud) 我试图在Outlook 2007中创建,更新和删除事件(但最好是它适用于所有版本).创建和删除事件工作正常.我跟踪了几个 线程,但由于某种原因,更新操作失败了.
当我双击ICS文件时,Outlook会打开一个窗口,我唯一的选择是删除.但它要删除的事件不是旧事件,而是新事件(即使它尚未创建).所以当我点击删除时,旧事件仍然在这里.
UID是相同的,序列已增加1,DTSTAMP更新.
第一项活动:
BEGIN:VCALENDAR
PRODID:-//Blatant Media Corporation//Absorb LMS//EN
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
CLASS:PUBLIC
DTSTART;VALUE=DATE-TIME:20101111T13000000Z
DTEND;VALUE=DATE-TIME:20101111T14000000Z
UID:AbsorbClass150180
DESCRIPTION:A nov session for demoing only\n\nVenue:\nBoardroom 123\n\nInstructor:\nMike Owens\n\nCourse Description:\nInstructor Led Training (ILT) topic: First Aid\n\n------------------\nAbsorb Anywhere\nhttp://www.absorbtraining.com
LOCATION:Boardroom 123
SUMMARY:First Aid: Nov
DTSTAMP:20101107T15353400Z
LAST-MODIFIED:20101107T15353400Z
STATUS:CONFIRMED
SEQUENCE:0
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)
更新的活动:
BEGIN:VCALENDAR
PRODID:-//Blatant Media Corporation//Absorb LMS//EN
VERSION:2.0
METHOd:REQUEST
BEGIN:VEVENT
CLASS:PUBLIC
DTSTART;VALUE=DATE-TIME:20101111T15000000Z
DTEND;VALUE=DATE-TIME:20101111T16000000Z
UID:AbsorbClass150180
DESCRIPTION:A nov session for demoing only\n\nVenue:\nBoardroom 123\n\nInstructor:\nMike Owens\n\nCourse Description:\nInstructor Led Training (ILT) topic: First Aid\n\n------------------\nAbsorb Anywhere\nhttp://www.absorbtraining.com
LOCATION:Boardroom 123
SUMMARY:First Aid: …Run Code Online (Sandbox Code Playgroud)