首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ical.net创建HTML格式的ICS邮件正文?

如何使用ical.net创建HTML格式的ICS邮件正文?
EN

Stack Overflow用户
提问于 2016-12-24 00:34:06
回答 1查看 19.2K关注 0票数 5

我需要发送提醒给web应用程序的用户。

为此,我使用nuget包中的iCal.Net。按照使用说明,我可以发送一封包含ics文件附件的电子邮件。

有没有可能将事件描述格式化为html,使其同时适用于Outlook office客户端和Chrome日历?

在这些客户端上,我看到了带有所有html标记的纯文本表示。我还在Windows10日历上进行了测试,事件描述正确地显示为html。我需要设置更多的东西吗?

这是我的日历字符串生成

代码语言:javascript
运行
复制
var now = DateTime.Now;
var later = scadenza.Value;

var e = new Event
{
    DtStart = new CalDateTime(later),
    DtEnd = new CalDateTime(later),
    Description = mailText,
    IsAllDay = true,
    Created = new CalDateTime(DateTime.Now),
    Summary = $"Reminder for XYZ",

};

var attendee = new Attendee
{
    CommonName = "…..",
    Rsvp = true,
    Value = new Uri("mailto:" + ConfigurationManager.AppSettings["ReminderReceiver"])
};
e.    Attendees = new List<IAttendee> { attendee };

var calendar = new Calendar();
calendar.Events.Add(e);

var serializer = new CalendarSerializer(new SerializationContext());
var icalString = serializer.SerializeToString(calendar);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-24 04:07:50

HTML格式不是icalendar规范的一部分,因此由应用程序通过使用X-前缀指定的非标准属性字段来添加对此的支持。(如果您感兴趣,请使用Further reading on non-standard properties。)

谷歌日历

谷歌日历看起来并不支持HTML格式的事件,所以我认为你在这方面不太走运。

Outlook

Outlook使用许多这样的HTML域来处理各种事情;对于X-格式的描述,它使用X-ALT-DESC并按如下方式指定FMTTYPE=text/html

代码语言:javascript
运行
复制
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 due a bug中使用CalendarProperty序列化完成此操作,但解决方法只需一行。

代码语言:javascript
运行
复制
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调用。)

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41304898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档