Autor Thema: Mime Mail erstellen  (Gelesen 2895 mal)

Offline kawie

  • Junior Mitglied
  • **
  • Beiträge: 87
  • Ich liebe dieses Forum! Und wie :-)
Mime Mail erstellen
« am: 19.01.09 - 11:06:01 »
Hallo zusammen,

ich habe so eine Art Kampagnenmanagement zusammengebaut wo aus diversen Richtextfeldern eine Mail erstellt werden soll.

Diese Felder werden in eine Zwischenmaske als Mime inhalte gespeichert und später zu einem Mime Objekt mit dem Namen Body zusammengefügt und versendet.

Das klappt auch alles Prima und ohne Probleme.

Nun aber der Haken. Wenn ich in einem der Richtextfelder ein Anhang hinzufüge, spinnt Notes scheinbar rum und fügt jedem Mime Objekt beim Konvertieren diesen Anhang hinzu.

Jemand eine Idee ?

Code
Function ConvertRichText(Feld1 As String,Feld2 As String,Feld3 As String,Feld4 As String, Feld5  As String, lndoc As NotesDocument)
	Dim lns As New NotesSession
	Dim newdoc As NotesDocument
	
	
	Set lndb = lns.CurrentDatabase
	
	If lndoc.MimeDocId(0)>"" Then
		Set newdoc =lndb.GetDocumentByid(lndoc.MimeDocId(0))		
	End If
	
	If newdoc Is Nothing Then
		Set newdoc=New NotesDocument(lndb)
		newdoc.Form="MimeDoc"
	Else
		While newDoc.HasItem(Feld1)
			newDoc.RemoveItem(Feld1)
		Wend
		
		While newDoc.HasItem(Feld2)
			newDoc.RemoveItem(Feld2)
		Wend
		
		While newDoc.HasItem(Feld3)
			newDoc.RemoveItem(Feld3)
		Wend
		
		While newDoc.HasItem(Feld4)
			newDoc.RemoveItem(Feld4)
		Wend
		
		While newDoc.HasItem(Feld5)
			newDoc.RemoveItem(Feld5)
		Wend
	End If
	
	
	
	strmimewarning = lns.GetEnvironmentString("MIMEConvertWarning", True)
	Call lns.SetEnvironmentVar("MIMEConvertWarning", "1", True)
	lns.ConvertMime = False
	
	Call newdoc.ReplaceItemValue( "DocID", Cstr( newdoc.UniversalID ))
	Call newdoc.ReplaceItemValue( "$NoteHasNativeMIME", "1" )
	
	Set lnitem = lndoc.GetFirstItem( Feld1)
	Call lnitem.CopyItemToDocument( newdoc, Feld1 )
	
	Set lnitem = lndoc.GetFirstItem( Feld2)
	Call lnitem.CopyItemToDocument( newdoc, Feld2 )
	
	Set lnitem = lndoc.GetFirstItem( Feld3)
	Call lnitem.CopyItemToDocument( newdoc, Feld3 )
	
	Set lnitem = lndoc.GetFirstItem( Feld4)
	Call lnitem.CopyItemToDocument( newdoc, Feld4 )
	
	Set lnitem = lndoc.GetFirstItem( Feld5)
	Call lnitem.CopyItemToDocument( newdoc, Feld5 )
	
	Call newdoc.Save( True, True )
	lndoc.MimeDocID = Cstr(newdoc.NoteID)
	Call lndoc.Save(False,True)
	Call refreshDocument( lns, lndb, newdoc )
	
	strnoteid = newdoc.NoteID
	Set newdoc = Nothing 
	
	Call lns.SetEnvironmentVar("MIMEConvertWarning", strmimewarning, True)
	
	lns.ConvertMime = True 
End Function


Nur Feld 2 enthält einen Anhang!



Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Mime Mail erstellen
« Antwort #1 am: 19.01.09 - 13:12:34 »
Sind Feld1 - Feld5 auch wirklich (noch) MIME-Felder? Und ist das was zum Schluss heraus kommt auch ein MIME-Feld

Ich will damit andeuten ob du "convertMime" nicht zu spät auf FALSE setzt...
Notes konvertiert nämlich beim ersten Lesen MIME wieder nach RTF (auch im Debugger)
Es könnte jetzt sein, dass irgendwas beim Löschen der Items schief geht (sie werden nämlich nach RTF konvertiert und anschließend gleich gelöscht)

Evtl musst du dir auch das MIME Feld "zu fuß" zusammenbauen. Ich hab schonmal gepostet wie das im Prinzip geht.

Gruß
Roland


Roland Praml

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

Offline kawie

  • Junior Mitglied
  • **
  • Beiträge: 87
  • Ich liebe dieses Forum! Und wie :-)
Re: Mime Mail erstellen
« Antwort #2 am: 19.01.09 - 13:40:44 »
Hallo zusammen,

ja die Felder 1-5 sind in dem Zwischendokument MimeFelder.

Hab auch neue Erkenntnise. Diese Phänomen habe ich bei LN 7.02.
Ein Kollege hat es mit Notes 8.5 ausgeführt und da funktioniert das einwandfrei.

Bug/Feature ?

Gruss

Kai

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Mime Mail erstellen
« Antwort #3 am: 19.01.09 - 13:47:35 »
Was passiert wenn du alle Items mit CopyAllItems kopierst?

evtl kannst du das Dokument so in ein Zwischendokument kopieren, daraus alle nicht benötigten Felder löschen und dieses Dokument dann mittels copyAllItems über dein newDoc "legen" (Wenn du das originaldoc nicht speicherst, kannst auch die nicht benötigten Felder vom Originaldoc löschen)

Übrigens: Wenn so ein MIME-Feld "Body" heißt verhält es sich irgendwie anders als wenn es einen anderen Namen hat!

Gruß
Roland
Roland Praml

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

Offline kawie

  • Junior Mitglied
  • **
  • Beiträge: 87
  • Ich liebe dieses Forum! Und wie :-)
Re: Mime Mail erstellen
« Antwort #4 am: 19.01.09 - 13:52:27 »
Hallo Roland,

Ok ich fasse die Prozedur mal zusammen.

Ich hole mir von diversen Quellen (Profiledoc, usereingaben etc.) die Felder 1-5 und speicher diese in dem Originaldokument.

Danach werden diese Daten in ein "neues" Dokument übergeben in dessen Form ebenfalls die Felder 1-5 Richtext definiert sind, allerdings hier als Save as mime/Html Content.

Das Funktioniert so lange super so lange ich in keinem der Felder ein Attachment einbette.

Wenn ich das tue wird beim Konvertieren das Attachment in jeder der 5 Felder plaziert! Und auch im jedem Feld in den Mime Eigenschaften angezeigt.

Das ganze mit Notes 7.02 entwickelt und getestet.

Mit Notes 8.5 handelt der Client wie gewünscht und Plaziert das Attachment nur in dem Feld wo es eingefügt wurde.

 Das hat (noch) nichts mit dem Body zu tun der Wird erst nach dem Konvertieren erstellt und ist an dieser Stelle noch nicht vorhanden.

Danke und Gruss

Kai

P.S: Die Lösung die ich mir jetzt gerade zusammenbaue wäre ein zusätzliches RT Feld wo die Attachements abgelegt werden sollen und wo die Daten auf der Platte exportiert werden und nachträglich in ein Mime Feld gestreamt werden. Finde ich zwar nicht so elegant aber eine andere Lösung fällt mir gerade nicht ein.


« Letzte Änderung: 19.01.09 - 13:54:35 von kawie »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Mime Mail erstellen
« Antwort #5 am: 19.01.09 - 14:03:08 »
Zitat
Hallo Roland,

Ok ich fasse die Prozedur mal zusammen.

Ich hole mir von diversen Quellen (Profiledoc, usereingaben etc.) die Felder 1-5 und speicher diese in dem Originaldokument.
gut...
Zitat
Danach werden diese Daten in ein "neues" Dokument übergeben in dessen Form ebenfalls die Felder 1-5 Richtext definiert sind, allerdings hier als Save as mime/Html Content.

Da du dies aber im Backend machst ist es unerheblich was in der Maske eingestellt ist
Zitat
Das Funktioniert so lange super so lange ich in keinem der Felder ein Attachment einbette.

Wenn ich das tue wird beim Konvertieren das Attachment in jeder der 5 Felder plaziert! Und auch im jedem Feld in den Mime Eigenschaften angezeigt.

das hieße das Attachment wird auch wirklich verdoppelt (bzw. verfünffacht) und ist kein Anzeigeproblem im Client

Zitat
Das ganze mit Notes 7.02 entwickelt und getestet.

Mit Notes 8.5 handelt der Client wie gewünscht und Plaziert das Attachment nur in dem Feld wo es eingefügt wurde.
Evtl ist es wirklich ein bug

Zitat
Das hat (noch) nichts mit dem Body zu tun der Wird erst nach dem Konvertieren erstellt und ist an dieser Stelle noch nicht vorhanden.

Ich meinte damit, dass sich das Mime-Feld anders verhält wenn es den Namen "Body" hat. Insbesondere die NotesMimeXXX-Funktionen (welche du hier aber hier nicht verwendest)

Zitat
P.S: Die Lösung die ich mir jetzt gerade zusammenbaue wäre ein zusätzliches RT Feld wo die Attachements abgelegt werden sollen und wo die Daten auf der Platte exportiert werden und nachträglich in ein Mime Feld gestreamt werden. Finde ich zwar nicht so elegant aber eine andere Lösung fällt mir gerade nicht ein.

Ich würde evtl  nochmal den Weg über copyAllItems probieren  :-:

Gruß
Roland
Roland Praml

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

Offline kawie

  • Junior Mitglied
  • **
  • Beiträge: 87
  • Ich liebe dieses Forum! Und wie :-)
Re: Mime Mail erstellen
« Antwort #6 am: 19.01.09 - 14:12:48 »
Zitat
Da du dies aber im Backend machst ist es unerheblich was in der Maske eingestellt ist

Das stimmt so nicht da ich das Dokument im ui ein refresh machen muss. Das läuft in der Funktion

Call refreshDocument( lns, lndb, newdoc )


Gruss

Kai


P.S: Ich habe deinen Tip mit
Zitat
Ich würde evtl  nochmal den Weg über copyAllItems probieren 
getestet, wie ich erwartet habe, führt das zu dem gleichen Effekt wie ein einzelnes Kopieren der Felder.
« Letzte Änderung: 19.01.09 - 14:24:18 von kawie »

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Mime Mail erstellen
« Antwort #7 am: 19.01.09 - 14:33:26 »
Ich bezog mich hier auf "newDoc", dieses erzeugst du entweder neu oder löscht Feld 1..5 und deshalb denke ich ist es hier egal, was in der Maske von "newDoc" eingestellt ist... was aber auch nichts an dem Problem ändert

Falls es unter 7 funktionieren soll, wird dir wohl nicht anderes über bleiben nach einem Würgaroud zu suchen oder die MIME's selber erstellen (was auch nicht gerade trivial ist)

Dass CopyAllItems auch nicht funktioniert, wundert mich jetzt, da dies normalerweise eine exakt(er)e Kopie macht als man es mit Kopieren der einzelnen Items hinbekommt.
Roland Praml

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

Offline kawie

  • Junior Mitglied
  • **
  • Beiträge: 87
  • Ich liebe dieses Forum! Und wie :-)
Re: Mime Mail erstellen
« Antwort #8 am: 19.01.09 - 14:41:48 »
Eine andere Möglichkeit wäre ein zweites Document zu machen in dem nur das Feld gespeichert wird welches auch das Attachement enthält. Aber auch das ist nur ein Würgarround wie du es so schön nennst ;) Es scheint das in Notes 7 das Konvertieren von mehreren RT Feldern in Verbindung mit Attachements zu Problemen führt.

Ein weiteres Phänomen, ist das ein erneutes Ausführen jeweils zu einer Verdopplung der Attachements führt obwohl ich definitiv die Felder vor dem neuen Copy lösche.

Insgesamt etwas unbefriedigend der heutige Tag :(

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Mime Mail erstellen
« Antwort #9 am: 19.01.09 - 14:56:52 »
verdopplung der Anhänge.... dazu fällt mir noch was ein...
versuch mal das Feld folgendermaßen zu löschen
Code
dim mime as NotesMimeEntity
set mime = doc.getMimeEntity( Feld1 )
if mime is nothing then
  while doc.hasItem(feld1) ' normales Feld oder nicht vorhanden
    doc.removeItem( Feld1 ) 
  wend
else 
  call mime.Remove()
  call doc.CloseMimeEntities(True, Feld1 ) ' WICHTIG: Das Mime-Entity schließen (Sonst:ggf. Notescrash)
end if

ich weiß nicht  ob das dein Problem löst, ich hatte jedenfalls auch das Problem das ich die sch*** MIME-Items nicht mehr sauber wegbekam.

Gruß
Roland

Roland Praml

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

Offline kawie

  • Junior Mitglied
  • **
  • Beiträge: 87
  • Ich liebe dieses Forum! Und wie :-)
Re: Mime Mail erstellen
« Antwort #10 am: 19.01.09 - 15:31:51 »
So ich habs nun mit einem seperaten Dokument gemacht (für das eine Feld mit Attachment)

So funktioniert es auch! Ich tippe mal ganz stark auf Bug. Gut das hat mich heute 3-4 Stunden gekostet ^^

Vielen Dank Roland für deine Tips. Wenn das mal jemand ausprobiert sagt mir bitte ob ihr zum selben ergebniss kommt wie ich ;)

LG

Kai

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz