Die EWS Managed API verfügt über eine Reihe von Funktionen zum Abrufen und Verwalten von E-Mail-Konversationen ( aka E-Mail-Threads ) ). Leider arbeitet ein großer Teil von ihnen nur gegen neue Versionen von Exchange (2013 usw.)
Outlook implementiert E-Mail-Threads für ältere Versionen von Exchange. Vielleicht geschieht dies, indem die Threads selbst verwaltet werden (Outlook ist eine Desktop -Anwendung, die E-Mails werden auf dem lokalen Rechner kopiert, daher können sie einfach nach Konversationsthema usw. gruppiert werden .).
Nun, wie kann das E-Mail-Threading innerhalb einer Webanwendung unterstützt werden? Was wird üblicherweise für die Unterstützung dieser Funktion in einem Exchange-Client getan? Mit unterstützt meine ich:
Probleme mit EWS Managed Api etc .:
Was ich jetzt verwende (als Workaround) :
Einige Probleme mit der oben beschriebenen Implementierung
Bei E-Mail-Konversationen / E-Mail-Threads weiß niemand, was was unterstützt:
Hinweis: Ich bin nicht sehr sicher über die Unterstützung der Item.ConversationId, da ich den Code nicht zur Hand habe und momentan keinen Test durchführen kann. Bitte verzeihen Sie mir deshalb, wenn diese Eigenschaft überhaupt verfügbar ist, wenn Sie die EWS Managed API für Exchange 2010 verwenden.
Alles in allem Haben Sie Ideen zur Implementierung der E-Mail-Konversation / E-Mail-Threading-Funktion in einer Webanwendung mithilfe der EWS Managed API für einen Exchange 2010-Server?
Vielen Dank für die Geduld, einen so langen Beitrag zu lesen:)
Einige Referenzen:
Implementieren der Outlook 2010-Gruppe nach Konversation mithilfe von EWS und Exchange 2007 Exchange Webservice Managed API - Suchen Sie Elemente nach erweiterten Eigenschaften
Ich habe einige der Dokumentationsfragen angesprochen, die Sie in den Kommentaren hatten, also werde ich versuchen, Ihre wirklichen Programmierfragen hier zu beantworten.
Um Ihre Masteransicht zu erhalten, ist ExchangeService.FindConversation die richtige Methode. Es unterstützt Paging, indem die Ergebnisse auf die Anzahl der Konversationen beschränkt werden, die vom Ansichtsparameter angegeben werden. Sie könnten es bei Bedarf anrufen, um ältere und ältere Ergebnisse zu erhalten.
Um Ihre Detailansicht anzuzeigen, da ExchangeService.GetConversationItems nicht in Ex2010 verfügbar ist, können Sie ExchangeService.FindItems mit einem IsEqualTo-Suchfilter verwenden, der nach Elementen mit einer übereinstimmenden ConversationId sucht (siehe nachfolgenden Code). Weitere Informationen zu Suchfiltern finden Sie hier: Vorgehensweise: Verwenden Sie Suchfilter mit EWS in Exchange .
In der folgenden Methode habe ich die Eigenschaften des FindItems-Aufrufs eingeschränkt, indem ich einen Eigenschaftensatz angegeben und nicht alle Eigenschaften zurückgegeben habe. Wenn Sie alle Eigenschaften zurückgeben möchten, entfernen Sie einfach die Zeile, die das PropertySet festlegt.
%Vor%Sobald Sie jede ItemID (die vom obigen Code zurückgegeben wird) haben, können Sie die Bind-Methode verwenden, um alle Eigenschaften für jedes Element zu erhalten.
Ich hoffe, das hilft. Ich werde nachgehen, wenn die Versionierungsprobleme für die Methoden auf MSDN aktualisiert wurden.
Allgemeiner scheint es ein Problem mit der ConversationID zu geben, wie es im Allgemeinen verstanden und tatsächlich in Exchange selbst verwendet wird. Dies könnte sich auf Ihre (oder irgendjemandes) Entwicklung auswirken.
Ich habe an einem E-Mail-Ticketing-Programm in der Produktion gearbeitet und verwendete ConversationID, um E-Mails in einem einzigen Thread zur einfachen Anzeige zusammenzufassen.
Aber jetzt scheint es, dass es E-Mails gibt, die nicht auf demselben Thread sind - ja, sie teilen das gleiche Subjekt und die Absenderadresse und werden um dasselbe Datum / dieselbe Zeit gesendet - aber sie kommen nicht in jedem Zitat vor andere (z. B. eine E-Mail-Stelle als Antwort auf eine ältere, wie viele einen "E-Mail-Thread" auslegen) - dennoch haben diese unterschiedlichen E-Mails die gleiche genaue ConversationID, obwohl ein Body nichts mit einem anderen zu tun hat.
Auch wenn das Datum / die Zeit nicht in der Nähe ist, z. B. eine "Gedanken des Tages" -Email von derselben Person, werden diese manchmal mit derselben ConversationID gruppiert. Dies mag sich in diesem Fall als nützlich erweisen, ist aber im Geschäftsfall einer Gehaltsgruppe, die "RE: 401k" sendet, nicht so nützlich.
Um klar zu sein, es handelt sich hierbei nicht um eine Groß- und Kleinschreibung, die ich bei der Verwendung von Item.ExchangeID zuvor übersehen hatte (was einzigartig ist, wenn Sie den Fall berücksichtigen). Selbst bei Berücksichtigung von Groß- und Kleinschreibung haben ganz unterschiedliche E-Mail-Threads dieselbe ConversationID.
Dies legt nahe, dass man sich nicht auf ConversationID als GROUP BY-Klausel verlassen kann und zusätzlichen, benutzerdefinierten Code verwenden muss.
Tags und Links asp.net exchange-server exchangewebservices ews-managed-api