Ответ на запрос iCalendar с использованием DDay.iCal
Я пытаюсь ответить на приглашение на собрание, отправленное через Outlook 2013. Для этого я использую библиотеку DDay.iCal и следующий код:
public static string GenerateAppointmentResponse(Appointment importedAppointment, MeetingRequestAcceptanceType acceptanceType)
{
var iCal = new iCalendar
{
Method = "PUBLISH",
Version = "2.0",
ProductID = MyhProductIdentifier
};
var evt = iCal.Create<Event>();
switch (importedAppointment.PrivacyStatus)
{
case AppointmentPrivacyStatus.None:
evt.Class = "PRIVATE";
evt.Transparency = TransparencyType.Opaque;
break;
case AppointmentPrivacyStatus.AvailabilityOnly:
evt.Class = "PUBLIC";
evt.Transparency = TransparencyType.Transparent;
break;
case AppointmentPrivacyStatus.LimitedDetails:
evt.Class = "PUBLIC";
evt.Transparency = TransparencyType.Transparent;
break;
case AppointmentPrivacyStatus.FullDetails:
evt.Class = "PUBLIC";
evt.Transparency = TransparencyType.Transparent;
break;
default:
throw new ArgumentOutOfRangeException();
}
evt.Summary = importedAppointment.Subject;
evt.Start = new iCalDateTime(importedAppointment.Start);
evt.Duration = importedAppointment.End - importedAppointment.Start;
evt.Description = importedAppointment.Description;
evt.Location = importedAppointment.Location;
evt.IsAllDay = importedAppointment.IsAllDay == true;
evt.UID = importedAppointment.ICalendarUid;
string organizer = importedAppointment.CreatedBy ?? Environment.UserName;
if (string.IsNullOrWhiteSpace(organizer))
{
throw new Exception("The Organizer is mandatory.");
}
evt.Organizer = new Organizer(organizer);
if (!string.IsNullOrWhiteSpace(importedAppointment.RecurrenceInfo))
{
var rp = new RecurrencePattern(importedAppointment.RecurrenceInfo);
evt.RecurrenceRules.Add(rp);
}
//// REQUEST will update an existing event with the same
//// UID (Unique ID) and a newer time stamp.
//if (updatePreviousEvent)
//{
// iCal.Method = "REQUEST";
//}
string result = new iCalendarSerializer().SerializeToString(iCal);
return result;
}
Теперь при отправке сгенерированной строки ics через SMTP в альтернативном представлении собрание выглядит отправленным от исходного получателя, а не как ответ от получателя приглашения на собрание.
// Construct the calendar view
string appointmentData = CalendarHelper.GenerateAppointment(meetingRequestResponse.ImportedAppointment, meetingRequestResponse.AcceptanceType);
var appointment = new AlternateView();
appointment.SetContent(appointmentData, "text/calendar");
appointment.ContentType.Parameters.Add("method", "REQUEST");
// Construct the message
var mailMessage = new MailMessage();
mailMessage.AlternateViews.Add(appointment);
Что мне не хватает?
1 ответ
method
должен быть установлен в REPLY
и не REQUEST
или же PUBLISH
в заголовке типа контента и METHOD
Свойство iCalendar. Возможно, это не единственная проблема, но это самая очевидная проблема.
Если это не решит проблему, поделитесь фактической электронной почтой, которую вы генерируете + заголовки