Menu

A

|

A

Générer du ICalendar

Si il y a bien une chose que je ne connaissais pas c’est bien le format de génération pour les « ICalendar ». En effet, quand on veut envoyer un mail pour générer un rendez-vous, il faut envoyer une partie dans un format bien particulier pour les clients mails de type Outlook ou Gmail. Ce format (ics) permet de générer le rendez-vous et traiter les retours.

Il existe donc un formatage standard pour faire cette opération, mais souvent les éditeurs tiers y ajoutent leurs propres métadonnées afin d’enrichir l’information et coller au mieux à leur outil. Aujourd’hui je vous propose une classe C# (Framework .Net) pour générer des rendez-vous à destination d’Outlook.

Cette classe est un socle et peut-être enrichis, elle ne gère pas non plus tous les cas de figure, mais permet de créer de façon simple et rapide avec un maximum d’option, des rendez-vous. Pour ce faire il suffit de créer un événement de cette façon :

CalendarGenerator gen = new CalendarGenerator();
gen.Event.Title = "Essai d'événement";
gen.Event.Description = "Voici le corps de mon événement";
gen.Event.Organizer.FullName = "John Doe";
gen.Event.Organizer.Email = "jdoe@domain.com";
gen.Event.Remind = Reminds.Minute15;
gen.Event.DateStart = DateTime.Now.AddDays(5);
gen.Event.DateEnd = gen.Event.DateStart.AddHours(2);
gen.Event.IsFullDay = false;
gen.Event.Status = StatusShow.OutOfOffice;
gen.Event.Attendees.Add(new CalendarAttendee()
{
    Email = "jen_doe@domain.com",
    FullName = "Jennifer Doe"
});

Cela va générer le format ICalendar suivant :

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 15.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE
TZID:Romance Standard Time
BEGIN:STANDARD
DTSTART:16011026T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010330T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ATTENDEE;CN="Jennifer Doe";RSVP=TRUE:mailto:jen_doe@domain.com
CLASS:PUBLIC
CREATED:20140806T145810Z
DESCRIPTION:Voici le corps de mon événement
UID:A25D555D9A7B41E3BF9DF7DA797BD941B538446B110E49E886F5D771317B957068167F88939B4BD2B821C22E375CEB2B
DTEND;TZID="Romance Standard Time":20140811T165810
DTSTART;TZID="Romance Standard Time":20140811T145810
DTSTAMP:20140806T145815Z
LAST-MODIFIED:20140806T145815Z
LOCATION:
ORGANIZER;CN="John Doe":mailto:jdoe@domain.com
PRIORITY:5
SEQUENCE:0
SUMMARY:Essai d'événement
TRANSP:OPAQUE
UID:A25D555D9A7B41E3BF9DF7DA797BD941B538446B110E49E886F5D771317B957068167F88939B4BD2B821C22E375CEB2B
X-ALT-DESC;FMTTYPE=text/html:{0}<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server version rmj.rmm.rup.rpr">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\nVoici le corps de mon événement\n</BODY>\n</HTML>
X-MICROSOFT-CDO-BUSYSTATUS:OOF
X-MICROSOFT-CDO-INTENDEDSTATUS:OOF
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-APPTLASTSEQUENCE:1
X-MS-OLK-APPTSEQTIME:20140806T145815Z
X-MS-OLK-AUTOFILLLOCATION:FALSE
X-MS-OLK-AUTOSTARTCHECK:FALSE
X-MS-OLK-CONFTYPE:0
BEGIN:VALARM
TRIGGER:-PT15M
BACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

Il vous suffit ensuite d’envoyer un mail avec la génération ci-dessus dans les propriétés du mail et le tour est joué. A noter qu’il faut envoyer ce mail au créateur et a ses participants pour que tout soit pris en compte.

Je suis preneur de retour sur cette petite classe, si cela intéresse des personnes je peux la mettre sur CodePlex et le faire vivre.

Pour télécharger l’exemple et les classes, c’est par ici : ConsoleMeeting.rar (14 ko)

Générer du ICalendar

Si il y a bien une chose que je ne connaissais pas c’est bien le format de génération pour les « ICalendar ». En effet, quand on veut envoyer un mail pour générer un rendez-vous, il faut envoyer une partie dans un format bien particulier pour les clients mails de type Outlook ou Gmail. Ce format (ics) permet de générer le rendez-vous et traiter les retours.

Il existe donc un formatage standard pour faire cette opération, mais souvent les éditeurs tiers y ajoutent leurs propres métadonnées afin d’enrichir l’information et coller au mieux à leur outil. Aujourd’hui je vous propose une classe C# (Framework .Net) pour générer des rendez-vous à destination d’Outlook.

Cette classe est un socle et peut-être enrichis, elle ne gère pas non plus tous les cas de figure, mais permet de créer de façon simple et rapide avec un maximum d’option, des rendez-vous. Pour ce faire il suffit de créer un événement de cette façon :

CalendarGenerator gen = new CalendarGenerator();
gen.Event.Title = "Essai d'événement";
gen.Event.Description = "Voici le corps de mon événement";
gen.Event.Organizer.FullName = "John Doe";
gen.Event.Organizer.Email = "jdoe@domain.com";
gen.Event.Remind = Reminds.Minute15;
gen.Event.DateStart = DateTime.Now.AddDays(5);
gen.Event.DateEnd = gen.Event.DateStart.AddHours(2);
gen.Event.IsFullDay = false;
gen.Event.Status = StatusShow.OutOfOffice;
gen.Event.Attendees.Add(new CalendarAttendee()
{
    Email = "jen_doe@domain.com",
    FullName = "Jennifer Doe"
});

Cela va générer le format ICalendar suivant :

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 15.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE
TZID:Romance Standard Time
BEGIN:STANDARD
DTSTART:16011026T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010330T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ATTENDEE;CN="Jennifer Doe";RSVP=TRUE:mailto:jen_doe@domain.com
CLASS:PUBLIC
CREATED:20140806T145810Z
DESCRIPTION:Voici le corps de mon événement
UID:A25D555D9A7B41E3BF9DF7DA797BD941B538446B110E49E886F5D771317B957068167F88939B4BD2B821C22E375CEB2B
DTEND;TZID="Romance Standard Time":20140811T165810
DTSTART;TZID="Romance Standard Time":20140811T145810
DTSTAMP:20140806T145815Z
LAST-MODIFIED:20140806T145815Z
LOCATION:
ORGANIZER;CN="John Doe":mailto:jdoe@domain.com
PRIORITY:5
SEQUENCE:0
SUMMARY:Essai d'événement
TRANSP:OPAQUE
UID:A25D555D9A7B41E3BF9DF7DA797BD941B538446B110E49E886F5D771317B957068167F88939B4BD2B821C22E375CEB2B
X-ALT-DESC;FMTTYPE=text/html:{0}<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server version rmj.rmm.rup.rpr">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\nVoici le corps de mon événement\n</BODY>\n</HTML>
X-MICROSOFT-CDO-BUSYSTATUS:OOF
X-MICROSOFT-CDO-INTENDEDSTATUS:OOF
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-APPTLASTSEQUENCE:1
X-MS-OLK-APPTSEQTIME:20140806T145815Z
X-MS-OLK-AUTOFILLLOCATION:FALSE
X-MS-OLK-AUTOSTARTCHECK:FALSE
X-MS-OLK-CONFTYPE:0
BEGIN:VALARM
TRIGGER:-PT15M
BACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

Il vous suffit ensuite d’envoyer un mail avec la génération ci-dessus dans les propriétés du mail et le tour est joué. A noter qu’il faut envoyer ce mail au créateur et a ses participants pour que tout soit pris en compte.

Je suis preneur de retour sur cette petite classe, si cela intéresse des personnes je peux la mettre sur CodePlex et le faire vivre.

Pour télécharger l’exemple et les classes, c’est par ici : ConsoleMeeting.rar (14 ko)

No Comments

Comments Are Closed