Ich muss in der Lage sein, E-Mails von einem bestimmten Postfach auf einem MS Exchange Server (unternehmensintern) zu überwachen und zu lesen. Ich muss auch in der Lage sein, die E-Mail-Adresse, den Betreff und den Nachrichtentext des Absenders zu lesen und gegebenenfalls einen Anhang herunterzuladen.
Was ist der beste Weg, dies mit C # (oder VB.NET) zu tun?
c#
email
exchange-server
mapi
Vajarov
quelle
quelle
Antworten:
Es ist ein Chaos. MAPI oder CDO über eine .NET-Interop-DLL wird von Microsoft offiziell nicht unterstützt - es scheint gut zu funktionieren, aber es gibt Probleme mit Speicherlecks aufgrund ihrer unterschiedlichen Speichermodelle. Sie könnten CDOEX verwenden, dies funktioniert jedoch nur auf dem Exchange-Server selbst, nicht remote. nutzlos. Sie könnten mit Outlook zusammenarbeiten, aber jetzt haben Sie gerade eine Abhängigkeit von Outlook hergestellt. Overkill. Schließlich könnten Sie die WebDAV-Unterstützung von Exchange 2003 verwenden , aber WebDAV ist kompliziert, .NET verfügt nur über eine unzureichende integrierte Unterstützung, und Exchange 2007 stellt die WebDAV-Unterstützung fast vollständig ein .
Was kann ein Mann tun? Am Ende habe ich die IMAP-Komponente von AfterLogic verwendet, um über IMAP mit meinem Exchange 2003-Server zu kommunizieren, und dies hat sehr gut funktioniert. (Normalerweise suche ich nach kostenlosen oder Open-Source-Bibliotheken, aber ich fand, dass alle .NET-Bibliotheken fehlen - insbesondere, wenn es um einige der Macken der IMAP-Implementierung von 2003 geht - und diese war billig genug und arbeitete an der ersten versuche es. Ich weiß, dass es da draußen noch andere gibt.)
Wenn sich Ihre Organisation jedoch in Exchange 2007 befindet, haben Sie Glück. Exchange 2007 wird mit einer SOAP-basierten Webdienstschnittstelle geliefert , die endlich eine einheitliche, sprachunabhängige Art der Interaktion mit dem Exchange-Server bietet. Wenn Sie 2007+ zu einer Anforderung machen können, ist dies definitiv der richtige Weg. (Leider hat mein Unternehmen die Richtlinie "Aber 2003 ist nicht gebrochen".)
Wenn Sie Exchange 2003 und 2007 überbrücken müssen, ist IMAP oder POP3 definitiv der richtige Weg.
quelle
Äh,
Ich bin hier vielleicht etwas zu spät, aber ist das nicht der Punkt für EWS?
https://msdn.microsoft.com/en-us/library/dd633710(EXCHG.80).aspx
Benötigt ungefähr 6 Codezeilen, um die Mail aus einer Mailbox zu erhalten:
quelle
service.autodiscoverurl
muss die eingebenservice.credentials
, habe ich Recht?Die derzeit bevorzugte API (Exchange 2013 und 2016) ist EWS . Es ist rein HTTP-basiert und kann von jeder Sprache aus aufgerufen werden, es gibt jedoch .NET- und Java- spezifische Bibliotheken.
Sie können EWSEditor verwenden , um mit der API zu spielen.
Erweiterter MAPI . Dies ist die native API, die von Outlook verwendet wird. Am Ende wird der
MSEMS
Exchange-MAPI-Anbieter verwendet, der über RPC (Exchange 2013 unterstützt dies nicht mehr) oder RPC-over-HTTP (Exchange 2007 oder neuer) oder MAPI-over-HTTP (Exchange 2013 und neuer) mit Exchange kommunizieren kann.Auf die API selbst kann nur über nicht verwaltetes C ++ oder Delphi zugegriffen werden . Sie können auch Redemption (jede Sprache) verwenden RDO-Objektfamilie ist ein erweiterter MAPI-Wrapper. Um Extended MAPI verwenden zu können, müssen Sie entweder Outlook oder die Standalone-Version (Exchange) von MAPI installieren (bei erweiterter Unterstützung werden Unicode PST- und MSG-Dateien nicht unterstützt und es kann nicht auf Exchange 2016 zugegriffen werden). Extended MAPI kann in einem Dienst verwendet werden.
Sie können mit der API über OutlookSpy oder MFCMAPI spielen .
Outlook-Objektmodell - nicht Exchange-spezifisch, ermöglicht jedoch den Zugriff auf alle in Outlook verfügbaren Daten auf dem Computer, auf dem der Code ausgeführt wird. Kann nicht in einem Dienst verwendet werden.
Exchange ActiveSync . Microsoft investiert keine wesentlichen Ressourcen mehr in dieses Protokoll.
Outlook wurde zum Installieren der CDO 1.21-Bibliothek verwendet (es schließt Extended MAPI ein), wurde jedoch von Microsoft nicht mehr unterstützt und erhält keine Updates mehr.
Früher gab es einen .NET MAPI-Wrapper von Drittanbietern namens MAPI33, der jedoch nicht mehr entwickelt oder unterstützt wird.
WebDAV - veraltet.
Collaborative Data Objects for Exchange (CDOEX) - veraltet.
Exchange OLE DB Provider (EXOLEDB) - veraltet.
quelle
Hier ist ein alter Code, den ich für WebDAV herumliegen hatte. Ich denke, es wurde gegen Exchange 2003 geschrieben, aber ich erinnere mich nicht mehr. Fühlen Sie sich frei, es auszuleihen, wenn es hilfreich ist ...
Und model.Mail:
quelle
Ich habe Code verwendet, der auf CodeProject.com veröffentlicht wurde . Wenn Sie POP3 verwenden möchten, ist es eine der besseren Lösungen, die ich gefunden habe.
quelle
Wenn Ihr Exchange-Server für die Unterstützung von POP oder IMAP konfiguriert ist, ist dies ein einfacher Ausweg.
Eine weitere Option ist der WebDAV-Zugriff. Es gibt eine Bibliothek Verfügung. Dies könnte Ihre beste Option sein.
Ich denke, es gibt Optionen, die COM-Objekte verwenden, um auf Exchange zuzugreifen, aber ich bin mir nicht sicher, wie einfach es ist.
Es hängt alles davon ab, was genau Ihr Administrator bereit ist, Ihnen Zugriff zu gewähren, denke ich.
quelle
Sie sollten in der Lage sein, mit MAPI auf das Postfach zuzugreifen und die benötigten Informationen abzurufen. Leider scheint die einzige mir bekannte .NET MAPI-Bibliothek (MAPI33) nicht gepflegt zu sein. Früher war dies eine großartige Möglichkeit, über .NET auf MAPI zuzugreifen, aber ich kann jetzt nicht über seine Wirksamkeit sprechen. Weitere Informationen dazu, wo Sie sie erhalten können, finden Sie hier: Speicherort für MAPI33.dll herunterladen?
quelle
Ich habe am Ende eine Lösung mit Redemption gefunden. Schauen Sie sich diese Fragen an ...
Einlösung verwenden ...
Verwenden von Redemption auf einem 64-Bit-Computer
quelle
Eine Möglichkeit ist die Verwendung von Outlook. Wir haben eine Mail-Manager-Anwendung, die auf einen Exchange-Server zugreift und Outlook als Schnittstelle verwendet. Es ist schmutzig, aber es funktioniert.
Beispielcode:
quelle