Отменить запросы на собрания Outlook через MailMessage в С#

Я создаю приложение с помощью платформы ASP.NET MVC 1 на C#, где у меня есть пользователи, которые регистрируются для участия в событиях. При регистрации я создаю запрос на встречу в Outlook

public string BuildMeetingRequest(DateTime start, DateTime end, string attendees, string organizer, string subject, string description, string UID, string location)
    {
        System.Text.StringBuilder sw = new System.Text.StringBuilder();

        sw.AppendLine("BEGIN:VCALENDAR");
        sw.AppendLine("VERSION:2.0");
        sw.AppendLine("METHOD:REQUEST");
        sw.AppendLine("BEGIN:VEVENT");
        sw.AppendLine(attendees);
        sw.AppendLine("CLASS:PUBLIC");
        sw.AppendLine(string.Format("CREATED:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow));
        sw.AppendLine("DESCRIPTION:" + description);
        sw.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", end));
        sw.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow));
        sw.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", start));
        sw.AppendLine("ORGANIZER;CN=\"NAME\":mailto:" + organizer);
        sw.AppendLine("SEQUENCE:0");
        sw.AppendLine("UID:" + UID);
        sw.AppendLine("LOCATION:" + location);
        sw.AppendLine("SUMMARY;LANGUAGE=en-us:" + subject);
        sw.AppendLine("BEGIN:VALARM");
        sw.AppendLine("TRIGGER:-PT720M");
        sw.AppendLine("ACTION:DISPLAY");
        sw.AppendLine("DESCRIPTION:Reminder");
        sw.AppendLine("END:VALARM");
        sw.AppendLine("END:VEVENT");
        sw.AppendLine("END:VCALENDAR");

        return sw.ToString();
    }

И после создания я использую MailMessage с альтернативным представлением для отправки приглашения на собрание:

meetingInfo = BuildMeetingRequest(start, end, attendees, organizer, subject, description, UID, location);           

        System.Net.Mime.ContentType mimeType = new System.Net.Mime.ContentType("text/calendar; method=REQUEST");
        AlternateView ICSview = AlternateView.CreateAlternateViewFromString(meetingInfo,mimeType);
        MailMessage message = new MailMessage();

        message.To.Add(to);
        message.From = new MailAddress(from);
        message.AlternateViews.Add(ICSview);

        SmtpClient client = new SmtpClient();
        client.Send(message);

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

Это также хорошо работает для отправки обновлений приглашения на собрание. Единственная проблема, с которой я столкнулся, заключается в том, что я не знаю правильного формата для отправки отмены. Я пытался изучить отмену некоторых приглашений на собрания в текстовых редакторах и не могу точно определить разницу в формате между отменой/созданием.

Любая помощь в этом очень ценится.


person BTmuney    schedule 16.04.2010    source источник


Ответы (1)


В соответствии с RFC 2445 вам просто нужно установить STATUS:CANCELLED

person Chris Haas    schedule 16.04.2010
comment
Это помогло, хотя, когда я использовал только это ключевое слово статуса в приглашении на собрание, Outlook рассматривает его как редактирование собрания. Мне удалось отправить отмену встречи, добавив sw.AppendLine(METHOD:CANCEL); sw.AppendLine(СОСТОЯНИЕ:ОТМЕНЕНО); Кроме того, мне нужно было добавить еще один тип mime для отмены System.Net.Mime.ContentType mimeType = new System.Net.Mime.ContentType(text/calendar; method=CANCEL); Спасибо. - person BTmuney; 17.04.2010
comment
@BTmuney После отправки сообщения об отмене собрания оно также удаляет собрание из календаря? Я попробовал это, и он работает и отменяет отправку, но он не удаляет существующую встречу из календаря в Outlook. - person Fahad Hussain; 07.05.2014