Lotus Notes / Domino 10 > ND10: Entwicklung

[Snippet] Agent um SPAMs automatisch zu löschen

(1/1)

-Flo-:
Hallo zusammen,

ich weiß gar nicht, ob ich hier richtig bin, aber ich würde gerne einfach einen Agenten spenden wollen, falls den auch jemand anderes nutzen möchte.

Der Agent löscht SPAM-Mails, wenn die SPAM Mails die Soft Deletion Time erreicht haben.

Falls es irgendwo ein "Code-Sammelbecken" gibt freue ich mich über einen Hinweis und pack das gerne dort hin.

Viele Grüße

Flo


--- Code: ---%REM
' Aufgabe des Agenten ist es den Junk-Mail-Ordner in einem Postfach zu leeren.
' Die Löschfrist für SPAM-Mail ergibt sich dabei aus der in der DB eingestellten
' Soft-Deletion Time in den Database Properties.
'
' Ist keine Soft-Deletion-Time definiert erfolgt auch keine Löschung von SPAMs.
'
' Darf frei verwendet, verändert, kopiert, etc. pp. werden. Verwendung erfolgt auf
' eigene Gefahr.
%END REM
Option Public
Option Declare

Dim s As NotesSession
Dim currDb As NotesDatabase
Dim currA As NotesAgent

Sub Initialize
On Error GoTo Errorhandler
Set s = New NotesSession
Set currA = s.currentAgent
Set currDb = s.currentDatabase

Dim agentRunTimeStart As New NotesDateTime("") ' Laufzeitmessung
Dim agentRunTimeEnd As New NotesDateTime("") ' Laufzeitmessung

Call agentRunTimeStart.Setnow()
Print "Starte Agent '" & currA.Name & "' in Datenbank '" & currDb.Title & "'"

Call AgentRun()

' Ende des Agenten
Call agentRunTimeEnd.Setnow()
Print "Beende Agent '" & currA.Name & "' in Datenbank '" & currDb.Title & "' (Laufzeit: " & CStr(agentRunTimeEnd.Timedifference(agentRunTimeStart)) & " Sekunden)"

Exit Sub
Errorhandler:
MsgBox "Kritischer Fehler bei Agentenlauf in Datenbank '" & currDb.Title & "' (" & currDb.Filepath & ") Agent '" & currA.Name & "': " & Error & " (" & Err & ") in Zeile " & CStr(Erl)
End Sub
Sub AgentRun
On Error GoTo errorhandler

Print "[Starte Löschungen der JunkMails]"

Dim junkFolder As NotesView
Dim softDeletionHours As Integer
Dim softDeletionLimit As New NotesDateTime("")

Set junkFolder = currDb.getView("JunkMail")
If junkFolder Is Nothing Then
Print "[INFO] SPAM-Ordner konnte nicht gefunden werden, breche ab ..."
Exit Sub
End If
If junkFolder.Allentries.Count = 0 Then
Print "[INFO] Keine SPAM-Mails vorhanden, breche ab ..."
Exit Sub
End If
If Not currDb.Getoption(dbopt_softdelete) Then
Print "[INFO] Soft Deletions sind nicht aktiv, breche ab ..."
Exit Sub
End If

softDeletionHours = currDb.Undeleteexpiretime

Call softDeletionLimit.Setnow()
Call softDeletionLimit.Adjusthour((softDeletionHours * -1))

Print "Löschfrist: " & softDeletionHours & "h"
Print "-> SPAM-Mails, welche vor dem " & CStr(softDeletionLimit.Lslocaltime) & " empfangen wurden, werden gelöscht."
Print "Anzahl SPAM-Mails im SPAM-Ordner: " & junkFolder.Allentries.Count

Dim junkMail As NotesDocument
Dim junkMailIter As NotesDocument
Dim countDeletedJunks As Long
Set junkMail = junkFolder.Getfirstdocument()
While Not junkMail Is Nothing
Set junkMailIter = junkFolder.getNextDocument(junkMail)

' Prüfen, ob Löschfrist erreicht / überschritten wurde
If softDeletionLimit.Timedifference(s.Createdatetime(CStr(junkMail.Created))) > 0 Then
countDeletedJunks = countDeletedJunks + 1
Call junkMail.Remove(True)
End If

Set junkMail = junkMailIter
Wend

Print "-------- Abschluss --------"
Print "--> Es wurden " & countDeletedJunks & " SPAM-Mails gelöscht. <--"
Print "[Beende Löschungen der JunkMails]"

Exit Sub
errorhandler:
MsgBox "Fehler in AgentRun(): " & Error & " (" & Err & ") in Zeile " & CStr(Erl)
End Sub

--- Ende Code ---

Tode:
Das ist ein netter Ansatz, gefällt mir. Auch die Ausprägung mit Error Handling finde ich gut.

Einen kleinen Kritikpunkt hätte ich trotzdem:

Damit dieser Agent Sinn ergibt, sollte er periodisch laufen... Da wird Dich aber jeder Admin für hassen, wenn Du ihm die Serverkonsole mit Deinen Prints vollmüllst... und die Ergebnisse sind auch nicht "persistent", Du kannst also nie nachschauen, was der Agent wann getan hat... Lieber in ein eigenes Log z.B. mittels "AgentLog"- Klasse protokollieren, dann kannst Du dort nachschauen und Dein Admin hat Dich wieder lieb

Für einen periodischen Agenten macht auch die MsgBox im Fehlerfall nicht viel Sinn (obwohl das dann automatisch zu einem Print auf der Console wird... also siehe oben).

-Flo-:
Hallo Tode,

du hast recht - optimieren kann man den sicherlich noch :-)

Aber da ich auf meiner Suche nichts gefunden habe und den dann schnell selbst runtergeklöppelt habe dachte ich mir, dass mit diesem spontanem geistigen Ergus ggf. jemand anderes auch noch etwas anfangen kann.

Die Prints habe ich bei uns in der Schablone auch auskommentiert. Ich nutzte die Prints in der Entwicklung aber auch immer gerne als "intelligente" Kommentierung. Gerade wenn man den Step by Step mal durch debuggt, bekommt man gleich noch ein wenig mehr Info's als nur die Kommentarzeile.

Gibt es denn ein Codesammelbecken bei AtNotes oder woanders?

Viele Grüße

Florian

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln