Cee*_*lus 7 c# icalendar outlook
我是C#的初学者(老实说,并且是任何网络代码)。我正在尝试发送日历邀请,当您单击公司网站上的按钮时,该邀请将被连接。这是一个典型的n层系统,使用asp.net/C#和SQL。
我们以前只是简单地生成一个用户需要在Outlook中打开的ics,但是从那以后,我就学会了如何手动编码VCALENDAR,这样它就可以在Outlook中清晰美观地显示出来。
一切都进行得相当顺利,但是我现在希望日历邀请的正文能够接受HTML,尤其是附加链接。我已经尝试过AlternateViews,但似乎VCALENDAR内的“ X-ALT-DESC”属性应该可以完全满足我的要求。但是,请尝试使Outlook忽略它并使用描述。显然我缺少一些东西。
(为澄清起见,所有内容均可正常工作和编译,但HTML alt说明除外)
private Guid? CreateEmail()
{
Guid eventGuid = Guid.NewGuid();
MailMessage msg = new MailMessage();
msg.IsBodyHtml = true;
msg.From = new MailAddress("fromemail", "From Name");
msg.To.Add(toEmail);
msg.Subject = subject;
StringBuilder s = new StringBuilder();
s.AppendLine("BEGIN:VCALENDAR");
s.AppendLine("VERSION:2.0");
s.AppendLine("PRODID:-//My Product//Outlook MIMEDIR//EN");
s.AppendLine("METHOD:" + method); //In this case, "REQUEST"
s.AppendLine("STATUS:" + status.status); //"CONFIRMED"
s.AppendLine("BEGIN:VEVENT");
s.AppendLine("UID:" + eventGuid.ToString());
s.AppendLine("PRIORITY" + status.priority); //3
s.AppendLine("X-MICROSOFT-CDO-BUSYSTATUS:" + ShowAs.ToString()); //"BUSY"
s.AppendLine("SEQUENCE:" + UpdateNumber);//0
s.AppendLine("DTSTAMP:" + DateTime.Now.ToUniversalTime().ToString());
s.AppendLine("DTSTART:" + DateTimetoCalTime(startTime));
s.AppendLine("DTEND:" + DateTimetoCalTime(endTime));
s.AppendLine("SUMMARY:" + subject);
s.AppendLine("LOCATION: " + location);
s.AppendLine("DESCRIPTION: " + "Plain simple description"
string html_begin = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">" +
"\n<html>" +
"\n<head>" +
"\n<title></title>" +
"\n</head>" +
"\n<body>" +
"\n<!-- Converted from text/rtf format -->\n\n<P DIR=LTR><SPAN LANG=\"en-us\">" +
"\n<Font face=\"Times New Roman\"";
body = "I simply <b> want some bold </b> here 555";
string html_end = "</font></span></body>\n</html>";
string html_body = html_begin + body + html_end;
msg.Body = html_body;
s.AppendLine("X-ALT-DESC;FMTTYPE=text/html:" + html_body);
msg.Body = html_body;
s.AppendLine("X-ALT_DESC;FMTTYPE=text/html:" + html_body);
s.AppendLine("STATUS:" + status.status); //"CONFIRMED"
s.AppendLine("BEGIN:VALARM");
s.AppendLine("TRIGGER:-PT1440M");
s.AppendLine("ACTION:Accept");
s.AppendLine("DESCRIPTION:Reminder");
s.AppendLine("END:VALARM");
s.AppendLine("END:VEVENT");
s.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", msg.To[0].DisplayName, msg.To[0].Address));
s.AppendLine("END:VCALENDAR");
System.Net.Mime.ContentType type = new System.Net.Mime.ContentType("text/calendar");
type.Parameters.Add("method", method);
type.Parameters.Add("name", "meeting.ics");
msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(s.ToString(), type));
SMTP.send(msg);
return EventGuid;
Run Code Online (Sandbox Code Playgroud)
产生此外观的前景:
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 3.2//EN”>
<html>
<head>
<title></title>
</head>
<body>
<!-- Converted from text/rtf format -->
<P DIR=LTR><SPAN LANG=”en-us”>
<Font face=”Times New Roman”I simply <b> want some bold </b> here 555</font></span></body>
</html>
Run Code Online (Sandbox Code Playgroud)
通过测试:如果我将Msg.body留在外面,它只是使用了“ DESCRIPTION”。如果使它等于HTML,则会得到上述结果。
谢谢!
您可以在多行上使用 X-ALT-DESC,只需在其后面的每行的开头添加一个空格即可。
文本行不应超过 75 个八位字节(不包括换行符)。长内容行应该使用行“折叠”技术分成多行表示。也就是说,通过插入紧随其后的单个线性空白字符(即 SPACE 或 HTAB)的 CRLF,可以在任意两个字符之间分割长行。处理内容类型时,任何紧跟单个线性空白字符的 CRLF 序列都会被忽略(即删除)。
https://icalendar.org/iCalendar-RFC-5545/3-1-content-lines.html
| 归档时间: |
|
| 查看次数: |
5033 次 |
| 最近记录: |