Domino 9 und frühere Versionen > ND6: Entwicklung

Zentraler oder dezentrale Agent(en) fürs Einsammeln von Mails aus Mailboxen

<< < (3/4) > >>

m3:

--- Zitat von: Driri am 21.06.07 - 16:14:13 ---Also so in etwa :

Set ve = vc.GetFirstEntry

While Not (ve Is Nothing)
   ...
   Set ve = vc.GetNextEntry(ve)
Wend


--- Ende Zitat ---
Dann ersparst Du Dir auch die IF-Abfrage, ob was in der Collection ist.

Driri:
Stimmt, netter Nebeneffekt  ;)

MaVo:
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.


--- Code: ---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

--- Ende Code ---

Driri:

--- Zitat ---Dim spamDB, hamDB, maildb As NotesDatabase

--- Ende Zitat ---

Damit werden spamDB und hamDB erstmal als Variant deklariert. Korrekt wäre :

Dim spamDB As NotesDatabase, hamDB As NotesDatabase, maildb As NotesDatabase

MaVo:
VIELEN Dank Driri. Genau daran lag´s.  :D

Müsste ich dann auch vor jeder Variablendeklaration den Typ definieren?

z.B. diese Zeile

--- Code: ---Dim MailFileName, servername, spamFile, Ordner As String
--- Ende Code ---

durch diese

--- Code: ---Dim MailFileName As String, servername As String, spamFile As String, Ordner As String
--- Ende Code ---

ersetzen?

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln