مدیریت موارد تقویم Outlook

این مقاله به Outlook MapiCalendar موارد تقویم ذخیره‌شده به صورت MSG. برای کار با قرارهای iCalendar (ICS) مبتنی بر استاندارد و درخواست‌های جلسه، ببینید مدیریت ملاقات‌ها; برای ذخیره و خواندن موارد تقویم داخل یک PST، ببینید مدیریت آیتم‌های تقویم در فایل‌های PST.

Aspose.Email MapiCalendar کلاس متدها و ویژگی‌هایی را برای تنظیم خواص مختلف یک آیتم تقویم فراهم می‌کند. این بخش نمونه‌های کدی را برای موارد زیر ارائه می‌دهد:

ایجاد و ذخیره موارد تقویم

کد نمونهٔ زیر نشان می‌دهد چگونه می‌توانید یک مورد تقویم را در قالب ICS ایجاد و ذخیره کنید.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

// Create the appointment
MapiCalendar calendar = new MapiCalendar(
    "LAKE ARGYLE WA 6743",
    "Appointment",
    "This is a very important meeting :)",
    new DateTime(2012, 10, 2, 13, 0, 0),
    new DateTime(2012, 10, 2, 14, 0, 0));

calendar.Save(dataDir + "CalendarItem_out.ics", AppointmentSaveFormat.Ics);

ذخیره آیتم‌های تقویم به‌صورت فایل‌های MSG

کد نمونهٔ زیر نشان می‌دهد چگونه می‌توانید مورد تقویم را به صورت MSG ذخیره کنید.

calendar.Save(dataDir + "CalendarItemAsMSG_out.Msg", AppointmentSaveFormat.Msg);

ذخیره شناسه‌های محصول برای آیتم‌های تقویم MAPI به ICS

این ProductIdentifier ویژگی MapiCalendarIcsSaveOptions کلاس برای ذخیره یک مورد تقویم MAPI به فایل iCalendar (ICS) استفاده می‌شود به‌طوری که اطلاعات تاریخ و زمان اصلی و همچنین شناسهٔ محصول سفارشی حفظ شود. این ویژگی شناسهٔ محصولی که شیء iCalendar را ایجاد کرده است را مشخص می‌کند.

نمونه کد زیر نشان می‌دهد چگونه با داده‌های iCalendar (ICS) درون یک شیء تقویم MAPI کار کنید:

var icsSaveOptions = new MapiCalendarIcsSaveOptions
{
    KeepOriginalDateTimeStamp = true,
    ProductIdentifier = "Foo Ltd"
};

mapiCalendar.Save("my.ics", icsSaveOptions);

دریافت تعداد کل رویدادها

این CalendarReader کلاس امکان مدیریت آسان رویدادهای تقویم را فراهم می‌کند. ویژگی‌ها و یک متد زیر به شما اجازه می‌دهند با چندین رویداد کار کنید:

  • CalendarReader.Count - ویژگی Count کلاس CalendarReader به شما امکان می‌دهد تعداد اجزای Vevent (رویدادها) موجود در تقویم را بازیابی کنید و پیگیری کل تعداد رویدادها را آسان می‌سازد.
  • CalendarReader.IsMultiEvents - این ویژگی تعیین می‌کند آیا تقویم شامل چندین رویداد است یا خیر. این مقدار بولی نشان می‌دهد آیا تقویم بیش از یک رویداد دارد و به شناسایی تقویم‌های تک یا چندرویدادی کمک می‌کند.
  • CalendarReader.Method - ویژگی Method نوع متد iCalendar مرتبط با شی تقویم را به دست می‌آورد. این متد نوع متد را برمی‌گرداند، مانند “REQUEST”، “PUBLISH” یا “CANCEL”، که بینش ارزشمندی درباره هدف تقویم ارائه می‌دهد.
  • CalendarReader.Version - نسخه iCalendar را دریافت می‌کند.
  • CalendarReader.LoadAsMultiple() این متد امکان بارگذاری فهرست رویدادها از تقویمی که شامل چندین رویداد است را فراهم می‌کند. این متد یک فهرست از اشیاء Appointment را برمی‌گرداند که دسترسی و پردازش هر رویداد را به‌صورت جداگانه آسان می‌سازد.

مثال کد زیر نشان می‌دهد چگونه می‌توانید این قابلیت‌ها را در پروژه خود پیاده‌سازی کنید:

var reader = new CalendarReader(fileName);
Console.WriteLine("Calendar contains " + reader.Count + " events");
Console.WriteLine("The Version of the calendar is " + reader.Version);
Console.WriteLine("The Method of the calendar is " + reader.Method);
Console.WriteLine("Does the calendar contain multiple events? - " + reader.IsMultiEvents);
List<Appointment> appointments = reader.LoadAsMultiple();

افزودن یادآورهای نمایشی

قطعه کد زیر نشان می‌دهد چگونه یک یادآور نمایشی به تقویم اضافه کنید.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

// Create Appointment 
Appointment app = new Appointment("Home", DateTime.Now.AddHours(1), DateTime.Now.AddHours(1), "organizer@domain.com", "attendee@gmail.com");
MailMessage msg = new MailMessage();
msg.AddAlternateView(app.RequestApointment());
MapiMessage mapi = MapiMessage.FromMailMessage(msg);
MapiCalendar calendar = (MapiCalendar)mapi.ToMapiMessageItem();

// Set calendar Properties 
calendar.ReminderSet= true;
calendar.ReminderDelta = 45;//45 min before start of event

string savedFile = (dataDir + "calendarWithDisplayReminder.ics");
calendar.Save(savedFile, AppointmentSaveFormat.Ics);

افزودن یادآورهای صوتی

کد نمونهٔ زیر نشان می‌دهد چگونه می‌توانید یک یادآوری صوتی به تقویم اضافه کنید.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
Appointment app = new Appointment("Home", DateTime.Now.AddHours(1), DateTime.Now.AddHours(1), "organizer@domain.com", "attendee@gmail.com");

MailMessage msg = new MailMessage();
msg.AddAlternateView(app.RequestApointment());
MapiMessage mapi = MapiMessage.FromMailMessage(msg);
MapiCalendar calendar = (MapiCalendar)mapi.ToMapiMessageItem();

// Set calendar properties
calendar.ReminderSet = true;
calendar.ReminderDelta = 58;//58 min before start of event
calendar.ReminderFileParameter = dataDir + "Alarm01.wav";
string savedFile = (dataDir + "calendarWithAudioReminder_out.ics");
calendar.Save(savedFile, AppointmentSaveFormat.Ics);

افزودن/بازخوانی پیوست‌ها از فایل‌های تقویم

کد نمونهٔ زیر نشان می‌دهد چگونه می‌توانید پیوست‌ها را به فایل‌های تقویم اضافه/بازخوانی کنید.

string[] files = new string[3];
files[0] = dataDir + "attachment_1.doc";
files[1] = dataDir + "download.png";
files[2] = dataDir + "Desert.jpg";

Appointment app1 = new Appointment("Home", DateTime.Now.AddHours(1), DateTime.Now.AddHours(1), "organizer@domain.com", "attendee@gmail.com");
foreach (string file in files)
{
    using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(file)))
    {
        app1.Attachments.Add(new Attachment(ms, Path.GetFileName(file)));
    }
}

app1.Save(dataDir + "appWithAttachments_out.ics", AppointmentSaveFormat.Ics);

Appointment app2 = Appointment.Load(dataDir + "appWithAttachments_out.ics");
Console.WriteLine(app2.Attachments.Count);
foreach (Attachment att in app2.Attachments)
    Console.WriteLine(att.Name);

بررسی وضعیت گیرندگان در درخواست‌های جلسه

قطعه کد زیر نشان می‌دهد چگونه وضعیت گیرندگان را از یک درخواست جلسه نمایش دهید.

MapiMessage message = MapiMessage.FromFile(fileName);
foreach (MapiRecipient recipient in message.Recipients)
{
    Console.WriteLine(recipient.RecipientTrackStatus);
}

ایجاد MAPI Calendar TimeZone از Timezone استاندارد

قطعه کد زیر نشان می‌دهد چگونه MapiCalendarTimeZone را از Timezone استاندارد ایجاد کنید.

MapiCalendarTimeZone timeZone = new MapiCalendarTimeZone(TimeZoneInfo.Local);

تنظیم یادآورها برای قرارها

یک یادآوری می‌تواند هنگام ایجاد یک قرار ملاقات اضافه شود. این هشدارها می‌توانند بر اساس معیارهای مختلف مانند n دقیقه قبل از شروع برنامه، تکرار n بار با فواصل n فعال شوند. می‌توان از برچسب‌های متفاوت برای ایجاد این فعال‌کننده‌ها در اسکریپتی که بین BEGIN:VALARM و END:VALARM در یک قرار ملاقات قرار می‌گیرد، استفاده کرد. انواع مختلفی برای تنظیم یادآوری روی یک قرار ملاقات وجود دارد.

افزودن برچسب برای تنظیم یادآورها

کد نمونهٔ زیر نشان می‌دهد چگونه می‌توانید یادآوری را با افزودن برچسب‌ها تنظیم کنید.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

string location = "Meeting Location: Room 5";
DateTime startDate = new DateTime(1997, 3, 18, 18, 30, 00),
endDate = new DateTime(1997, 3, 18, 19, 30, 00);
MailAddress organizer = new MailAddress("aaa@amail.com", "Organizer");
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add(new MailAddress("bbb@bmail.com", "First attendee"));

Appointment target = new Appointment(location, startDate, endDate, organizer, attendees);

// Audio alarm that will sound at a precise time and
// Repeat 4 more times at 15 minute intervals:
AppointmentReminder audioReminder = new AppointmentReminder();
audioReminder.Trigger = new ReminderTrigger(new DateTime(1997, 3, 17, 13, 30, 0, DateTimeKind.Utc));
audioReminder.Repeat = 4;
audioReminder.Duration = new ReminderDuration(new TimeSpan(0, 15, 0));
audioReminder.Action = ReminderAction.Audio;
ReminderAttachment attach = new ReminderAttachment(new Uri("ftp://Host.com/pub/sounds/bell-01.aud"));
audioReminder.Attachments.Add(attach);
target.Reminders.Add(audioReminder);


// Display alarm that will trigger 30 minutes before the
// Scheduled start of the event it is
// Associated with and will repeat 2 more times at 15 minute intervals:
AppointmentReminder displayReminder = new AppointmentReminder();
ReminderDuration dur = new ReminderDuration(new TimeSpan(0, -30, 0));
displayReminder.Trigger = new ReminderTrigger(dur, ReminderRelated.Start);
displayReminder.Repeat = 2;
displayReminder.Duration = new ReminderDuration(new TimeSpan(0, 15, 0));
displayReminder.Action = ReminderAction.Display;
displayReminder.Description = "Breakfast meeting with executive team at 8:30 AM EST";
target.Reminders.Add(displayReminder);

// Email alarm that will trigger 2 days before the
// Scheduled due date/time. It does not
// Repeat. The email has a subject, body and attachment link.
AppointmentReminder emailReminder = new AppointmentReminder();
ReminderDuration dur1 = new ReminderDuration(new TimeSpan(-2, 0, 0, 0));
emailReminder.Trigger = new ReminderTrigger(dur1, ReminderRelated.Start);
ReminderAttendee attendee = new ReminderAttendee("john_doe@host.com");
emailReminder.Attendees.Add(attendee);
emailReminder.Action = ReminderAction.Email;
emailReminder.Summary = "REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING";
emailReminder.Description = @"A draft agenda needs to be sent out to the attendees to the weekly managers meeting (MGR-LIST). Attached is a pointer the document template for the agenda file.";
ReminderAttachment attach1 = new ReminderAttachment(new Uri("http://Host.com/templates/agenda.doc"));
emailReminder.Attachments.Add(attach1);
target.Reminders.Add(emailReminder);

// Procedural alarm that will trigger at a precise date/time
// And will repeat 23 more times at one hour intervals. The alarm will
// Invoke a procedure file.
AppointmentReminder procReminder = new AppointmentReminder();
procReminder.Trigger = new ReminderTrigger(new DateTime(1998, 1, 1, 5, 0, 0, DateTimeKind.Utc));
procReminder.Repeat = 23;
procReminder.Duration = new ReminderDuration(new TimeSpan(1, 0, 0));
procReminder.Action = ReminderAction.Procedure;
ReminderAttachment attach2 = new ReminderAttachment(new Uri("ftp://Host.com/novo-procs/felizano.exe"));
procReminder.Attachments.Add(attach2);
target.Reminders.Add(procReminder);
target.Save(dataDir + "savedFile_out.ics");

تبدیل Appointment EML به MSG با بدنهٔ HTML

از نسخهٔ 19.3 به بعد، Aspose.Email امکان تبدیل Appointment EML به MSG را فراهم می‌کند در حالی که بدنهٔ HTML قرار ملاقات حفظ می‌شود. Aspose.Email یک MapiConversionOptions.ForcedRtfBodyForAppointment خاصیتی که مقدار پیش‌فرض آن true. است. وقتی مقدار MapiConversionOptions.ForcedRtfBodyForAppointment اگر به true تنظیم شود، بدنهٔ قرار ملاقات به قالب RTF تبدیل می‌شود. برای حفظ قالب بدنهٔ قرار ملاقات به فرمت HTML، مقدار MapiConversionOptions.ForcedRtfBodyForAppointment به false.

مثال زیر نحوه استفاده از MapiConversionOptions.ForcedRtfBodyForAppointment خاصیتی برای حفظ قالب بدنه قرار ملاقات به فرمت HTML.

// Outlook directory
string dataDir = RunExamples.GetDataDir_Outlook();

MailMessage mailMessage = MailMessage.Load(dataDir + "TestAppointment.eml");

MapiConversionOptions conversionOptions = new MapiConversionOptions();
conversionOptions.Format = OutlookMessageFormat.Unicode;

// default value for ForcedRtfBodyForAppointment is true
conversionOptions.ForcedRtfBodyForAppointment = false;

MapiMessage mapiMessage = MapiMessage.FromMailMessage(mailMessage, conversionOptions);

Console.WriteLine("Body Type: " + mapiMessage.BodyType);

mapiMessage.Save(dataDir + "TestAppointment_out.msg");

تنظیم دستی حالت آیتم‌های تقویم MAPI

حالت یک شی MAPI Calendar را به‌صورت صریح تنظیم کنید تا رفتار پیش‌فرض را نادیده بگیرید. این امکان کنترل بهتر بر وضعیت رویدادهای تقویم را به‌ویژه هنگام پردازش درخواست‌های جلسه دریافت‌شده فراهم می‌کند. به‌طور پیش‌فرض، وقتی یک جلسه ایجاد می‌شود، حالت آن MapiCalendarState.Meeting. وقتی در صندوق ورودی گیرنده دریافت می‌شود، به‌صورت خودکار تغییر می‌یابد به MapiCalendarState.Received، و کلاس پیام آن به “IPM.Schedule.Meeting.Request” به‌روز می‌شود. با استفاده از SetStateForced به‌صورت دستی امکان تنظیم حالت به Received را فراهم می‌کند، که می‌تواند برای حفظ اطلاعات برنامه‌ریز هنگام ذخیره تقویم به‌عنوان فایل MSG مفید باشد. با این حال، ممکن است از ارسال مجدد یا فوروارد مناسب جلسه جلوگیری کند.

نمونه کد زیر نشان می‌دهد چگونه یک … ایجاد کنید MapiCalendar شی، یک برنامه‌ریز اختصاص دهید و به‌طور صریح حالت آن را به هر دو تنظیم کنید Meeting و Received با استفاده از SetStateForced. سپس آیتم تقویم را به‌صورت فایل .msg ذخیره می‌کند.

MapiCalendar appointment = new MapiCalendar(
    "LAKE ARGYLE WA 6743",
    "Appointment",
    "This is a very important meeting :)",
    new DateTime(2024, 5, 10, 12, 30, 0, DateTimeKind.Utc),
    new DateTime(2024, 5, 10, 13, 30, 0, DateTimeKind.Utc));

appointment.Organizer = new MapiElectronicAddress
{
    EmailAddress = "test@aaa.com",
    DisplayName = "test display Name"
};

appointment.SetStateForced(MapiCalendarState.Meeting | MapiCalendarState.Received);

appointment.Save("appointment.msg", AppointmentSaveFormat.Msg);

همچنین ببینید