Domino 9 und frühere Versionen > ND6: Entwicklung

Mail + Attachment im Filesystem speichern

(1/9) > >>

gere:
Hallo Notes-Götter,

Ich habe ein sehr dringendes Problem, und zwar brauch ich ein Script, das es ermöglicht, Emails und deren Attachments (falls vorhanden) in einem fest definierten Ordner im FileSystem zu speichern. Der Email-Text soll dabei als Textfile gespeichert werden. Ich hab da schon ewig rumprobiert, nur leider hab ich nicht genug Erfahrung mit sowas.

Hat jemand so etwas auf Lager?

Danke + Gruß
Gere

Axel:
Hi,

ich hab mal sowas ähnliches gebaut. Der Mailtext wird als Word-Dokument in einem, vom User frei wählbaren Verzeichnis gespeichert. Die Attachments werden ebenfalls in diesem Verzeichnis gespeichert und als Link ins Word-Dokument eingefügt.

Interessant für dich?


Axel

gere:
Hi Axel,

Das wäre eigentlich genau das was ich suche...

Gruß Gerhard

Axel:
Hi,

das Ganze habe ich in einen Agenten gepackt:


--- Code: ---(Options) - Section
Option Public
Use "libWord"
Use "FileLibrary"

Initialize - Section
Sub Initialize

Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim clsWord As cWord
Dim intTitel As Integer
Dim idx As Integer
Dim intAbbruch As Integer
Dim varName As Variant
Dim varResult As Variant
Dim cFile As CFile
Dim strMacro As String
Dim strFileName As String
Dim arrFiles() As String

Const ATTR_READONLY = 1

intAbbruch = 0
Redim arrFiles(0)

On Error Goto ErrorHandling

Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document

'Extrahieren des allgemeinen Namens aus dem Mail-Absender
strMacro =  | @Name([CN]; DisplayFrom)|
varName = Evaluate(strMacro, doc)
'Messagebox varName(0)

'Wenn im allgm. Namen " enthalten sind, werden sie entfernt
If Instr(varName(0), Chr$(34)) > 0 Then
strMacro =   | @ReplaceSubstring(| & varName(0) & |; @Char(34); "")|
varName = Evaluate(strMacro,doc)
'Messagebox varName(0)
End If  'If Instr(varName(0), Chr$(34)) > 0 Then

'Austausch der : in . bei Uhrzeit
strMacro =  | @ReplaceSubstring("| & doc.DisplayDate(0) & |"; ":"; ".")|
varResult = Evaluate(strMacro)
'Austausch des Leerzeichens in _
strMacro =  | @ReplaceSubstring("| & varResult(0) & |"; " "; "_")|
varResult = Evaluate(strMacro)

'Abfrage des Verzeichnisses und des Dateinamens
Set cFile = New cFile
cFile.DefaultDir = ""
cFile.DefaultFilename = varName(0) & " " & varResult(0) 'Vorgabedateiname ist der allg. Name des Senders und Empfangsdatum
cFile.Title = "Mail-Export"
cFile.Filter = "Word-Dokument (*.doc)" & Chr$(0) & "*.doc" & Chr$(0) & "Alle Dateien (*.*)" & Chr$(0) &  "*.*" & Chr$(0)
cFile.FilterIndex = 1

result = cFile.FileSaveDlg
If result = 0 Then
Messagebox "Der Export wurde abgegrochen.", 64, "Mail-Export"
Exit Sub
End If 'If result = 0 Then

While Dir$(cFile.Filename, 0) <> ""
Messagebox "Der angegebene Dateiname ist bereits vorhanden." & Chr$(10) & "Bitte geben Sie einen anderen Dateinamen ein.", 48, "Mail-Export"
result = cFile.FileSaveDlg
If result = 0 Then
Messagebox "Der Export wurde abgegrochen.", 64, "Mail-Export"
Exit Sub
End If 'If result = 0 Then
Wend  'While Dir$(cFile.Filename, 0) <> ""

'Neue Instanz der Klasse cWord
Set clsWord = New cWord
'Neues Dokument auf Basis der Vorlage erstellen
Call clsWord.CreateNewDoc("Normal")
'Formatiertes Einfügen der Mail-Header Infos
Call clsWord.SetFontAttributes("Arial", 10, True, False, False)
Call clsWord.Insert("Mail von:  ")
Call clsWord.SetFontAttributes("Arial", 10, False, False, False)       
Call clsWord.Insert(doc.DisplayFrom(0))
Call clsWord.Newline(1)
Call clsWord.SetFontAttributes("Arial", 10, True, False, False)
If Isdate(doc.DeliveredDate(0)) Then
Call clsWord.Insert("Mail eingegangen am:  ")
Else
Call clsWord.Insert("Mail gesendet am:  ")
End If  'If Isdate(doc.DeliveredDate(0)) Then
Call clsWord.SetFontAttributes("Arial", 10, False, False, False)       
Call clsWord.Insert(Cstr(doc.DisplayDate(0)))
Call clsWord.Newline(2)
Call clsWord.SetTab(2.5)

Call clsWord.SetFontAttributes("Arial", 10, True, False, False)
Call clsWord.Insert("An:  ")
Call clsWord.SetFontAttributes("Arial", 10, False, False, False) 
strMacro =  | @Name([Abbreviate]; SendTo)|
varName = Evaluate(strMacro, doc)
For idx = 0 To Ubound(varName)
Call clsWord.Insert(Chr$(9) & varName(idx))
Call clsWord.Newline(1)
Next  'For idx = 0 To Ubound(varName)

Call clsWord.SetFontAttributes("Arial", 10, True, False, False)       
Call clsWord.Insert("Kopie:  ")
Call clsWord.SetFontAttributes("Arial", 10, False, False, False)       
strMacro =  | @Name([Abbreviate]; CopyTo)|
varName = Evaluate(strMacro, doc)
For idx = 0 To Ubound(varName)
Call clsWord.Insert(Chr$(9) & varName(idx))
Call clsWord.Newline(1)
Next  'For idx = 0 To Ubound(varName)

Call clsWord.SetFontAttributes("Arial", 10, True, False, False)       
Call clsWord.Insert("Bindkopie:  ")
Call clsWord.SetFontAttributes("Arial", 10, False, False, False)
strMacro =  | @Name([Abbreviate]; BlindCopyTo)|
varName = Evaluate(strMacro, doc)
For idx = 0 To Ubound(varName)
Call clsWord.Insert(Chr$(9) & varName(idx))
Call clsWord.Newline(1)
Next  'For idx = 0 To Ubound(varName)

Call clsWord.Newline(2)

Call clsWord.SetFontAttributes("Arial", 10, True, False, False)       
Call clsWord.Insert("Thema:  ")
Call clsWord.SetFontAttributes("Arial", 10, False, False, False)       
Call clsWord.Insert(doc.Subject(0))
Call clsWord.Newline(2)

Call clsWord.ClearAllTabs

'einfügen des Mailinhaltes als Text
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
Call clsWord.Insert(rtitem.GetFormattedText( False, 0 ))
End If  'If ( rtitem.Type = RICHTEXT ) Then

'Lösen der Anhänge ins gewählte Verzeichnis und einfügen eines Links in Dokument
intTitel = 0
idx = 0
If ( rtitem.Type = RICHTEXT ) Then
If xHasDocAttachments(doc) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
strFileName = Cstr(cFile.ExtractFilePath(cFile.Filename)) & o.Name
While Dir$(strFileName, 0) <> "" And intAbbruch <> 1
varResult = workspace.Prompt( PROMPT_OKCANCELEDIT, "Mail-Export", "Eine Datei mit diesem Namen ist bereits vorhanden." & Chr$(10) &_
"Bitte vergeben Sie einen anderen Namen", strFileName, "")
If Isempty(varResult) Then
intAbbruch = 1
Else
strFileName = Cstr(varResult)
End If  'If Isempty(varResult) Then
Wend  'Do While Dir$(strFileName, 0) <> ""
If intAbbruch Then Exit Forall

If intTitel = 0 Then
Call clsWord.Newline(2)
Call clsWord.Insert("Es sind folgende Dateianhänge vorhanden:")
Call clsWord.Newline(1)
intTitel = 1
End If  'If intTitel = 0 Then
Redim Preserve arrFiles(idx)
arrFiles(idx) = strFileName
idx = idx + 1
Call clsWord.InsertLink(strFileName, Cstr(cFile.ExtractFileName(strFileName)))
Call clsWord.Newline(1)
'Dateianhang lösen
Call o.ExtractFile (strFileName)
Setfileattr strFileName , ATTR_READONLY
End If
End Forall
End If  'If xHasDocAttachments(doc) Then
End If  'If ( rtitem.Type = RICHTEXT ) Then

If intAbbruch Then
'Export abgebrochen
'Word wird ohne zu speichern beendet
Call clsWord.CloseWord
Delete clsWord
'Alle bisher gelösten Dateien werden gelöscht
For idx = 0 To Ubound(arrFiles)
If arrFiles(idx) <> "" Then
Setfileattr arrFiles(idx) , ATTR_NORMAL
Kill arrFiles(idx)
End If  'If arrFiles(idx) <> "" Then
Next  'For idx = 0 To Ubound(arrFiles)
Messagebox "Der Export wurde abgegrochen.", 64, "Mail-Export"
Else
'Worddokument wird gespeichert und Word wird beendet
Call clsWord.SaveDoc(Cstr(cFile.Filename))
Call clsWord.CloseWord
Delete clsWord

'Setzen des Schreibschutzes auf Word-DAtei
Setfileattr Cstr(cFile.Filename), ATTR_READONLY

Messagebox "Das Mail wurde erfolgreich exportiert.", 64, "Mail-Export"
End If  'If intAbbruch Then

Exit Sub

ErrorHandling:
Messagebox "Das Mail konnte nicht exportiert werden." + Chr$(13) + "Fehler: " + Str$(Err) + " -> '" + Error$ + _
"' in Zeile " + Str$(Erl) , 16, "Mail-Export"

'Aufräumen
If Not (clsWord Is Nothing) Then
Call clsWord.CloseWord
Delete clsWord
End If  'If Not (clsWord Is Nothing) Then

Exit Sub         

End Sub


Function xHasDocAttachments(doc As NotesDocument) As Integer

Dim vEval As Variant
vEval = Evaluate("@Attachments", doc)
If vEval(0) = 0 Then
xHasDocAttachments = False
Else
xHasDocAttachments = True
End If

End Function

--- Ende Code ---

Den Code der benötigten Script-Lib habe ich angehängt. Den Agent starte ich über einen Aktions-Button in der Memo- und den beiden Antwortmasken.


Axel

gere:
Super, vielen herzlichen Dank!!!
Werd ich gleich testen.

Gruß Gere

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln