5

Web アプリケーションのユーザーにリマインダーを送信する必要があります。

これを行うには、nuget パッケージの iCal.Net を使用します。使用方法に関する指示に従って、ics ファイルを含む添付ファイルを電子メールで送信できます。

イベントの説明を HTML 形式にして、Outlook オフィス クライアントと Chrome カレンダーの両方で機能させることはできますか?

これらのクライアントでは、すべての html タグを含むプレーン テキスト表現が表示されます。イベントの説明がhtmlとして正しく表示されるWindows 10カレンダーでもテストしました。もっと何かを設定する必要がありますか?

これは私のカレンダー文字列の生成です

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);
4

1 に答える 1

13

X-HTML フォーマットは icalendar 仕様の一部ではないため、接頭辞で指定された非標準のプロパティ フィールドを介して、これに対するサポートをアプリケーションに追加する必要があります。(興味がある場合は、非標準のプロパティについてさらに読んでください。)

グーグルカレンダー

Google カレンダーは 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でこれを行うことはできません、回避策は 1 行だけです。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呼び出しを削除します。)

于 2016-12-23T20:07:49.667 に答える