Afspraken beheren: maken & manipuleren, converteer ICS naar MSG
Een afspraak maken en opslaan op schijf in MSG- of ICS‑formaat
De Appointment klasse in Aspose.Email voor .NET kan worden gebruikt om een nieuwe afspraak te maken. In dit artikel maken we eerst een afspraak en slaan deze op op schijf in ICS‑formaat. De volgende stappen zijn vereist om een afspraak te maken en op te slaan op een schijf.
- Maak een instantie van de Appointment klasse en initialiseert deze met deze constructor.
- Geef de volgende argumenten door in de bovenstaande constructor
- Locatie
- Samenvatting
- Beschrijving
- Startdatum
- Einddatum
- Organisator
- Deelnemers
- Roep de Save() methode en specificeer de bestandsnaam en indeling in de argumenten.
De afspraak kan worden geopend in Microsoft Outlook of elk programma dat een ICS‑bestand kan laden. Als het bestand wordt geopend in Microsoft Outlook, wordt de afspraak automatisch toegevoegd aan de Outlook‑agenda.
Het volgende codefragment laat zien hoe u een afspraak maakt en opslaat op schijf in ICS‑ of MSG‑formaat.
// 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.");
Een afspraak maken met HTML‑inhoud
U kunt alternatieve weergaven van de beschrijving van het evenement opgeven in verschillende content‑types met behulp van de X-ALT-DESC‑header. Hiermee kunnen ontvangers van het iCalendar‑bestand de weergave kiezen die het beste bij hun behoeften past. Bijvoorbeeld, u kunt een platte‑tekst beschrijving opnemen met content‑type "text/plain" en een HTML‑beschrijving met content‑type "text/html". Voor elke alternatieve weergave wordt de X-ALT-DESC‑header toegevoegd. Om een afspraak met HTML‑inhoud te maken, stelt u de HtmlDescription eigenschap.
Probeer het volgende codevoorbeeld om een afspraak te maken met een alternatieve HTML‑beschrijving:
- Maak een nieuw exemplaar van de Appointment‑klasse.
- Geef de noodzakelijke parameters aan de Appointment‑constructor:
- Specificeer de locatie van de afspraak.
- Stel de startdatum en -tijd in.
- Stel de einddatum en -tijd in.
- Specificeer de organisator.
- Specificeer de deelnemer.
- Stel de HtmlDescription eigenschap van het afspraakobject, die aangeeft dat de beschrijving in HTML‑formaat is.
- Stel de Description‑eigenschap van het afspraakobject in op een HTML‑geformatteerde string, ingesloten in een meerlijnige string:
- De HTML‑markup bevat een <style>-blok dat een CSS‑klasse genaamd "text" definieert met lettertype‑stijlen.
- De HTML‑body bevat een paragraftag <p> met de CSS‑klasse "text", en het daadwerkelijke uitnodigingsbericht.
- Het afspraakobject is nu klaar, en u kunt verdere bewerkingen uitvoeren of het opslaan als een iCalendar‑bestand.
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>"
};
Een conceptafspraakaanvraag maken
In onze eerdere artikelen is getoond hoe u een afspraak maakt en opslaat in ICS‑formaat. Het is vaak vereist om een afspraakverzoek in conceptstatus aan te maken, zodat de basisinformatie wordt toegevoegd en vervolgens hetzelfde concept‑afspraakverzoek kan worden doorgestuurd naar andere gebruikers voor noodzakelijke wijzigingen volgens individuele behoeften. Om een afspraak in conceptstatus op te slaan, moet de MethodType eigenschap van de Appointment‑klasse moet worden ingesteld op AppointmentMethodType.Publish. Het volgende codefragment toont hoe u een concept‑afspraakverzoek maakt.
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);
Conceptafspraak maken vanuit tekst
De volgende codefragment laat zien hoe u een concept‑afspraak maakt vanuit tekst.
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");
Afspraken aanpassen
De status van deelnemers aan een afspraak instellen
Aspose.Email voor .NET API laat u de status van afspraakdeelnemers instellen bij het opstellen van een antwoordbericht. Dit voegt de PARTSTAT‑eigenschap toe aan het ICS‑bestand.
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);
Product‑identificatie aanpassen voor iCalendar
Aspose.Email voor .NET API maakt het mogelijk de productidentifier te krijgen of in te stellen die het iCalendar‑object heeft aangemaakt.
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);
Afspraken laden
Ook de Appointment klasse kan worden gebruikt om een afspraak uit een ICS‑bestand te laden.
Een afspraak laden in ICS‑formaat
Om een afspraak in ICS‑formaat te laden, zijn de volgende stappen vereist:
- Maak een instantie van de Appointment klasse.
- Roep de Load() methode door het pad van het ICS‑bestand op te geven.
- Lees een willekeurige eigenschap om alle informatie uit de afspraak (ICS‑bestand) te verkrijgen.
Het volgende codefragment laat zien hoe u een afspraak in ICS‑formaat laadt.
// 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 naar MSG converteren
De API stelt u in staat een Afspraak eenvoudig om te zetten naar een berichtobject. Het volgende codevoorbeeld laat zien hoe u een afspraakverzoek kunt converteren naar een MailMessage of MapiMessage:
var appointment = Appointment.Load("appRequest.ics");
var eml = appointment.ToMailMessage();
var msg = appointment.ToMapiMessage();
Meerdere gebeurtenissen lezen uit een ICS‑bestand
List<Appointment> appointments = new List<Appointment>();
CalendarReader reader = new CalendarReader(dataDir + "US-Holidays.ics");
while (reader.NextEvent())
{
appointments.Add(reader.Current);
}
//working with appointments...
Meerdere evenementen schrijven naar een ICS‑bestand
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);
}
}
De afspraakversie bepalen
Om de versie van een afspraak te bepalen, kunt u de Appointment.Version eigenschap van de Appointment klasse. Deze eigenschap helpt bepalen op welke versie hun bestanden zijn gebaseerd, waardoor integratie met andere systemen en apps wordt gegarandeerd.
Het volgende codevoorbeeld toont hoe u deze eigenschap in uw project implementeert:
var app = Appointment.Load("meeting.ics");
if (app.Version == 1.0)
{
// do something
}