Удалить событие Ical не работает

Я динамически создаю событие ical в своем веб-приложении, и когда кто-то отменяет встречу в приложении, мы создаем файл *.ics для удаления ical event на свою электронную почту, чтобы удалить событие в своем календаре.

Создание работает отлично, но когда мы пытаемся удалить созданную встречу, она не удаляется из календаря.

Создание кода события Ical:

 string[] contents = { 
      "BEGIN:VCALENDAR",
      "VERSION:2.0",
      "PRODID:-//dev.com//iCal//EN",
      "X-WR-CALNAME:development",
      "X-WR-RELCALID:928C8448-048A-4aa2-BE27-A920773AF3DC",
      "X-FUNAMBOL-ALLDAY:0",
      "METHOD:REQUEST",
      "BEGIN:VEVENT",
      "UID:" + Args.EventUID, 
      "SEQUENCE:1",
      "DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "LOCATION: " + Args.EventLocation, 
      "ORGANIZER: [email protected]",
      "DESCRIPTION;ENCODING=ESCAPED-CHAR:" + Args.EventName,
      "SUMMARY:" + Args.EventDescription, 
      "STATUS:CONFIRMED",
      "TRANSP:OPAQUE",
      "PRIORITY:" + Args.EventPriority.ToString(), 
      "END:VEVENT", 
      "END:VCALENDAR" 
 }; 

Создание события отлично работает на iphone/android/outlook

Удалить часть события:

    string[] contents = { 
      "BEGIN:VCALENDAR",
      "VERSION:2.0",
      "METHOD:CANCEL",
      "X-WR-CALNAME:development",
      "X-WR-RELCALID:928C8448-048A-4aa2-BE27-A920773AF3DC",
      "PRODID:-//dev.com//iCal//EN",
      "X-FUNAMBOL-ALLDAY:0",
      "BEGIN:VEVENT",                                
      "UID:" + Args.EventUID,
      "SEQUENCE:2",
      "DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "LOCATION: " + Args.EventLocation, 
      "DESCRIPTION;ENCODING=ESCAPED-CHAR:" + Args.EventName,
      "SUMMARY:" + Args.EventDescription, 
      "ORGANIZER: [email protected]",
      "PRIORITY:" + Args.EventPriority.ToString(), 
      "STATUS:CANCELLED",
      "TRANSP:OPAQUE",
      "END:VEVENT", 
      "END:VCALENDAR" 
  };

Когда я щелкаю этот созданный файл, чтобы удалить уже созданное событие, он не удаляет событие, а иногда дублирует событие.

ical UID при создании и удалении одинаковы.


person Venkata K. C. Tata    schedule 12.08.2014    source источник
comment
Вы знаете, что для этого есть рамки? у нас никогда не было проблем, таких как: sourceforge.net/projects/dday-ical   -  person    schedule 20.08.2014


Ответы (3)


Во-первых, внимательно изучите UID. Я знаю, вы говорите, что они одинаковы, но проверьте! Пробелы? Случай?

Затем поместите PRODID во вторую строку, сразу после BEGIN (не обращайте внимания на валидаторы, когда они говорят вам поместить VERSION во вторую строку). Это звучит тривиально, поле даже не используется, но Outlook, в частности, до смешного привередлив. Скопируйте рабочий пример. Протестируйте и скажите, если я ошибаюсь.

Затем SEQUENCE индексируется с 0. Клиенты могут интерпретировать SEQUENCE:1 как обновление и интересоваться, где исходное приглашение.

Затем проверьте структуру и MIME-тип заголовков ваших электронных писем. Наилучшие результаты я получил, отправив простое электронное письмо, состоящее из одной части, с Content-type: text/calendar; method="[REQUEST/CANCEL]" в заголовке MIME.

До сих пор не работает? Попробуйте добавить элемент ATTENDEE с обязательным участием, rsvp true и т. д., повторяя адрес электронной почты получателя.

Все еще проблемы? Используйте онлайн-валидаторы Icalendar для проверки результатов, а также точно скопируйте рабочий пример. Отправьте себе приглашение, а затем отмените его из Gmail и/или Outlook. Важно все — структура сообщения, порядок полей в Icalendar, MIME-заголовки письма. Отправка в GMail позволяет точно увидеть, что получено, с помощью параметра gmail показать оригинал.

Я заметил, что вы ничего не делаете для упаковки. Нормальные строки ограничены 75 символами, не так много, а строки, выходящие за пределы строки, должны начинаться с пробела. Валидатор быстро подскажет.

person bbsimonbb    schedule 20.08.2014

Разница также может заключаться в том, «подписалось» приложение календаря или «импортировало» файл ics? События с подпиской должны обновляться, импортированные, как правило, могут не обновляться, поскольку пользователь мог их изменить — в разных приложениях календаря они могут различаться.

person anmari    schedule 24.08.2014

Попробуйте использовать PUBLISH вместо METHOD и 0 вместо SEQUENCE для отправки и 1 вместо SEQUENCE для удаления.

Пример подачи:

string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//site.domain//iCal//EN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:0",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"SUMMARY:" + Args.EventDescription,
"STATUS:CONFIRMED",
"END:VEVENT",
"END:VCALENDAR"
};

Пример стирания:

string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//site.domain//iCal//EN",
"METHOD:CANCEL",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:1",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"SUMMARY:" + Args.EventDescription,
"STATUS:CANCELLED",
"END:VEVENT",
"END:VCALENDAR"
};
person ingroxd    schedule 12.11.2014