Поддержка клиента iCal для нескольких запросов событий

Когда пользователь регистрируется на нашем веб-сайте, я хотел бы отправить ему электронное письмо, которое позволяет ему автоматически обновлять свой календарь с учетом классов, в которые он записан. В большинстве случаев это будет несколько дней / событий.

В качестве теста я использую DDay.ical для создания запроса на несколько событий. Однако, похоже, что ни Outlook, ни почтовое приложение iPhone не замечают второе событие во вложении.

Я знаю, что в стандарте 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);

                    }

                }

1 ответ

К сожалению, вы полностью зависите от реализации Icalendar в различных почтовых клиентах, и они обычно очень защищают календари своих пользователей. Как правило, все они поддерживают многокамерные Icalendars, но приглашения, которые "идут прямо" в календарь пользователя, должны отправляться по одному событию за раз. Я не знаю каких-либо исключений из этого.

Чтобы обработать вложение Icalendar, содержащее более одного события, например в Outlook, необходимо сохранить вложение на диск, перейти к нему и открыть его. Затем он открывается как отдельный календарь, и вам нужно перетаскивать события одно за другим в свой календарь. Кошмарный сон. Это редко будет стоить усилий для разработки.

Другой вариант, конечно, это разместить Icalendar на своем веб-сайте и заставить своих пользователей подписаться, введя URL-адрес календаря в своем клиенте. Преимущество в том, что изменения распространяются автоматически, но почтовые клиенты по-прежнему будут обрабатывать события как внешние (автоматических напоминаний нет, в Outlook по умолчанию они отображаются на отдельной панели, Gmail, по крайней мере, отображает события из разных календарей в одной и той же сетке).)

Другие вопросы по тегам