Autor Thema: LotusScript: Mailanhang auslesen  (Gelesen 16861 mal)

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
LotusScript: Mailanhang auslesen
« am: 20.11.08 - 14:50:57 »
Hallo,

ich versuche mich gerade an LotusScript-Agents... soweit sogut.
Ich bin jetzt an der Stelle, wo ich von einer selectierten Mail gern den Anhang auslesen und ggf. speichern will.
Leider finde ich in der Designerhilfe zum Attachment auslesen nicht wirklich was.
Könnt ihr mir weiterhelfen, wie ich mir ein Attachment aus einer Mail hole?

Danke und Gruß
Lotus Notes 8.0.2

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: LotusScript: Mailanhang auslesen
« Antwort #1 am: 20.11.08 - 15:04:13 »
Dann hast entweder in der falschen Hilfe oder einfach falsch gesucht. Du willst Dir "notesEmbeddedObject.ExtractFile( path$ )" ansehen.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: LotusScript: Mailanhang auslesen
« Antwort #2 am: 20.11.08 - 15:07:28 »
Dann hast entweder in der falschen Hilfe oder einfach falsch gesucht. Du willst Dir "notesEmbeddedObject.ExtractFile( path$ )" ansehen.
Ah ok, danke.
Lotus Notes 8.0.2

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: LotusScript: Mailanhang auslesen
« Antwort #3 am: 20.11.08 - 15:43:24 »
Ok, habe das Beispiel aus der Hilfe für mich umgesetzt umgesetzt:
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\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ß
Lotus Notes 8.0.2

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: LotusScript: Mailanhang auslesen
« Antwort #4 am: 20.11.08 - 15:53:58 »
So, habs hinbekommen:
Habe die Zeile
Code
Call o.ExtractFile( "D:\temp\attachment" & Cstr(fileCount) )
durch
Code
Call o.ExtractFile( "D:\temp\" & o.Name )
ersetzt und den fileCounter rausgehauen. Funktioniert - ich kann nun das Attachment korrekt speichern!

Gruß
Lotus Notes 8.0.2

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: LotusScript: Mailanhang auslesen
« Antwort #5 am: 21.11.08 - 09:12:28 »
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:
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ß
Lotus Notes 8.0.2

Offline mde

  • Junior Mitglied
  • **
  • Beiträge: 78
  • Geschlecht: Männlich
  • Das ist Notezig
Re: LotusScript: Mailanhang auslesen
« Antwort #6 am: 21.11.08 - 09:23:12 »
Hi,

du solltest prüfen ob ein Attacment vorhanden ist
Aus der Hilfe

Notes Document class
To get: notesEmbeddedObjectArray = notesDocument.EmbeddedObjects
.....
 If doc.HasEmbedded Then...

Grß Michael
Erst Kopf,
dann Knopf.

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: LotusScript: Mailanhang auslesen
« Antwort #7 am: 21.11.08 - 09:28:03 »
Habs gefunden... funzt. Danke.
Lotus Notes 8.0.2

Offline AndyG

  • Frischling
  • *
  • Beiträge: 2
Re: LotusScript: Mailanhang auslesen
« Antwort #8 am: 24.04.12 - 13:03:46 »
Hallo Zusammen,

ich habe das Script zum Speichern der Anlagen auch in Produktion,
habe ich es noch nicht geschafft, den Agenten so einzustellen, das er
automatisch nach Eingang von Emails am Server startet.

Derzeit starte ich das Script über einen Button im Menü.

Hier das funktionierende Script:
===============================
 'Alle Anhänge aller Dokumente in einer Datenbank speichern, incl Papierkorb
%REM
   Agent Anlagen speichern > DVA
      Description: Comments for Agent
%END REM
Option Public
Option Declare

'---------------------------------------------------------
'Automatisches Speichern von Anlagen  
'---------------------------------------------------------


Sub Initialize
   
   Dim session As New NotesSession  
   Dim db As NotesDatabase  
   Dim collection As NotesDocumentCollection  
   Dim doc As NotesDocument  
   Set db = session.CurrentDatabase  
   Set collection = db.AllDocuments
   Dim i As Integer
   Dim loeschen As Boolean
   loeschen = True
   
   For i = 1 To collection.Count    
      'Wenn das Dokument im Ordner  INBOX ist, dann weiter
      
      
      Set doc = collection.GetNthDocument( i )  
      
         If doc.HasEmbedded Then    
            Dim rtitem As Variant
            Set rtitem = doc.GetFirstItem( "Body" )
            Forall o In rtitem.EmbeddedObjects
               If o.Type = EMBED_ATTACHMENT Then  
                  Call o.ExtractFile( "\\server01\GROUPDATA\Datentransfer\IN\" & o.Source )
                  'Objekt entfenen
                  'Call o.Remove
                  
                  'Call doc.Save( True, True )
                  'Call doc.Remove(loeschen)
                  
                  'Doc in anderen Ordner verschieben
                  'Call doc.PutInFolder("Loeschen")
                  
                  'Doc aus Inbox entfernen
                  'Call doc.RemoveFromFolder("($Inbox)")
                  
               End If
            End Forall  
            'Doc in Papierkorb löschen
            'Call doc.Remove(loeschen)
            
            'Doc dauerhaft löschen
            Call doc.RemovePermanently(True)
         End If
         Next
      'Löschen der DocumentCollection
      'Call collection.RemoveAll(loeschen)
End Sub
===============================
(Achtung: ohne Gewähr)


Nun meine Frage/n:
Kann dieses Script so wie es geschrieben ist überhaupt als Backend-Agent am Server laufen
und was muss ich genau nacheinander durchführen und einstellen damit das Funktioniert?

Ich hoffe es kann mir jemand dabei helfen, wäre echt nett!

Grüße aus München

AndyG

PS.: Lotus Notes 8.5 natürlich ;-)
« Letzte Änderung: 24.04.12 - 13:05:21 von AndyG »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: LotusScript: Mailanhang auslesen
« Antwort #9 am: 24.04.12 - 13:11:30 »
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:
Code
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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: LotusScript: Mailanhang auslesen
« Antwort #10 am: 24.04.12 - 13:54:36 »
Hallo Andy,

bitte keinen alten Threads wiederbeleben - da hängen alte Mailings dran, die von deinem Problem nicht unbedingt informiert werden wollen. Bitte in solch einem Fall immer einen neuen Thread erstellen und auf den alten Verlinken - danke ;-)

Toni
Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz