www.SAMURAJ-cz.com 

16.12.2017 Albína Translate to English by Google     VÍTEJTE V MÉM SVĚTĚ

Články

Exchange a Outlook kalendář - žádosti o schůzku

Pátek, 30.10.2015 11:10 | Samuraj - Petr Bouška |
Řešil jsem různé chování plánování schůzek do Outlook kalendáře (s účtem na Exchange serveru) v různých prostředích. Nepřišel jsem na to, co tento problém způsobuje, ale shromáždil jsem různé informace ohledně fungování událostí a schůzek a využití formátu iCalendar. Uvedu zde tyto poznámky, které bohužel nejsou komplexní. Detailní informace o fungování a zpracování schůzek na straně Exchange serveru jsem nikde nenalezl.

kalendáři MS Outlook můžeme vytvářet události (Appointment) nebo schůzky (žádost o schůzku - Meeting Request). Schůzka se liší tím, že jsou přizvány další osoby - účastníci (Attendees) nebo zdroje (Resources). Ten, kdo ji vytváří, je organizátor (Organizer).

Každou událost/schůzku z kalendáře můžeme uložit jako zprávu (msg), iCalendar formát (ics) nebo vCalendar formát (vcs). Stačí ji v kalendáři vybrat a v menu zvolit File - Save As, zde zadáme jméno a typ v jakém chceme uložit. Případně je tu ještě varianta, když otevřeme událost, tak se pod Forward skrývá možnost Forward as iCalendar.

Outlook - Save As calendar

Formát pro výměnu kalendářových dat

vCalendar

Internet Mail Consortium (IMC) vytvořilo souborový formát vCalendar (VCS) pro výměnu kalendářových dat (často byl spojován s programem Microsoft Outlook). Jde o textový soubor, který začíná označením:

BEGIN:VCALENDAR
VERSION:1.0

iCalendar

Dnes se používá jeho nástupce formát iCalendar (ICS), který je popsán v RFC 5545 a doplňcích. Je podporován řadou produktů, jako je Google Calendar, Apple Calendar, využívá ho i Microsoft Outlook, který jej lehce upravil. Soubor začíná:

BEGIN:VCALENDAR
VERSION:2.0

Pomocí iCalendar formátu můžeme uložit událost i schůzku. Schůzka obsahuje (mimo řady dalších parametrů)

METHOD:REQUEST

Jednoho nebo více účastníků

ATTENDEE;CN="Bouška Petr";RSVP=TRUE:mailto:bouska@firma.cz

A případně organizátora

ORGANIZER;CN="Bouška Petr":mailto:bouska@firma.cz

Posílání událostí

Jako příloha zprávy

Událost či schůzku ve formátu iCalendar můžeme poslat jako přílohu emailu. Tu můžeme otevřít a událost pomocí Save & Close uložit do kalendáře. U schůzky máme tlačítka Accept, Decline, atd. a schůzka se standardně rovnou při zpracování vloží do kalendáře jako Tentative.

Událost či schůzku jako přílohu emailu
iCalendar událost iCalendar žádost o schůzku

Automatické zpracování žádosti o schůzku

Kdy přesně dochází k automatickému zpracování žádosti o schůzku, mi není úplně jasné. Patrně, když je žádost jako příloha, tak se zpracovává až při otevření. Pokud je v těle zprávy, tak při příchodu na server.

Vypnout či zapnout zpracování (detaily mi nejsou jasné) můžeme v nastavení MS Outlook.

File - Options - Mail - Tracking - Automatically process meeting requests and responses to meeting requests and polls

Ale i když máme Outlook vypnutý, tak se událost vloží do kalendáře, takže jde o zpracování na serveru. Na Exchange serveru se nachází různá nastavení a pro uživatele si můžeme vypsat dvě hodnoty:

[PS] C:\>Get-CalendarProcessing uzivatel | FL AutomateProcessing
AutomateProcessing : AutoUpdate
[PS] C:\>Get-CalendarProcessing uzivatel | FL AddNewRequestsTentatively
AddNewRequestsTentatively : True

V těle zprávy

Druhá možnost je, že schůzka je vložena přímo ve zprávě (u události to patrně nefunguje - přijde zvláštní zpráva, kterou můžeme otevřít, a pak již se chová normálně). Tímto způsobem odchází pozvánka při vytvoření v Outlooku a příjemci se zobrazí speciální zpráva (nemá ikonku emailu, ale kalendářové schůzky), kde máme rovnou k dispozici tlačítka pro Accept, Decline a vidíme náhled do kalendáře.

iCalendar žádost o schůzku v těle emailu

Když chceme odeslat iCalendar soubor v těle mailu, tak to patrně ručně (třeba v Outlooku) neuděláme. Jde to řešit programově. Zpráva se odesílá pomocí rozšířeného formátu MIME (Multipurpose Internet Mail Extensions). Určujeme parametry v hlavičce MIME-Version: 1.0. Může obsahovat více částí Content-Type: multipart/alternative; a má nastaven atribut Content-class: urn:content-classes:calendarmessage. V těle zprávy (jako jedna část) je pak obsah ICS souboru s parametry Content-Type: text/calendar; name="meeting.ics"; method=REQUEST; Content-Transfer-Encoding: 8bit.

Odeslání žádosti o schůzku pomocí skriptu

Pomocí PHP

Nejprve jsem chtěl použít PHP, kde jsem čekal, že vytvoření skriptu bude jednoduché. Ale stále se mi nedařilo, ani při použití různých návodů na internetu, například Sending Outlook/Email Calendar Events with PHP.

Nevím, jestli mám chybu ve správném nastavení parametrů MIME zprávy, nebo v obsahu iCalendar souboru. Výsledkem vždy bylo, že přišla zpráva, která měla přílohu s názvem not supported calendar message.ics. Tato příloha šla normálně otevřít a byla zde funkční pozvánka.

iCalendar not supported calendar message.ics

Pozn.: Každopádně Outlook/Exchange je na formát ICS souboru dost náchylný a řada věcí nám může dělat problém. Například při funkčním posílání, když jsem měl parametr ORGANIZER pouze s emailem bez CN, tak také přišla pozvánka v příloze.

Pomocí Perlu

Našel jsem zajímavý článek, kde je uvedený skript v Perlu a ten se mi rychle podařilo zprovoznit. Jde o Exchange compatible iCal invitations. Co bylo potřeba udělat pro zprovoznění na Windows:

  • stáhnout a nainstalovat ActivePerl, použil jsem soubor ActivePerl-5.22.0.2200-MSWin32-x86-64int-299195.msi
  • stáhnout Email-Date-Format-1.005.tar.gz a MIME-Lite-3.030.tar.gz a rozbalit složky lib se svým obsahem do instalace Perlu (standardně c:\Perl), tím se přidají dvě potřebné knihovny
  • uložit Perlový skript do souboru, třeba ical.pl, a testovací iCalendar do subject.ics
  • zavolat skript z příkazové řádky v adresáři, kde je uložen skript, d:\>perl ical.pl

Použitý skript ical.pl je z výše uvedeného webu (je potřeba změnit adresu From, To a mail server):

#!/usr/bin/perl -w


use strict;
use MIME::Lite;

my $msg = MIME::Lite->new(
  From    =>'organizator@firma.cz',
  To      =>'ucastnik@firma.cz',
  Subject =>'Test iCalendar',
  Type    =>'multipart/alternative'
);
$msg->attr(
  'content-class' => 'urn:content-classes:calendarmessage'
);
$msg->attach(
  Type => "TEXT",
  Data => "Test iCal"
);
my $part = MIME::Lite->new(
  Type=> "text/calendar; method=REQUEST; name=\"subject.ics\"",
  Filename    => "subject.ics",
  Path=> "subject.ics",
  Encoding    => "8bit",
);
$part->scrub(['date', 'x-mailer', 'mime-version']);
  $part->attr(
  'content-class' => 'urn:content-classes:calendarmessage',
  'content-description' => "subject.ics",
);
$part->replace(
  'content-disposition' => "",
);
$msg->attach($part);

$msg->send('smtp','IP.adresa.mail.serveru', Debug=>1);

Vlastní pozvánku můžeme vytvořit v Outlooku a uložit, pak se dá textový soubor jednoduše editovat. Příklad souboru subject.ics (minimálně je potřeba změnit Attendee):

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE
TZID:Central Europe Standard Time
BEGIN:STANDARD
DTSTART:16011028T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010325T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ATTENDEE;CN="Ucastnik";RSVP=TRUE:mailto:ucastnik@firma.cz
CLASS:PUBLIC
CREATED:20151022T131746Z
DESCRIPTION:Schuzka
DTEND;TZID="Central Europe Standard Time":20151023T235900
DTSTAMP:20151022T101820Z
DTSTART;TZID="Central Europe Standard Time":20151023T000000
LAST-MODIFIED:20151022T131746Z
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=cs:Schuzka
TRANSP:OPAQUE
UID:ok2015102300000020151023000000
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-INTENDEDSTATUS:OOF
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-AUTOFILLLOCATION:TRUE
X-MS-OLK-AUTOSTARTCHECK:FALSE
X-MS-OLK-CONFTYPE:0
END:VEVENT
END:VCALENDAR

Různé situace žádosti o schůzku

Řešil jsem situaci, kdy aplikace posílá nějakou událost do kalendáře. Nikde jsem nenalezl, co by měl být správný způsob. Jednoduchá metoda je poslat v příloze ICS soubor pro událost. Uživatel otevře přílohu, uloží a má událost v kalendáři. Vše je jednoduché a funguje. Ale problém je, když potřebujeme, aby se alespoň nějaká informace objevila v kalendáři, i když uživatel třeba týden neotevře poštu.

V takovém případě se hodí pozvánka ke schůzce, kterou pošleme v těle zprávy. Server ji pak zpracuje hned po přijetí a standardně vloží uživateli do kalendáře. Když uživatel zprávu otevře, tak má možnost zvolit Accept a tím schůzku potvrdit. Teď ale nastává otázka, kdo by v takovém případě měl být organizátor schůzky, jinak řečeno z jaké adresy má žádost přijít. V různých případech se totiž na tu adresu odesílá odpověď (třeba při akceptování). Můžeme použít neexistující adresu, ale tím budou vznikat chyby. Nějakou umělou schránku, kde se budou hromadit zprávy. V obou případech bude u schůzky vidět i tato adresa. Poslední možnost je použít adresu příjemce. To ale možná není správné řešení, protože občas nastává problém (viz. dále).

Nastavování organizátora a účastníka

Zajímavé je chování v Outlooku, když se různě kombinuje emailová adresa odesílateleparametry v ICS souboru (ORGANIZER, ATTENDEE). Pokud se parametr ORGANIZER nezadá, tak se použije odesílatel emailu. Pokud je odesílatel jiný než ORGANIZER, tak jsem na internetu četl, že taková pozvánka nefunguje (přijde v příloze). Mě to ale zafunguje a Outlook ukazuje jako odesílatele osobu z ORGANIZER (pouze v hlavičce emailu je vidět, že ji odeslal někdo jiný).

Schůzka, kde jsem organizátor i účastník

Pokud v kalendáři Outlooku vytvořím schůzku a sám sebe přizvu jako účastníka, tak mi příchozí email hned spadne do smazaných zpráv a vidíme u něj informaci, že jsme organizátorem.

As the meeting organizer, you do not need to respond to the meeting.
Schůzka, kde jsem organizátor i účastník

Pokud vytvořím ICS soubor, kde sebe zadám jako ORGANIZER, tak při otevření se také uvádí, že jsem organizátorem a nemám k dispozici tlačítka pro akceptaci. Ale pokud takový ICS soubor pošlu, třeba pomocí Perlového skriptu, v těle emailu, tak vše funguje. Pozvánku mohu akceptovat a vloží se mi do kalendáře. Tedy takto funkční je v řadě prostředí, kde jsem testoval s Exchange Server 2010 a 2013. Ale v jedné infrastruktuře s Exchange Server 2013 to nefunguje a email končí v koši. Nepodařilo se mi zjistit, co takové chování způsobuje.

zobrazeno: 6180krát | Komentáře [4]

Autor:

Související články:

Microsoft Exchange

Jednou částí mé práce je administrace poštovního serveru od firmy Microsoft, tedy Exchange Serveru. Články začínají u verze 2003 a jak jde čas, tak pokračují dále.

Pokud se Vám článek líbil, tak mne potěšíte, když uložíte odkaz na některý server:

Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže. Pokud chcete poradit s nějakým problémem či diskutovat na nějaké téma, tak použijte fórum.

Komentáře

  1. [1] Jakub

    Jedna z věci co není zmíněna je standard CardDAV a CalDAV pro výměnu kontaktů a kalendářů. Bohužel není podporován přímo Outlookem a je nutno využít nějakou jinou aplikaci (například EVO Collaborator) pro přidání této funkce, která pak dovoluje synchronizaci například s Gmailem, iCloud a jinými.

    Úterý, 16.02.2016 10:33 | odpovědět
  2. [2] Milos Kucera

    Zdravim,

    rad bych se optal, zda jste se nekdy setkal s problemem samovolne odesilanych pozvanek do kalendare (Outlook). Ted poprve v zivote se mi to stalo a odesila se to pomerne hodne a jednatel firmy, kam to chodi, uz je dost nervozni. Nasi IT se s tim nikde nesetkali. Z kalendare jsem tento invitation natvrdo smazal a od vcerejsiho vecera se to odeslalo uz opet 15x ... zadny reminder nastaveny nemam a je to jediny email, na ktery se to odesila, nikomu jinemu ne.

    Moc diky za jakekoliv vstupy i odpoved na email milos.kucera@cz.abb.com

    Pekny den preji

    Milos kucera

    Sobota, 14.05.2016 08:14 | odpovědět
  3. [3] Marie

    Dobrý den mám dotaz jak potvrdím učast schůzky meetingu třeba ?

    Neděle, 12.06.2016 12:45 | odpovědět
  4. [4] petr masek

    odpověď na [1]Jakub: Diky za info. Vyzkousel jsem a funguje super - pouzivam na synchronizaci firemního kalendare v Kerio se soukromym Google kalendářem. Pokud by někdo hledal jak nastavit, tak info jsem nasel třeba zde http://pocitace-a-internet.blogspot.com/2015/03/synchronizace-kontaktu-kalendare-gmailu.html

    Úterý, 23.08.2016 10:38 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O


Ochrana proti SPAMu, zdejte následující čtyři znaky image code

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách