AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
02.12.21 - 13:07:26
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino 10
| |-+  ND10: Entwicklung (Moderatoren: eknori, fritandr, koehlerbv, Tode)
| | |-+  [Snippet] Agent um SPAMs automatisch zu löschen
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: [Snippet] Agent um SPAMs automatisch zu löschen  (Gelesen 1251 mal)
-Flo-
Frischling
*
Offline Offline

Beiträge: 3


« am: 30.09.21 - 12:55:26 »

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
Gespeichert
Tode
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6649


Geht nicht, gibt's (fast) nicht... *g*


« Antworten #1 am: 30.09.21 - 14:17:14 »

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).
Gespeichert

Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen...
-Flo-
Frischling
*
Offline Offline

Beiträge: 3


« Antworten #2 am: 04.10.21 - 15:29:55 »

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
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: