Работа с Повторами

Contents
[ ]

Работа с Ежедневными Повторами

Aspose.Email поддерживает создание ежедневных повторов с использованием MapiCalendarDailyRecurrencePattern. Можно использовать три разных типа окончания повторов календаря Mapi, включая EndAfterNOccurrences, EndAfterDate и NeverEnd. Этот раздел демонстрирует создание различных типов ежедневного повтора.

Ежедневные Повторы: Тип Повтора EndAfterNOccurrence

В этом типе повтора количество повторов устанавливается вместе с другой информацией следующим образом:

  1. Установите дату начала, окончания и выполнения.
  2. Создайте MapiTask.
  3. Установите состояние задачи на NotAssigned.
  4. Создайте объект ежедневного повтора, задав такие свойства, как PatternType, Period, WeekStartDay, EndType и OccurenceCount.
  5. Установите свойство MapiTask.Recurrence на этот объект ежедневного повтора.
  6. Сохраните это сообщение на диске.

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan timeSpan = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 16);
StartDate = StartDate.Add(timeSpan);
DateTime DueDate = new DateTime(2015, 7, 16);
DateTime endByDate = new DateTime(2015, 8, 1);
DueDate = DueDate.Add(timeSpan);
endByDate = endByDate.Add(timeSpan);
MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;
// Set the Daily recurrence
var rec = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 1,
WeekStartDay = DayOfWeek.Sunday,
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=DAILY"),
};
if (rec.OccurrenceCount==0)
{
rec.OccurrenceCount = 1;
}
task.Recurrence = rec;
task.Save(dataDir + "Daily_out.msg", TaskSaveFormat.Msg);

Следующая функция может быть использована для вычисления количества событий между двумя датами:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
private static uint GetOccurrenceCount(DateTime start, DateTime endBy, string rrule)
{
Aspose.iCalendar.RecurrencePattern pattern = new Aspose.iCalendar.RecurrencePattern(string.Format("DTSTART:{0}\r\nRRULE:{1}", start.ToString("yyyyMMdd"),rrule));
Aspose.iCalendar.DateCollection dates = pattern.GenerateOccurrences(start, endBy);
return (uint)dates.Count;
}

Установка значения количества повторов

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 1,
WeekStartDay = DayOfWeek.Sunday,
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
OccurrenceCount = 5,
};
task.Recurrence = record;

Ежедневные Повторы: Тип Повтора EndAfterDate

Опция “End By” в Mapi Task достигается путем установки свойства OccurrenceCount, рассчитанного с помощью функции GetOccurrenceCount(). Эта функция принимает дату начала, дату окончания и строку RRULE.

Ежедневные Повторы: Установка значения Каждый День

Следующий фрагмент кода показывает, как установить значение периода на 1 и значение INTERVAL на 1 в строке RRULE.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 1,
EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=DAILY;INTERVAL=1"),
EndDate = endByDate
};

Значение Каждый День можно установить на любое подходящее значение, как показано в следующем примере:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 2,
EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=DAILY;INTERVAL=2"),
};

Ежедневные Повторы: Тип Повтора NeverEnd

Тип окончания можно установить, используя MapiCalendarRecurrenceEndType.NeverEnd. Период или INTERVAL можно установить на требуемое значение, скажем 1, в следующем примере.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 1,
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};

Работа с Еженедельными Повторами

Aspose.Email предоставляет богатые возможности для создания еженедельных повторов с использованием MapiCalendarWeeklyRecurrencePattern. Можно использовать три разных типа окончания повторов календаря Mapi, включая EndAfterNOccurrences, EndAfterDate и NeverEnd. Этот раздел демонстрирует создание различных типов еженедельного повтора.

Еженедельные Повторы: Тип Повтора EndAfterNOccurrences

В этом типе повтора количество повторов устанавливается вместе с другой информацией следующим образом:

  1. Установите дату начала, окончания и выполнения.
  2. Создайте MapiTask.
  3. Установите состояние задачи на NotAssigned.
  4. Создайте объект еженедельного повтора, задав такие свойства, как PatternType, Period, WeekStartDay, EndType и OccurenceCount.
  5. Установите свойство MapiTask.Recurrence на этот объект еженедельного повтора.
  6. Сохраните это сообщение на диске.

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan ts = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 16);
StartDate = StartDate.Add(ts);
DateTime DueDate = new DateTime(2015, 7, 16);
DateTime endByDate = new DateTime(2015, 9, 1);
DueDate = DueDate.Add(ts);
endByDate = endByDate.Add(ts);
MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;
// Set the weekly recurrence
var rec = new MapiCalendarWeeklyRecurrencePattern
{
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
PatternType = MapiCalendarRecurrencePatternType.Week,
Period = 1,
WeekStartDay = DayOfWeek.Sunday,
DayOfWeek = MapiCalendarDayOfWeek.Friday,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR"),
};
if (rec.OccurrenceCount == 0)
{
rec.OccurrenceCount = 1;
}
task.Recurrence = rec;
task.Save(dataDir + "Weekly_out.msg", TaskSaveFormat.Msg);

Следующая функция может быть использована для вычисления количества событий между двумя датами:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
private static uint GetOccurrenceCount(DateTime start, DateTime endBy, string rrule)
{
CalendarRecurrence pattern = new CalendarRecurrence(string.Format("DTSTART:{0}\r\nRRULE:{1}", start.ToString("yyyyMMdd"),rrule));
DateCollection dates = pattern.GenerateOccurrences(start, endBy);
return (uint)dates.Count;
}

Выбор нескольких дней в неделю

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the weekly recurrence
var rec = new MapiCalendarWeeklyRecurrencePattern
{
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
PatternType = MapiCalendarRecurrencePatternType.Week,
Period = 1,
WeekStartDay = DayOfWeek.Sunday,
DayOfWeek = MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO"),
};

Выбор нескольких дней в неделю и установка интервалов

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the weekly recurrence
var rec = new MapiCalendarWeeklyRecurrencePattern
{
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
PatternType = MapiCalendarRecurrencePatternType.Week,
Period = 2,
WeekStartDay = DayOfWeek.Sunday,
DayOfWeek = MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO;INTERVAL=2"),
};

Еженедельные Повторы: Тип Повтора EndAfterDate

Опция “End By” в Mapi Task достигается путем установки свойства OccurrenceCount, рассчитанного с помощью функции GetOccurrenceCount(). Эта функция принимает дату начала, дату окончания и строку RRULE.

Еженедельные Повторы: Установка значения Каждый День

Следующий фрагмент кода показывает, как установить значение периода на 1 и значение INTERVAL на 1 в строке RRULE.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the weekly recurrence
var rec = new MapiCalendarWeeklyRecurrencePattern
{
EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
PatternType = MapiCalendarRecurrencePatternType.Week,
Period = 1,
WeekStartDay = DayOfWeek.Sunday,
DayOfWeek = MapiCalendarDayOfWeek.Friday,
EndDate = endByDate,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR;INTERVAL=1"),
};

Значение Каждый День можно установить на любое подходящее значение, и можно выбрать несколько дней, как показано в следующем примере:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
var record = new MapiCalendarWeeklyRecurrencePattern
{
EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
PatternType = MapiCalendarRecurrencePatternType.Week,
Period = 2,
WeekStartDay = DayOfWeek.Sunday,
EndDate = endByDate,
DayOfWeek = MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO;INTERVAL=2"),
};

Еженедельные Повторы: Тип Повтора NeverEnd

Тип окончания можно установить, используя MapiCalendarRecurrenceEndType.NeverEnd. Период или INTERVAL можно установить на требуемое значение, скажем 1, в следующем примере.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the weekly recurrence
var recurrence = new MapiCalendarWeeklyRecurrencePattern
{
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
PatternType = MapiCalendarRecurrencePatternType.Week,
Period = 1,
WeekStartDay = DayOfWeek.Sunday,
DayOfWeek = MapiCalendarDayOfWeek.Friday,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR"),
};

Работа с Ежемесячными Повторами

Aspose.Email поддерживает создание ежемесячных повторов с использованием MapiCalendarMonthlyRecurrencePattern. Можно использовать три разных типа окончания повторов календаря Mapi, включая EndAfterNOccurrences, EndAfterDate и NeverEnd. Этот раздел демонстрирует создание различных типов ежемесячного повтора.

Ежемесячные Повторы: Тип Повтора EndAfterNOccurrences

В этом типе повтора количество повторов устанавливается вместе с другой информацией следующим образом:

  1. Установите дату начала, окончания и выполнения.
  2. Создайте MapiTask.
  3. Установите состояние задачи на NotAssigned.
  4. Создайте объект ежемесячного повтора, задав такие свойства, как PatternType, Period, WeekStartDay, EndType и OccurenceCount.
  5. Установите свойство MapiTask.Recurrence на этот объект ежемесячного повтора.
  6. Сохраните это сообщение на диске.

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan ts = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 16);
StartDate = StartDate.Add(ts);
DateTime DueDate = new DateTime(2015, 7, 16);
DateTime endByDate = new DateTime(2015, 12, 31);
DueDate = DueDate.Add(ts);
endByDate = endByDate.Add(ts);
MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;
// Set the Monthly recurrence
var rec = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 1,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=MONTHLY;BYMONTHDAY=15;INTERVAL=1"),
WeekStartDay = DayOfWeek.Monday,
};
if (rec.OccurrenceCount == 0)
{
rec.OccurrenceCount = 1;
}
task.Recurrence = rec;
//task.Save(dataDir + "Monthly_out.msg", TaskSaveFormat.Msg);

Следующая функция может быть использована для вычисления количества событий между двумя датами:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
private static uint GetOccurrenceCount(DateTime start, DateTime endBy, string rrule)
{
CalendarRecurrence pattern = new CalendarRecurrence(string.Format("DTSTART:{0}\r\nRRULE:{1}", start.ToString("yyyyMMdd"), rrule));
DateCollection dates = pattern.GenerateOccurrences(start, endBy);
return (uint)dates.Count;
}

Установка фиксированного количества повторений

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the Monthly recurrence
var records = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 1,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
OccurrenceCount = 5,
WeekStartDay = DayOfWeek.Monday
};

Ежемесячные Повторы: Тип Повтора EndAfterDate

Опция “End By” в Mapi Task достигается путем установки свойства OccurrenceCount, рассчитанного с помощью функции GetOccurrenceCount(). Эта функция принимает дату начала, дату окончания и строку RRULE. Следующий фрагмент кода показывает, как создать повтор 15-го числа каждого месяца между начальной и конечной датами.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan ts = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 1);
StartDate = StartDate.Add(ts);
DateTime DueDate = new DateTime(2015, 7, 1);
DateTime endByDate = new DateTime(2015, 12, 31);
DueDate = DueDate.Add(ts);
endByDate = endByDate.Add(ts);
MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;
// Set the Monthly recurrence
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 1,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=MONTHLY;BYMONTHDAY=15;INTERVAL=1"),
WeekStartDay = DayOfWeek.Monday,
EndDate = endByDate
};
task.Recurrence = recurrence;
//task.Save(dataDir + "SetMonthlyEndAfterDateRecurrence_out.msg", TaskSaveFormat.Msg);

Ежемесячные Повторы: Тип Повтора NeverEnd

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 1,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
WeekStartDay = DayOfWeek.Monday,
};

Работа с Ежегодными Повторами

Aspose.Email поддерживает создание ежегодных повторов с использованием MapiCalendarMonthlyRecurrencePattern. Установив свойство периода на 12, мы можем достичь шаблона ежегодного повтора. Можно использовать три разных типа окончания повторов календаря Mapi, включая EndAfterNOccurrences, EndAfterDate и NeverEnd. Этот раздел демонстрирует создание различных типов ежегодного повтора.

Ежегодные Повторы: Тип Повтора EndAfterNOccurrences

В этом типе повтора количество повторов устанавливается вместе с другой информацией следующим образом:

  1. Установите дату начала, окончания и выполнения.
  2. Создайте MapiTask.
  3. Установите состояние задачи на NotAssigned.
  4. Создайте объект ежемесячного повтора, задав такие свойства, как PatternType, Period, WeekStartDay, EndType и OccurenceCount.
  5. Установите свойство MapiTask.Recurrence на этот объект ежемесячного повтора для достижения ежегодного повтора.
  6. Сохраните это сообщение на диске.

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan ts = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 1);
StartDate = StartDate.Add(ts);
DateTime DueDate = new DateTime(2015, 7, 1);
DateTime endByDate = new DateTime(2020, 12, 31);
DueDate = DueDate.Add(ts);
endByDate = endByDate.Add(ts);
MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;
// Set the Yearly recurrence
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 12,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
OccurrenceCount = 3,
};
task.Recurrence = recurrence;
task.Save("Yearly.msg", TaskSaveFormat.Msg);

Ежегодные Повторы: Тип Повтора EndAfterDate

Опция “End By” в Mapi Task достигается путем установки свойства OccurrenceCount, рассчитанного с помощью функции GetOccurrenceCount(). Эта функция принимает дату начала, дату окончания и строку RRULE. Следующий фрагмент кода показывает, как создать повтор 15-го числа каждого 7-го месяца между начальной и конечной датами.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the Yearly recurrence
var rec = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 12,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
EndDate = endByDate,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=YEARLY;BYMONTHDAY=15;BYMONTH=7;INTERVAL=1"),
};
task.Recurrence = rec;

Ежегодные Повторы: Тип Повтора NeverEnd

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

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Set the Yearly recurrence
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 12,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};

Генерация Повтора из Правила Повтора

API Aspose.Email предоставляет возможность генерировать Шаблон Повтора из Правила Повтора (RRULE). Он анализирует информацию из RRULE в соответствии со спецификациями iCal RFC 5545 и генерирует шаблон повтора с использованием метода MapiCalendarRecurrencePatternFactory.FromString. Следующий фрагмент кода показывает, как сгенерировать шаблон повтора из правила повтора.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
DateTime startDate = new DateTime(2015, 7, 16);
DateTime endDate = new DateTime(2015, 8, 1);
MapiCalendar app1 = new MapiCalendar("test location", "test summary", "test description", startDate, endDate);
app1.StartDate = startDate;
app1.EndDate = endDate;
string pattern = "DTSTART;TZID=Europe/London:20150831T080000\r\nDTEND;TZID=Europe/London:20150831T083000\r\nRRULE:FREQ=DAILY;INTERVAL=1;COUNT=7\r\nEXDATE:20150831T070000Z,20150904T070000Z";
app1.Recurrence.RecurrencePattern = MapiCalendarRecurrencePatternFactory.FromString(pattern);

Добавление Вложений к Повторяющимся Календарным Событиям

API Aspose.Email предоставляет возможность добавлять вложения к повторяющимся календарным событиям.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
DateTime startDate = new DateTime(2018, 7, 19).AddHours(12);
MapiCalendar calendar = new MapiCalendar("location1", "summary1", "description1", startDate, startDate.AddHours(1));
MapiCalendarEventRecurrence recurrence = new MapiCalendarEventRecurrence();
MapiCalendarRecurrencePattern pattern = recurrence.RecurrencePattern = new MapiCalendarDailyRecurrencePattern();
pattern.PatternType = MapiCalendarRecurrencePatternType.Day;
pattern.Period = 1;
pattern.EndType = MapiCalendarRecurrenceEndType.NeverEnd;
DateTime exceptionDate = startDate.AddDays(3);
MapiCalendarExceptionInfo exception = new MapiCalendarExceptionInfo
{
Location = "exceptionLoc",
Subject = "exceptionSubj",
Body = "exceptionBody",
OriginalStartDate = exceptionDate,
StartDateTime = exceptionDate,
EndDateTime = exceptionDate.AddHours(5),
Attachments = new MapiAttachmentCollection(calendar)
};
exception.Attachments.Add("file.txt", Encoding.ASCII.GetBytes("hello, world!"));
pattern.Exceptions.Add(exception);
pattern.ModifiedInstanceDates.Add(exceptionDate);
pattern.DeletedInstanceDates.Add(exceptionDate);
calendar.Recurrence = recurrence;
using (var newPst = PersonalStorage.Create(dataDir + "AddAttachmentToMapiExceptionInfo.pst", FileFormatVersion.Unicode))
{
var newFolder = newPst.CreatePredefinedFolder("Calendar", StandardIpmFolder.Appointments);
newFolder.AddMapiMessageItem(calendar);
}