Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: gere am 18.08.05 - 09:32:00

Titel: Mail + Attachment im Filesystem speichern
Beitrag von: gere am 18.08.05 - 09:32:00
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
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 18.08.05 - 09:36:25
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
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: gere am 18.08.05 - 09:42:06
Hi Axel,

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

Gruß Gerhard
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 18.08.05 - 10:12:57
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

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

Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: gere am 18.08.05 - 10:20:55
Super, vielen herzlichen Dank!!!
Werd ich gleich testen.

Gruß Gere
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: shiraz am 18.08.05 - 16:35:31
Hi Axel,

es funzt einwandfrei!!

 ;D
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: gere am 18.08.05 - 16:43:38
Hallo Axel,

Super, das Script rennt total gut! Ich hab im Agent noch eingebaut, dass für jede abgelegte Email ein eigenes Verzeichnis mit Datum/Uhrzeit im FileSystem angelegt wird.
Vielen Dank nochmal, Du hast mich enorm weitergebracht!

Gruß Gere
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: (h)uMan am 17.10.05 - 11:24:38
Hallo,

ich bräuchte eine Lösung, um nur vorhandene Attachments von Dokumenten (Auswahl über Ansichten oder Ordner im Notes Client) im Filesystem mit analoger Ordnerstruktur wie in der MailDB zu speichern.

Bin kein Entwickler, daher auf Hilfe angewiesen ...

SG, Neo
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: gere am 17.10.05 - 12:59:13
Hallo,

Ich hätte einen Agenten, der es ermöglicht, Dateien aus einer Datenbank ins File System zu lösen. Dabei werden Ordner erstellt, die nach dem Erstelldatum der jeweiligen Datei benannt werden. Aber das könntest Du relativ einfach anpassen, auch wenn Du kein Entwickler bist. Bist Du daran interessiert?

Gruß Gere
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: (h)uMan am 17.10.05 - 16:38:51
Hallo,

bin noch in der Sandbox fündig geworden und werde den Agenten erstmal testen.

http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/fe7542cd3b120e1b00256c38004a6a27?OpenDocument&Highlight=0,detach

Vielen Dank für die Infos.

SG, Neo
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Rachimow am 07.02.06 - 22:57:45
Hallo ich kann leider die Datei nicht herrunterladen.

Bin für jeden Tip dankbar

hydae
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: koehlerbv am 07.02.06 - 23:19:15
Um welche Datei geht es denn? Und warum ist "Rachimow" bereits wieder abgemeldet?
Was soll das?
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: NotesForum am 08.02.06 - 18:04:22
Hatte 2 Zugange deswegen habe ich den einen gelöscht.

Problem hat sich erledigt.

Rachimow
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: koehlerbv am 08.02.06 - 18:37:51
Erstaunlich. Rachimow angemeldet und unterschreibt mit "hydae". Hydrae angemeldet und unterschreibt mit Rachimow.

Eine "vertrauensbildende Massnahme" ist das nicht gerade ...

Bernhard Köhler
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: LDCOE am 17.02.06 - 15:58:55
Hallo,
bin leider kein Entwickler und habe Probleme mit den LSS Dateien. Wo muss ich diese einfügen? Unter Declarations mit Datei-> importieren?   
Vielen Dank vorab für eure Mühe!

Gruss Jens
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 17.02.06 - 16:44:48
Nimm den Code aus den LSS-Dateien und füge in jeweils in eine neue Script-Bibliothek ein. Benenne die Bibliothek dann so wie die LSS-Datei heißt.


Axel
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: LDCOE am 20.02.06 - 10:34:14
Hallo, herzlichen Dank für die Antwort,
ich habe die Script-Bibliotheken angelegt wie beschreiben. Nach den Bibs habe ich den Agenten neu erstellt.
Es scheint wohl ein Problem mit der Klasse Cfile zu geben, in der Zeile:
"Dim cFile As CFile"   kommt die Meldung "Class or File Name not found".
Hast du einen Tipp woher dieser Fehler kommen könnte?


Gruss Jens 

Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 20.02.06 - 10:42:29
Hast du die Bibliotheken auch mit Use ... in den Agenten eingebunden.

Code

(Options) - Section
Option Public
Use "libWord"
Use "FileLibrary"
...


Axel
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: LDCOE am 20.02.06 - 11:18:41
Hallo,
ja das habe ich, den oberen Teil habe ich bei Options, den Rest bei Initialize einkopiert. Der Options Teil Sieht folgendermassen aus:

Option Public
Use "libWord"
Use "FileLibrary"

Die Script-Lib habe ich über Importieren jeweils in eine neue Bib kopiert und entsprechende Namen vergeben.
Hab ich noch was vergessen?

Gruss Jens
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 20.02.06 - 11:35:50
Unter Umständen ist beim Importieren des Codes was schiefgegangen und das Ganze steht nicht in den richtigen Abschnitten,

Deine Lib FileLibrary müsste so aussehen

Abschnitt (Options)
Code
Option Public
%INCLUDE "LSCONST.LSS"

Abschnitt (Declarations)
Code
'Struktur für Dateidialoge definieren
Type fileDlgStruct
	lStructSize As Long     
	hwndOwner As Long     
	hInstance As Long     
	lpstrFilter As String     
	lpstrCustomFilter As Long     
	nMaxCustFilter As Long     
	nFilterIndex As Long     
	lpstrFile As String     
	nMaxFile As Long     
	lpstrFileTitle As String     
	nMaxFileTitle As Long     
	lpstrInitialDir As String     
	lpstrTitle As String     
	Flags As Long     
	nFileOffset As Integer     
	nFileExtension As Integer     
	lpstrDefExt As String     
	lCustData As Long     
	lpfnHook As Long     
	lpTemplateName As Long          
End Type

'Funktionen aus DLL
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (fileDlg As fileDlgStruct)  As Long
Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (fileDlg As fileDlgStruct)  As Long

'Konstanten für Dateidialog festlegen
Const OFN_ALLOWMULTISELECT = &H200
Const OFN_CREATEPROMPT = &H2000
Const OFN_ENABLEHOOK = &H20
Const OFN_ENABLETEMPLATE = &H40
Const OFN_ENABLETEMPLATEHANDLE = &H80
Const OFN_EXPLORER = &H80000                      
Const OFN_EXTENSIONDIFFERENT = &H400
Const OFN_FILEMUSTEXIST = &H1000
Const OFN_HIDEREADONLY = &H4
Const OFN_LONGNAMES = &H200000             
Const OFN_NOCHANGEDIR = &H8
Const OFN_NODEREFERENCELINKS = &H100000
Const OFN_NOLONGNAMES = &H40000  
Const OFN_NONETWORKBUTTON = &H20000
Const OFN_NOREADONLYRETURN = &H8000
Const OFN_NOTESTFILECREATE = &H10000
Const OFN_NOVALIDATE = &H100
Const OFN_OVERWRITEPROMPT = &H2
Const OFN_PATHMUSTEXIST = &H800
Const OFN_READONLY = &H1
Const OFN_SHAREAWARE = &H4000
Const OFN_SHAREFALLTHROUGH = 2
Const OFN_SHARENOWARN = 1
Const OFN_SHAREWARN = 0
Const OFN_SHOWHELP = &H10

'Klasse cFiel
Class cFile
	
	'öffentliche Eigenschaften der Klasse
	Public DefaultDir As String  'Vorgabeverzeichnis
	Public DefaultFilename As String  'Vorgabedateiname
	Public FileName As String  'gewählter Dateiname incl. Verzeichnis
	Public FileTitle As String  'gewählter Dateiname
	Public Filter As String  'Liste für Filter
	Public FilterIndex As Integer  'Index für Vorgabefilter
	Public Title As String	'Titel der Dialogbox
	
	'private Klasseneigenschaften
	myfileDlg As fileDlgStruct
	
	'Methode für Datei-Öffnen Dialog
	Function FileOpenDlg () As Integer
		
		Dim APIResults As Integer
		Dim szFileName As String *255
		Dim szFileTitle As String *255
		Dim szCurrentDir As String *255
		Dim Index As Integer
		
          'Speicher für Rückgabestrings allokieren
		szFileName = Chr$(0) & Space$(255) & Chr$(0)
		szFileTitle = Space$(255) & Chr$(0)
		
          'Vorgabe - Extension initialisieren.     
		DefExt = Chr$(0)
		
          'Vorgabewerte setzen
		szCurrentDir = DefaultDir & Chr$(0)
		szFileName = DefaultFileName & Chr$(0)
		Title = Title & Chr$(0)
		
          'FilterIndex prüfen
		If FilterIndex <= 0 Then FilterIndex = 1
		
         'Initialisierung der Datenstruktur
		myFileDlg.lStructSize = Len(myFileDlg)
		
		myFileDlg.hwndOwner = 0&  'If the OpenFile Dialog box is not linked to any form use this line.It will pass a null pointer.
		myFileDlg.lpstrFilter =  Filter     
		myFileDlg.nFilterIndex = FilterIndex
		myFileDlg.lpstrFile = szFileName     
		myFileDlg.nMaxFile = Len(szFileName)     
		myFileDlg.lpstrFileTitle = szFileTitle     
		myFileDlg.nMaxFileTitle = Len(szFileTitle)     
		myFileDlg.lpstrTitle = Title     
		myFileDlg.Flags = OFN_LONGNAMES + OFN_HIDEREADONLY + OFN_PATHMUSTEXIST
		myFileDlg.lpstrDefExt = DefExt     
		myFileDlg.hInstance = 0     
		myFileDlg.lpstrCustomFilter = 0     
		myFileDlg.nMaxCustFilter = 0     
		myFileDlg.lpstrInitialDir = szCurrentDir     
		myFileDlg.nFileOffset = 0     
		myFileDlg.nFileExtension = 0     
		myFileDlg.lCustData = 0     
		myFileDlg.lpfnHook = 0     
		myFileDlg.lpTemplateName = 0     
		
		'Anzeigen des Dialoges
		APIResults = GetOpenFileName(myFileDlg)
		
		'Bearbeiten der Rückgabewerte
		If APIResults <> 0 Then                    
			szFileName = Cstr( myFileDlg.lpstrFile )          
			szFileTitle = Cstr( myFileDlg.lpstrFileTitle )
			FileName = Left$(szFileName, Instr(szFileName, Chr$(0)))
			FileTitle = Left$(szFileTitle, Instr(szFileTitle, Chr$(0)))
			FileOpenDlg = 1          
		Else           
			FileOpenDlg = 0
		End If  'If APIResults <> 0 Then                    
		
	End Function 'Function FileOpenDlg () As Integer
	
	
	'Methode für Datei-Speichern Dialog
	Function FileSaveDlg()
		
		Dim APIResults As Integer
		Dim szFileName As String *255
		Dim szFileTitle As String *255
		Dim szCurrentDir As String *255
		
          'Speicher für Rückgabestrings allokieren
		FileName = Chr$(0) & Space$(255) & Chr$(0)
		szFileTitle = Space$(255) & Chr$(0)
		
         'Vorgabe - Extension initialisieren.     
		DefExt = Chr$(0)
		
          'Setzen der Vorgabewerte
		szCurrentDir = DefaultDir  & Chr$(0)
		szFileName = DefaultFileName & Chr$(0)
		Title = Title & Chr$(0)
		
          'FilterIndex prüfen
		If FilterIndex <= 0 Then FilterIndex = 1
		
         'Initialisierung der Datenstruktur
		myFileDlg.lStructSize = Len(myFileDlg)
		
		myFileDlg.hwndOwner = 0&  'If the OpenFile Dialog box is not linked to any form use this line.It will pass a null pointer.
		myFileDlg.lpstrFilter =  Filter     
		myFileDlg.nFilterIndex = FilterIndex     
		myFileDlg.lpstrFile = szFileName     
		myFileDlg.nMaxFile = Len(szFileName)     
		myFileDlg.lpstrFileTitle = szFileTitle     
		myFileDlg.nMaxFileTitle = Len(szFileTitle)     
		myFileDlg.lpstrTitle = Title     
		myFileDlg.Flags = OFN_FILEMUSTEXIST + OFN_LONGNAMES + OFN_HIDEREADONLY + OFN_PATHMUSTEXIST
		myFileDlg.lpstrDefExt = DefExt     
		myFileDlg.hInstance = 0     
		myFileDlg.lpstrCustomFilter = 0     
		myFileDlg.nMaxCustFilter = 0     
		myFileDlg.lpstrInitialDir = szCurrentDir     
		myFileDlg.nFileOffset = 0     
		myFileDlg.nFileExtension = 0     
		myFileDlg.lCustData = 0     
		myFileDlg.lpfnHook = 0     
		myFileDlg.lpTemplateName = 0     
		
		'Anzeigen des Dialoges
		APIResults = GetSaveFileName(myFileDlg)
		
		'Bearbeiten der Rückgabewerte
		If APIResults <> 0 Then                    
			szFileName = Cstr( myFileDlg.lpstrFile )          
			szFileTitle = Cstr( myFileDlg.lpstrFileTitle )
			FileName = Left$(szFileName, Instr(szFileName, Chr$(0)))
			FileTitle = Left$(szFileTitle, Instr(szFileTitle, Chr$(0)))
			FileSaveDlg = 1          
		Else           
			FileSaveDlg = 0
		End If  'If APIResults <> 0 Then                    
		
	End Function  'Function FileSaveDlg()
	
	
	'Methode zum Prüfen ob ein Verzeichnis vorhanden ist
	Function IsValidDir(sPath As String) As Integer
		
		On Error Resume Next
		
		attr% = Getfileattr(sPath)
		If Err > 0 Then
			IsValidDir = 0
			Exit Function
		End If  'If Err > 0 Then
		If (attr% And ATTR_DIRECTORY) Then IsValidDir = 1
		
	End Function  'Function IsValidDir(sPath As String) As Integer
	
	
	'Methode zum Anlegen von Verzeichnissen
	Function MakeDir (sPath As String) As Integer
		
		Dim sNewPath As String
		Dim iPosi As Integer
		
		If Right$(sPath,1) <> "\" Then sPath = sPath & "\"
		MakeDir = 1
		
		On Error Goto MakeDirError
		
		Do
			iPosi = Instr(iPosi + 1, sPath, "\")
			If iPosi > 0 Then
				sNewPath = Left$(sPath, iPosi - 1)
				If Me.IsValidDir(sNewPath) = 1 Then
					Mkdir sNewPath
				End If  'IsValidDir(sNewPath) = 0...
			End If  'iPosi > 0...
		Loop Until iPosi = 0
		
		MakeDir = 0
		
Ende:		
		Exit Function
		
MakeDirError:
		Messagebox "Error " & Str(Err) & " : " & Error$ 
		Resume Ende
		
	End Function 'Function MakeDir (sPath As String) As Integer
	
	
	'Methode zum Kopieren von einer Datei
	'source -> Quelldatei incl. Verzeichnis
	'destination -> Zielverzeichnis ohne Dateinamen
	Function CopyFile(source As String, destination As String) As Integer
		
		On Error Goto Errorhandler
		
		If source = "" Then
			Messagebox "Sie haben keine Quelldatei zum Kopieren angegeben." , MB_ICONEXCLAMATION, "Datei kopieren"
			CopyFile = 1
			Exit Function               
		End If  'If source = ""
		
		If destination = "" Then
			Messagebox "Sie haben keine Ziel zum Kopieren angegeben." , MB_ICONEXCLAMATION, "Datei kopieren"
			CopyFile = 1
			Exit Function               
		End If  'If destination = ""
		
		If Strcompare(source, destination, 5) = 0 Then
			Messagebox "Quelle und Ziel dürfen nicht gleich sein." , MB_ICONEXCLAMATION, "Datei kopieren"
			CopyFile = 1
			Exit Function               
		End If  'If StrCompare...          
		
		If Dir$(source, 0) = "" Then
			Messagebox "Datei " & source & " ist nicht vorhanden" , MB_ICONEXCLAMATION, "Datei kopieren"
			CopyFile = 1
			Exit Function
		End If  'If Dir$(source, 0) = ""
		
		If Dir$( destination , 16) = "" Then 
			If Messagebox ("Verzeichnis " & destination & " ist nicht vorhanden" & Chr$(13) & Chr$(10) &"Möchten Sie das Verzeichnis erstellen?",_
			MB_YESNO + MB_ICONQUESTION, "Datei kopieren" ) = IDYes Then
				If Me.MakeDir(destination) = 1 Then
					Messagebox "Verzeichnis " & destination & " konnte nicht angelegt werden" , MB_ICONEXCLAMATION, "Datei kopieren"
					CopyFile = 1
					Exit Function
				End If   'If Me.MakeDir(destination) = 1 Then                   
			Else
				CopyFile = 1
				Exit Function               
			End If  'If Messagebox ("Verzeichnis " & destination & " ist 
		End If  'If Dir$(destination, 16) = ""
		
		If Right$(destination,1) <> "\" Then destination = destination & "\"
		destination = destination & Me.ExtractFileName(source)
		
		If Dir$(destination, 0) = destination Then
			If Messagebox ("Datei " & destination & " ist bereits vorhanden." & Chr$(13) & Chr$(10) &"Möchten Sie die Datei überschreiben?", _
			MB_YESNO + MB_ICONQUESTION, "Datei kopieren" ) = IDYes Then
				Filecopy source, destination
				Messagebox "Datei " & destination & " wurde erfolgreich kopiert", MB_ICONINFORMATION, "Datei kopieren"
				CopyFile = 0
			End If  'If Messagebox ("Datei existiert bereits. Überschreiben",  ...
		Else
			Filecopy source, destination
			Messagebox "Datei " & destination & " wurde erfolgreich kopiert", MB_ICONINFORMATION, "Datei kopieren"                   
			CopyFile = 0
		End If  'If Dir$(destination...  
		
Ende:     
		Exit Function
		
ErrorHandler:
		If Err = 76 Then
			Resume Next
		Else
			Messagebox "Beim Kopieren ist ein Fehler aufgetreten." & Chr$(13) & Chr$(10) & "Fehlernr.: " & Str$(Err) & " -> " & Error$, _
			MB_ICONSTOP, "Datei kopieren"
			CopyFile = 1
			Resume Ende          
		End If  'If Err = 76 Then
		
	End Function  'Function CopyFile(source As String, destination As String) As Integer	
	
	
	'Methode zum extrahieren des Dateinamens
	Function ExtractFileName( sPath As String) As String
		
		Dim iPos As Integer
		Dim iPosSave As Integer
		
		Do
			iPosi = Instr(iPosi + 1, sPath, "\")
			If iPosi > 0 Then iPosSave = iPosi + 1
		Loop Until iPosi = 0
		ExtractFileName = Mid$(sPath,iPosSave)
		
	End Function  'Function ExtractFileName( sPath As String) As String
	
	
	'Methode zum Extrahieren des Verzeichnisteils
	Function ExtractFilePath(sPath As String) As String
		
		Dim iPos As Integer
		Dim iPosSave As Integer
		
		Do
			iPosi = Instr(iPosi + 1, sPath, "\")
			If iPosi > 0 Then iPosSave = iPosi
		Loop Until iPosi = 0
		ExtractFilePath = Left$(sPath,iPosSave)
		
	End Function  'Function ExtractFilePath(sPath As String) As String
	
End Class  'Class cFile


Axel
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: LDCOE am 20.02.06 - 12:23:58
Hallo, ja das wars.
Der Options Abschnitt in der Bib war nicht ausgefüllt.
 
Vielen, vielen Dank für deine Hilfe!
Herzlichen Gruss Jens

Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: das_Moelli am 09.08.06 - 09:25:58
Guten Tag....

ich habe leider auch ein kleines Problem mit dem Script...

ich starte nach dem einfügen alles Libs und dem erstellen eines Agenten den Agenten mit
Code
@Command([ToolsRunMacro];"testagent")

Beim ausführen erhalte ich immer diese Fehlermeldung


Duplicate PUBLIC name XHASDOCATTACHMENTS in USE module libWord


Ich finde nur vorkommen im Agenten selbst und nicht in der libWord... wo könnte ich etwas falsch hinkopiert haben?

Bin für Hinweise dankbar...

Viele grüße Christian
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 09.08.06 - 11:04:59
Lass mal alles was an LotusScript in der DB oder im Template steckt neu kompilieren.

Das findest du unter Werkzeuge - LotusScript vollständig neu kompilieren



Axel
 
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: das_Moelli am 09.08.06 - 11:37:54

danke... jetzt geht es :)
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: das_Moelli am 10.08.06 - 07:55:42
Hallo...

leider hab ich doch noch ein Problem. Wenn ich nach dem einpflegen der Scripte die Gestalltung aktualisiere, kommt in Notes selber immer die Fehlermeldung

Aktualisierung der Datenbank fehlgeschlagen. Sie sind nicht zur durchführung dieser Aktion berechtigt


Mit meinen Adminaccount funktioniert es ohne Probleme, aber wieso können die Useraccounts es nicht nicht? Welche Rechte muss ich denn geben und wo?

Im Domino Designer geht es ohne Probleme ( auch mit Useraccounts) die Gestaltung zu aktualisieren, allerdings bekommen die Clients die Aktualisierung zwar angezeigt (ein Fenster wo dinsteht das einen aktualisierung ansteht), aber es verändert sich nix in den Schablonen :(

Muss ich bei einer Änderung in den Lib´s bzw beim erstellen einen Agenten noch mehr machen?  :-:

Viele Grüße
Christian
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 10.08.06 - 09:54:31
Um eine Gestaltung einer DB zu aktualisieren brauchst du mindestens Entwicklerrechte. Außerdem muß der Haken bei LotusScript-/Java-Agenten erstellen gesetzt sein.

Wenn das jeder bekommen soll, wieso baust du denn das nicht in die Schablone ein. Dann kümmert sich der Designtask um die Aktualisierung?


Axel
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: das_Moelli am 10.08.06 - 10:55:49
Wenn das jeder bekommen soll, wieso baust du denn das nicht in die Schablone ein. Dann kümmert sich der Designtask um die Aktualisierung?

Das würde ich gerne machen, bzw dachte ich eigentlich ich habe es so gemacht. Es ist doch in der Schablone drin, also die Aktion (der Button auf dem der Agent ausgeführt wird). Was muss ich denn da machen, um es in die Schablone zu bekommen?

Christian
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 10.08.06 - 13:40:09
Wenn du alles komplett in der Schablone drin hast, Agent und Scriptbibliotheken, dann sollte der Designtask eigentlich den Rest machen. Läuft der Designtask bei euch überhaupt?

Prüf mal das log bzw. schau die mal die notes.ini des Servers an. In der Regel gibt's da eine Zeile  ServertasksAt1=Design,....


Axel
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: csam am 10.08.06 - 17:38:08
Hallo zusammen,
ich erhalte folgende Fehlermeldung, aber ich kann den Fehler leider nicht erkennen.

LG
csam
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: koehlerbv am 10.08.06 - 21:23:14
Und wenn wir jetzt auch noch wüssten, welcher Code bei Dir in Zeile 165 steht ...
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: csam am 11.08.06 - 07:48:37
Sorry, habe es mir wohl zu einfach gemacht...

Zeile 165:
Code
Call clsWord.InsertLink(strFileName, Cstr(cFile.ExtractFileName(strFileName)))

Methode InsertLink:
Code
Sub InsertLink(strFilename As String, strText As String)
   Call objWord.ActiveDocument.Hyperlinks.Add(objWord.Selection.Range, strFilename, "", "", strText)		
End Sub


LG
csam
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 11.08.06 - 08:29:07
Ich würde mal sagen, dass bei die entweder die Variable strFilename oder strText nicht gesetzt oder sogar nicht deklariert sind. Ich vermute eher strFilename.

Setz mal Option Declare in deinem Agent und in den Bibliotheken. Was sagt denn der Debugger zu dem Thema?


Axel
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: das_Moelli am 11.08.06 - 09:25:30
Wenn du alles komplett in der Schablone drin hast, Agent und Scriptbibliotheken, dann sollte der Designtask eigentlich den Rest machen. Läuft der Designtask bei euch überhaupt?

Prüf mal das log bzw. schau die mal die notes.ini des Servers an. In der Regel gibt's da eine Zeile  ServertasksAt1=Design,....


Axel


Das ist der Inhalt meiner notes.ini an der Stelle wo Servertasks sind:

ServerTasks=Update,Replica,Router,AMgr,AdminP,CalConn,Sched,HTTP,IMAP,RunJava ISpy,LDAP,POP3
ServerTasksAt1=Catalog,Design
ServerTasksAt2=UpdAll
ServerTasksAt3=Object Info -Full
ServerTasksAt5=Statlog


Also Design ist drin... aber hinter Catalog,...  solllte es lieber andersherum sein?

Christian

Edit:
Es kommt beim jedem neustart von Notes ein Fenster auf, in dem er mit mitteilt, das etwas Aktualisiert wurde, und dann kann ich auf Aktualisieren klicken. Klicke ich drauf, läd er kurz was und sagt alles Aktualisiert, aber letzendlich ist nix passiert....
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: csam am 11.08.06 - 10:30:09
Setz mal Option Declare in deinem Agent und in den Bibliotheken. Was sagt denn der Debugger zu dem Thema?

Habe ich gemacht und habe auch Fehler gefunden, u.a. wdPageNone muss wdPaneNone  (oder umgekehrt) heißen.

Desweiteren schein es an der Word-Version zu liegen. Mit Word 97 funktioniert es nicht, daher habe ich den InsertLink entfernt und durch Text ersetzt.

Lg
csam
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 11.08.06 - 11:01:28
Also Design ist drin... aber hinter Catalog,...  solllte es lieber andersherum sein?

Das ist eigentlich egal.

Edit:
Es kommt beim jedem neustart von Notes ein Fenster auf, in dem er mit mitteilt, das etwas Aktualisiert wurde, und dann kann ich auf Aktualisieren klicken. Klicke ich drauf, läd er kurz was und sagt alles Aktualisiert, aber letzendlich ist nix passiert....

Das kommt mir sehr spanisch vor. Normalerweise wird das Desgin vom Server in der Nacht aktualisiert. Der User bekommt hier von nichts mit, außer dass er dann mit der aktualisierten DB arbeitet. Eine Abfrage kommt da keine.

Was für Rechte hat denn der Server auf die Datenbank?


Axel
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: das_Moelli am 15.08.06 - 10:19:58

es scheint als wäre ich zu ungeduldig gewesen... über Nacht hat es sich aktualisiert. Kann man den Service auch irgendwie dirket starten?

Christian
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 15.08.06 - 12:10:10
Geht im Client wenn du das Lesezeichen der entsprechenden Datenbank rechts anklickst und dann über "Datenbank - Gestaltung aktualisieren".


Axel
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Big768 am 20.06.07 - 18:30:29
Hallo Axel,

erstmal vielen Dank für die Bereitstellung des LS.

Bei mir funktioniert er nur bei Text. Wenn ich einen Anhang in der Mail habe erhalte ich die Meldung:

Das Modul konnte nicht exportiert werden. Fehler: 207 -> 'Automation object error' in Zeile 164

Zeile 162 - 166 lauten:

               arrFiles(idx) = strFileName
               idx = idx + 1
               Call clsWord.InsertLink(strFileName, Cstr(cFile.ExtractFileName(strFileName)))
               Call clsWord.Newline(1)
'Dateianhang lösen

Was mache ich falsch?

Vielen Dank im voraus für Deine Hilfe.

Johann
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Axel am 20.06.07 - 19:52:45
Ohne genauere Infos ist es schwer eine Aussage zu treffen.

Im Prinzip gilt auch hier das Gleiche dass ich bereits weiter ober (Antwort #31) geschrieben habe.

Prüfe mal die Variablen strFilename oder strText Wahrscheinlich sind sie nicht gesetzt oder sogar nicht deklariert sind. Ich vermute eher strFilename.

Setz mal Option Declare in deinem Agent und in den Bibliotheken. Was sagt denn der Debugger zu dem Thema?

Axel
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: Nibirius am 13.09.11 - 11:44:46
mal beleben das gute Stück :-)

Geht der bei euch noch mit einem 8.5er Client und Office 2003 bzw. 2010 ?
Bei meinen Tests rennt das nicht

Gruß Michael
Titel: Re: Mail + Attachment im Filesystem speichern
Beitrag von: ata am 14.09.11 - 07:13:54
Hallo Michael,

bitte keine alten Threads wiederbeleben - da hängen immer auch Mailings dran - besser ist es einen neuen Beitrag aufzumachen und den bisherigen zu verlinken - Danke...

;)

Toni