Outlook Takvim Öğelerini Yönetme
Bu makale Outlook MapiCalendar MSG olarak kaydedilen takvim öğeleri. Standart tabanlı iCalendar (ICS) randevuları ve toplantı istekleriyle çalışmak için bakınız Randevuları Yönet; PST içinde takvim öğelerini depolamak ve okumak için bakınız PST Dosyalarında Takvim Öğelerini Yönetme.
Aspose.Email MapiCalendar Sınıf, bir takvim öğesinin çeşitli özelliklerini ayarlamak için yöntemler ve öznitelikler sağlar. Bu bölüm, şu konular için kod örnekleri sunar:
- Takvim Öğelerini Oluştur ve Kaydet
- Takvim Öğelerini MSG Dosyaları Olarak Kaydet
- MAPI Takvim Öğeleri için Ürün ID’lerini ICS’ye Kaydet
- Toplam Etkinlik Sayısını Al
- Görsel Hatırlatıcılar Ekle
- Sesli Hatırlatıcılar Ekle
- Takvim Dosyalarından Eklenti Ekleme/Geri Getirme
- Toplantı İsteklerinde Alıcıların Durumunu Kontrol Et
- Standart Zaman Diliminden MAPI Takvim Zaman Dilimi Oluştur
- Randevular için Hatırlatıcıları Ayarla
- HTML Gövdesiyle Randevu EML’yi MSG’ye Dönüştür
- MAPI Takvim Öğelerinin Durumunu Manuel Olarak Ayarlama
Takvim Öğelerini Oluştur ve Kaydet
Aşağıdaki kod parçacığı, bir takvim öğesini ICS formatında nasıl oluşturup kaydedeceğinizi gösterir.
// 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);
Takvim Öğelerini MSG Dosyaları Olarak Kaydet
Aşağıdaki kod parçacığı, takvim öğesini MSG olarak nasıl kaydedeceğinizi gösterir.
calendar.Save(dataDir + "CalendarItemAsMSG_out.Msg", AppointmentSaveFormat.Msg);
MAPI Takvim Öğeleri için Ürün ID’lerini ICS’ye Kaydet
Bu ProductIdentifier özellik MapiCalendarIcsSaveOptions sınıf, orijinal tarih ve saat bilgilerini ve özel bir ürün tanımlayıcısını koruyarak bir MAPI takvim öğesini iCalendar (ICS) dosyasına kaydetmek için kullanılır. Özellik, iCalendar nesnesini oluşturan ürünün tanımlayıcısını belirler.
Aşağıdaki kod örneği, bir MAPI takvim nesnesi içinde iCalendar (ICS) verileriyle nasıl çalışılacağını gösterir:
var icsSaveOptions = new MapiCalendarIcsSaveOptions
{
KeepOriginalDateTimeStamp = true,
ProductIdentifier = "Foo Ltd"
};
mapiCalendar.Save("my.ics", icsSaveOptions);
Toplam Etkinlik Sayısını Al
Bu CalendarReader sınıfı, takvim etkinliklerini zahmetsizce yönetmeyi sağlar. Aşağıdaki özellikler ve bir yöntem, birden fazla etkinlikle çalışmanıza izin verir:
- CalendarReader.Count - CalendarReader sınıfının Count özelliği, takvimde bulunan Vevent bileşenlerinin (etkinliklerin) sayısını almanıza olanak tanır, böylece toplam etkinlik sayısını izlemek daha kolay olur.
- CalendarReader.IsMultiEvents - Bu özellik, takvimin birden fazla etkinlik içerip içermediğini belirler. Takvimin birden fazla etkinlik içerip içermediğini gösteren bir boolean değer sağlar, tekli veya çoklu etkinlikli takvimleri tanımlamaya yardımcı olur.
- CalendarReader.Method - Method özelliği, takvim nesnesiyle ilişkili iCalendar yöntem tipini alır. “REQUEST”, “PUBLISH” veya “CANCEL” gibi yöntem tiplerini döndürür ve takvimin amacına dair değerli bilgiler sağlar.
- CalendarReader.Version - iCalendar’ın sürümünü alır.
- CalendarReader.LoadAsMultiple() Bu yöntem, birden fazla etkinlik içeren bir takvimden olay listesi yüklenmesini sağlar. Appointment nesnelerinin bir listesini döndürür, böylece her bir etkinliğe ayrı ayrı kolay erişim ve işleme imkanı tanır.
Aşağıdaki kod örneği, bu yetenekleri projenizde nasıl uygulayabileceğinizi gösterir:
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();
Görsel Hatırlatıcılar Ekle
Aşağıdaki kod parçacığı, bir takvime görsel hatırlatıcı eklemenin nasıl yapılacağını gösterir.
// 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);
Sesli Hatırlatıcılar Ekle
Aşağıdaki kod parçacığı, takvime sesli hatırlatıcı eklemenin nasıl yapılacağını gösterir.
// 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);
Takvim Dosyalarından Eklenti Ekleme/Geri Getirme
Aşağıdaki kod parçacığı, takvim dosyalarından ekleri ekleme/geri getirme nasıl yapılır gösterir.
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);
Toplantı İsteklerinde Alıcıların Durumunu Kontrol Et
Aşağıdaki kod parçacığı, bir toplantı isteğinden alıcıların durumunu nasıl göstereceğinizi gösterir.
MapiMessage message = MapiMessage.FromFile(fileName);
foreach (MapiRecipient recipient in message.Recipients)
{
Console.WriteLine(recipient.RecipientTrackStatus);
}
Standart Zaman Diliminden MAPI Takvim Zaman Dilimi Oluştur
Aşağıdaki kod parçacığı, standart Zaman Diliminden MapiCalendarTimeZone oluşturmanın nasıl yapılacağını gösterir.
MapiCalendarTimeZone timeZone = new MapiCalendarTimeZone(TimeZoneInfo.Local);
Randevular için Hatırlatıcıları Ayarla
Bir randevu oluşturulduğunda bir hatırlatıcı eklenebilir. Bu alarmlar, plan başlamadan n dakika önce gibi çeşitli kriterlere göre tetiklenebilir, n aralıklarla n kez tekrarlanabilir. Farklı etiketler, randevu içindeki BEGIN:VALARM ve END:VALARM ile çevrili komut dosyasında bu tetikleyicileri oluşturmak için kullanılabilir. Hatırlatıcının bir randevuya ayarlanabileceği çeşitli varyantlar bulunmaktadır.
Hatırlatıcıları Ayarlamak için Etiketler Ekle
Aşağıdaki kod parçacığı, etiket ekleyerek bir hatırlatıcı nasıl ayarlanır gösterir.
// 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");
HTML Gövdesiyle Randevu EML’yi MSG’ye Dönüştür
19.3 sürümünden itibaren, Aspose.Email, randevu EML dosyasını MSG’ye dönüştürürken HTML gövdesini koruma yeteneği sunar. Aspose.Email bir MapiConversionOptions.ForcedRtfBodyForAppointment özellik, varsayılan değeri true. olan. Değeri MapiConversionOptions.ForcedRtfBodyForAppointment true olarak ayarlandığında, randevu gövdesi RTF biçimine dönüştürülür. Randevu gövdesi formatının HTML olarak kalmasını sağlamak için, değerini ayarlayın MapiConversionOptions.ForcedRtfBodyForAppointment false olarak
Aşağıdaki örnek kullanılanı göstermektedir MapiConversionOptions.ForcedRtfBodyForAppointment randevu gövde formatının HTML biçiminde kalmasını sağlayan özellik.
// 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 Takvim Öğelerinin Durumunu Manuel Olarak Ayarla
Bir MAPI Takvim nesnesinin durumunu açıkça ayarlayarak varsayılan davranışı geçersiz kılın. Bu, özellikle alınan toplantı isteklerini işlerken takvim etkinlik durumları üzerinde daha iyi kontrol sağlar. Varsayılan olarak, bir toplantı oluşturulduğunda durumu MapiCalendarState.Meeting. Alıcıların gelen kutusuna alındığında, otomatik olarak şu şekle değişir MapiCalendarState.Received, ve mesaj sınıfı “IPM.Schedule.Meeting.Request” olarak güncellenir. Kullanarak SetStateForced Received durumunu manuel olarak ayarlamaya izin verir; bu, takvimi MSG dosyası olarak kaydederken organizatör bilgisinin korunması için faydalı olabilir. Ancak bu, toplantının doğru bir şekilde iletilmesini veya yeniden gönderilmesini engelleyebilir.
Aşağıdaki kod örneği, bir şey oluşturmanın nasıl yapılacağını gösterir. MapiCalendar Nesneyi oluştur, bir organizatör ata ve durumunu açıkça her ikisine de ayarla Meeting ve Received kullanarak SetStateForced. Ardından takvim öğesini .msg dosyası olarak kaydeder.
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);
Ayrıca Bakınız
- Randevuları Yönet — iCalendar (ICS) randevuları ve toplantı istekleriyle çalışın.
- PST Dosyalarında Takvim Öğelerini Yönetme — PST içinde takvim öğelerini depolayın ve okuyun.