2010-04-16 14 views
9

Ich erstelle eine Anwendung mit dem ASP.NET MVC 1-Framework in C#, wo ich Benutzer haben, die sich für Ereignisse registrieren. Bei der Registrierung, erstelle ich einen Ausblick BesprechungsanfrageAbbrechen Outlook-Besprechungsanfragen via MailMessage in C#

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(); 
    } 

Und einmal gebaut, ich Mailmessage verwenden, mit einer alternativen Ansicht, die die Besprechungsanfrage senden:

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); 

Wenn Benutzer die E-Mail in Outlook zu erhalten, Es erscheint als eine Besprechungsanfrage, im Gegensatz zu einer normalen E-Mail.

Dies funktioniert auch für das Senden von Updates an die Besprechungsanfrage. Das einzige Problem, das ich habe, ist, dass ich das richtige Format für das Absenden einer Annullierung nicht kenne. Ich habe versucht, einige Stornierungen von Besprechungsanfragen in Text-Editoren zu untersuchen und kann den Unterschied im Format zwischen dem Abbrechen und dem Erstellen nicht genau erkennen.

Jede Hilfe zu diesem wird sehr geschätzt.

Antwort

5

Nach RFC 2445 Sie brauchen nur STATUS:CANCELLED

+4

Dies trug dazu setzen, obwohl, wenn ich nur verwendet diesen Status Stichwort in der Besprechungsanfrage, Ausblick sieht es als eine Sitzung bearbeiten. Ich schaffte es, eine Annullierung der Besprechung zu senden, indem sw.AppendLine ("METHODE: CANCEL") hinzugefügt wurde; sw.AppendLine ("STATUS: CANCELED"); Außerdem musste ich einen weiteren MIME-Typ für die Stornierung hinzufügen System.Net.Mime.ContentType mimeType = neu System.Net.Mime.ContentType ("text/calendar; method = CANCEL"); Danke. – BTmuney

+2

@BTmuney Nachdem die Besprechung storniert wurde, löschte sie auch die Besprechung aus dem Kalender? Ich habe versucht, dies und seine Arbeit und Senden Abbrechen, aber es entfernt nicht das bestehende Treffen aus dem Kalender in Outlook. –