Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Axel am 30.06.04 - 15:28:33

Titel: Mailinhalt in andere DB übernehmen
Beitrag von: Axel am 30.06.04 - 15:28:33
Hi,

heute hab' auch mal ein Problem.

Ich habe folgende Anforderung: in einer Vorgangsdatenbank sollen auch eingegangene Mails eingefügt werden und einer Adresse zugeordnet werden.

So weit so gut.
Das Auslesen der Inbox, das Übernehmen des Absenders und des Themas ist kein Problem, das Zuordnen zu einer Adresse auch nicht.

Problem ist die Übernahme des Mailtextes. Ich habe Mails, die enthalten mehrere Body-Felder und außerdem scheinen sie mimecodiert zu sein. Siehe Anhang.

Wie bekomme ich nun den Mailtext in mein Dokument? Die normale Methode RTF-Inhalte zu kopieren, mit AppendRTItem, funktioniert nicht.

Was funktioniert ist CopyAllItems, aber ich will nicht alle Felder des Mails in meinem Vorgangsdokument haben.

Kann mir jemand weiterhelfen?   ???


Axel
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: ata am 30.06.04 - 23:51:31
... ich habe das gleiche Problem in meiner persönlcihen Support-Datenbank. Bei der Problemlösung habe ich so viel Zeit verschoosen, daß ich der einfach-heit-halber dazu übergegangen bin, das Dokument als Kopie zu übernehmen - die ganzen Fallunterscheidungen konnte ich nicht abfangen, da ich es mit sehr vielen Mail-Clients zu tun hatte, und bald jede Mail anders herinkam. Ich nehme also lieber die überflüssigen Felder in Kauf...

ata
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: koehlerbv am 01.07.04 - 00:26:15
Gerade im Zusammenhang mit
- Kodierungen
- grossen Attachments
- OLE-Objekten
- u.ä.
folge ich hier zu 100% Antons Vorgehen. Die "Nebengeräusche" sind lässlich, bestimmte unerwünschte Items kann man auch nach dem CopyToDatabase wieder entfernen. Wenn man eine sichere Item-Liste (entspr. der vorliegenden Situation) hat, kann man sogar alle Items, die nicht der eigenen white list entsprechen, entfernen. Aber auch hier muss schon wieder Aufwand und Nutzen (und Risiken) abgewogen werden.

Bernhard
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: Axel am 01.07.04 - 10:44:35
Hi,

vielen Dank für die Hinweise.  

Einen Punkt hatte ich bei meiner Fragestelung vergessen. Es soll eine andere Maske sein, also nicht die Memo-Maske aus der Mail-DB. Die Maske enthält außer den Mailinfos (Absender, Mailinhalt usw.) auch noch infos zur Adresse, Bearbeiter usw.

Hab' gestern Abend auch noch eine Lösung gefunden. Die zielt in eure Richtung.

Übernahme mit CopyAllItems
Alle Felder außer Body und $File löschen (ForAll item in newdoc.items...)
Zuweisen der Maske (newdoc.Form = ...)
Füllen der entsprechenden Felder

Scheint soweit ich das getestet habe, mit allen möglichen Mailinhalten zu funktionieren.


Axel

Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: ata am 01.07.04 - 11:01:11
... ich hätte das Dokuemnt kopiert und nur die Maske umgeschossen...

ata
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: Axel am 01.07.04 - 11:51:52
Hi,

auch eine Alternative. Ich denke mal, dass sich die beiden Lösungsansätze von der Perfomance nicht viel unterscheiden.

Da zeigt sich wieder mal, dass viele Wege nach Rom führen.


Axel
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: mahonri am 01.07.04 - 11:59:34
Wie wäre es damit, die Mail einfach per doc.RenderToRTItem in das Zieldokument einzufügen?
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: Axel am 01.07.04 - 12:02:01
Hi,

in dem Fall nicht, denn dann hab ich das ganze Mail in einem Feld. Ich brauche aber die Infos in getrennten Feldern.

Außerdem, was passiert mit Dateianhängen?

Axel
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: mahonri am 01.07.04 - 12:07:37
Die Infos kann man vorher auslesen und hat sie halt doppelt.
Dateianhänge werden mitgenommen.
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: Axel am 01.07.04 - 12:19:43
Hi,

ich werde es mal probieren. Wahrscheinlich werde ich das aber nicht verwenden können, da soeben, sozusagen als neue "Gemeinheit"  :o, die Anforderung kam, dass gewählt werden soll, ob die Anhänge übernommen werden sollen oder nicht.

Wegen der DB-Größe.

Ich glaube am flexibelsten bin ich mit der anderen Variante (CopyToDatabase bzw. CopyAllItems ...)

Axel

Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: TMC am 02.07.04 - 19:41:15
Hi Axel,

vielleicht siehe ich das jetzt zu simpel, aber geht das nicht einfacher?

Gegeben ist ein Maildokument. Ausgewählte Items sollen in ein Zieldokument übertragen werden.

Wie wäre es denn dann mit einem simplen:
Dim itemBody As NotesItem
Set itemBody = doc.GetFirstItem( "Body" )
Call itemBody.CopyItemToDocument( docNew, "myBody" )
Dim itemMaildatum As NotesItem
Set itemMaildatum = doc.GetFirstItem( "PostedDate" )
Call itemMaildatum.CopyItemToDocument( docNew, "myDate" )

Matthias
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: koehlerbv am 02.07.04 - 20:19:19
Jo, Matthias. Und Notes ist so freundlich, bei grossen RT-Fields mit dieser Methode auch mehrere gleichnamige Items samt zugehöriger Attachments mitzukopieren. Dein Vorschlag ist m.E. der praktikabelste.
Nur kodiert darf nix sein ...

Bernhard
Titel: Re:Mailinhalt in andere DB übernehmen
Beitrag von: Axel am 05.07.04 - 10:58:35
Hi,

ich hab nochmal ein bisschen rumprobiert und bin zu folgendem Ergebnis gekommen.

Meine usprünglich favorisierte Lösung,

Übernahme mit CopyAllItems
Alle Felder außer Body und $File löschen (ForAll item in newdoc.items...)
Zuweisen der Maske (newdoc.Form = ...)
Füllen der entsprechenden Felder

funktioniert nicht immer zuverlässig. Bei manchen Mails bekomme ich in der ForAll - Schleifen die Fehlermeldung Object variable not set. Warum auch immer. Ich konnte das selbst im Debugger nicht nachvollziehen.


@TMC
Deine Lösung funktioniert auch nicht ganz sauber, denn bei HTML-Mails wird manchmal die Formatierung nicht sauber durchgeführt und Bilder die aus dem Internet nachgeladen werden, werden nicht dargestellt (es steht an der Stelle nur ein roter Text "Image").

Ich bin nun soweit, auch aus Zeitgründen, mit CopyAllItems zu arbeiten und halt den überflüssigen Feldbalast mit in Kauf zu nehmen. Aber sei's drum.  :-\


Ein Phänomen ist mir bei den Versuchen noch aufgefallen, dass ich mir nicht erklären kann.

Die Auswahl der Mails erfolgt über eine PicklistCollection und der Zugriff auf das Dokument dann über collection.GetFirstDocument. Wenn ich mit aber nun im Debugger die Item-Liste des Dokumentes anschaue, sehe ich nicht alle Felder. Sehr oft fehlt z.B. das Feld $File, obwohl in Mail vorhanden. Kann sich das einer erklären?  ??? ???

Axel