Hantera Outlook-kalenderobjekt

Den här artikeln täcker Outlook MapiCalendar kalenderposter sparade som MSG. För att arbeta med standardbaserade iCalendar (ICS) möten och mötesförfrågningar, se Hantera möten; för att lagra och läsa kalenderposter i en PST, se Hantera kalenderobjekt i PST-filer.

Aspose.Email MapiCalendar klassen tillhandahåller metoder och attribut för att sätta olika egenskaper för ett kalenderobjekt. Detta avsnitt ger kodexempel för:

Skapa och spara kalenderobjekt

Följande kodsnutt visar hur du skapar och sparar ett kalenderobjekt i ICS-format.

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

Spara kalenderobjekt som MSG‑filer

Följande kodsnutt visar hur du sparar kalenderobjektet som MSG.

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

Spara produkt‑ID:n för MAPI‑kalenderobjekt till ICS

Den ProductIdentifier egenskap hos MapiCalendarIcsSaveOptions klassen används för att spara ett MAPI-kalenderobjekt till en iCalendar (ICS)-fil och bevara originaldatum och -tid samt en anpassad produktidentifierare. Egenskapen specificerar identifieraren för produkten som skapade iCalendar-objektet.

Följande kodexempel visar hur man arbetar med iCalendar (ICS)-data i ett MAPI-kalenderobjekt:

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

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

Hämta totalt antal händelser

Den CalendarReader klass möjliggör enkel hantering av kalenderevenemang. Följande egenskaper och en metod låter dig arbeta med flera evenemang:

  • CalendarReader.Count – Count‑egenskapen i CalendarReader‑klassen låter dig hämta antalet Vevent‑komponenter (händelser) som finns i kalendern, vilket gör det enklare att hålla reda på det totala antalet händelser.
  • CalendarReader.IsMultiEvents – Denna egenskap avgör om kalendern innehåller flera händelser. Den ger ett boolean‑värde som indikerar om kalendern har mer än en händelse, vilket hjälper till att identifiera kalendrar med en eller flera händelser.
  • CalendarReader.Method – Egenskapen Method får iCalendar‑metodtypen som är associerad med kalenderobjektet. Den returnerar metodtypen, såsom “REQUEST”, “PUBLISH” eller “CANCEL”, och ger värdefull insikt i kalenderns syfte.
  • CalendarReader.Version – Hämtar versionen av iCalendar.
  • CalendarReader.LoadAsMultiple() Denna metod möjliggör laddning av en lista med händelser från en kalender som innehåller flera händelser. Den returnerar en lista med Appointment‑objekt, vilket ger enkel åtkomst och bearbetning av varje händelse individuellt.

Följande kodexempel demonstrerar hur du kan implementera dessa funktioner i ditt projekt:

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

Lägg till displaypåminnelser

Följande kodsnutt visar hur du lägger till en displaypåminelse i en kalender.

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

Lägg till ljudpåminnelser

Följande kodsnutt visar hur du lägger till en ljudpåminnelse i en kalender.

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

Lägg till/återställ bilagor från kalenderfiler

Följande kodsnutt visar hur du lägger till/återställer bilagor från kalenderfiler.

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

Kontrollera mottagarnas status i mötesförfrågningar

Följande kodsnutt visar hur du visar mottagarnas status från en mötesförfrågan.

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

Skapa MAPI‑kalender tidszon från standardtidszon

Följande kodsnutt visar hur du skapar MapiCalendarTimeZone från standardtidszon.

MapiCalendarTimeZone timeZone = new MapiCalendarTimeZone(TimeZoneInfo.Local);

Ställ in påminnelser för avtal

En påminnelse kan läggas till när ett möte skapas. Dessa alarm kan triggas baserat på olika kriterier, t.ex. n minuter före schemaläggningens start, upprepa n gånger med n intervall. Olika taggar kan användas för att skapa dessa triggrar i skriptet som omges av BEGIN:VALARM och END:VALARM i ett möte. Det finns ett antal varianter för hur påminnelsen kan ställas in för ett möte.

Lägg till taggar för att sätta påminnelser

Följande kodsnutt visar hur du ställer in en påminnelse genom att lägga till taggar.

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

Konvertera Appointment EML till MSG med HTML-kropp

Sedan version 19.3 erbjuder Aspose.Email möjligheten att konvertera Appointment EML till MSG samtidigt som HTML-kroppen i mötet behålls. Aspose.Email tillhandahåller en MapiConversionOptions.ForcedRtfBodyForAppointment egenskap som har standardvärdet true. När värdet på MapiConversionOptions.ForcedRtfBodyForAppointment är satt till true, konverteras möteskroppen till RTF-format. För att behålla möteskroppens format i HTML, sätt värdet på MapiConversionOptions.ForcedRtfBodyForAppointment till false.

Följande exempel demonstrerar användningen av MapiConversionOptions.ForcedRtfBodyForAppointment egenskap för att behålla möteskroppens format i HTML-format.

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

Ställ in tillståndet för MAPI‑kalenderobjekt manuellt

Sätt tillståndet för ett MAPI‑kalenderobjekt explicit, vilket åsidosätter standardbeteendet. Detta ger bättre kontroll över kalenderhändelse‑tillstånd, särskilt vid hantering av mottagna mötesförfrågningar. Som standard, när ett möte skapas, är dess tillstånd MapiCalendarState.Meeting. När den mottas i mottagarens inkorg ändras den automatiskt till MapiCalendarState.Received, och dess meddelandeklass uppdateras till “IPM.Schedule.Meeting.Request”. Användning av SetStateForced tillåter manuell inställning av tillståndet till Received, vilket kan vara användbart för att bevara organisationsinformationen när kalendern sparas som en MSG‑fil. Detta kan dock förhindra korrekt vidarebefordran eller omsändning av mötet.

Kodexemplet nedan demonstrerar hur man skapar en MapiCalendar objekt, tilldela en organisator och uttryckligen sätta dess tillstånd till båda Meeting och Received med hjälp av SetStateForced. Den sparar sedan kalenderobjektet som en .msg‑fil.

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

Se även