此时我已经坚持这个问题好几个小时了,我无法弄清楚问题。
我想通过iCal文件发送电子邮件(gmail)
它有效(接收方可以收到邀请,可以点击“是”将此邀请添加到 接收者的日历)如果我发送一个事件,
但它失败了(如果我发送了两个事件,那么gmail只会显示一个邀请,如果我点击是,我想将它添加到我的日历中,它只会添加一个邀请到我的日历)。
代码如下:
protected void Page_Load(object sender, EventArgs e)
{
MailMessage msg = new MailMessage("testxxx@gmail.com", "testxxx@gmail.com", "test", "test");
msg.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.Credentials = new NetworkCredential("test", "test");
msg = GetCalanderInviteMsg3(msg);
smtp.EnableSsl = true;
smtp.Send(msg);
}
public static MailMessage GetCalanderInviteMsg3(MailMessage msg)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("BEGIN:VCALENDAR");
sb.AppendLine("PRODID:-//Google Inc//Google Calendar 70.9054//EN");
sb.AppendLine("VERSION:2.0");
sb.AppendLine("CALSCALE:GREGORIAN");
sb.AppendLine("METHOD:PUBLISH");
sb.AppendLine("X-WR-CALNAME:test");
sb.AppendLine("X-WR-TIMEZONE:Asia/Taipei");
sb.AppendLine("X-WR-CALDESC:");
sb.AppendLine("BEGIN:VEVENT");
sb.AppendLine("DTSTART;VALUE=DATE:20130705")`
sb.AppendLine("DTEND;VALUE=DATE:20130706");
sb.AppendLine("DTSTAMP:20130127T040705Z");
sb.AppendLine("UID:" + "c643b569-9ba8-45c1-9264-8f160411872a");
sb.AppendLine("CREATED:20130624T082605Z");
sb.AppendLine("DESCRIPTION:");
sb.AppendLine("LAST-MODIFIED:" + "2013127T054310Z");
sb.AppendLine("LOCATION:");
sb.AppendLine("SEQUENCE:0");
sb.AppendLine("STATUS:CONFIRMED");
sb.AppendLine("SUMMARY:event1");
sb.AppendLine("TRANSP:TRANSPARENT");
sb.AppendLine("END:VEVENT");
sb.AppendLine("BEGIN:VEVENT");
sb.AppendLine("DTSTART;VALUE=DATE:20130703");
sb.AppendLine("DTEND;VALUE=DATE:20130704");
sb.AppendLine("DTSTAMP:20130127T040730Z");
sb.AppendLine("UID:" + "84395bf9-875e-4925-864f-910309e0a355");
sb.AppendLine("CREATED:20080624T082556Z");
sb.AppendLine("DESCRIPTION:");
sb.AppendLine("LAST-MODIFIED:" + "2013127T054320Z");
sb.AppendLine("LOCATION:");
sb.AppendLine("SEQUENCE:0");
sb.AppendLine("STATUS:CONFIRMED");
sb.AppendLine("SUMMARY:event2");
sb.AppendLine("TRANSP:TRANSPARENT");
sb.AppendLine("END:VEVENT");
sb.AppendLine("END:VCALENDAR");
System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar");
ct.Parameters.Add("method", "REQUEST");
AlternateView avCal = AlternateView.CreateAlternateViewFromString(sb.ToString(), ct);
msg.AlternateViews.Add(avCal);
return msg;
}
答案 0 :(得分:1)
问题不在于您的代码(尽管根据rfc5545强制使用不同的uid),但使用来自不同日历应用程序的GUI。
如果我们扩展您的用例,它们可能是电子邮件中100或1000的事件,GUI应该如何?为每个单独的活动点击100个或1000个系列按钮?
所以尽管你的代码是正确的,并且iMIP(RFC6047)也说可以包含超过1个VEVENT,但是当用户需要逐个批准它们时,不应该有超过1个事件。
如果您想要的是同一事件的2 instances
(因此相同的UID),您应该使用RDATE属性在一个EVENT中指定您的2个日期,然后您的用户可以接受邀请1个事件(将有2个实例)。