반복 관리

일일 반복 작업

Aspose.Email는 MapiCalendarDailyRecurrencePattern을 사용한 일일 반복 생성을 지원합니다. EndAfterNOccurrences, EndAfterDate 및 NeverEnd를 포함한 세 가지 다른 Mapi 캘린더 반복 종료 유형을 사용할 수 있습니다. 이 섹션에서는 다양한 일일 반복 패턴의 생성을 보여줍니다.

발생 횟수가 있는 일일 반복

이 유형의 반복에서는 다음과 같이 다른 정보와 함께 반복 횟수를 설정해야 합니다:

  1. 시작, 종료 및 마감 날짜를 설정합니다.
  2. MapiTask를 생성합니다.
  3. 작업 상태를 NotAssigned로 설정합니다.
  4. PatternType, Period, WeekStartDay, EndType 및 OccurenceCount와 같은 속성을 설정하여 일일 반복 객체를 생성합니다.
  5. MapiTask.Recurrence 속성을 이 일일 반복 객체로 설정합니다.
  6. 이 메시지를 디스크에 저장합니다.

다음 코드 스니펫은 반복 종료 유형을 EndAfterNOccurrence로 설정한 작업을 만드는 방법을 보여줍니다.

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

다음 함수를 사용하여 두 날짜 사이의 이벤트 수를 계산할 수 있습니다:

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

발생 횟수 값 설정

다음 코드 스니펏은 발생 횟수 값을 설정하는 방법을 보여줍니다.

// 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" 옵션은 GetOccurrenceCount() 함수에 의해 계산된 OccurrenceCount 속성을 설정함으로써 Mapi 작업에서 구현됩니다. 이 함수는 시작 날짜, 종료 날짜 및 RRULE 문자열을 입력으로 받습니다.

일일 반복: 매일 값 설정

다음 코드 스니펏은 RRULE 문자열에서 period 값을 1, INTERVAL 값을 1로 설정하는 방법을 보여줍니다.

// 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
};

Every Day 값은 아래 예시와 같이 적절한 값으로 설정할 수 있습니다:


// 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를 사용하여 설정할 수 있습니다. 아래 예제에서는 Period 또는 INTERVAL을 필요한 값(예: 1)으로 설정합니다.

// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
    PatternType = MapiCalendarRecurrencePatternType.Day,
    Period = 1,
    EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};

주간 반복 작업

Aspose.Email는 MapiCalendarWeeklyRecurrencePattern을 사용한 주간 반복 생성을 위한 풍부한 기능을 제공합니다. EndAfterNOccurrences, EndAfterDate 및 NeverEnd를 포함한 세 가지 Mapi 캘린더 반복 종료 유형을 사용할 수 있습니다. 이 섹션에서는 다양한 주간 반복 패턴의 생성을 보여줍니다.

주간 반복: EndAfterNOccurrences 종료 유형

이 유형의 반복에서는 다음과 같이 다른 정보와 함께 반복 횟수를 설정해야 합니다:

  1. 시작, 종료 및 마감 날짜를 설정합니다.
  2. MapiTask를 생성합니다.
  3. 작업 상태를 NotAssigned로 설정합니다.
  4. PatternType, Period, WeekStartDay, EndType 및 OccurenceCount와 같은 속성을 설정하여 주간 반복 객체를 생성합니다.
  5. MapiTask.Recurrence 속성을 이 주간 반복 객체로 설정합니다.
  6. 이 메시지를 디스크에 저장합니다.

다음 코드 스니펫은 종료 유형이 EndAfterNOccurrence인 작업을 생성하는 방법을 보여줍니다.

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

다음 함수를 사용하여 두 날짜 사이의 이벤트 수를 계산할 수 있습니다:

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

한 주에서 여러 요일 선택

다음 코드 스니펏은 한 주에서 여러 요일을 선택하는 방법을 보여줍니다.

// 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"),
};

한 주에서 여러 요일 선택 및 간격 설정

다음 코드 스니펏은 한 주에서 여러 요일을 선택하고 간격을 설정하는 방법을 보여줍니다.

// 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" 옵션은 GetOccurrenceCount() 함수에 의해 계산된 OccurrenceCount 속성을 설정함으로써 Mapi 작업에서 구현됩니다. 이 함수는 시작 날짜, 종료 날짜 및 RRULE 문자열을 입력으로 받습니다.

주간 반복: 매일 값 설정

다음 코드 스니펏은 RRULE 문자열에서 period 값을 1, INTERVAL 값을 1로 설정하는 방법을 보여줍니다.

// 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"),
};

Every Day 값은 적절한 값으로 설정할 수 있으며, 아래 예시와 같이 여러 요일을 선택할 수 있습니다:

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를 사용하여 설정할 수 있습니다. 아래 예제에서는 Period 또는 INTERVAL을 필요한 값(예: 1)으로 설정합니다.

// 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을 사용한 월간 반복 생성을 지원합니다. EndAfterNOccurrences, EndAfterDate 및 NeverEnd를 포함한 세 가지 Mapi 캘린더 반복 종료 유형을 사용할 수 있습니다. 이 섹션에서는 다양한 월간 반복 패턴의 생성을 보여줍니다.

월간 반복: EndAfterNOccurrences 종료 유형

이 유형의 반복에서는 다음과 같이 다른 정보와 함께 반복 횟수를 설정해야 합니다:

  1. 시작, 종료 및 마감 날짜를 설정합니다.
  2. MapiTask를 생성합니다.
  3. 작업 상태를 NotAssigned로 설정합니다.
  4. PatternType, Period, WeekStartDay, EndType 및 OccurenceCount와 같은 속성을 설정하여 월간 반복 객체를 생성합니다.
  5. MapiTask.Recurrence 속성을 이 월간 반복 객체로 설정합니다.
  6. 이 메시지를 디스크에 저장합니다.

다음 코드 스니펫은 종료 유형이 EndAfterNOccurrence인 작업을 생성하는 방법을 보여줍니다.

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

다음 함수를 사용하여 두 날짜 사이의 이벤트 수를 계산할 수 있습니다:

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

고정 발생 횟수 설정

다음 코드 스니펫은 고정된 발생 횟수를 설정하는 방법을 보여줍니다.

// 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" 옵션은 GetOccurrenceCount() 함수에 의해 계산된 OccurrenceCount 속성을 설정함으로써 Mapi 작업에서 구현됩니다. 이 함수는 시작 날짜, 종료 날짜 및 RRULE 문자열을 입력으로 받습니다. 다음 코드 스니펫은 시작 및 종료 날짜 사이에 매월 15일에 반복을 생성하는 방법을 보여줍니다.

// 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를 사용하여 종료 유형을 설정하는 방법을 보여줍니다.

var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
    Day = 15,
    Period = 1,
    PatternType = MapiCalendarRecurrencePatternType.Month,
    EndType = MapiCalendarRecurrenceEndType.NeverEnd,
    WeekStartDay = DayOfWeek.Monday,
};

연간 반복 작업

Aspose.Email는 MapiCalendarMonthlyRecurrencePattern을 사용한 연간 반복 생성을 지원합니다. period 속성을 12로 설정하면 연간 반복 패턴을 구현할 수 있습니다. EndAfterNOccurrences, EndAfterDate 및 NeverEnd를 포함한 세 가지 Mapi 캘린더 반복 종료 유형을 사용할 수 있습니다. 이 섹션에서는 다양한 연간 반복 패턴의 생성을 보여줍니다.

연간 반복: EndAfterNOccurrences 종료 유형

이 유형의 반복에서는 다음과 같이 다른 정보와 함께 반복 횟수를 설정해야 합니다:

  1. 시작, 종료 및 마감 날짜를 설정합니다.
  2. MapiTask를 생성합니다.
  3. 작업 상태를 NotAssigned로 설정합니다.
  4. PatternType, Period, WeekStartDay, EndType 및 OccurenceCount와 같은 속성을 설정하여 월간 반복 객체를 생성합니다.
  5. MapiTask.Recurrence 속성을 이 월간 반복 객체로 설정하여 연간 반복을 구현합니다.
  6. 이 메시지를 디스크에 저장합니다.

다음 코드 스니펫은 종료 유형이 EndAfterNOccurrence인 작업을 생성하는 방법을 보여줍니다.


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" 옵션은 GetOccurrenceCount() 함수에 의해 계산된 OccurrenceCount 속성을 설정함으로써 Mapi 작업에서 구현됩니다. 이 함수는 시작 날짜, 종료 날짜 및 RRULE 문자열을 입력으로 받습니다. 다음 코드 스니펫은 시작 및 종료 날짜 사이에 매 7개월마다 15일에 반복을 생성하는 방법을 보여줍니다.

// 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를 사용하여 종료 유형을 설정하는 방법을 보여줍니다.

// Set the Yearly recurrence
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
    Day = 15,
    Period = 12,
    PatternType = MapiCalendarRecurrencePatternType.Month,
    EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};            

반복 규칙에서 반복 생성

Aspose.Email API는 Recurrence Rule(RRULE)에서 반복 패턴을 생성하는 기능을 제공합니다. 이 API는 RFC 5545 iCal 규격에 따라 RRULE을 파싱하고 MapiCalendarRecurrencePatternFactory.FromString 메서드를 사용해 반복 패턴을 생성합니다. 다음 코드 스니펫은 RRULE로부터 반복 패턴을 생성하는 방법을 보여줍니다.

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

반복 캘린더 이벤트에 첨부 파일 추가

Aspose.Email API는 반복 캘린더 이벤트에 첨부 파일을 추가하는 기능을 제공합니다.

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