HTML 格式不是 icalendar 规范的一部分,因此应用程序可以通过使用X-前缀指定的非标准属性字段来添加对此的支持。(如果您有兴趣,请进一步阅读非标准属性。)
谷歌日历
谷歌日历似乎不支持 HTML 格式的事件,所以我认为你在那里不走运。
外表
Outlook 使用许多这些X-字段来处理各种事情;对于 HTML 格式的描述,它使用X-ALT-DESC并指定FMTTYPE=text/html如下:
X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//E
N">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server ve
rsion rmj.rmm.rup.rpr">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted
from text/rtf format -->\n\n<P DIR=LTR><SPAN LANG="en-us"><FONT FACE="Cali
bri">This is some</FONT></SPAN><SPAN LANG="en-us"><B> <FONT FACE="Calibri"
>HTML</FONT></B></SPAN><SPAN LANG="en-us"><FONT FACE="Calibri"></FONT></SP
AN><SPAN LANG="en-us"><U> <FONT FACE="Calibri">formatted</FONT></U></SPAN>
<SPAN LANG="en-us"><FONT FACE="Calibri"></FONT></SPAN><SPAN LANG="en-us"><
I> <FONT FACE="Calibri">text</FONT></I></SPAN><SPAN LANG="en-us"><FONT FAC
E="Calibri">.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>\n\n</BODY>\n</HT
ML>
您可能能够摆脱更简单的 HTML,您必须进行测试以查看 Outlook 支持/允许的内容。上面的 HTML 块是使用 Outlook 2013 生成的。我已成功使用该块并通过 ical.net 的序列化往返运行它,Outlook 毫不费力地打开它。
ical.net
不幸的是,由于序列化的错误,您不能在 ical.net 中完全做到这一点,但解决方法只是一行。CalendarProperty
const string formatted = //the text block from above starting with FMTTYPE=text/html:
var start = DateTime.Now;
var end = start.AddHours(1);
var @event = new Event
{
Start = new CalDateTime(start),
End = new CalDateTime(end),
Description = "This is a description",
};
var property = new CalendarProperty("X-ALT-DESC", formatted);
@event.AddProperty(property);
var calendar = new Calendar();
calendar.Events.Add(@event);
var serialized = new CalendarSerializer().SerializeToString(calendar);
//Workaround for the bug:
serialized = serialized.Replace("X-ALT-DESC:FMTTYPE=text/html", "X-ALT-DESC;FMTTYPE=text/html");
这将生成 HTML 格式的 Outlook 日历事件。
(当我修复错误时,我将更新此答案以删除string.Replace呼叫。)