Suchen des Nachrichtendownloadverlaufs für ein POP3-Konto
In diesem Thema wird beschrieben, wie ein E-Mail-Client auf die PidTagAttachDataBinary-Eigenschaft zugreifen kann, um den Nachrichtendownloadverlauf für ein POP3-Konto abzurufen.
Warum sollte der Downloadverlauf der Nachricht abgerufen werden?
Mit dem POP-Anbieter (Post Office Protocol) für Outlook können Benutzer neue E-Mail-Nachrichten auf ihrem lokalen Gerät abrufen und herunterladen und anschließend diese E-Mail-Nachrichten auf dem E-Mail-Server belassen oder löschen. Wenn der E-Mail-Client sucht, ob neue Nachrichten heruntergeladen werden sollen, muss er nur die neuen Nachrichten für diesen Posteingang identifizieren und herunterladen können. Der E-Mail-Client verwendet dazu zunächst den Befehl UIDL (Unique ID Listing), der eine Zuordnung jeder Nachricht abruft, die jemals an diesen Posteingang an einen eindeutigen Bezeichner (UID) übermittelt wurde. Der Client ruft auch den Nachrichtendownloadverlauf für Nachrichten ab, die für den Posteingang auf diesem Client heruntergeladen oder gelöscht wurden. Mithilfe der Meldungs-UID-Zuordnung und des Downloadverlaufs kann der Client dann die Nachrichten identifizieren, die im Verlauf nicht vorhanden sind, als neu und daher heruntergeladen werden sollten.
So rufen Sie den Downloadverlauf der Nachricht für einen Posteingang ab:
Führen Sie die Schritte in diesem Thema aus, um die PidTagAttachDataBinary-Eigenschaft zu finden, die den Verlauf in einem BLOB (Binary Large Object) enthält, das einem bestimmten Format folgt.
Fahren Sie mit dem Analysieren des Nachrichtendownloadverlaufs für ein POP3-Konto fort, in dem beschrieben wird, wie Dieses BLOB analysiert wird, um Nachrichten zu identifizieren, die für diesen Posteingang heruntergeladen oder gelöscht wurden.
Grundlegende Konzepte für die Suche nach dem Downloadverlauf der Nachricht
Der Nachrichtendownloadverlauf für einen Posteingang wird in der binären MAPI-Eigenschaft PidTagAttachDataBinary in einer Anlage einer ausgeblendeten Nachricht im Posteingang gespeichert. Tabelle 1 enthält Ressourcen für Konzepte, die Ihnen helfen zu verstehen, wie Sie den Downloadverlauf der Nachricht finden.
Tabelle 1. Kernkonzepte
Titel des Artikels | Beschreibung |
---|---|
MAPI Ausgeblendete Ordner |
MAPI ermöglicht E-Mail-Clients das Speichern von Informationen in ausgeblendeten Ordnern und ausgeblendeten Nachrichten. Ausgeblendete Ordner befinden sich im zugeordneten Teil von MAPI-Ordnern und enthalten in der Regel Informationen, die für Benutzer nicht sichtbar sind und nicht von Benutzern bearbeitet werden sollen. Clients legen fest, welche Formate und Inhalte in ausgeblendeten Nachrichten in ausgeblendeten Ordnern gespeichert werden sollen. |
MAPI-Nachrichten |
MAPI speichert Nachrichten in Ordnern, entweder in der IPM-Standardunterstruktur, die für Benutzer eines Clients sichtbar ist, oder außerhalb der Unterstruktur und für Benutzer unsichtbar. Nachrichten können zusätzliche Daten in einer Anlage gespeichert haben, die in Form einer Datei, einer anderen Nachricht oder eines OLE-Objekts vorliegen können. Im Fall des Nachrichtendownloadverlaufs wird der Verlauf in einer Eigenschaft einer Nachricht gespeichert, die an eine andere ausgeblendete Nachricht angefügt ist. |
Übersicht über Nachrichteneigenschaften |
Wenn ein Client Informationen in einer Nachricht speichert, speichert er die Informationen tatsächlich in einer Eigenschaft der Nachricht. MAPI unterstützt viele Eigenschaften – einige sind immer vorhanden und können von Clients festgelegt werden, andere sind optional – und Clients können nicht erwarten, dass sie verfügbar oder auf gültige Werte festgelegt sind. Der Verlauf des Nachrichtendownloads wird in der PidTagAttachDataBinary-Eigenschaft einer Anlage zu einer ausgeblendeten Nachricht gespeichert. |
MAPI-Profile |
Bei der Anmeldung in einer Sitzung wählt der E-Mail-Client ein Profil aus, das die zu verwendenden Anbieter und Dienste beschreibt. Ein Profil ist in Abschnitte unterteilt, die Eigenschaften enthalten. Insbesondere sind die Eigenschaften PidTagSearchKey (PR_SEARCH_KEY) und PidTagProfileName (PR_PROFILE_NAME) immer vorhanden. Der Suchschlüssel eines Profils ist unter allen Profilen eindeutig und wird im Profilabschnitt gespeichert, der von MUID_PROFILE_INSTANCE (der in MAPIGUID definiert ist) identifiziert wird. H). Verwenden Sie IMAPISession::OpenProfileSection , um den Abschnitt zu öffnen, und verwenden Sie IMAPIProp::GetProps , um die Eigenschaftswerte abzurufen. |
Inhaltstabellen |
Nachrichtenspeicheranbieter implementieren Inhaltstabellen für ihre Ordner. Für ausgeblendete Nachrichten im zugeordneten Teil eines Ordners unterstützen Nachrichtenspeicheranbieter verknüpfte Inhaltstabellen, und Clients können die IMAPIContainer::GetContentsTable-Methode verwenden, um einen Zeiger auf die zugeordnete Inhaltstabelle zurückzugeben. |
Informationen zu Einschränkungen Arten von Einschränkungen Erstellen einer Einschränkung Beispieleinschränkungscode |
In MAPI können Clients Einschränkungen verwenden, um Inhaltstabellen zu filtern, um nach Zeilen zu suchen, die Nachrichten darstellen, für die eine bestimmte Eigenschaft auf einen bestimmten Wert festgelegt ist. Einschränkungen werden mithilfe der SRestriction-Datenstruktur definiert, die eine Vereinigung spezialisierterer Einschränkungsstrukturen enthalten kann. Die IMAPITable::FindRow-Methode wendet eine Einschränkung an und ruft die erste Zeile in einer Tabelle ab, die den Einschränkungskriterien entspricht. |
Informationen zum Registrieren von Speichern für die Indizierung |
Verwenden Sie die Eigenschaft PidTagStoreProvider (PR_MDB_PROVIDER), um den Typ des Speicheranbieters zu überprüfen. Um beispielsweise zu überprüfen, ob ein Speicher ein Exchange-Speicher ist, sollte die PidTagStoreProvider-Eigenschaft einen Wert zurückgeben, der durch die Konstante pbExchangeProviderPrimaryUserGuid dargestellt wird, die in der öffentlichen Headerdatei edkmdb.h definiert ist. |
Suchen der entsprechenden ausgeblendeten Nachricht und Anlage
Da wir nun wissen, dass sich der Nachrichtendownloadverlauf für einen Posteingang in der PidTagAttachDataBinary-Eigenschaft einer Anlage zu einer ausgeblendeten Nachricht befindet, umfasst die Prozedur zum Suchen der entsprechenden Anlage der entsprechenden ausgeblendeten Nachricht die folgenden Verfahren:
Suchen der geeigneten ausgeblendeten Nachricht
Rufen Sie die Eigenschaft PidTagSearchKey (PR_SEARCH_KEY) aus dem Profil im profilabschnitt ab, der durch MUID_PROFILE_INSTANCE angegeben wird.
Öffnen Sie den Zugeordneten Inhalt für den Ordner Posteingang, indem Sie IMAPIContainer::GetContentsTable aufrufen.
Erstellen Sie eine Einschränkung basierend auf den Eigenschaften PidTagConversationKey (PR_CONVERSATION_KEY), PidTagSearchKey (PR_SEARCH_KEY) und PidTagMessageClass (PR_MESSAGE_CLASS), um eine Tabelle abzurufen, die alle ausgeblendeten Nachrichten im zugeordneten Inhalt des Posteingangs enthält. Im Folgenden finden Sie ein Beispiel für eine Einschränkung, die aus dem Suchen des POP3-UIDL-Verlaufs extrahiert wurde.
SRestriction rgRes[3]; SPropValue rgProps[3]; rgRes[0].rt = RES_AND; rgRes[0].res.resAnd.cRes = 2; rgRes[0].res.resAnd.lpRes = &rgRes[1]; rgRes[1].rt = RES_PROPERTY; rgRes[1].res.resProperty.relop = RELOP_EQ; rgRes[1].res.resProperty.ulPropTag = PR_CONVERSATION_KEY; rgRes[1].res.resProperty.lpProp = &rgProps[0]; rgRes[2].rt = RES_PROPERTY; rgRes[2].res.resProperty.relop = RELOP_EQ; rgRes[2].res.resProperty.ulPropTag = PR_MESSAGE_CLASS; rgRes[2].res.resProperty.lpProp = &rgProps[1]; rgProps[0].ulPropTag = PR_CONVERSATION_KEY; rgProps[0].Value.bin = pVals[iSearchKey].Value.bin; // PR_SEARCH_KEY from the profile rgProps[1].ulPropTag = PR_MESSAGE_CLASS; rgProps[1].Value.LPSZ = (LPTSTR)"IPM.MessageManager";
Suchen Sie in der Tabelle die ausgeblendete Meldung mithilfe von IMAPITable::FindRow.
Wenn Schritt 4 keine ausgeblendete Nachricht finden kann, ändern Sie die Einschränkung so, dass PidTagSearchKey (PR_SEARCH_KEY) anstelle von PidTagConversationKey verwendet wird, wie unten gezeigt:
rgRes[1].res.resProperty.ulPropTag = rgProps[0].ulPropTag = PR_SEARCH_KEY;
Suchen Sie die ausgeblendete Nachricht mithilfe von IMAPITable::FindRow.
Wenn Schritt 6 fehlschlägt, ändern Sie die Einschränkung so, dass PidTagSubject (PR_SUBJECT) dem folgenden Wert entspricht (siehe unten unter Verwendung der
printf
Formatvorlagenersetzung aus Platzgründen)."Outlook Message Manager (%s) (KEY: %s)", PR_PROFILE_NAME, HexFromBin(PR_SEARCH_KEY)
Suchen Sie die ausgeblendete Nachricht mithilfe von IMAPITable::FindRow.
Wenn Sie Outlook 2010 oder eine höhere Version ausführen, verwenden Sie die folgenden Werte für PidTagProfileName (PR_PROFILE_NAME) bzw . PidTagSearchKey (PR_SEARCH_KEY).
CHAR g_szGeneralKey[] = "General Key"; const SBinary g_binGeneralKey = {sizeof(g_szGeneralKey), (LPBYTE)g_szGeneralKey};
Führen Sie die Schritte 3 bis 8 aus. Wenn dadurch keine Nachricht gefunden werden kann, greifen Sie auf die ursprünglichen Schritte 3 bis 8 zurück.
Öffnen Sie die in Schritt 4, 6 oder 8 gefundene ausgeblendete Meldung.
Suchen der geeigneten Anlage der ausgeblendeten Nachricht
Da die ausgeblendete Nachricht möglicherweise mehrere Anlagen enthält, suchen Sie in der folgenden Reihenfolge nach der entsprechenden Anlage.
Hinweis
In diesem Verfahren wird erneut die printf
Stilersetzung aus Platzgründen verwendet.
Suchen Sie nach einer Anlage, deren PidTagAttachLongFilename (PR_ATTACH_LONG_FILENAME) mit der folgenden Zeichenfolge übereinstimmt, wobei
szEmailAddress
die SMTP-Adresse des Benutzers ist, wie im Profil des Benutzers angegeben. ."BlobPOP%s", szEmailAddress
Suchen Sie nach einer Anlage, deren PidTagAttachFilename (PR_ATTACH_FILENAME) mit "BlobPOP%s",
szEmailAddress
übereinstimmt.Suchen Sie nach einer Anlage, deren PidTagDisplayName (PR_DISPLAY_NAME) mit "BlobPOP%s",
szEmailAddress
übereinstimmt.Suchen Sie nach einer Anlage, deren PidTagAttachFilename (PR_ATTACH_FILENAME) mit "Blob%.8x", übereinstimmt,
dwAcctUID
wobeidwAcctUID
von PROP_ACCT_MINI_UID stammt. Sie können die IOlkAccount::GetProp-Methode verwenden, um auf die eigenschaft PROP_ACCT_MINI_UID zuzugreifen.
Zugreifen auf die PidTagAttachDataBinary-Eigenschaft der Nachrichtenanlage
Nachdem Sie die entsprechende Nachrichtenanlage der ausgeblendeten Nachricht gesucht haben, verwenden Sie IMAPIProp::GetProps , um die PidTagAttachDataBinary-Eigenschaft der Anlage zu lesen.
Nächste Schritte
Sie haben in diesem Thema gelernt, wie Sie den Nachrichtendownloadverlauf für den Posteingang eines POP3-E-Mail-Clients suchen. Unter Analysieren des Nachrichtendownloadverlaufs für ein POP3-Konto erfahren Sie, wie Sie diesen Verlauf analysieren, um Nachrichten zu identifizieren, die für den Posteingang heruntergeladen oder gelöscht wurden.