Freigeben über


Senden von Nachrichten durch Nachrichtenspeicheranbieter

Gilt für: Outlook 2013 | Outlook 2016

Nachrichtenspeicheranbieter sind nicht erforderlich, um ausgehende Nachrichtenübermittlungen zu unterstützen (d. a. die Möglichkeit für Clientanwendungen, den Nachrichtenspeicheranbieter zum Senden von Nachrichten zu verwenden). Clientanwendungen müssen beim Senden von Nachrichten einen Nachrichtenspeicher verwenden, da die Daten der Nachricht zwischen dem Zeitpunkt, zu dem der Benutzer sie erstellt hat, und der Zeit gespeichert werden müssen, zu der der MAPI-Spooler die Nachricht an einen Transportanbieter zur Übermittlung an das zugrunde liegende Messagingsystem übergibt. Wenn Ihr Nachrichtenspeicheranbieter ausgehende Nachrichtenübermittlungen nicht unterstützt, kann er nicht als Standardnachrichtenspeicher verwendet werden.

Um das Senden von Nachrichten zu unterstützen, muss Ihr Nachrichtenspeicheranbieter die folgenden Schritte ausführen:

Die SetLockState-Methode ist wichtig für die ordnungsgemäße Interaktion zwischen dem MAPI-Spooler und clients. Wenn der MAPI-Spooler SetLockState für eine ausgehende Nachricht aufruft, darf der Nachrichtenspeicheranbieter Clients das Öffnen der Nachricht nicht erlauben. Wenn ein Client versucht, eine Nachricht zu öffnen, die vom MAPI-Spooler gesperrt ist, sollte der Nachrichtenspeicheranbieter MAPI_E_NO_ACCESS zurückgeben. Der gesperrte Status einer Nachricht muss nicht persistent sein, falls der Speicher heruntergefahren wird, während die Nachricht vom MAPI-Spooler gesperrt wird.

Unabhängig davon, ob der MAPI-Spooler eine ausgehende Nachricht gesperrt hat, sollte der Nachrichtenspeicheranbieter nicht zulassen, dass eine Nachricht in der Warteschlange für ausgehende Nachrichten zum Schreiben geöffnet wird. Wenn ein Client die IMSgStore::OpenEntry-Methode für eine ausgehende Nachricht mit dem flag MAPI_MODIFY aufruft, sollte der Aufruf fehlschlagen und MAPI_E_SUBMITTED zurückgeben. Wenn eine Clientanwendung OpenEntry für eine ausgehende Nachricht mit dem flag MAPI_BEST_ACCESS aufruft, sollte der Nachrichtenspeicheranbieter schreibgeschützten Zugriff auf die Nachricht zulassen.

Wenn eine Nachricht vom MAPI-Spooler verarbeitet werden soll, legt der Nachrichtenspeicheranbieter die eigenschaft PR_SUBMIT_FLAGS (PidTagSubmitFlags) der Nachricht auf SUBMITFLAG_LOCKED fest. Der wert SUBMITFLAG_LOCKED gibt an, dass der MAPI-Spooler die Nachricht für die exklusive Verwendung gesperrt hat. Der andere Wert für PR_SUBMIT_FLAGS, SUBMITFLAG_PREPROCESS, wird festgelegt, wenn die Nachricht von einer oder mehreren Präprozessorfunktionen vorverarbeitet werden muss, die von einem Transportanbieter registriert wurden.

In den folgenden Verfahren wird beschrieben, wie der Nachrichtenspeicher, der Transport und der MAPI-Spooler interagieren, um eine Nachricht von einem Client an einen oder mehrere Empfänger zu senden.

Die Clientanwendung ruft die IMessage::SubmitMessage-Methode auf. In SubmitMessage führt der Nachrichtenspeicheranbieter folgende Aktionen aus:

  1. Ruft IMAPISupport::P repareSubmit auf. Wenn MAPI einen Fehler zurückgibt, gibt der Nachrichtenspeicheranbieter diesen Fehler an den Client zurück.

  2. Legt das MSGFLAG_SUBMIT Bit in der PR_MESSAGE_FLAGS -Eigenschaft (PidTagMessageFlags) der Nachricht fest.

  3. Stellt sicher, dass eine Spalte für die eigenschaft PR_RESPONSIBILITY (PidTagResponsibility) in der Empfängertabelle vorhanden ist, und legt diese auf FALSE fest, um anzugeben, dass noch kein Transport die Verantwortung für die Übertragung der Nachricht übernommen hat.

  4. Legt das Datum und die Uhrzeit der Ursprungsangabe in der eigenschaft PR_CLIENT_SUBMIT_TIME (PidTagClientSubmitTime) fest.

  5. Ruft IMAPISupport::ExpandRecips auf, um folgendes auszuführen:

    1. Erweitern Sie alle pers�nlichen Verteilerlisten und benutzerdefinierte Empf�nger, und Ersetzen Sie alle ge�nderten Anzeigenamen durch ihren Originalnamen.

    2. Entfernen von Duplikaten.

    3. Überprüfen Sie, ob eine vorverarbeitete Vorverarbeitung erforderlich ist, und legen Sie das flag NEEDS_PREPROCESSING und die eigenschaft PR_PREPROCESS (PidTagPreprocess) fest, die für MAPI reserviert ist.

    4. Legen Sie das Flag NEEDS_SPOOLER, wenn der Nachrichtenspeicher eng mit einer Transport verkn�pft ist und nicht behandelt alle Empf�nger werden kann.

  6. F�hrt die folgenden Aufgaben aus, wenn der Nachrichtenkennzeichnung NEEDS_PREPROCESSING festgelegt ist:

    1. Fügt die Nachricht in die ausgehende Warteschlange ein, wobei das SUBMITFLAG_PREPROCESS Bit in der eigenschaft PR_SUBMIT_FLAGS festgelegt ist.

    2. Benachrichtigt die MAPI-Warteschlange, die die Warteschlange ge�ndert wurde.

    3. Gibt die Steuerung an den Client, und Nachrichtenfluss wird in die Warteschlange MAPI fortgesetzt. Die MAPI-Warteschlange f�hrt die folgenden Aufgaben:

      1. Sperrt die Nachricht durch Aufrufen von IMsgStore::SetLockState.

      2. Führt die erforderliche Vorverarbeitung durch Aufrufen aller Vorverarbeitungsfunktionen in der Reihenfolge der Registrierung aus. Transportanbieter rufen IMAPISupport::RegisterPreprocessor auf, um Vorverarbeitungsfunktionen zu registrieren.

      3. Ruft IMessage::SubmitMessage für die geöffnete Nachricht auf, um dem Nachrichtenspeicher mitzuteilen, dass die Vorverarbeitung abgeschlossen ist.

Wenn keine Vorverarbeitung erfolgt ist oder eine Vorverarbeitung und der MAPI-Spooler Mit dem Namen SubmitMessage ausgeführt wurde, führt der Nachrichtenspeicheranbieter im Clientprozess Folgendes aus:

  • Performs the following tasks if the message store is tightly coupled to a transport and the NEEDS_SPOOLER flag was returned from IMAPISupport::ExpandRecips:

    • Verarbeitet Empf�nger, die es verarbeiten kann.

    • Legt die PR_RESPONSIBILITY -Eigenschaft auf TRUE fest, f�r alle Empf�nger, die sie behandelt.

    • F�hrt die folgenden Aufgaben aus, wenn alle Empf�nger zu diesem eng gekoppelten Store und Transport bekannt sind:

      • Ruft IMAPISupport::CompleteMsg auf, wenn die Nachricht vorverarbeitet wurde oder der Nachrichtenspeicheranbieter möchte, dass der MAPI-Spooler die Nachrichtenverarbeitung abschließen soll. Der Nachrichtenfluss wird mit dem MAPI-Spooler fortgesetzt.

      • Führt die folgenden Aufgaben aus, wenn die Nachricht nicht vorverarbeitet wurde oder der Nachrichtenspeicheranbieter nicht möchte, dass der MAPI-Spooler die Nachrichtenverarbeitung abschließen soll:

        1. Kopiert die Nachricht in den Ordner, der durch den Eintragsbezeichner in der eigenschaft PR_SENTMAIL_ENTRYID (PidTagSentMailEntryId) identifiziert wird, sofern festgelegt.

        2. Löscht die Nachricht, wenn die eigenschaft PR_DELETE_AFTER_SUBMIT (PidTagDeleteAfterSubmit) auf TRUE festgelegt wurde.

        3. Entsperrt die Nachricht, wenn sie gesperrt ist.

        4. Kehrt zum Client zurück. Der Nachrichtenfluss ist abgeschlossen.

    • Führt die folgenden Aufgaben aus, wenn die Nachricht vorverarbeitet wurde oder der Anbieter möchte, dass der MAPI-Spooler die Nachrichtenverarbeitung abschließen soll:

      1. Ruft IMAPISupport::CompleteMsg auf.

      2. Setzt den Nachrichtenfluss mit dem MAPI-Spooler fort. Weitere Informationen finden Sie unter Senden von Nachrichten: MAPI-Spooleraufgaben.

    • Führt die folgenden Aufgaben aus, wenn die Nachricht nicht vorverarbeitet wurde oder der Anbieter nicht möchte, dass der Spooler die Nachrichtenverarbeitung abschließt:

      1. Kopiert die Nachricht in den Ordner, der durch den Eintragsbezeichner in der PR_SENTMAIL_ENTRYID-Eigenschaft identifiziert wird, sofern festgelegt.

      2. Löscht die Nachricht, wenn die eigenschaft PR_DELETE_AFTER_SUBMIT auf TRUE festgelegt wurde.

      3. Entsperrt die Nachricht, wenn sie gesperrt ist.

      4. Kehrt zum Aufrufer zurück. Der Nachrichtenfluss ist abgeschlossen.

  • F�hrt die folgenden Aufgaben aus, wenn der Nachrichtenspeicher nicht eng um einen Transport verkn�pft, nicht alle Empf�nger mit dem Nachrichtenspeicher bezeichnet wurden oder das Flag NEEDS_SPOOLER festgelegt ist:

    1. Versetzt die Nachricht in der ausgehenden Warteschlange ohne das SUBMITFLAG_PREPROCESS Bit in der PR_SUBMIT_FLAGS -Eigenschaft festlegen.

    2. Benachrichtigt die MAPI-Warteschlange, die die ausgehende Warteschlange ge�ndert wurde, indem eine Benachrichtigung �ber eine Tabelle zu generieren.

    3. Gibt f�r den Client und Nachrichtenfluss weiterhin mit einem Satz von Aufgaben, die MAPI-Warteschlange.

Siehe auch