Hallo,
wir haben vor Kurzem unsere Maildomain geändert. Die alte Adresse haben wir als Alias hinzugefügt, damit die Mails and die alte Adresse noch ankommen.
Jedesmal wenn ein Mitarbeiter eine Mail bekommt, die noch an die alte Adresse gesendet wurde und er antwortet an alle, dann erscheint seine alte Adresse im Kopie-An-Feld.
Die meisten passen nicht auf und erhalten dann ihre Antwort nochmal an sich selber zugestellt.
Die anderen nervt es auch, immer manuell den Empfänger aus der Kopie zu entfernen.
Ich hatte als Lösung gedacht, übergangsweise einen Agenten in die Schablone zu setzen, der nach Eingang einer Mail, prüft, ob an die alte Domain gesendet wurde und dann die alte Domain durch die neue Domain ersetzt.
In meinem Test wird der Agent zwar brav aufgerufen, nur scheint er nichts zu machen. Im Protokoll steht, dass er x Dokumente bearbeitet hat, aber geändert hat sich nichts.
Könnt ihr mal darüberschauen, was ich (mal wieder) falsch gemacht habe?
Nebenbei: wo ist eigentlich im 11er Client die Konsole hin, über die man im Agent mit Print Debug-Ausgaben erzeugen konnte?
Hier das Script:
Dim session As New NotesSession
Dim doccol As NotesDocumentCollection
Dim newemail As NotesDocument
Dim sendto As String
Dim newsendto As String
Dim formula As String
Set doccol = session.currentdatabase.unprocesseddocuments
Set newemail = doccol.getfirstdocument
While Not (newemail Is Nothing)
'sendto = CStr(newemail.GetItemValue("SendTo")(0))
sendto = newemail.SendTo
newemail.~_ViewIcon = 159
Print "*** pruefe: " & sendto
If (InStr(sendto, "@altedomain") > 0) Then
formula = |@ReplaceSubstring("| & sendto & |" ; "@altedomain" ; "@neuedomain")|
newsendto = Evaluate(formula)
Call newemail.Replaceitemvalue("SendTo", newsendto)
Call newemail.Save(True, False)
Print "*** gefunden! Ersetze!"
End If
Set newemail = doccol.getnextdocument(newemail)
Wend
doccol.Updateall
Vielen Dank für die Hinweise.
Ich bin schonmal einen Schritt weiter, aber würde jetzt doch nochmal eure Unterstützung gebrauchen können.
Das script bricht jetzt an der Formel ab: Error 221 invalid formuila.
Die angewendete Formel sieht so aus:
(@ReplaceSubstring(""max mustermann" <max.mustermann@altedomain>" ; "@altedomain" ; "@neuedomain"))
Ich bin mir recht sicher, dass das an den im zu dursuchenden String enthaltenen Anführungsstrichen liegt.
Habt ihr eine Idee, wie damit umgehen könnte?
Vorher ersetzen (z.B. durch ein Sternchen) und danach wieder zurück?
(@ReplaceSubstring(""max mustermann" <max.mustermann@altedomain>" ; "@altedomain" ; "@neuedomain"))
Du willst doch bestimmt nicht den zusammengebauten String ersetzen, wenn Du den kennst, kannst Du ihn doch auch gleich richtig setzen. Aber vielleicht verstehe ich es auch nicht wirklich, was Du da machst ;). Du könntest es mit einfachen Anführungszeichen probieren
(@ReplaceSubstring('"max mustermann" <max.mustermann@altedomain>' ; "@altedomain" ; "@neuedomain"))
Was Du aber wohl wirklich brauchst, ist ein
(@ReplaceSubstring(SendTo ; "@altedomain" ; "@neuedomain"))
Naja, ich will, dass bei jeder eingehende Mail geprüft wird, ob die alte Domain bei den Empfängern vorkommt und wenn ja, dann durch die neue Domain ersetzen. Damit die lieben Kollegen, 2 Sekunden Zeit sparen und nicht mehr beim Antworten die Kopie an die alte Domain entfernen müssen.
Das Script sieht aktuell wie folgt aus (die Schleife, mit der ich vorher jeden einzelnen Empfänger geprüft habe, habe ich aktuell auskommentiert)
Das Script wirft aktuell einen Fehler auf der Console: *** CheckRecipientOldDomain: Error occured 0: in line 0. Agent stopped.
Dim session As New NotesSession
Dim doccol As NotesDocumentCollection
Dim newemail As NotesDocument
Dim newsendto() As String
Dim formula As String
Dim i As Integer
On Error GoTo HandleError
Set doccol = session.currentdatabase.unprocesseddocuments ' hole alle neuen eMails
Set newemail = doccol.getfirstdocument ' fange beim ersten Document an
While Not (newemail Is Nothing)
Print "*** Test ***"
Print "*** CheckRecipientOldDomain Subject=" & CStr(newemail.Getitemvalue("Subject")(0))
' Erase newsendto
' i = 0
' ForAll xsendto In newemail.SendTo
' ReDim Preserve newsendto(i)
' Print "*** untersuche: " & xsendto
' If (InStr(xsendto, "@altedomain") > 0) Then ' Wenn Adresse noch alte Domain beinhaltet, dann
' Print "*** gefunden!! "
' formula = |@ReplaceSubstring("| & xsendto & |" ; "@altedomain" ; "@neuedomain")|
' xsendto = Evaluate(formula)
' Print "**** geändert auf " & xsendto
' End If
' newsendto(i) = xsendto
' i = i + 1
' End ForAll
' Call newemail.Replaceitemvalue("SendTo", newsendto) ' setze korrigerte Empfängerliste
formula = |@ReplaceSubstring(newemail.SendTo ; "@altedomain" ; "@neuedomain" )|
Evaluate(formula)
Call newemail.Save(True, False)
Set newemail = doccol.getnextdocument(newemail)
Wend
doccol.Updateall
HandleError:
Print "*** CheckRecipientOldDomain: Error occured " & Str(Err) & ": " & Error$ & " in line " & Str(Erl) & ". Agent stopped."
Exit Sub
Mal aus dem Bauch unter Beibehaltung Deiner Scriptteile, ohne Anspruch auf Fehlerfreiheit
Dim session As New NotesSession
Dim doccol As NotesDocumentCollection
Dim newemail As NotesDocument
Dim newsendto As Variant
On Error GoTo HandleError
Set doccol = session.currentdatabase.unprocesseddocuments ' hole alle neuen eMails
Set newemail = doccol.getfirstdocument ' fange beim ersten Document an
While Not (newemail Is Nothing)
Print "*** Test ***"
Print "*** CheckRecipientOldDomain Subject=" & CStr(newemail.Getitemvalue("Subject")(0))
If Instr (Join (newemail.SendTo, ":"), "@altedomain") > 0 Then
newsendto = Evaluate (|@ReplaceSubstring(SendTo ; "@altedomain" ; "@neuedomain")|, newemail)
Call newemail.Replaceitemvalue("SendTo", newsendto) ' setze korrigerte Empfängerliste
Call newemail.Save(True, False)
End If
Set newemail = doccol.getnextdocument(newemail)
Wend
doccol.Updateall
HandleError:
Print "*** CheckRecipientOldDomain: Error occured " & Str(Err) & ": " & Error$ & " in line " & Str(Erl) & ". Agent stopped."
Exit Sub
Was ist denn die letzte Ausgabe von dem Agenten?
Nur die Fehlermeldung?
Peter hatte da ja zwei Debug-Prints drin...
Die kannst Du ja erweitern um genau die Zeile zu finden, wo der Fehler passiert.
Oder aber er legt erst gar nicht richtig los mit line 0.
Print "*** Test ***"
Print "*** CheckRecipientOldDomain Subject=" & CStr(newemail.Getitemvalue("Subject")(0))
Die Print-Ausgaben erscheinen:
20.03.2020 12:53:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** Test ***
20.03.2020 12:53:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain Subject=Antwort: AW: Antwort: Migration - Rechteproblem auf Verzeichnis
20.03.2020 12:53:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** Test ***
20.03.2020 12:53:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain Subject=Test 18
20.03.2020 12:53:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain: Error occured 0: in line 0. Agent stopped.
...
20.03.2020 12:55:57 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** Test ***
20.03.2020 12:55:57 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain Subject=Automatische Antwort: Antwort: Antwort: AW: Antwort: Migration - Rechteproblem auf Verzeichnis
20.03.2020 12:55:57 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain: Error occured 0: in line 0. Agent stopped.
Ich habe die Print-Ausgaben erweitert und sowohl direkt in der IF- als auch nach dem Speichern eine Ausgabe erzeugt.
Hier die Augabe, bei Mails, bei denen keine alte Domain gefunden wird.
20.03.2020 14:14:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** Test ***
20.03.2020 14:14:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain Subject=UPS: Refused a self-test; UPS is overloaded.
20.03.2020 14:14:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** Test ***
20.03.2020 14:14:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain Subject=UPS: Started a self-test.
20.03.2020 14:14:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** Test ***
20.03.2020 14:14:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain Subject=UPS: Passed a self-test.
20.03.2020 14:14:54 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain: Error occured 0: in line 0. Agent stopped.
Und hier, bei einer Mail an die alte Domain (Subject = Test 19):
20.03.2020 14:16:59 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** Test ***
20.03.2020 14:16:59 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain Subject=Test 19
20.03.2020 14:16:59 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** Test ***
20.03.2020 14:16:59 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain Subject=Einladung zu virtuellen Veranstaltungen: live & on-demand, flexibel, planbar und sicher
20.03.2020 14:16:59 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** Test ***
20.03.2020 14:16:59 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain Subject=IT-Ticket: 11174 => Anforderung erledigt
20.03.2020 14:16:59 AMgr: Agent ('CheckRecipientOldDomain' in 'mail\maildb.nsf') printing: *** CheckRecipientOldDomain: Error occured 0: in line 0. Agent stopped.
aktueller Code:
While Not (newemail Is Nothing)
Print "*** Test ***"
Print "*** CheckRecipientOldDomain Subject=" & CStr(newemail.Getitemvalue("Subject")(0))
If InStr (Join (newemail.SendTo, ":"), "@altedomain") > 0 Then
Print "*** alte Domain gefunden --> ersetze"
newsendto = Evaluate (|@ReplaceSubstring(SendTo ; "@altedomain" ; "@neuedomain")|, newemail)
Call newemail.Replaceitemvalue("SendTo", newsendto) ' setze korrigerte Empfängerliste
Call newemail.Save(True, False)
Print "*** gespeichert"
End If
Set newemail = doccol.getnextdocument(newemail)
Wend