Beheren van Outlook-agenda-items

Dit artikel behandelt Outlook MapiCalendar agenda‑items opgeslagen als MSG. Zie om standaard‑gebaseerde iCalendar (ICS) afspraken en vergaderverzoeken te gebruiken Afspraken beheren; om agenda‑items in een PST op te slaan en te lezen, zie Agenda‑items beheren in PST‑bestanden.

Aspose.Email MapiCalendar klasse biedt methoden en attributen om diverse eigenschappen van een agenda‑item in te stellen. Deze sectie bevat codevoorbeelden voor:

Agenda-items maken en opslaan

Het volgende codefragment laat zien hoe u een agenda‑item maakt en opslaat in ICS‑formaat.

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

Agenda‑items opslaan als MSG‑bestanden

Het volgende codefragment laat zien hoe u het agenda‑item opslaat als MSG.

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

Product‑ID’s voor MAPI‑agenda‑items opslaan naar ICS

De ProductIdentifier eigenschap van de MapiCalendarIcsSaveOptions klasse wordt gebruikt om een MAPI‑agenda‑item op te slaan in een iCalendar (ICS)-bestand, waarbij de oorspronkelijke datum‑ en tijdinformatie evenals een aangepaste product‑identifier behouden blijven. De eigenschap specificeert de identifier voor het product dat het iCalendar‑object heeft gemaakt.

Het volgende codevoorbeeld laat zien hoe u werkt met iCalendar (ICS)-gegevens binnen een MAPI‑agenda‑object:

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

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

Totaal aantal gebeurtenissen ophalen

De CalendarReader klasse maakt het eenvoudig om agenda‑events te verwerken. De volgende eigenschappen en een methode maken het mogelijk om met meerdere events te werken:

  • CalendarReader.Count – De eigenschap Count van de CalendarReader‑klasse stelt u in staat het aantal Vevent‑componenten (gebeurtenissen) in de agenda op te vragen, waardoor het eenvoudiger wordt het totale aantal gebeurtenissen bij te houden.
  • CalendarReader.IsMultiEvents – Deze eigenschap bepaalt of de agenda meerdere gebeurtenissen bevat. Het levert een boolean‑waarde die aangeeft of de agenda meer dan één gebeurtenis heeft, wat helpt bij het identificeren van agenda’s met één of meerdere gebeurtenissen.
  • CalendarReader.Method – De eigenschap Method verkrijgt het iCalendar‑methodetype dat aan het agenda‑object is gekoppeld. Het retourneert het methodetype, zoals "REQUEST", "PUBLISH" of "CANCEL", en biedt waardevolle inzichten in het doel van de agenda.
  • CalendarReader.Version – Haalt de versie van iCalendar op.
  • CalendarReader.LoadAsMultiple() Deze methode maakt het mogelijk een lijst van gebeurtenissen te laden uit een agenda die meerdere gebeurtenissen bevat. Het retourneert een lijst van Appointment‑objecten, waardoor elk afzonderlijk evenement eenvoudig toegankelijk en verwerkbaar is.

Het volgende codevoorbeeld demonstreert hoe u deze mogelijkheden in uw project kunt implementeren:

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

Visuele herinneringen toevoegen

Het volgende codefragment toont hoe u een visuele herinnering aan een agenda toevoegt.

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

Audiogeluidherinneringen toevoegen

Het volgende codefragment laat zien hoe u een audioherinnering aan een agenda toevoegt.

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

Bijlagen toevoegen/halen uit agendabestanden

Het volgende codefragment laat zien hoe u bijlagen toevoegt/haalt uit agendabestanden.

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

Status van ontvangers controleren in vergaderverzoeken

Het volgende codefragment toont hoe u de status van ontvangers van een vergaderverzoek kunt weergeven.

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

MAPI‑agenda‑tijdzone maken vanuit standaard tijdzone

Het volgende codefragment toont hoe u een MapiCalendarTimeZone maakt vanuit een standaard tijdzone.

MapiCalendarTimeZone timeZone = new MapiCalendarTimeZone(TimeZoneInfo.Local);

Herinneringen instellen voor afspraken

Een herinnering kan worden toegevoegd wanneer een afspraak wordt gemaakt. Deze alarmen kunnen worden geactiveerd op basis van verschillende criteria, zoals n minuten vóór de start van de planning, herhaal n keer met n intervallen. Verschillende tags kunnen worden gebruikt om deze triggers te maken in het script dat is ingesloten tussen BEGIN:VALARM en END:VALARM binnen een afspraak. Er zijn verschillende varianten waarin de herinnering kan worden ingesteld op een afspraak.

Tags toevoegen om herinneringen in te stellen

De volgende codefragment laat zien hoe u een herinnering instelt door tags toe te voegen.

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

Afspraak EML naar MSG converteren met HTML-body

Sinds versie 19.3 biedt Aspose.Email de mogelijkheid om Appointment EML naar MSG te converteren terwijl de HTML-body van de afspraak behouden blijft. Aspose.Email biedt een MapiConversionOptions.ForcedRtfBodyForAppointment eigenschap die een standaardwaarde van true heeft. Wanneer de waarde van MapiConversionOptions.ForcedRtfBodyForAppointment is ingesteld op true, wordt de afspraakbody geconverteerd naar RTF-indeling. Om het afspraakbodyformaat in HTML-indeling te behouden, stel de waarde van MapiConversionOptions.ForcedRtfBodyForAppointment naar false.

Het volgende voorbeeld toont het gebruik van MapiConversionOptions.ForcedRtfBodyForAppointment eigenschap om het afspraakbodyformaat in HTML-indeling te behouden.

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

De status van MAPI‑agenda‑items handmatig instellen

Stel de status van een MAPI‑agendaobject expliciet in, waardoor het standaardgedrag wordt overschreven. Dit biedt betere controle over de status van agenda‑gebeurtenissen, vooral bij het afhandelen van ontvangen vergaderverzoeken. Standaard is, wanneer een vergadering wordt aangemaakt, de status MapiCalendarState.Meeting. Wanneer het in de inbox van een ontvanger wordt ontvangen, verandert het automatisch naar MapiCalendarState.Received, en de berichtklasse wordt bijgewerkt naar “IPM.Schedule.Meeting.Request”. Met behulp van SetStateForced stelt handmatig in dat de status Received is, wat nuttig kan zijn om organisatoreninformatie te behouden bij het opslaan van de agenda als een MSG‑bestand. Dit kan echter het correct doorsturen of opnieuw verzenden van de vergadering verhinderen.

Het onderstaande codevoorbeeld toont hoe u een MapiCalendar object, wijs een organisator toe en stel de status expliciet in op beide Meeting en Received met behulp van SetStateForced. Het slaat vervolgens het agenda‑item op als een .msg‑bestand.

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

Zie ook