إدارة المواعيد: الإنشاء والمعالجة، تحويل ICS إلى MSG

إنشاء موعد وحفظه على القرص بصيغة MSG أو ICS

الـ Appointment يمكن استخدام الفئة في Aspose.Email for .NET لإنشاء موعد جديد. في هذا المقال، ننشئ أولاً موعدًا ونحفظه على القرص بصيغة ICS. الخطوات التالية مطلوبة لإنشاء موعد وحفظه على القرص.

  1. إنشاء مثيل من الـ Appointment الفئة وتهيئتها باستخدام هذا المُنشئ.
  2. مرّر المتغيّرات التالية في المُنشئ أعلاه
    1. الموقع
    2. الملخص
    3. الوصف
    4. تاريخ البدء
    5. تاريخ الانتهاء
    6. المنظم
    7. الحضور
  3. استدعِ الـ Save() الطريقة وتحديد اسم الملف والتنسيق في المتغيرات.

يمكن فتح الموعد في Microsoft Outlook أو أي برنامج يمكنه تحميل ملف ICS. إذا تم فتح الملف في Microsoft Outlook، يضيف الموعد تلقائيًا إلى تقويم Outlook.

يوضح المقتطف البرمجي التالي كيفية إنشاء وحفظ موعد على القرص بصيغة ICS أو MSG.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET

// Create and initialize an instance of the Appointment class
Appointment appointment = new Appointment(
    "Meeting Room 3 at Office Headquarters",// Location
    "Monthly Meeting",                      // Summary
    "Please confirm your availability.",    // Description
    new DateTime(2015, 2, 8, 13, 0, 0),     // Start date
    new DateTime(2015, 2, 8, 14, 0, 0),     // End date
    "from@domain.com",                      // Organizer
    "attendees@domain.com");                // Attendees

// Save the appointment to disk in ICS format            
appointment.Save(fileName + ".ics", new AppointmentIcsSaveOptions());
Console.WriteLine("Appointment created and saved to disk successfully.");

// Save the appointment to disk in MSG format
appointment.Save(fileName + ".msg", new AppointmentMsgSaveOptions(););
Console.WriteLine("Appointment created and saved to disk successfully.");

إنشاء موعد بمحتوى HTML

يمكنك تحديد تمثيلات بديلة لوصف الحدث بأنواع محتوى مختلفة باستخدام رأس X-ALT-DESC. يسمح ذلك لمستلمي ملف iCalendar باختيار التمثيل الأنسب لاحتياجاتهم. على سبيل المثال، يمكنك تضمين وصف نصي بسيط باستخدام نوع المحتوى "text/plain" ووصف HTML باستخدام نوع المحتوى "text/html". يُضاف رأس X-ALT-DESC لكل تمثيل بديل. لإنشاء موعد بمحتوى HTML، اضبط الـ HtmlDescription خاصية.

جرّب مثال الشيفرة التالي لإنشاء موعد مع وصف HTML بديل:

  1. أنشئ نسخة جديدة من فئة Appointment.
  2. قدم المعاملات اللازمة إلى منشئ الفئة Appointment:
    • حدد موقع الموعد.
    • اضبط تاريخ ووقت البدء.
    • اضبط تاريخ ووقت النهاية.
    • حدد المنظم.
    • حدد الحضور.
  3. اضبط HtmlDescription خاصية لكائن الموعد، تشير إلى أن الوصف بتنسيق HTML.
  4. اضبط خاصية Description لكائن الموعد إلى سلسلة منسقة بـ HTML، محاطة بسلسلة متعددة الأسطر:
    • يتضمن ترميز HTML كتلة <style> تُعرّف فئة CSS باسم "text" مع أنماط الخط.
    • يحتوي جسم HTML على علامة الفقرة <p> مع فئة CSS "text"، والرسالة الفعلية للدعوة.
  5. كائن الموعد جاهز الآن، ويمكنك إجراء عمليات إضافية أو حفظه كملف iCalendar.
var appointment = new Appointment("Bygget 83",
    DateTime.UtcNow, // start date
    DateTime.UtcNow.AddHours(1), // end date
    new MailAddress("TintinStrom@from.com", "Tintin Strom"), // organizer
    new MailAddress("AinaMartensson@to.com", "Aina Martensson")) // attendee
{
    HtmlDescription = @"
    <html>
     <style type=""text/css"">
      .text {
             font-family:'Comic Sans MS';
             font-size:16px;
            }
     </style>
    <body>
     <p class=""text"">Hi, I'm happy to invite you to our party.</p>
    </body>
    </html>"
};

إنشاء طلب موعد مسودة

تم توضيح في مقالاتنا السابقة كيفية إنشاء وحفظ موعد بصيغة ICS. غالبًا ما يُطلب إنشاء طلب موعد في وضع مسودة، بحيث تُضاف المعلومات الأساسية ثم يتم توجيه نفس طلب الموعد المسودة إلى مستخدمين آخرين لإجراء التغييرات اللازمة وفقًا للاستخدامات الفردية. لتخزين موعد في وضع مسودة، يجب على MethodType خاصية من فئة Appointment يجب ضبطها إلى AppointmentMethodType.Publish. يوضح المقتطف البرمجي التالي كيفية إنشاء طلب موعد مسودة.

string sender = "test@gmail.com";
string recipient = "test@email.com";

MailMessage message = new MailMessage(sender, recipient, string.Empty, string.Empty);

Appointment app = new Appointment(string.Empty, DateTime.Now, DateTime.Now, sender, recipient)
{
    MethodType = AppointmentMethodType.Publish
};

message.AddAlternateView(app.RequestApointment());

MapiMessage msg = MapiMessage.FromMailMessage(message);

// Save the appointment as draft.
msg.Save(dstDraft);

Console.WriteLine(Environment.NewLine + "Draft saved at " + dstDraft);

إنشاء موعد مسودة من نص

تُظهر القطعة البرمجية التالية كيفية إنشاء موعد مسودة من نص. 

string ical = @"BEGIN:VCALENDAR
METHOD:PUBLISH
PRODID:-//Aspose Ltd//iCalender Builder (v3.0)//EN
VERSION:2.0
BEGIN:VEVENT
ATTENDEE;CN=test@gmail.com:mailto:test@gmail.com
DTSTART:20130220T171439
DTEND:20130220T174439
DTSTAMP:20130220T161439Z
END:VEVENT
END:VCALENDAR";

string sender = "test@gmail.com";
string recipient = "test@email.com";
MailMessage message = new MailMessage(sender, recipient, string.Empty, string.Empty);
AlternateView av = AlternateView.CreateAlternateViewFromString(ical, new ContentType("text/calendar"));
message.AlternateViews.Add(av);
MapiMessage msg = MapiMessage.FromMailMessage(message);
msg.Save(dataDir + "draft_out.msg");

تخصيص المواعيد

تحديد حالة المشاركين من حضور الموعد

تسمح لك واجهة Aspose.Email for .NET بضبط حالة المشاركين في الموعد أثناء صياغة رسالة رد. يضيف هذا الخاصية PARTSTAT إلى ملف ICS.

DateTime startDate = new DateTime(2011, 12, 10, 10, 12, 11),
         endDate = new DateTime(2012, 11, 13, 13, 11, 12);
MailAddress organizer = new MailAddress("aaa@amail.com", "Organizer");
MailAddressCollection attendees = new MailAddressCollection();
MailAddress attendee1 = new MailAddress("bbb@bmail.com", "First attendee");
MailAddress attendee2 = new MailAddress("ccc@cmail.com", "Second attendee");

attendee1.ParticipationStatus = ParticipationStatus.Accepted;
attendee2.ParticipationStatus = ParticipationStatus.Declined;
attendees.Add(attendee1);
attendees.Add(attendee2);

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

تخصيص معرف المنتج لـ iCalendar

تتيح واجهة Aspose.Email for .NET إمكانية الحصول على أو ضبط معرف المنتج الذي أنشأ كائن iCalendar.

string description = "Test Description";
Appointment app = new Appointment("location", "test appointment", description, DateTime.Today,
DateTime.Today.AddDays(1), "first@test.com", "second@test.com");

IcsSaveOptions saveOptions = IcsSaveOptions.Default;
saveOptions.ProductId = "Test Corporation";
app.Save(dataDir + "ChangeProdIdOfICS.ics", saveOptions);

تحميل المواعيد

أيضًا، الـ Appointment يمكن استخدام الفئة لتحميل موعد من ملف ICS.

تحميل موعد بتنسيق ICS

لتحميل موعد بتنسيق ICS، يلزم اتباع الخطوات التالية:

  1. إنشاء مثيل من الـ Appointment فئة.
  2. استدعِ الـ Load() method عن طريق توفير مسار ملف ICS.
  3. قراءة أي خاصية للحصول على أي معلومات من الموعد (ملف ICS).

يوضح المقتطف البرمجي التالي كيفية تحميل موعد بصيغة ICS.

// Load an Appointment just created and saved to disk and display its details.
Appointment loadedAppointment = Appointment.Load(dstEmail);
Console.WriteLine(Environment.NewLine + "Loaded Appointment details are as follows:");
// Display the appointment information on screen
Console.WriteLine("Summary: " + loadedAppointment.Summary);
Console.WriteLine("Location: " + loadedAppointment.Location);
Console.WriteLine("Description: " + loadedAppointment.Description);
Console.WriteLine("Start date: " + loadedAppointment.StartDate);
Console.WriteLine("End date: " + loadedAppointment.EndDate);
Console.WriteLine("Organizer: " + appointment.Organizer);
Console.WriteLine("Attendees: " + appointment.Attendees);
Console.WriteLine(Environment.NewLine + "Appointment loaded successfully from " + dstEmail);

تحويل ICS إلى MSG

تتيح لك الواجهة برمجة التطبيقات تحويل موعد بسهولة إلى كائن رسالة. يوضح مثال الشيفرة التالي كيفية تحويل طلب موعد إلى MailMessage أو MapiMessage:

var appointment = Appointment.Load("appRequest.ics");

var eml = appointment.ToMailMessage();
var msg = appointment.ToMapiMessage();

قراءة أحداث متعددة من ملف ICS

List<Appointment> appointments = new List<Appointment>();
CalendarReader reader = new CalendarReader(dataDir + "US-Holidays.ics");

while (reader.NextEvent())
{
    appointments.Add(reader.Current);
}
//working with appointments...

كتابة أحداث متعددة إلى ملف ‎ICS

IcsSaveOptions saveOptions = new IcsSaveOptions();
saveOptions.Action = AppointmentAction.Create;
using (CalendarWriter writer = new CalendarWriter(dataDir + "WriteMultipleEventsToICS_out.ics", saveOptions))
{
    for (int i = 0; i < 10; i++)
    {
        Appointment app = new Appointment(string.Empty, DateTime.Now, DateTime.Now, "sender@domain.com", "receiver@domain.com");
        app.Description = "Test body " + i;
        app.Summary = "Test summary:" + i;
        writer.Write(app);
    }
}

تحديد نسخة الموعد

لتحديد نسخة الموعد، يمكنك استخدام الـ Appointment.Version خاصية الـ Appointment الفئة. تساعد هذه الخاصية على تحديد أي نسخة تستند إليها ملفاتهم، لضمان التكامل مع الأنظمة والتطبيقات الأخرى.

يعرض نموذج الشيفرة التالي كيفية تنفيذ هذه الخاصية في مشروعك:

var app = Appointment.Load("meeting.ics");

if (app.Version == 1.0)
{
    // do something
}