MAPI@TYPO3

Zugriff auf Groupwaredaten aus PHP-Projekten heraus

Freie Groupwareserver gibt es viele. Die bekanntesten sind Kolab, Open-Xchange, OpenGroupware und exchange4linux. Diese vier sind zugleich auch Vertreter sehr unterschiedlicher Architekturansätze. Kolab ist serverseitig in erster Linie ein IMAP-Server, der von intelligenten Clients als Groupware genutzt wird. Open-Xchange und OpenGroupware sind typische Webapplikationen, die über die Jahre vom SUSE-Slox beziehungsweise Skyrix abgeleitet wurden. Exchange4linux entspricht weitestgehend dem Client-Server Konzept von MS Exchange mit zentraler Datenbank und objektorientiertem Datenmodel.

Von den proprietären Systemen kann man zumindest Scalix, Groupwise und Notes auch unter Linux als Groupwareserver einsetzen. Scalix ist bestrebt, immer mehr Teile seines Sourcecodes freizugeben. Bei Groupwise und Notes ist damit wohl nicht zu rechnen.

Seit etwas mehr als einem Jahr sorgt nun Zarafa für Bewegung auf dem Linux-Groupware-Markt. Die Architektur entspricht in weiten Teilen MS Exchange und exchange4linux. Durch konsequente Programmierung der Kernkomponenten in C++ wurde eine optimale Performance erreicht. Gute Outlook-Unterstützung und ein optisch ansprechender Webclient runden das Bild ab. Dass die Entwickler „Open-Source-Minded“ sind, beweist die bestens dokumentierte PHP-MAPI-Extension.

Wer heute mit TYPO3 Websites gestaltet und seinen Kunden hohe Integration und dadurch hohen Nutzen bieten will, wird sehr schnell Adressdaten oder Termine mit lokalen Groupwaresystemen verbinden müssen. Lösungen, die mit Synchronisationstechnik arbeiten, bieten keine Echtzeitintegration und sind durch Kollisionsprobleme schwer zu administrieren. Nach wie vor wird in der Praxis meist die Kombination Outlook/Exchange eingesetzt. Wer nun Outlook-Clients in seine Lösung voll integrieren will, kommt kaum um eine echte MAPI-Einbindung herum.

Die Groupware Zarafa stellt mit der PHP-MAPI-Extension einen sehr umfangreichen Satz von Befehlen und Schnittstellen aus Microsofts MAPI-Welt unter PHP zur Verfügung. Die Entwickler haben sich bei der gut dokumentierten Syntax [1] stark an das offen liegende MAPI-Protokoll gehalten, so dass ein Großteil der Informationen von Microsoft [2] auch auf die PHP-MAPI-Funktionen anwendbar sind. Dieser Vorteil der Kompatibilität stellt allerdings die Anforderung an den PHP-Entwickler, auch Grundwissen über MAPI zu besitzen.

Outlook-Kontakte in PHP ausgeben

Im folgenden Beispiel wird demonstriert, wie einfach der Zugriff auf die Kontakte eines Zarafa-Benutzers aus der eigenen PHP-Applikation heraus erfolgen kann, wenn man nur weiß, wie man die MAPI-spezifischen Konstanten findet. Mit dieser einfachen Anwendung lassen sich zum Beispiel die im TYPO3-Projekt publizierten Kontakte eines Vereins bequem mit Microsoft Outlook verwalten. Zunächst gilt es, so wie man es von MySQL & Co. gewohnt ist, eine Verbindung zur Datenbank, dem MAPI-Store, herzustellen (siehe Listing 1). Der String „$server“ gibt dabei die URL zur SOAP-Schnittstelle von Zarafa an. Im Erfolgsfall enthält „$stores“ ein Array aus den MAPI-Stores des Benutzers „$user“. Dies sind im Normalfall genau zwei: Der „default-store“ (die eigenen PIM-Daten) an Position 0 und der „public-store“ (die gemeinsamen Daten) an Position 1.

PHP
$server = 'http://localhost:236/zarafa';
$stores = mapi_openmsgstore_zarafa($user, $pass, $server);

if (is_array($stores)) $default_store = $stores[0];
		else die('Fehler');
Listing 1

Wie man in Microsofts Outlook sieht, sind die MAPI-Daten in einer Baumstruktur organisiert. Um zum gewünschten Zweig zu gelangen, erzeugt man einen Zeiger auf das Mutter-Element über die Funktion „mapi_msgstore_openentry“ und fragt den Zeiger auf den gewünschten Zweig via „mapi_getprops“ ab (siehe Listing 2). Hier trifft man auf eine Hürde: MAPI-Objekte werden über Eigenschaften (Properties) adressiert, die aus Typ und ID bestehen. Die Funktion „mapi_prop_tag“ fügt diese zu einer einfach verwendbaren Konstante zusammen. Eine Liste von Properties (Prefix PR_) und Property Types (Prefix PT_) findet sich in der Datei „include/mapi/mapitags.php“ des Zarafa WebAccess. Alternativ kann man auch über Outlook-Plugins von Drittanbietern [3] selbst nach den passenden Werten suchen.

PHP
define('PT_BIN',258);
define('PR_IPM_CONTACT_ENTRYID',mapi_prop_tag(PT_BIN,0x36D1));

$root = mapi_msgstore_openentry($default_store);
$container = mapi_getprops($root,array(PR_IPM_CONTACT_ENTRYID));

if (isset($container[PR_IPM_CONTACT_ENTRYID])) 
		$contact_entryid = $container[PR_IPM_CONTACT_ENTRYID];
		else die('Fehler');
Listing 2

Nachdem nun bekannt ist, wo sich der Ordner mit den Kontaktdaten befindet, kann man diesen in Tabellenform öffnen und die gewünschten Daten abfragen. Die Funktion „mapi_table_queryallrows“ übernimmt dazu als Parameter einen Zeiger auf die Tabelle und ein Array mit den gewünschten Eigenschaften. Im Folgenden werden die Vor- und Nachnamen sowie das Unternehmen aller Kontakte abgefragt:

PHP
define('PT_TSTRING',30);
define('PR_GIVEN_NAME',mapi_prop_tag(PT_TSTRING,0x3A06));
define('PR_SURNAME',mapi_prop_tag(PT_TSTRING,0x3A11));
define('PR_COMPANY_NAME',mapi_prop_tag(PT_TSTRING,0x3A16));

$properties = array();
$properties["given_name"] = PR_GIVEN_NAME; 
$properties["surname"] = PR_SURNAME;
$properties["company_name"] = PR_COMPANY_NAME;

$folder = mapi_msgstore_openentry($default_store, $contact_entryid);
$table = mapi_folder_getcontentstable($folder);
$list = mapi_table_queryallrows($table,$properties);
Listing 3

Das Array „$list“ enthält nun je Kontakt ein Array aus den abgefragten Daten. Das folgende Code-Fragment demonstriert den Zugriff auf die Daten:

PHP
 foreach ($list as $item) {
	echo $item[$properties['company_name']].'<br>';
	echo $item[$properties['given_name']].'<br>';
	echo $item[$properties['surname']].'<br>';
}
Listing 4

Zarafa WebAccess

Eine sehr umfangreiche Anwendung der PHP-MAPI-Extension ist der Zarafa WebAccess, das Web-Frontend von Zarafa. Dessen nicht verschlüsselte PHP-Skripte bieten dem PHP-Entwickler einen Einblick in den lesenden und schreibenden Zugriff auf E-Mails, Termine, Kontakte, Aufgaben und Notizen. Der WebAccess greift dabei nicht nur auf den eigenen Mailstore zu, sondern auch auf die gemeinsamen Ordner und die freigegebenen Ordner anderer Benutzer.

Mit Hilfe der PHP-MAPI-Extension lässt sich Outlook täuschend echt im Web nachbilden.

Mit Hilfe der PHP-MAPI-Extension lässt sich Outlook täuschend echt im Web nachbilden.

Öffnet man den Kalender eines Benutzers via WebAccess in einem Browser und parallel dazu denselben Kalender des Benutzers in Microsoft Outlook, offenbart sich ein weiteres Feature der PHP-MAPI-Extension: Wird ein Kalenderdatum per Drag&Drop im WebAccess verschoben, wandert dieses in Outlook sofort mit. Die PHP-MAPI-Befehle arbeiten also nicht nur „realtime“ mit dem MAPI-Store, sie senden auch noch ein „NOTIFY“ an eventuell angemeldete Outlooks, damit die Änderungen auch dort vorgenommen werden.

Fazit

Ob ein neuer Kontakt in die online publizierte Partnerdatenbank eines Unternehmens einzutragen ist, sich der Vorstand eines Vereines geändert hat oder dem Veranstaltungskalender neue Termine hinzuzufügen sind – alles kann mit dem nach wie vor auf sehr vielen PCs vorhandenen Microsoft Outlook getan werden. Als Schnittstelle fungiert der Zarafa Server, der mit Outlook in dessen Sprache MAPI und mit der Internetpräsenz in deren Sprache PHP kommuniziert. Zwar ist Zarafa ein kommerzielles Produkt, doch kauft man sich zu einem akzeptablen Preis neben der Groupware-Funktionalität komfortable und sehr gut dokumentierte Schnittstellen, einen Echtzeitzugriff in jeder Hinsicht und eine sehr einfache und übersichtliche Möglichkeit, komplett selbst gestaltete Kontaktlisten oder Kalender zu verwalten.

- Anzeige-

Dieser Artikel stammt aus:

 

Weitere Artikel dieser Ausgabe

2. Internationale TYPO3 Konferenz T3CON06

Alle Vorträge und Workshops im kompakten Überblick

Auf der diesjährigen T3CON06, die vom 5. bis 8. Oktober in Karlsruhe stattfindet, werden... »

60 PI/s mit TYPO3

TYPO3 hat sich für kleinere und mittlere Internetauftritte etabliert. Weniger gefragt ist... »

Alfresco

Enterprise Content Management goes Open Source

Obwohl „Document Management“ als Applikationskategorie schon rund zwanzig Jahre besteht,... »

Archivierung mit Open-Source-Software

Fedora und DSpace im Praxiseinsatz

Auch wenn es vielen unmöglich erschien: Open Source erobert nun auch das scheinbar langweilige,... »

Aus Daten Geld machen

Der Wertbeitrag der IT im Unternehmen

Manche Unternehmen ziehen aus den verfügbaren Daten optimalen Nutzen. Sie digitalisieren... »

Ausgebucht

Full House beim ersten TYPO3 Tag in Stuttgart

Der erste TYPO3 Tag in Stuttgart zeigte auf eindrucksvolle Weise, wie stark das Interesse an... »

Contineo

Einfach (weil) intelligent

Stellen Sie sich vor: Sie haben ein System, das Dokumente jeglicher Art verwalten kann und Ihnen... »

Das Layout fest im Griff

Striktes Corporate Design im Redaktionssystem mit FlexContentElementen

TYPO3 bietet die Möglichkeit, FlexContentElemente einzusetzen. Mit ihrer Hilfe ist es ohne... »

Das OASIS Open Document Format

Der neue ISO-Standard für Office-Dokumente

Viel ist über das OASIS Open Document Format geschrieben worden. Eine Menge davon sind Mythen... »

Der Erpel ist gelandet

Neues in der aktuellen Version ? wo steht Ubuntu heute?

Knapp zwei Jahre sind vergangen, seit Ubuntu Linux das Licht der Welt erblickte. Aufgrund überzeugender... »