Sunny61 806 Geschrieben 6. August 2014 Melden Teilen Geschrieben 6. August 2014 Hallo zusammen, auf einem Exchange 2010 SP3 RU6 kommen Zählerstände in Mails von Multifunktionsgeräten an. Gibt es in den Transportregeln vom Exchange die Möglichkeit den Inhalt zu parsen und ins Dateisystem zu schreiben? In den fertigen Aktionen war nichts dabei oder ich hatte Tomaten auf den Augen. Gibt es mit der Powershell die Möglichkeit hier einzugreifen? Wenn ja, kann mich jemand in die richtige Richtung schubsen? Vielen Dank schon im Voraus. Zitieren Link zu diesem Kommentar
RobertWi 81 Geschrieben 6. August 2014 Melden Teilen Geschrieben 6. August 2014 Moin, nichts mit Bordmitteln, auch nichts via Shell. Man kann zwar Bedingungen mit Regex setzen, aber nichts extrahieren oder ins Dateisystem speichern. Entweder findest Du einen passenden Drittanbieter oder muss überlegen, einen Transport-Agenten selbst zu programmieren. Zitieren Link zu diesem Kommentar
Alith Anar 40 Geschrieben 6. August 2014 Melden Teilen Geschrieben 6. August 2014 Vermutlich Oversized, aber bei einem früheren AG hat man früher den BizTalk Server verwendet um eingehende Mails auszuwerten und in ein konformes / einheitliches XML umzuwandeln. Das Ergebnis konnte dann am Ende auch (IMHO automatisch) gespeichert werden. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 6. August 2014 Autor Melden Teilen Geschrieben 6. August 2014 Danke euch beiden, so was ähnliches dachte ich mir schon. Heute hab ich schon etwas in Richtung Webservices gefunden, Details kann ich morgen erst posten. ;) Zitieren Link zu diesem Kommentar
RobertWi 81 Geschrieben 7. August 2014 Melden Teilen Geschrieben 7. August 2014 Wenn die Daten im Postfach liegen, sind EWS immer eine Möglichkeit. Aber dann geht notfalls auch POP oder IMAP, um an die Inhalte zu kommen. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 7. August 2014 Autor Melden Teilen Geschrieben 7. August 2014 Wenn die Daten im Postfach liegen, sind EWS immer eine Möglichkeit. Aber dann geht notfalls auch POP oder IMAP, um an die Inhalte zu kommen. Das hier ist der Einstieg: http://edmguy.blogspot.co.uk/2009/08/managed-exchange-ews-api-vbnet-part-1.html Ja, die Daten liegen in einem bestimmten Postfach, sollen automatisiert ausgelesen und in eine Datenbank befördert werden. Deshalb war auch meine Idee das ganze mit einer Transportregel abfackeln zu können. BTW: Bei Lotus Notes gibt es dafür sog. Agenten, neue eingehende Mails konnte man mit Hilfe solcher Agenten in den jeweiligen Postfächern per Script bearbeiten. Anhänge automatisiert extrahieren und ins Dateisystem ablegen und so weiter und so fort. ;) Zitieren Link zu diesem Kommentar
NorbertFe 2.041 Geschrieben 7. August 2014 Melden Teilen Geschrieben 7. August 2014 (bearbeitet) Lotus? Was ist Lotus? Und welcher Agent? Der hier?http://de.wikipedia.org/wiki/Datei:Tanumânasî_en_Meditacion_Loto_Padmasana.JPG :p ;) bearbeitet 7. August 2014 von NorbertFe Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 7. August 2014 Autor Melden Teilen Geschrieben 7. August 2014 Lotus? Was ist Lotus? Und welcher Agent? Der hier? http://de.wikipedia.org/wiki/Datei:Tanumânasî_en_Meditacion_Loto_Padmasana.JPG :p ;) Jaja, in Sachen Scripting ist/war der Domino Server mit dem Client Lotus Notes der Exchange Welt um Lichtjahre voraus! :) Zitieren Link zu diesem Kommentar
RobertWi 81 Geschrieben 7. August 2014 Melden Teilen Geschrieben 7. August 2014 Bei Exchange gibt es die Dinger auch, nennen sich hier auch "Agenten" (Transport-Agenten). Es gibt nur keinen für genau Deinen Zweck, Du kannst Dir aber problemlos einen selber programmieren. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 7. August 2014 Autor Melden Teilen Geschrieben 7. August 2014 Bei Exchange gibt es die Dinger auch, nennen sich hier auch "Agenten" (Transport-Agenten). Es gibt nur keinen für genau Deinen Zweck, Du kannst Dir aber problemlos einen selber programmieren. Schon klar, das mit dem selbst programmieren ist/war bei Lotus auch 'einfacher'. Deshalb der Hinweis. ;) Zitieren Link zu diesem Kommentar
testperson 1.680 Geschrieben 7. August 2014 Melden Teilen Geschrieben 7. August 2014 Hi, ich habe mal ein ähnliches Vorhaben gestartet und es aufgrund von Zeitmangel erstmal wieder auf Seite gelegt ;) Habe mich damals daran orientiert: http://www.a2zmenu.com/Blogs/CSharp/Sending-and-parsing-mails-using-Microsoft-Exchange-Web-Service-managed-API-SDK.aspx Gruß Jan Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 7. August 2014 Autor Melden Teilen Geschrieben 7. August 2014 Habe mich damals daran orientiert: http://www.a2zmenu.com/Blogs/CSharp/Sending-and-parsing-mails-using-Microsoft-Exchange-Web-Service-managed-API-SDK.aspx Danke für den Hinweis, werde ich berücksichtigen. ;) Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 7. August 2014 Autor Melden Teilen Geschrieben 7. August 2014 So, 'Problem' ist gelöst. ;) Ich komm auf die betroffene Mailbox und kann alle Mails incl. Body auslesen, die im Posteingang sind. Verschieben oder ähnliches kommt später. Quellen: http://edmguy.blogspot.co.uk/2009/08/managed-exchange-ews-api-vbnet-part-1.html Nimmt man nur den code vom ersten Link, bekommt man keine Verbindung, sondern eine Fehlermeldung. Abhilfe verschafft der Code von: http://adel-aboulhuda.blogspot.de/2011/04/fw-connecting-to-user-mailbox-using.html Allerdings kam auch mit dem Code von http://adel-aboulhuda.blogspot.de/2011/04/fw-connecting-to-user-mailbox-using.html kein Body zum Vorschein, auch nicht wenn man das einfach zusätzlich mit einfügt. Dabei hat dann dieser Thread geholfen: http://www.mycsharp.de/wbb2/thread.php?threadid=84020 Den Code voc mycsharp kann man mit Hilfe eines Konverters in VB.NET Code portieren. http://codeconverter.sharpdevelop.net/SnippetConverter.aspx Die Lösung war das .Load(). Und jetzt noch mein Code, der in einer Console den Inhalt der Mails ausliest, die im Posteingang liegen: 'Module1 Imports Microsoft.Exchange.WebServices Imports Microsoft.Exchange.WebServices.Autodiscover Imports Microsoft.Exchange.WebServices.Data Imports System Imports System.Net Module MainModule Sub Main() Dim oService As ExchangeService = New ExchangeService(ExchangeVersion.Exchange2010_SP2)'Es gibt auch noch andere hier auswählbare Exchangeversionen. Dim strServerURI As String = "https://MeinExchangeServer/EWS/Exchange.asmx" oService.Url = New Uri(strServerURI) Dim strDomainName As String = "dieDomain.TLD" oService.Credentials = New NetworkCredential("MeinAdmin", "dasgeheimepasswort", strDomainName)' Evtl. kann man hier auch andere Credentials verwenden, am besten einen Account der nur auf diese Mailbox zugreifen darf. Zusätzlich steht ja auch das PW im Klartext im Code, bisher hab ich noch keine andere Möglichkeit gefunden. Dim strMailboxUser As String = "druckcounter@SMTPMailadresse.TLD" oService.ImpersonatedUserId = New ImpersonatedUserId(ConnectingIdType.SmtpAddress, strMailboxUser) 'Hier wird die Function in der Klasse aufgerufen. TrustAllCertificatePolicy.OverrideCertificateValidation() Dim arrSearchFilter(1) As SearchFilter arrSearchFilter(0) = New SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, True) arrSearchFilter(1) = New SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, False) Dim oSearchFilter As SearchFilter = Nothing oSearchFilter = New SearchFilter.SearchFilterCollection(LogicalOperator.Or, arrSearchFilter) Dim oView As ItemView = New ItemView(20) Dim oResults As Object '---Fire the query for the unread items oResults = oService.FindItems(WellKnownFolderName.Inbox, oSearchFilter, oView) Dim oMessage As EmailMessage = Nothing Dim oMessageCollection = New DataTable Dim oColumn As New DataColumn oColumn.ColumnName = "ID" oColumn.AutoIncrement = True oMessageCollection.Columns.Add(oColumn) oColumn = New DataColumn oColumn.ColumnName = "Subject" oMessageCollection.Columns.Add(oColumn) oColumn = New DataColumn oColumn.ColumnName = "From" oMessageCollection.Columns.Add(oColumn) oColumn = New DataColumn oColumn.ColumnName = "Date Received" oMessageCollection.Columns.Add(oColumn) oColumn = New DataColumn oColumn.ColumnName = "Body" oMessageCollection.Columns.Add(oColumn) Dim oRow As DataRow For Each oMessage In oResults oMessage.Load() 'Das .Load() ist für das laden des Body zuständig, ohne gibt es keinen Body zu lesen. oRow = oMessageCollection.NewRow oRow("Subject") = oMessage.Subject oRow("From") = oMessage.From.Name oRow("Date Received") = oMessage.DateTimeReceived oRow("Body") = oMessage.Body oMessageCollection.Rows.Add(oRow) Console.WriteLine(oRow("Body")) 'Ausgabe der Body-Zeile auf eine Console. oRow = Nothing Next End Sub End Module Und noch der Code von der benötigten Klasse: Imports System.Net Imports System.Net.Security Imports System.Security Imports System.Security.Cryptography.X509Certificates Public Class TrustAllCertificatePolicy Public Shared Sub OverrideCertificateValidation() ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf RemoteCertValidate) End Sub Private Shared Function RemoteCertValidate(ByVal sender As Object, ByVal cert As X509Certificate, ByVal chain As X509Chain, ByVal [error] As System.Net.Security.SslPolicyErrors) As Boolean Return True End Function End Class Der o.g. Code funktioniert, es fehlt natürlich noch die Fehlerbehandlung und die Verarbeitung des Body. Den Rest darf jeder nach seinen eigenen Wünschen ergänzen. ;) Zitieren Link zu diesem Kommentar
NorbertFe 2.041 Geschrieben 7. August 2014 Melden Teilen Geschrieben 7. August 2014 Ich versteh nur Bahnhof, aber danke :) Zitieren Link zu diesem Kommentar
Alith Anar 40 Geschrieben 7. August 2014 Melden Teilen Geschrieben 7. August 2014 (bearbeitet) Kann es sein, das da einige ' verschluckt wurden? (erste Zeile, nach '---Fire the query for the unread items z.B.) bearbeitet 7. August 2014 von Alith Anar Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.