EML-Export per Client Side Script

  • Hallo zusammen,


    ich versuche, eine Mail per Client Script als EML-Datei im lokalen Dateisystem abzuspeichern, um diese Datei dann in einem nächsten Schritt in ein Fremdsystem zu importieren.


    Es gibt eine passende API-Funktion (DVEmlFromMailItem), es ist mir aber noch nicht gelungen, diese entsprechend AUS EINEM CLIENT-SCRIPT anzusprechen.
    Die Funktion funktioniert in den Beispielen von Tobit natürlich.


    Folgenden Code verwende ich bislang:


    Der "richtige" Code enthält noch Fehlerbehandlungsroutinen, die habe ich ausgeblendet.


    Hat jemand einen Tipp oder ein Stück Code, wo das schon mal realisiert wurde ?
    Oder einen alternativen Ansatz ?


    Viele Grüße vom Bodensee


    Stefan

  • hey,


    leider keine Idee, nur eine Nachfrage:


    wo baust du diesen Code ein? Im TIC (also Infocenter)? Wie geht ds überhaupt, ich dachte dort kann man keinen eigenen Code anlgenen.


    Wir machen ds ganze auf andere Weise: User kopiert Email in einen anderen Ordner -> per POP3 wir dieser Ordner geleert und dann der Inhalt verarbeitet.
    Das Abholen und die weitere Verarbeitung haben wir in einem .NET Programm realisiert.


    Aber wenn sich das auch lokal / Client seitig ausfürhen ließe, wäre ich denkbar für Infos.
    Gruß, Joe

  • Hallo Joewol,


    das ganze ist als sogenanntes Client-Script gedacht, funktioniert (glaub ich) ab David.fx (sprich 2010).
    Dort kann codegesteuert man eigene Funktionen in Contextmenüs, Menüs, etc. einbauen.


    Unter david\code\scripts\ bei Deiner Installation findest Du ein paar Beispiele dazu.


    Den Weg mit POP3 gehen wir bislang, über ein "ordentliches" Skript kann ich aber natürlich ganz andere
    Dinge realisieren. Bei uns wird z.B. aus einer Textdatei, die ein Drittsystem schreibt, die geöffnete
    Vorgangsnummer aus einer Datei ausgelesen und die .EML-Datei wird dann in einem entspr. Pfad
    mit einem Namen, in dem die Vorgangsnummer vorkommt, gespeichert.
    Dort liegen nicht nur .EMLs (sonst würde ich das komplett über Tobit realisieren) sondern auch
    automatisch erzeugte Vorgangsdokumente, Scans, etc. zum jeweiligen Vorgang und so möchte
    ich eigentlich die manuelle Zuordnung vermeiden.


    Viele Grüße


    Stefan

  • Hallo zusammen,


    ich habe im Prinzip die gleiche Frage: Wie exportiere ich eine Mail per Client Script als EML-Datei? Leider gab es ja keine Antwort dazu. Weiss inzwischen jemand, wie das geht?


    Mir würde es sogar reichen, wenn es aus dem Mailbetrachter heraus, nur für diese Mail geht. Das habe ich:




    Ich hoffe, jemand hat eine Idee.


    Gruß,
    Thomas

  • Hallo


    Das Konvertieren mittels Script sollte so gehen


    Code
    Set oConverter = oAccount.CreateExporter 
    Set oCollection = oConverter.GetCollection 
    oCollection.Add oItem 
    oConverter.Convert FormatEML, "C:\Mail.eml"


    oItem ist vom Type MessageItem2. Ich glaube das funktioniert aber erst seit David.fx 12.


    Cento

  • Hallo Cento,


    vielen Dank für die Antwort. Ich bin auch schon etwas weiter gekommen. Es wird nach deinem Verfahren eine EML-Datei erzeugt. Allerdings ist die Datei immer leer (0 Byte groß). Irgendeine Kleinigkeit fehlt wohl noch.


    Code
    sub OnAblageButton(oInfoCenter, oReader)
      if oReader.Item.Type <> DvEMailItem then
        oInfoCenter.MsgBox "Dieser Eintrag ist keine eMail", "OkExclamation"
        exit sub
      end if
      Set oConverter = oInfoCenter.Account.CreateExporter 
      Set oCollection = oConverter.GetCollection 
      oCollection.Add oReader.Item 
      oConverter.Convert FormatEML, "C:\temp\Mail.eml" 
    end sub


    Und noch eine Frage: Woher weisst du, dass es Funktionen wie CreateExporter und Convert gibt? Ich habe dazu nirgends auch nur ein Wort gefunden.


    Gruß,
    Thomas

  • Ich habe nun Infos zu CreateExporter usw. gefunden. Ich hatte nicht den letzten Stand der DvApi32-Hilfe. Dummer Fehler.


    Nach einigem Lesen in der Hilfe glaube ich, dass der Exporter eine andere Funktion hat. Er soll zum Beispiel eine Liste von Adressen exportieren. Das EML-Format ist da auch gar nicht vorgesehen.


    Es läuft wohl doch auf die Funktion "DVEmlFromMailItem" heraus. Nur wie?


    Gruß, Thomas

  • Hallo Thomas


    In Deinem Code ist oReader.Item vom Typ MailItem. Der Exporter erwartet aber MessageItem2.
    Also wenn aus dem MailItem ein MessageItem2 erzeugt wird, sollte es funktionieren. In dem Code
    Beispiel vom Anfang des Threads ist oItem.GetInterface2 bereits das richtige Interface, damit geht's es dann direkt.


    Cento

  • Hallo Cento,


    entweder geht es so nicht oder ich bin zu blöd.


    Laut Fehlermeldung hat oReader.Item keine Methode oder Eigenschaft "GetInterface2" . Ich habe auch eine Mischung aus der Version am Anfang des Threads und deinen Zeilen versucht: Also einfach oReader ignoriert und stattdessen die selektierte Mail verwendet. Aber auch da hat keine Variante funktioniert. Entweder gab es irgendeinen Fehler oder die Ergebnisdatei war leer.


    Es wäre wirklich super, wenn du ein komplettes und getestetes Skript einstellen könntest.


    Vielen Dank.


    Gruß, Thomas

  • Hallo Thomas


    Here we go:




    Wie bereits gesagt: Ich weiß nicht, ob das mit älteren David Version funktioniert.



    Cento

  • Hallo Cento,


    vielen Dank für deine Mühe. Leider bleibt aber alles beim alten: Die Ergebnisdatei ist leer. Es treten auch keine Fehler auf. Selbst wenn ich das Format auf XML ändere, erhalte ich eine Datei mit XML-Kopf, aber leerem "items"-Tag.


    Die Tobit-Version ist übrigens 12.00a.xxxx. Das sollte doch reichen?!?


    Ich bin mit meinem Latein am Ende.


    Thomas

  • Hallo,


    das script von Cento funktioniert tadellos. Allerdings würde ich das noch gerne erweitern und kenne mich halt relativ wenig damit aus. Ich habe es bereits so ergänzt das die Datei den Namen des Betreffs enthält. Aber ich möchte gerne das der Dateiname zusätzlich den Firmennamen des Senders enthält. Weiterhin möchte ich aus dem Betreff ( der wie folgt lautet: "Bestellung 121514") die Zahl extrahieren um die .eml Datei in folgendem Pfad zu speichern "C:\Projekte\2014\121514\".
    Hat jemand Ahnung wie ich das realisiere?


    Gruß
    Dreamar

  • Hallo


    Vorausgesetzt die Absenderadresse befindet sich in einem der Ordner, die der Client
    für seine lokale Datenbank benutzt (s. unter Einstellungen/Adressen), kann man
    folgendes machen, um die Firma schnell zu ermitteln:



    Cento

  • Hallo Cento,


    vielen Dank für deine Hilfe. Habe nun alle meine Vorstellungen hinbekommen bis auf eine Sache. Ich möchte den Firmennamen des Empfängers und nicht des Absenders im .eml Dateinamen mit abspeichern.
    Wie muss ich den Eintrag abändern das die Firma des Empfängers ermittelt wird?
    Gruß
    Dreamar



    Sub Initialize(oInfoCenter, key)
    Set oBar = oInfoCenter.GetCommandBar("MessageEditor/Standard")
    oBar.Insert 4, "Ablage", key, "ablage.ico", "OnAblageButton", true
    End Sub
    sub OnAblageButton(oInfoCenter, oReader)
    if oReader.Item.Type <> DvEMailItem then
    oInfoCenter.MsgBox "Dieser Eintrag ist keine eMail", "OkExclamation"
    exit sub
    end if


    Set oFrom = oReader.Item.From
    Set oAddress = oInfoCenter.ContactManager.Resolve(oFrom.EMail)
    if not IsNull(oAddress) then
    on error resume next
    end if


    Set oItem = oReader.Item.ChangeType(DvUnknownItem)
    Set oConverter = oInfoCenter.Account.CreateExporter
    Set oCollection = oConverter.GetCollection
    oCollection.Add oItem
    oConverter.Convert FormatEML, "F:\AAA Projekte\" & "20" & Right(oItem.subject,2) & "\" & Right(oItem.subject,6) & "\" & oItem.subject & " - " & oAddress.AddressItem.Company & ".eml"
    end sub

  • Hallo,


    ich hab das gleiche Problem wie thomasC.
    Das Script erzeugt leider eine leere Datei. (Der Dateiname ist aber der Betreff der E-Mail)
    Es wird die DVAPI32 Version 12.00a.0358 verwendet.


    Ich hoffe mir kann jemand helfen!


    Danke



  • Hallo,


    basierend auf den vorigen scripten habe ich folgendes gebastelt:



    der entscheidende Schritt ist meiner Meinung nach, daß der Betreff nicht 1 zu 1 als Dateiname hergenommen werden kann.


    Möglicherweise ist der vbs Quellcode (mangels Fachkenntnis) unkonventionell geschrieben aber er tut (bei mir) was er soll:


    Mittels Kontextmenu (RechtsKlick) kann ich alle E-Mails aus der Eintragsliste heraus exportieren.

    ------| David.fx12/sitecare auf W2008R2 mit ca. 40 Usern | David.fx12 (3U,mit mir) |------

  • Ergänzung:
    eine von ca 1000 E-Mails hatte jetzt einen merkwürdigen SUBJECT im SMTP Header , hier ist obiges script
    kommentarlos abgeschmiert -> ich teste noch...

    ------| David.fx12/sitecare auf W2008R2 mit ca. 40 Usern | David.fx12 (3U,mit mir) |------

  • Zitat

    Ergänzung:
    eine von ca 1000 E-Mails hatte jetzt einen merkwürdigen SUBJECT im SMTP Header , hier ist obiges script
    kommentarlos abgeschmiert -> ich teste noch...


    Ich glaube nicht, dass es an einem merkwürdigen Header liegt, sondern eher daran, dass du in deinem Script die Länge des neu zu kreirenden Dateinamens in keinster Weise prüfst. Meiner Ansicht nach dürfte dein Programm stätestens dann abstürzen, wenn du eine Datei (inkl. Pfad) wegschreibst, welche >=248 Zeichen hat.


    Ich meine nicht den Inhalt der Datei, is klar :whistling:

  • Auslöser war dieser Subject Eintrag im SMTP Header:


    Code
    Subject: =?utf-8?Q?Rechnung_z?= =?utf-8?Q?u_Ihrem_Ka?=
     =?utf-8?Q?uf!_Vielen?= =?utf-8?B?IERhbmsgZsO8ciA=?= =?utf-8?Q?Ihre_Gedul?=
     =?utf-8?B?ZCHigI/igI/igI/igI/igI/igI/igI/igI8=?= =?utf-8?B?4oCP4oCP4oCP?=


    seit ich die Ausgabe der unbehandelten Zechenkette im Protokoll weglasse
    läuft das script durch.


    Allerdings hat Du Recht: Eine Prüfung auf die Länge der Zeichenkette sollte
    auch noch eingebaut werden.


    Grüße
    Ahnend

    ------| David.fx12/sitecare auf W2008R2 mit ca. 40 Usern | David.fx12 (3U,mit mir) |------

  • Zitat

    seit ich die Ausgabe der unbehandelten Zechenkette im Protokoll weglasse


    Zitat

    MyFile.WriteLine(sCounter + " : " + sOrgSubject )


    Okay, damit hätte ich jetzt nicht wirklich gerechnet, aber wenn du es sagst. Möglicherweise kommt das Programm ins schiwmmen, wenn nicht druckbare Zeichen im Subject enthalten sind.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!