Ich habe den Agenten wie folgt erstellt....
- Anzahl aller Mailboxen (Benutzer wie Mail-in-DB) aus dem Domino Adressbuch ermitteln
- Daraus Array-Größe festlegen
- Abspeichern aller Mailboxendateinamen (im Format mail\xxx.nsf) in einem Array
- Über eine Schleife greife ich auf die Mailboxen zu und verschiebe die Mails aus den Ordnern Spam bzw. Ham in die vorgesehenen Mailboxen
Dieser Agent wird nach dem Vorschlag von umi ...
Der Einfachheit halber würde ich den Agent zentral starten.
aus einer DB heraus gestartet.
Doch beim Verschieben der Mail (Call doc.CopyToDatabase(spamDb)) aus dem Ordner in die Mailbox bekomme ich folgende Fehlermeldung "Type mismatch".
spamDB ist ausserhalb von Schleife gesetzt.
Egal ob der Agent manuell oder automatisch gestartet wird.
Warum?
Set maildb= session.Getdatabase(servername, databasename(counter))
'Spam-Mails verschieben
Print "Mailbox " & databasename(counter) & " geöffnet!"
Ordner = "-Spam\Spam"
Set view = maildb.GetView(Ordner)
If view Is Nothing Then
Print "Fehler: kein Spam-Ordner in Mailbox " & databasename(counter) & " vorhanden!"
Call agentmailer("Ham-Spam Agent hat Fehler gemeldet! " &"Fehler: kein Spam-Ordner in Mailbox " & databasename(counter) & " vorhanden!")
Else
'Verarbeitung der Mails
Print "Spam-Ordner geöffnet!"
Call view.Refresh
view.AutoUpdate = False
Set vc = view.AllEntries
If vc.count > 0 Then
For intviewcounter = 1 To vc.Count
Set ve = vc.GetNthEntry(intviewcounter)
If ve.IsDocument Then
Set doc = ve.Document
If Instr(doc.Subject(0), "{Spam?}")=0 And doc.HasItem("SMTPOriginator") Then
Call doc.CopyToDatabase(spamDb)
Print "Spam: " + doc.subject(0) + " --> erfolgreich übertragen"
End If
End If
Next
Call vc.RemoveAll(True)
End If
Kann mir bitte ein Programmierer auf die Sprünge helfen. Wie gesagt hab wenig Erfahrung in LS-Programmierung.
Vielen Dank Driri und m3 für Eure Antworten. :)
Habe den Agenten anhand Euren Tipps verbessert. :)
Damit Ihr mir besser helfen könnt, habe ich einen größeren Auszug des Codes hier angehängt.
Anmerkung:
Wenn die Zeile "Call doc.CopyToDatabase(spamDb)" auskommentiere läuft der Agent reibungslos durch und schreibt auch die Betreffzeile des verarbeitenden Dokuments raus.
Dim session As New NotesSession
Dim view As NotesView
Dim doc, doc2 As NotesDocument
Dim db As New NotesDatabase( "", "" )
Dim spamDB, hamDB, maildb As NotesDatabase
Dim databasename () As String
Dim MailFileName, servername, spamFile, Ordner As String
Dim counter, endcounter, iMailboxNr, iMailInDBNr, iarray, intviewcounter As Integer
Dim vc As NotesViewEntryCollection
Dim ve As NotesViewEntry
Print "Ham-Spam Agent gestartet!"
iMailboxNr = 0
iMailInDBNr = 0
iarray = 0
counter = 1
servername = "<Servername>"
:
:
:
'Spambox öffnen
Set spamDb = New NotesDatabase( "", "" )
spamFile = "mail\MailInDB\SpamBox.nsf"
Call spamDb.Open( servername, spamFile )
If Not spamDB.isOpen Then
Print "Keine Spam-Mailbox vorhanden! Stop des Agenten!"
Exit Sub
End If
'Hambox öffnen
Set hamDb = New NotesDatabase( "", "" )
hamFile = "mail\MailInDB\HamBox.nsf"
Call hamDb.Open( servername, spamFile )
If Not hamDB.isOpen Then
Print "Keine Ham-Mailbox vorhanden! Stop des Agenten!"
Exit Sub
End If
' Für jede DB SPAM und HAM verarbeiten
For counter = 1 To iarray
Set maildb= session.Getdatabase(servername, databasename(counter))
If maildb.IsOpen Then
'Spam-Mails verschieben
Print "Mailbox " & databasename(counter) & " geöffnet!"
Ordner = "-Spam\Spam"
Set view = maildb.GetView(Ordner)
If view Is Nothing Then
Print "Fehler: kein Spam-Ordner in Mailbox " & databasename(counter) & " vorhanden!"
Call agentmailer("Ham-Spam Agent hat Fehler gemeldet! " &"Fehler: kein Spam-Ordner in Mailbox " & databasename(counter) & " vorhanden!")
Else
'Verarbeitung der Mails
Print "Spam-Ordner geöffnet!"
Call view.Refresh
view.AutoUpdate = False
Set vc = view.AllEntries
Set ve = vc.GetFirstEntry
While Not (ve Is Nothing)
If ve.IsDocument Then
Set doc = ve.Document
'wenn Mail nicht als Spam erkannt wurde und aus dem Internet kommt, dann ...
If Instr(doc.Subject(0), "{Spam?}")=0 And doc.HasItem("SMTPOriginator") Then
Call doc.CopyToDatabase(spamDb)
Print "Spam: " + doc.subject(0) + " --> erfolgreich übertragen"
End If
End If
Set ve = vc.GetNextEntry(ve)
Wend
Call vc.RemoveAll(True)
view.AutoUpdate = True
Print "Spam-Mails in Mailbox " &databasename(counter) &" verarbeitet!"
:
:
End If
End If
Next
VIELEN Dank Driri. Genau daran lag´s. :D
Müsste ich dann auch vor jeder Variablendeklaration den Typ definieren?
z.B. diese Zeile
Dim MailFileName, servername, spamFile, Ordner As String
durch diese
Dim MailFileName As String, servername As String, spamFile As String, Ordner As String
ersetzen?