Autor Thema: Mailinhalt als XML-Datei speichern  (Gelesen 7723 mal)

Offline Jörg K.

  • Frischling
  • *
  • Beiträge: 14
Mailinhalt als XML-Datei speichern
« am: 10.09.08 - 17:22:54 »
Hallo,
ich hab hier schon eine Menge entdeckt aber leider nicht wirklich das was ich haben möchte.
Gestern hab ich noch versucht heraus zu finden wie man einen Anhang speichert, hab dann was gefunden:
Mail + Attachment im Filesystem speichern
Das ist aber viel zu umständlich und hilft mir auch nicht wirklich weiter!
Der Agent soll in der Maildatenbank ausgeführt werden, die auf dem Server liegt, er kann bei Eingang einer Mail gestartet werden.
Er soll dann den Inhalt der Mail Hier wohl auch Body genannt, als XML-Datei speichern.
Der Pfad auf dem Server steht fest und muss nicht abgefragt werden: C:\Freigaben\anmeldung\
Der Dateiname soll die NoteID der Mail sein, was wohl Dopplungen vermeidet.
Der Dateityp wäre dann .XML
Gibt es hier nicht schon sowas, das meinetwegen der Mailinhalt in eine TXT geschrieben wird?

Vielen Dank im Voraus

Gruß Jörg

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: Mailinhalt als XML-Datei speichern
« Antwort #1 am: 10.09.08 - 17:30:12 »
Inhalt der Mail Hier wohl auch Body genannt,
Nicht unbedingt. SMTP/MIME Mails können anders aussehen. Eine Notes-Mail kann auch mehrere Body-Items haben, usw. Das ist nicht ganz trivial.

Zitat
Gibt es hier nicht schon sowas, das meinetwegen der Mailinhalt in eine TXT geschrieben wird?
Nein.

Sonst konkrete Fragen?

P.S.: Die OpenNTF Mail Experience Schablone hat eine Option "als RFC822-Mail (.eml) weiterleiten". Ev. kannst Du den Code weiterverwenden.
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 TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: Mailinhalt als XML-Datei speichern
« Antwort #2 am: 10.09.08 - 21:39:36 »
Der Dateiname soll die NoteID der Mail sein, was wohl Dopplungen vermeidet.

Nein die NoteID ist nur jeweils zu einem definierten Zeitpunkt in einer Datenbank unique. Nach einem Compact können die NoteIDs ganz anders aussehen.
Was wirklich "unique" ist, das ist die DocumentUniqueID (=UNID).

Thomas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Mailinhalt als XML-Datei speichern
« Antwort #3 am: 10.09.08 - 22:24:58 »
Nein die NoteID ist nur jeweils zu einem definierten Zeitpunkt in einer Datenbank unique. Nach einem Compact können die NoteIDs ganz anders aussehen.

Hast Du dafür Belege? Wenn ein defektes Dokument aussortiert wird und durch Replikation wieder aufgenommen wird - okay. Aber sonst?

Bernhard

Offline Jörg K.

  • Frischling
  • *
  • Beiträge: 14
Re: Mailinhalt als XML-Datei speichern
« Antwort #4 am: 11.09.08 - 17:07:00 »
Gut konkrete Frage!
Aber erst mal schön zu hören das es nicht so trivial ist!
Muss ich erst eine Funktion Programmieren, die die XML-Datei speichert, in der dann auch das mit dem Pfad und Namen der Datei direkt schon feststeht, egal ob der nun die NoteID oder die DocumentUniqueID den Namen der Datei ergibt, wichtig ist nur eindeutiger Name .XML! Vermutlich wird  der Inhalt der Mail in einer extra Funktion extrahiert und dann irgenDwie an die Speicherfunktion weiter gegeben!

Das "Initialize" könnte so aussehen, wenn der Agent periodisch in der Datenbank läuft und eventuell mehrere Mails umwandeln muss:

Sub Initialize
   
   ' Erst kommt die Fehlerbehandlung, hab ich jetzt aber mal weggelassen!
   
   Dim session As New NotesSession    'Soll ja auf Server laufen
   Dim vec As NotesViewEntryCollection ' Es können ja mehrere Mails eingegangen sein
   Dim ve As NotesViewEntry 'Ich will ja in den Eingang schauen
   Dim doc As NotesDocument 'Mails sind hier ja auch Dokumente, oder?
   Dim View As NotesView 'Wo, will ich denn reinschauen
   
   Set view = session.CurrentDatabase.GetView ("n_anmeldungen_offen") 'Schau doch mal in die Datenbank, in der sich der Agent befindet
   Set vec = view.AllEntries 'Und in dieser Datenbank, soll nach allen Eingängen geschaut werden
   If vec.count > 0 Then 'Wenn die Anzahl der eingegangenen Dokumente mindestens Eins ist, dann mach was
      Set ve = vec.GetFirstEntry 'nimm mal das erste Dokument im Eingang
      While ve Is Nothing = 0
         Set doc = ve.Document 'Dieses Dokument ist das Dokument was gerade im Schleifendurchlau gefunden wurde
         Call creat_xmlfile (doc)   'So  jetzt sollte man eine Funktion aufrufen, die aus dem Mailinhalt dieses Dokumentes eine
                                                                 XML-Datei macht und dieser auch nen Namen gibt und auch schon den Pfad weiß wo diese
                                                                 dann zu speichern ist
         Call doc.Save (True, True) 'Das Dokument wurde entsprechend gespeichert
         Set ve = vec.GetNextEntry   ' Jetzt kommt das nächste Dokument im Eingang dran
      Wend
   End If
   
       ' Hier dann die Fehlerbeschreibung, wenn ein Fehler auftritt, dann lösche die ganze Serverfestplatte ohne Bestätigung  >:D
   
End Sub

So solltes das schon funktionieren denk ich mal aber die Funktion create_xmlfile, die gibt es leider noch nicht und jetzt meine konkrete
Die Kommentare sollen dazu dienen ob ich das was ich mir bisher angelesen hab auch stimmt!
Frage wie müsste dies aussehen?
Ich hoffe mich dieses mal nicht all zu kompliziert ausgedrückt zu haben und freu mich wirklich über jede Hilfe  ::)
Helft mir bitte aus dem Tal der Ahnungslosen!

Gruß Jörg

@ Bernhard
ich glaube auch die NoteID, sollte als Name für die xml Datei reichen, zumal die XML-Dateien mindestens einmal täglich in eine SQL-Datenbank eingelesen, die diese nach dem Einlesen automatisch im Filesystem löscht!

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: Mailinhalt als XML-Datei speichern
« Antwort #5 am: 11.09.08 - 17:20:19 »
Aus der Designer-Hilfe:
Zitat
A note ID represents the location of a document within a specific database file, so documents which are replicas of one another generally have different note IDs. A note ID does not change, unless the document is deleted.
Ich denke, dass die Note-ID hier nicht unbedingt die "richtige" Wahl ist. Ich würde zur DocumentID greifen (mehrere Datenbanken, ...).

Jörg: Die Dinge, mit denen Du Dich bis jetzt beschäftigt hast, sind trivial. Denk erst mal über den "Export" nach, wie Du die Datei benennst, kannst Du Dir immer noch überlegen.

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 TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: Mailinhalt als XML-Datei speichern
« Antwort #6 am: 11.09.08 - 18:55:55 »
Aus der Designer-Hilfe:
Zitat
A note ID represents the location of a document within a specific database file, so documents which are replicas of one another generally have different note IDs. A note ID does not change, unless the document is deleted.
Ich denke, dass die Note-ID hier nicht unbedingt die "richtige" Wahl ist. Ich würde zur DocumentID greifen (mehrere Datenbanken, ...).

Und wenn ich dann noch die Admin-Hilfe nehme
Zitat
Komprimierung mit Hilfe einer Kopie
Bei der Komprimierung mit Hilfe einer Kopie wird eine Kopie der Datenbanken erstellt und die ursprünglichen Datenbanken werden nach der Komprimierung gelöscht, d. h. für die Datenbankkopien wird zusätzlicher Plattenplatz benötigt.
denke ich schon, dass da andere NoteIDs entstehen können (nicht müssen).

Anderes Szenario wo so was vorkommen kann: Wiederherstellung einer Datenbank aus einem Replica-Backup, z.B. in Clustern.

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Mailinhalt als XML-Datei speichern
« Antwort #7 am: 12.09.08 - 07:24:19 »
Hallo,

nur so mal in die "Tüte gesprochen"..

...würde es nicht genügen, das Memo/Mail (Notes-Dokument) als DXL-Datei zu exportieren und aus
der erzeugten DXL-Datei alle Body-tags weiterzuverwenden/auszulesen oder alle unnötigen Tags zu entfernen ?  :-:

Code
  Dim session As New NotesSession
  Dim db As NotesDatabase
  Set db = session.CurrentDatabase
  
  REM Open xml file named after current database
  Dim stream As NotesStream
  Set stream = session.CreateStream
  filename$ = "c:\dxl\" & Left(db.FileName, Len(db.FileName) - 3) & _
  "xml"
  If Not stream.Open(filename$) Then
    Messagebox "Cannot open " & filename$,, "Error"
    Exit Sub
  End If
  Call stream.Truncate

  REM Export doc as DXL
  Dim exporter As NotesDXLExporter
  Set exporter = session.CreateDXLExporter(docMemo, stream)
  Call exporter.Process

Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Mailinhalt als XML-Datei speichern
« Antwort #8 am: 12.09.08 - 08:46:34 »
Das Problem ist wie immer bei solchen Fragestellungen, das der Thread Eröffner nicht sagt, warum er eine XML Datei braucht, bzw. was er damit machen will. Dadurch kann man auch nicht beurteilen, ob er mit DXL glücklich wird. Falls er die Anforderung nur von seinem Vorgesetzten so bekommen hat würde ich auf jeden Fall DXL nehmen, da die Anforderung erfüllt ist, auch wenn man unter Umständen mit dem XML nicht viel anfangen können wird.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Jörg K.

  • Frischling
  • *
  • Beiträge: 14
Re: Mailinhalt als XML-Datei speichern
« Antwort #9 am: 12.09.08 - 14:03:02 »
So ich hab jetzt noch ein wenig probiert, dabei ist folgendes herausgekommen:

Sub Initialize
   
   On Error Goto Errorhandle
   
   Dim session As New NotesSession
   Dim vec As NotesViewEntryCollection
   Dim ve As NotesViewEntry
   Dim doc As NotesDocument
   Dim view As NotesView
   Dim xmlcode As String
   Dim filenum As Integer
   Dim filename As String
   
   filenum% = Freefile()
   filename = "C:\Freigaben\anmeldung\Anmeldung"  & "_" & Format(Now, "dd.mm.yyyy.hh.nn.ss") & ".xml"
   Open filename For Output As #filenum%
   
   Set view = session.CurrentDatabase.GetView("n_anmeldungen_offen")
   Set vec = view.AllEntries
   If vec.Count > 0 Then
      Set ve = vec.GetFirstEntry
      While ve Is Nothing = 0
         Set doc = ve.Document
         xmlcode = doc.GetItemValue ("Body")(1)
         Print #filenum%, xmlcode
         Set ve = vec.GetNextEntry(ve)
      Wend
      Close #filenum%
      Exit Sub
   End If
   
Errorhandle:
   
   Print "Fehler in Agent Anmeldungen umwandeln!" + Error$
   Exit Sub
   
End Sub

Soweit so gut, die gewünschte Datei wrid im gewünschten Pfad erstellt!
Nur wie soll ich sagen, es steht nichts drin, die Datei ist leer!
Ich hab angenommen wenn ich den xmlcode = doc.getItemValue ("Body")(1) dann wird der Inhalt des Body mit der Doppeleintrags-ID: 1 übernommen, das sollte der Mailinhalt sein, doch da scheine ich mich echt geirrt zu haben, irgendwo habe ich also noch einen Denkfehler!
Schade sonst funktionier alles so schön, für den Namen hab ich jetzt einfach Datum und Uhrzeit genommen das klappt auch super!
Aber warum ist di e doofe xml-Datei leer?


Gruß Jörg

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: Mailinhalt als XML-Datei speichern
« Antwort #10 am: 12.09.08 - 14:09:23 »
1) Fängt man in der IT zumeist mit 0 an zu zählen => doc.GetItemValue ("Body")(0)
2) Kannst Du nicht sicher sein, ob es nicht mehr als ein BODY-Item gibt => es fehlt eine Schleife
3) Ist BODY ein RichTextItem, das Du nicht einfach so hinausschreiben kannst wie ein Textfeld. Aus der Designer-Hilfe von notesDocument.GetItemValue( itemName$ ):

Zitat
Return value
The value or values contained in the specified name. The data type of the value depends on the data type of the item.
Rich text        Array of strings. The text in the item, rendered into plain text
« Letzte Änderung: 12.09.08 - 14:11:58 von m3 »
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 Jörg K.

  • Frischling
  • *
  • Beiträge: 14
Re: Mailinhalt als XML-Datei speichern
« Antwort #11 am: 12.09.08 - 14:20:45 »
Also die Eigenschaft von dem Body ist:
Feldname: Body
Datentyp: MIME-Element
Datenlänge: 170 Byte
Seq.-Num.: 1
Doppeleintrags-ID: 2
Feld-Flags: SIGN SEAL

Content-Transfer-Encoding: 8bit
Content-Type: text/html; charset="utf-8"

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: Mailinhalt als XML-Datei speichern
« Antwort #12 am: 12.09.08 - 14:26:44 »
Zum Datentyp des Feldes: Siehe mein erstes Posting.

Und die "Seq.-Num." hat nix mit dem ArrayIndex des Rückgabewerts von GetItemValue zu tun.

Ich klinke mich damit aus, da ich keine Lust habe, wegen jeder Info dreimal nachzufragen und Dir alle Infos aus der Nase zu ziehen.

Viel Spaß noch.
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 Jörg K.

  • Frischling
  • *
  • Beiträge: 14
Re: Mailinhalt als XML-Datei speichern
« Antwort #13 am: 12.09.08 - 14:45:31 »
Und ja es gibt an der Zahl vier Body-Item, der Inhalt (Text, UTF-8) den ich herauskopieren möchte ist im zweiten Body-Item also ("Body")(1), weil ich hab ja schon bei 0 angefangen zu zählen!
Aber so wie ich das jetzt verstehe bekomme ich mit GetItemValue gar nicht den Inhalt des benannten Body-Items, oder?
Dann ist doch nur der Befehl verkehrt
Wie komme ich denn nun am einfachsten an den Inhalt vom Typ Text, in dem entsprechenden Body-Item, oder kommt man da so einfach gar nicht dran? Kann aber auch sein man kann es nicht in einen String (xmlcode) speichern, in VB wählt man bei großen Inhalten den Typ Memo.

@ Rolf_M_Petter:
Ich hab schon geschrieben für was die XML-Dateien genutzt werden sollen, xml ist eine schöne Schnittstelle, ich nenne das jetzt einfach mal so, um Daten von einer Datenbank Typ X in eine Datenbank Typ Y zu exportieren oder importieren je nachdem.
Ich nutze das indem online ein Formular ausgefühlt wird aus dem eine Mail erzeugt wird deren Inhalt der erzeugte XML-Code ist, dieser XML-Code wurde so erzeugt, daß er von einer MS-SQl-Datenbank automatisch eingelesen werden kann, so er als XML-Datei in einem bestimmten Verzeichnis liegt.
Reicht das jetzt als Info?

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Mailinhalt als XML-Datei speichern
« Antwort #14 am: 12.09.08 - 14:58:47 »
Wenn Du nur den Text haben möchtest, dann schau Dir im Designer die NotesRichTextItem Klasse an und dort die Methode Abstract.
Die Beispiele in der Hilfe sollten helfen.
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Re: Mailinhalt als XML-Datei speichern
« Antwort #15 am: 12.09.08 - 15:03:54 »
Hi Jörg

Um das DXL (Domino XML) von einem NotesDocument zu bekommen muss man so etwas machen.

Function NotesDocToDXL(doc as NotesDocument) as String
   Dim session as New NotesSession
   Dim exporter as NotesDXLExporter

   Set exporter=session.CreateDXLExporter(doc)
   NotesDocToXML=exporter.Export
End Function

Nur ein einzelnes NotesItem zu exportieren geht nicht. Danach müsstest Du das XML entweder codetechnisch auseinandernehmen oder wenn Du das Glück hast XSL-T nicht so eine Flasche wie ich zu sein kannst vielleicht auch damit was anstellen.

Gruss
Remo
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz