Ok, habe das Beispiel aus der Hilfe für mich umgesetzt umgesetzt:
Sub Initialize
Dim session As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set session = New NotesSession
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
'-----Attachment extrahieren und speichern-----
Dim attachment As Variant
Dim fileCount As Integer
fileCount = 0
Set attachment = doc.GetFirstItem("Body")
If ( attachment.Type = RICHTEXT ) Then
Forall o In attachment.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
fileCount = fileCount + 1
Call o.ExtractFile( "D:\temp\attachment" & Cstr(fileCount) )
Messagebox("Attachment gespeichert.")
End If
End Forall
End If
End Sub
Was mich aber hier stört ist:
Der Anhang wird als 'attachment1' gespeichert (gut, ist syntaktisch so festgesetzt). Ich hätte es aber unter dem Dateinamen, wie er wirklich ist und auch in der Mail zu sehen ist gern gespeichert. Heißt hier bei mir 'Testfile.txt'.
Wie stelle ich das an?
Ich muss ja hier irgendwie aus dem Body das EMBED_ATTACHMENT "picken" und dessen Name+Filetype ermitteln und dann abspeichern, oder?! Dann kann ich nämlich auch den Murks mit dem fileCount weglassen...
Gruß
So, habs hinbekommen:
Habe die Zeile
Call o.ExtractFile( "D:\temp\attachment" & Cstr(fileCount) )
durch
Call o.ExtractFile( "D:\temp\" & o.Name )
ersetzt und den fileCounter rausgehauen. Funktioniert - ich kann nun das Attachment korrekt speichern!
Gruß
Ich nochmal...
Ein Fehler tritt auf, wenn ich der Agent auf eine Mail ohne Anhang, nur mit Text, angewendet wird! Der Fehler lautet: "Falscher Datentyp in Methode ForAllInit: FROMVAR wurde gefunden. Unknown wurde erwartet". Aha?!?
Mein Code:
Sub Initialize
Dim session As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set session = New NotesSession
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
'-----Attachment extrahieren und speichern-----
Dim attachment As Variant
Dim fileCount As Integer
fileCount = 0
Set attachment = doc.GetFirstItem("Body")
If ( attachment.Type = RICHTEXT ) Then
Forall o In attachment.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
fileCount = fileCount + 1
Call o.ExtractFile( "D:\temp\" & o.Name )
Messagebox("Attachment gespeichert.")
End If
End Forall
End If
End Sub
Der Debugger bleibt mit der Meldung "Type Missmatch" in der Zeile stehen: Forall o In attachment.EmbeddedObjects !
Es sollen einfach alle Anlagen (Files) gespeichert werden, oder aber es soll nichts passieren. Was ist falsch?
Danke und Gruß
Hallo Andy,
ein paar Anmerkungen von mir:
> Set doc = collection.GetNthDocument( i )
GetNthDocument ist "böse", sollte durch getFirst/getNext verwendet werden.
> Forall o In rtitem.EmbeddedObjects
Kann funktionieren, muss aber nicht. v.a. wenn das Item im Dokument ist. besser ist m.e:
v = Evaluate("@attachmentNames",doc)
Forall att in v
set o = doc.GetAttachment(att)
...
> Call o.ExtractFile( "\\server01\GROUPDATA\Datentransfer\IN\" & o.Source )
Ein Server kann i.d.R nicht auf einen Netzwerkpfad zugreifen.
Den Agenten würde ich periodisch laufen lassen. Alle nicht verarbeiteteb Dokumente liegen in einer Ansicht. Bereits bearbeitete Mail-Dokumente würde ich mit einem Flag markieren, so dass sie aus der Ansicht herausfallen.
Gruß
Roland