1

私はこの時点でこの問題に何時間も立ち往生していて、問題を理解することができません。

iCalファイルを介して招待状をメール(Gmail)で送信したいのですが、

1つのイベントを送信すると、機能します(受信者は招待状を取得でき、[はい]をクリックしてこの招待状を受信者のカレンダーに追加できます)。

しかし、2つのイベントを送信すると、失敗しました(Gmailには招待状のみが表示されます。カレンダーに追加する場合は[はい]をクリックすると、カレンダーに招待状が1つだけ追加されます)。

コードは次のとおりです。

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

1 に答える 1

1

問題はコードにあるのではなく(rfc5545のように別のuidが必須ですが)、別のカレンダーアプリケーションのGUIに問題があります。

ユースケースを拡大すると、それらは電子メール内の数百または数千のイベントになる可能性があり、GUIはどのように見えるべきでしょうか?個々のイベントごとにクリックされる一連の数百または数千のボタン?

したがって、コードが正しく、iMIP(RFC6047)にも複数のVEVENTを含めることができると記載されている場合でも、ユーザーが1つずつ承認する必要があるため、複数のイベントを含めることはお勧めできません。

同じイベントを2つinstances(したがって同じUID)にしたい場合は、RDATEプロパティを使用して1つのイベントに2つの日付を指定すると、ユーザーは1つのイベント(2つのインスタンスを持つ)への招待を受け入れることができます。 )。

于 2013-02-01T15:06:30.093 に答える