Autor Thema: Agent: Automatisches Verschicken von Mails mit Anhang  (Gelesen 5941 mal)

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Hallo liebe Forum-User
Ich muß einen Agenten erstellen, der automatisch Mails mit Anhang verschickt. Diese Anhänge sind in bestimmten Ordnern. Jeder Mitarbeiter hat einen Ordner, wobei in einer Datenbank die Zugehörigkeit zwischen Mitarbeiter und Ordner festgelegt wurde. Das Problem ist, dass es unterschiedlich viele Anhänge sind. Ein Mitarbeiter kann mal 3 Dateien bekommen, wobei der andere nur eine bekommt. Die Dateien haben aber immer die gleiche Endung. Kann man doch sicherlich mit *.twg arbeiten oder? In der Mail soll automatisch ein Text hinterlegt sein. Der Anhang soll am Besten in der Mail so abgelegt sein, dass automatisch beim Raufklicken, es an einer bestimmten Stelle abgelegt und ein Programm gestarten wird, via @Command([Execute]);“c:\......“;“c:\....... Kann man das realisieren? Mir fehlt der Einstieg. Ein Programm, was Mails verschickt habe ich schon, aber ich weiß ned, wie ich das mit dem Anhang realisieren soll, auch das er gleich den Aktionhotspot hinterlegt. Für ein wenig Hilfe oder
Anregungen wäre ich euch sehr dankbar. Vielen Dank im vorraus.

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #1 am: 17.03.05 - 10:52:24 »
Ein Problem meine ich gelöst zu haben und zwar wie ich die Anhänge automatisch speichern lassen kann, nachdem die Mail versendet wurde:

Dim Pfad As String
Pfad = "C:\<pfad>"
Dim doc As NotesDocument
Dim obj As NotesEmbeddedObject
   
Forall o In doc.EmbeddedObjects
   If (o.Type = EMBED_ATTACHMENT) Then
      If Ucase(Right(o.Source, 4)) = UCase(".twg") then
         Call o.ExtractFile(Pfad & o.Source)
      End If
   End If
End Forall

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #2 am: 17.03.05 - 13:44:31 »
Bin noch ein bissl weiter gekommen:

NotesRichTextItem.EmbedObject

soll wohl Dateien anhängen können. Bin da aber noch ned ganz durchgestiegen. Wäre für jede weitere Hilfe sehr dankbar.

Offline semtex

  • Frischling
  • *
  • Beiträge: 43
  • Geschlecht: Männlich
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #3 am: 17.03.05 - 14:09:29 »
Hi,

das Einfügen von Dateien in ein Dokument kannst Du grundsätzlich mit folgenden Skript abwickeln:

Code

Dim tmpDoc As NotesDocument	
TmpDir = "C:\temp\"
Set tmpDoc = db.CreateDocument
Call tmpDoc.CreateRichTextItem("Anhang")
Set rtitem = tmpDoc.GetFirstItem("Anhang")
If Not rtitem Is Nothing Then			
	If rtitem.Type = RICHTEXT Then
		Call rtitem.AddNewLine(1)
		Call rtitem.EmbedObject(EMBED_ATTACHMENT, "", TmpDir & "brief.doc")
		Call tmpDoc.Save(True, True)	
		Call tmpDoc.PutInFolder(folderName)	
	End If
End If


Musst Du natürlich noch an Deine Gegebenheiten anpassen.
Ich hoffe das hilft Dir.

Gruß semtex
"Erst wenn wir alles verloren haben, haben wir die Freiheit, alles zu tun!"
Fight Club

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #4 am: 17.03.05 - 14:19:15 »
Hi Dankeerstmal. Das Problem ist ja, dass ja 100 verschiedene Mails geschrieben werden müßen, wobei jede Mail, auch einen anderen Anhang bekommt, bzw. 2 oder 3. und es gibt keinen bestimmten Anhang. Der Anhang bzw. die Anhänge haben die gleiche Endung sonst unterscheiden sie sich vom Namen etc.

cubetoon

  • Gast
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #5 am: 17.03.05 - 21:14:05 »
kann man hier nicht mit irgend einer Systembibliothek nachhelfen, die den Inhalt eines bestimmten Ordners (auf der Festplatte) zurück liefert ... müsste hier mal genauer schauen.
Hab da mal ein Script gemacht um automatisiert bestimmte Dateien in einem Verzeichnis zu löschen. Vielleicht hilft das ja ein wenig weiter:

Code
' Dieser Script löscht alle Dateien im angegebenen Verzeichnis, die das Maximalalter erreicht haben.
' Script befindet sich im Testmodus zum "schärfen" REM vor MsgBox setzen und bei Filesystemobject entfernen

Ordner = "C:\Test\"			' zu durchsuchender Ordner
Alter = 2					' maximalalter in Tagen

Set fso = CreateObject ("Scripting.FileSystemObject")
if fso.FolderExists(Ordner) then
	set f = fso.GetFolder(Ordner)
	set fc = f.Files
	for each datei in fc
		Generated = datei.DateLastModified
		age = Abs(Datediff("d",now,Generated))
		if age => Alter then
			'fso.DeleteFile datei, True
			MsgBox datei
		end if
	next
end if

Marinero Atlántico

  • Gast
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #6 am: 17.03.05 - 21:22:02 »
Ich bin da jetzt momentan nicht so informiert.
Aber kann man in Lotus Script nicht einen Ordner angeben und in einer Schleife werden alle Namen der Files in diesem Ordner ausgegen.
In Java geht das.
Und wenn wir jetzt schon bei den Windows-Funktionen sind.
Da gibt es sicher auch sowas.
OK. Beim 2. Hinschauen hat CUBETOM genau das gemeint

Axel

cubetoon

  • Gast
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #7 am: 17.03.05 - 21:48:25 »
Hallo margli,
hiermit solltest Du schon mal die Dateinamen herausbekommen. Ich habe hoffentlich richtig verstanden, dass der Pfad pro Mitarbeiter feststeht und Du lediglich herausbekommen musst, welche Files dort liegen.
Viele Grüße
cubetoon

Code
Sub Click(Source As Button)
	Set fso =  Createobject  ("scripting.filesystemobject")	
	back =	fso.Folderexists("C:\Test\") 
	Messagebox back
	If back = True Then
		Set f = fso.GetFolder("C:\Test")
		Set fc = f.Files
		Forall datei In fc
			Filename=	fso.GetFileName(datei.path)
			Messagebox Filename			
		End Forall
	End If
End Sub
« Letzte Änderung: 17.03.05 - 21:50:31 von cubetoon »

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #8 am: 18.03.05 - 15:28:20 »
Hi.
Vielen Dank erstmal. Ich werde mal schauen, ob ich das einbauen kann. Ja also jeder Mitarbeiter hat eine Segement Nummer. Jeder Mitarbeiter hat einen Ordner der mit der Segment Nummer benannt wurde. In jedem Ordner befinden sich immer Dateien. Es kann aber mal sein, dass es nur 1 Datei ist oder auch mal 3. Das einzige was diese Dateien gemeinsam haben ist deren Dateiendung, also *.twg. Da ja jetzt jeder Mitarbeiter automatisch eine Mail bekommen soll mit den angehängten Dateien, muß das Programm wissen, welche und wieviele Dateien sich in dem Ordner befinden, damit sie danach an eine Mail automatisch angehängt werden können und dann verschickt werden können. Alles doch komplexer als ich dachte. Aber vielleicht hilft mir ja deins schon ein bissl weiter.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #9 am: 18.03.05 - 19:24:38 »
Margli, wenn Deine Spezifikationen sowieso so festgemeisselt sind, schau Dir mal die LS-Function Dir an.
ErrorHandling ist aber ein MUSS - auch hierzu gibt es bereits etliche Postings hier im Forum. Einfach die Suche benutzen.

Bernhard

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #10 am: 24.03.05 - 07:38:45 »

Code
Sub Click(Source As Button)
	Set fso =  Createobject  ("scripting.filesystemobject")	


Was ist bei Dir fso?

cubetoon

  • Gast
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #11 am: 24.03.05 - 11:33:54 »
ein ganz normaler Variablenname. Kannst Du auch MEINFILESYSTEMOBJECT nennen, dann allerdings überall im Quellcode.

in dem Falle wird fso das Objekt Scripting.Filesystemobject zugewiesen

ein Guru verbessere mich, wenn er es besser ausdrücken kann

@margli schau Dir aber tatsächlich zuvor mal die von koehlerbv genannte Lotus-Script Funktion "Dir" an. damit kommst Du genau so weit und musst keine externen Objekte angreifen.

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #12 am: 29.03.05 - 08:51:41 »
Guten Morgen,

bin schon ein Stück voran gekommen, dank der DIR Funktion. Leider kann er die Dateien nicht Anhängen, da er die Dateien selber nicht findet. Liegt wohl daran, dass ich ihm kein Pfad zugewiesen haben, wo er suchen soll?  Wenn ich den Pfad fest eingebe also "   Set object = rtitem.EmbedObject
( EMBED_ATTACHMENT, "", "c:\test.txt"), dann klappt es. Wie kann ich den Pfad festlegen? Wobei ja gegeben sein muß, dass der Pfad sich ja immer ändert, da er ja die Ordner ändert.

Code
Sub Test
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim rtitem As NotesRichTextItem
	Dim object As NotesEmbeddedObject
	Dim doc As NotesDocument
	Set db = session.CurrentDatabase
	Set doc = New NotesDocument( db )
	
	Eingabe = Inputbox$("Bitte Betreff eingeben (z.B. RPI 03/05)","Eingabe des Betreffs RPI-Mail")
	If Eingabe = "" Then
		Msgbox "Achtung!" & Chr(13) & "Sie haben nichts eingegeben."
		Exit Sub
	End If	
	
	fileNum% = Freefile()
	Open "c:\dir.txt" For Output As fileNum%	
	pathName$ = "c:\test\*.*"
	fileName$ = Dir$(pathName$, 0)
	Do While fileName$ <> ""
		Print fileName$
		fileName$ = Dir$()
		Print #fileNum%, fileName$	
		Set rtItem = New NotesRichTextItem(doc,"Body")	
		Set object = rtitem.EmbedObject _
		( EMBED_ATTACHMENT, "", (fileName$))
		doc.Form = "Memo"
		doc.Subject = Eingabe
		doc.SendTo = "1@2.de"
		
	Loop
	Close fileNum% 
	Call doc.Send(False)	
End Sub


Im Debugger zeigt er mir komischerweise unter Globals an, dass er im Verzeichnis c:\test ist, sagt aber trotzdem "test.bmp not found"
« Letzte Änderung: 29.03.05 - 09:26:45 von margli »

cubetoon

  • Gast
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #13 am: 29.03.05 - 11:47:56 »
Hallo margli,
zwei Dinge fallen mir auf.

Zum einen verlangt ( EMBED_ATTACHMENT, "", (fileName$)) den gesamten Pfadname und nicht nur den Dateiname. Nutze also hier ( EMBED_ATTACHMENT, "", (pathName$ + fileName$))

Und dann solltest Du den Befehl fileName$ = Dir$() erst ans Ende (vor den Loop) stellen. Schließlich ist die Variable zu dem Zeitpunkt bereits mit dem Namen der ersten Datei gefüllt und soll nicht schon die zweite erhalten ... das macht sonst nämlich Probleme bei dem Do-Statement.

[EDIT ein] ach ja und noch eins. definiere pathName$ = "c:\test\" also ohne "*.*"[/EDIT off]
Viele Grüße,
cubetoon
« Letzte Änderung: 29.03.05 - 11:51:15 von cubetoon »

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #14 am: 29.03.05 - 13:22:54 »
Cool. Vielen Dank @cubetoon. Du hast mir echt weitergeholfen.

Kann ich jetzt auch gleich schon, wenn ich die Dateien anhänge, einen HotSpot oder sonstiges hinterlegen á la

@Command([Execute];"c:\\pfad\\programm";"c:\pfad\\DATEN\" + (filename$))

Ist jetzt zwar Formelsprache, aber die Datei soll beim Anklicken halt gleich mit dem entsprechenden Programm gestartet werden und in einem entsprechenden Ordner abgelegt werden, damit die User auch nichts falsch machen können. :)

Mir würde jetzt nur ein 2. Agent einfallen, der die Dateien dann löst, bzw. wie hier schon beschrieben. Schöner wär es aber, wenn das gleich alles in einem "Wasch" erledigt werden könnte.


Desweiteren Frage ich mich, warum er die Anhänge so komisch verteilt und nicht so gleichmäßig. :(

« Letzte Änderung: 29.03.05 - 16:01:06 von margli »

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #15 am: 11.04.05 - 16:18:32 »
Hallo
habe noch ein kleines Problem mit meinem Programm. Das Programm bricht immer ab, wenn der Ordner, der eigentlich vorhanden sein sollte, nicht vorhanden ist. Dieser soll dann aber einfach nur übersrprungen werden und mit dem nächsten Eintrag fortgefahren werden.

         pathName$ = "z:\"+gebietsnr+"\"      
         If Len(Trim(Dir$(pathname$,16))) > 0 Then
            fileName$ = Dir$(pathName$, 0)
            Do While fileName$ <> ""
               Print fileName$   
               
               Call m.Attachment(pathName$ + fileName$)
               fileName$ = Dir$()
            Loop

So dachte ich eigentlich, dass ich das lösen könnte. Also wenn ein pfadname vorhanden ist, dann führt er den loop aus. leider klappt es ned und er sagt trotzdem ab einer bestimmten Stelle, Pfad nicht gefunden

cubetoon

  • Gast
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #16 am: 11.04.05 - 23:09:07 »
Hi margli,
etwas Errorhandling muss schon sein.
Du hast garantiert in Deiner gebietsnr irgendwann einen Wert, den es eben nicht als Verzeichnis gibt. Dies gilt es vorauszusehen und entsprechendes Errorhandling mit On Eroor ... zu betreiben.
Viele Grüße
Cubetoon

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #17 am: 11.04.05 - 23:31:23 »
ErrorHandling muss immer sein. Lieber zuviel als zuwenig.

Dir$ (DeinLaufwerk:\DeinVerzeichnis\*) ergibt einen Laufzeitfehler, wenn es dieses Verzeichnis nicht gibt. Du kannst auf Grund dieser Tatsache vor dem Dir$ in eine Fehlerroutine (verinfachtes Verfahren !) verzweigen lassen, die folgendes macht:
- eine boolsche Variable setzen, die den Fehlerzustand signalisiert und dann
- ein Resume Next ausführt.
In der nächsten Zeile (die Resume Next ansteuert), fragst Du dann die boolsche Variable ab - oder machst eben nix mehr bis zum nächsten Verzeichnis.
Nicht vergessen, die boolsche Variable zurückzusetzen, bevor Du Deine Abfrage machst -. nicht, dass die nach einem Fehlversuch immer auf False bleibt ;-)

HTH,
Bernhard

Offline margli

  • Junior Mitglied
  • **
  • Beiträge: 88
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #18 am: 12.04.05 - 09:26:36 »
Hi. Danke erstmal für die Tipps. Wie kann ich dann mir den Fehlerzustand signalisieren lassen? Bin im Bereich ErrorHandling total unerfahren.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Agent: Automatisches Verschicken von Mails mit Anhang
« Antwort #19 am: 12.04.05 - 09:38:38 »
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz