1

ユーザーが私たちのウェブサイトにサインアップしたら、登録したクラスでカレンダーを自動的に更新できるようにするメールを送信したいと思います。ほとんどの場合、これは複数の日/イベントになります.

テストとして、DDay.ical を使用してマルチイベント リクエストを作成しています。ただし、Outlook も iPhone メール アプリも、ical 添付ファイルの 2 番目のイベントに気付かないようです。

iCal 標準で複数のイベントがサポートされていることは知っています。すべてのクライアントがそのシナリオをサポートしているわけではありません。他のクライアントはマルチイベント ical リクエストをサポートしていますか?

コードで何か間違ったことをしているとは思いませんが、念のためにコードフラグメントを投稿します。

                    // Create event part.
                iCalendar iCal1 = new iCalendar();
                iCal1.AddLocalTimeZone();

                iCal1.Method = "REQUEST";

                Event evt1 = iCal1.Create<Event>();
                evt1.Start = new iCalDateTime(new DateTime(2014, 8, 4, 12, 30, 00, DateTimeKind.Local));
                evt1.End = evt1.Start.AddMinutes(30);
                evt1.IsAllDay = false;
                evt1.Summary = string.Format("Lesson - {0}", evt1.Start.ToString("MM/dd"));
                evt1.Location = "Anytown";

                // Add recipients for appointment.
                Attendee att1 = new Attendee("mailto:" + "me@MyDomain.com");
                att1.RSVP = false;
                att1.CommonName = "Me Jones";
                evt1.Attendees.Add(att1);


                Event evt2 = iCal1.Create<Event>();
                evt2.Start = new iCalDateTime(new DateTime(2014, 8, 11, 12, 30, 00, DateTimeKind.Local));
                evt2.End = evt1.Start.AddMinutes(30);
                evt2.IsAllDay = false;
                evt2.Summary = string.Format("Lesson - {0}", evt2.Start.ToString("MM/dd"));
                evt2.Location = "AnyTown";

                // Add recipients for appointment.
                Attendee att2 = new Attendee("mailto:" + "me@MyDomain.com");
                att2.RSVP = false;
                att2.CommonName = "Me Jones";
                evt2.Attendees.Add(att2);



                iCalendarSerializer serializer1 = new iCalendarSerializer();

                string t = serializer1.SerializeToString(iCal1);
                Byte[] bytes = System.Text.Encoding.ASCII.GetBytes(t);

                using (var ms = new System.IO.MemoryStream(bytes))
                {
                    using (var a = new System.Net.Mail.Attachment(ms, "meeting.ics", "text/calendar")) //Either load from disk or use a MemoryStream bound to the bytes of a String
                    {
                        a.ContentDisposition.Inline = true;             //Mark as inline
                        msg.Attachments.Add(a);                          //Add it to the message
                        Mailer.Send(msg);

                    }

                }
4

1 に答える 1

3

残念ながら、さまざまな電子メール クライアントでの Icalendar の実装に完全に依存しており、これらは通常、ユーザーのカレンダーを非常に保護しています。通常、それらはすべてマルチイベントの Icalendar をサポートしていますが、ユーザーのカレンダーに「直接入る」招待状は、一度に 1 つのイベントを送信する必要があります。私はこれに対する例外を認識していません。

Outlook などで複数のイベントを含む Icalendar 添付ファイルを処理するには、添付ファイルをディスクに保存し、そこに移動して開く必要があります。その後、別のカレンダーとして開き、イベントを 1 つずつカレンダーにドラッグする必要があります。悪夢。これを開発するのに苦労する価値はほとんどありません。

もちろん、もう 1 つのオプションは、Web サイトで Icalendar をホストし、クライアントにカレンダーの URL を入力してユーザーに購読してもらうことです。これには、変更が自動的に反映されるという利点がありますが、電子メール クライアントは引き続きイベントを外部として扱います (自動リマインダーはありません。Outlook ではデフォルトで別のペインに表示されます。Gmail は少なくとも同じグリッド上の異なるカレンダーのイベントを表示します。 )

于 2014-07-29T15:21:26.300 に答える