Mail als EML speichern (C# / DVEmlFromMailItem)

  • Hallo zusammen,


    ich versuche per C# (Visual Studio 2010) eine Mail, per DvAPI32 Funktion "DVEmlFromMailItem", als EML File zu speichern. Doch leider gelingt mir dies nicht und ich komme einfach nicht auf die richtige Lösung. Ich lande immer bei einer AccessViolationException. Sobald ich das ganze in VB.NET mache funktioniert es ganz gut, aber der Rest von meinem Code ist nun mal in C#.


    Ich verwenden David.fx 2011 Client Version 3663 und API Version 332.


    Bisher versuche ich es mit den Beispiel-Code aus der Tobit Doku...



    und ein paar Variationen wie z.B. ...


    Code
    ...
        [DllImport("dvapi32.dll", EntryPoint = "DVEmlFromMailItem")]
        public extern static long DVEmlFromMailItem(MailItem oMailItem, IntPtr Path);
    ...
        var ptr = Marshal.AllocHGlobal(1024);
        if (DVEmlFromMailItem(oMailItem, ptr) != 0)
    ...


    aber leider alles ohne großen Erfolg.


    Vielleicht weiß ja von euch wie man das am besten umsetzt!



    Vielen Dank schonmal und viele Grüße


    Dirk Schmitz

  • Hallo Dirk,


    beim Vergleich mit dem Beispiel aus der API Doku fällt auf, dass Du Deine Methode "static" gesetzt hast.
    Des Weiteren stellt sich die Frage, ob Du auf das PersonalIn Zugriff hast und ob Du auf c:\temp speichern darfst. Benutzt Du Win7 oder Vista? Dann könnte das Problematisch sein wenn das Programm nicht im Admintoken läuft (Rechtsklick Als Administrator starten - muss man auch mit dem VS tun wenn man es so debuggen will). Probiere mal einen Pfad der nicht auf C liegt.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Hallo Jens,


    ich verwende eine VMware ESXi Windows 7 (EN) VM als Domain Member und bin lokaler Administrator. Die UAC steht auf "Never notify", ist also ausgeschaltet. Ich habe volle Rechte auf C:\temp und auf PersonalIn.


    Deinen Tipp VS als Administrator zu starten habe ich auch probiert. Doch leider ohne Erfolg. (Ist aber meiner Meinung nach nicht nötig das ich eh schon lokaler Admin bin und die UAC quasi ausgeschaltet ist.)


    Die Methode ist nur static, da ich so keine Instanz der Klasse erzeugen muß. Wenn ich die Funktion "eMail2eml" weg lasse und den Code gleich in "Main" aufrufe bekomme ich den gleichen Fehler. Sobald "DVEmlFromMailItem" aufgerufen wird wird eine AccessViolationException ausgelöst.


    Wie schon geschrieben mit VB.NET funktioniert das entsrechende DvAPI Codebeispiel ohne größere Probleme.


    Danke für deine Hilfe!


    Gruss
    Dirk

  • Hallo Dirk,


    hast Du es denn mal anders getestet?


    Wenn ich das C# Beispiel aus der Doku 1:1 einfüge, dann funktioniert das bei mir...


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Hallo Jens,


    das Problem tritt wohl nur bei eine "Console Application" auf. Dachte nicht das das von Bedeutung sein könnte. Wenn ich eine "Windows Forms Application" erzeuge, funktioniert alles so wie es soll. Leider verstehe ich nicht warum sich die Windows Form App anders verhält, aber zur Not kann ich damit leben. Ich bin halt Admin und kein Entwickler.


    Aber den Grund zu erfahren währe trozdem interessant! :)


    Gruss
    Dirk

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!