r0land
Goto Top

Outlook 2010 Betreff ändern bzw. einkürzen ( Teil II )

Moin


Wir erhalten Anfragen per Mail über diverse Webseiten. Jede Webseite hat einen anderen (unsinnigen) Betreff. Wir nutzen einen Exchange und auf den Clients Outlook 2010/2013/2016. Die Anfragen landen bei uns in einem Sammelpostfach, welches bei den Mitarbeitern zusätzlich zum persönlichen Postfach eingehängt ist.

Den Betreff möchte ich abhängig vom Absender automatisch ändern. Eine Anpassung am Exchange ist keine Option. Mein Rechner läuft durchgehend und ich kann ein bisschen VBA, deswegen suche ich eine Lösung die ich lokal an meinem Rechner umsetzen kann.

Gefunden habe ich das hier:
Link zum Administrator-Forum (2017)

Das habe ich etwas umgebaut, aber es gibt Probleme:

Sobald die Mail ( original Betreff "hallo" ) bei mir in Outlook ankommt hat sie bereits den neuen durch das Script geänderten Betreff "hallo, geändert". Im Sekundenbruchteil ändert der sich jedoch wieder zu "hallo" und bleibt dann so. Jedesmal.

Ich führe das auf Sync-Probleme mit den anderen Clients zurück.. die die Mail womöglich erst nach mir mit altem bekommen und dann den Betreff auf dem Server wieder zurücksetzen.

Deswegen habe ich ins Script ein DoLoop mit DoEvent eingebaut, das zwischen Empfang und Änderung für ein paar Sekunden Pause sorgt. Sleep lässt mir nämlich das Outlook einfrieren.

Zunächst 3 Sekunden.. nach 5-7 Sekunden wieder Reset. Dann 10 Sekunden.. trotzdem nach 15 Sekunden noch der Reset. Mit 20 Sekunden funktioniert es bisher.

Problem: Wenn innerhalb dieser 20 Sekunden noch eine zweite Mail eingeht.. wird die nicht mehr bearbeitet. Erst wenn das Script durchgelaufen ist kann eine weitere neue Mail bearbeitet werden.

Hier mein Script in ThisOutlookSession mit aktivierten Makros:

Dim WithEvents itms As Items
Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long  

Private Sub Application_Startup()
    Set itms = Session.Stores.Item("sammel@postfach.de").GetDefaultFolder(olFolderInbox).Items  
End Sub

Private Sub itms_ItemAdd(ByVal Item As Object)
    Dim NowTick As Long
    Dim EndTick As Long
    
    If Item.Class = olMail Then
        With Item
            EndTick = GetTickCount + (20 * 1000)
            Do
                NowTick = GetTickCount
                DoEvents
            Loop Until NowTick >= EndTick
            
            'Webseite-A  
            If .SenderEmailAddress = "anfrage.von@webseite-a.com" Then  
                .Subject = "Anfrage über Web-A, " & .Subject  
                .Save
            End If
            
            'Webseite-B  
            If .SenderEmailAddress = "anfrage.von@webseite-b.de" Then  
                .Subject = "Anfrage über Web-B, " & .Subject  
                .Save
            End If
            
        End With
    End If
End Sub

Gibt es eine bessere Lösung?

Und ich habe gleich schon eine Idee.. das Event soll am besten nur den Eingang einer neuen Mail abgreifen, den ganzen Rest mit Pause und Betreff-Änderung an eine Subroutine übergeben.. und direkt wieder beendet werden.. egal wie lange die Subroutine für die Arbeit dann braucht. Ich weiß noch nicht genau wie ich das realisieren kann. Ich hoffe das ist ein richtiger Denkansatz und ist das Ausprobieren wert.

Meinungen oder vielleicht Hilfen dazu?

Content-Key: 569852

Url: https://administrator.de/contentid/569852

Printed on: April 24, 2024 at 16:04 o'clock

Mitglied: 143728
143728 May 06, 2020 updated at 14:09:09 (UTC)
Goto Top
Gibt es eine bessere Lösung?
Ja, würde das nicht auf den Clients machen, sondern direkt auf dem Server etwa mit EWS (Exchange Webservices), so muss auch kein Client dafür unsinnigerweise dauerhaft laufen, guck mal hier gibt's ein Beispiel
Script odgl ausführen, wenn E-Mail eingeht
Wenn sowieso ein Exchange läuft wäre das IMHO sinniger als mit VBA am Client zu hantieren.

p.s. Teil1 wo??
Member: r0land
r0land May 06, 2020 at 15:21:41 (UTC)
Goto Top
Teil 1 wäre der Thread von 2017 den ich verlinkt habe. Trifft halt genau mein Problem, ich wollte nur nicht Necroing betreiben.

Wie ich eingangs bereits schrieb.. Anpassungen am Server sind keine Option.
Member: sabines
sabines May 07, 2020 at 05:31:11 (UTC)
Goto Top
Zitat von @r0land:

Wie ich eingangs bereits schrieb.. Anpassungen am Server sind keine Option.

Wasch mich, aber mach mich nicht nassface-wink
BP ist tatsächlich das über den Exchange (Transportregel o.ä.) oder, falls vorhanden, eine vorgelagerte Mail Appliance abzufackeln.
Mitglied: 143728
143728 May 07, 2020 updated at 06:24:42 (UTC)
Goto Top
Zitat von @r0land:
Wie ich eingangs bereits schrieb.. Anpassungen am Server sind keine Option.
Wer sagt das du am Server etwas anpassen musst?? EWS ist eine universelle Web-Schnittstelle die auch Outlook und OWA nutzen um auf den EX zuzugreifen. EWS Abfragen können mit den passenden Berechtigungen auf die Mailbox von einem beliebigen Client aus ausgeführt werden, denn das arbeitet über simple SOAP Webabfragen! Deine Aussage ist also völlig falsch!
Member: r0land
r0land May 07, 2020 updated at 12:03:25 (UTC)
Goto Top
Zitat: "würde das nicht auf den Clients machen, sondern direkt auf dem Server"

Tschuldige.. ich Naivling ging natürlich davon aus, dass ich das nicht am Client machen soll, sondern direkt auf dem Server. Ich komme mir unfassbar doof und klein vor!

Ich gehe jetzt mal EWS, SOAP, BP und "vorgelagerte Mail Appliance abfackeln" googeln.. damit ich nicht ganz so doof sterben muss.

BTW: Server tabu ist übrigens Vorgabe von weiter oben, nach der ich mich richten muss. Daher betonte ich das extra. Aber an dieser Stelle auch schon egal..

Vielen Dank für die Hilfe mit meinem Script!