Freigeben über


Aufrufen von MAPI über Windows-Dienste

Gilt für: Outlook 2013 | Outlook 2016

Damit MAPI-Clientanwendungen, die als Windows-Dienste geschrieben sind, mit MAPI-kompatiblen Dienstanbietern arbeiten können, erzwingt MAPI mehrere Einschränkungen und Anforderungen.

FÜR MAPI-Clients gelten die folgenden Einschränkungen:

  • Sie können keine Benutzeroberfläche zulassen.

  • Sie können Nachrichten nur über einen eng gekoppelten Nachrichtenspeicher und Transportanbieter senden. Darüber hinaus können MAPI-Clients Nachrichten nur mit dem Microsoft Exchange Server oder einem anderen serverbasierten Transportanbieter senden und empfangen. Aufgrund von Identitäts- und Sicherheitsproblemen zwischen Clientanwendungen und dem MAPI-Spooler werden die meisten Transportanbieter in einem Dienst nicht unterstützt.

Alle MAPI-Clientanwendungen, unabhängig davon, ob sie als Windows-Dienste implementiert sind, müssen die MAPIInitialize-Funktion aufrufen, um die MAPI-Bibliotheken zu initialisieren. Ein Aufruf der OleInitialize-Funktion ist auch erforderlich, um die OLE-Bibliotheken zu verwenden. Sowohl MAPIInitialize als auch OleInitialize rufen die CoInitialize-Funktion auf, um die COM-Bibliotheken (Component Object Model) zu initialisieren. Clients, bei denen es sich um Dienste handelt, müssen ein spezielles Flag MAPI_NT_SERVICE im ulFlags-Member der MAPIINIT_0-Struktur festlegen, das an MAPIInitialize übergeben wird, und im ulFlags-Parameter , der an die MAPILogonEx-Funktion übergeben wird, um MAPI über ihre spezielle Implementierung zu informieren.

MAPI-Clients, die als Windows-Dienste geschrieben und mit der MAPI-Clientschnittstelle geschrieben werden, haben eine zusätzliche Anforderung. Sie müssen das MAPI_NO_MAIL-Flag im Aufruf von MAPILogonEx festlegen. Andere Clienttypen müssen kein Flag für die Anmeldung festlegen, da es automatisch von MAPI festgelegt wird.

Um Nachrichten in einem Initialisierungsthread zu verarbeiten, führt ein MAPI-Client, der als Dienst implementiert ist, Folgendes aus:

  1. Ruft die MsgWaitForMultipleObjects-Funktion auf, wenn der Standard Thread blockiert.

  2. Ruft die Sequenz GetMessage, TranslateMessage und DispatchMessage der Windows-Funktionen auf, um die Nachricht zu behandeln, wenn MsgWaitForMultipleObjects die Summe des Werts des Parameters nCount und den Wert von WAIT_OBJECT_0 zurückgibt, der angibt, dass sich eine Nachricht in der Warteschlange befindet.

Siehe auch

MAPIInitialize
MAPIINIT_0
Probleme mit der MAPILogonEx-Betriebsumgebung