Autor Thema: [Snippet] Agent um SPAMs automatisch zu löschen  (Gelesen 3724 mal)

Offline -Flo-

  • Frischling
  • *
  • Beiträge: 3
[Snippet] Agent um SPAMs automatisch zu löschen
« 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

Offline Tode

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.870
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: [Snippet] Agent um SPAMs automatisch zu löschen
« Antwort #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).
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... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline -Flo-

  • Frischling
  • *
  • Beiträge: 3
Re: [Snippet] Agent um SPAMs automatisch zu löschen
« Antwort #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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz