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...
C#
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using DvApi32;
namespace ConsoleApplication4
{
class Program
{
[DllImport("dvapi32.dll", EntryPoint = "DVEmlFromMailItem")]
public extern static long DVEmlFromMailItem(MailItem oMailItem, StringBuilder Path);
static void Main(string[] args)
{
eMail2eml();
}
/// <summary>
/// Save all MailItems entries as .eml
/// </summary>
private static void eMail2eml()
{
DavidAPIClass oApp;
Account oAcc;
Archive oArchive;
MessageItems oMessageItems;
MailItem oMailItem;
int l;
oApp = new DavidAPIClass();
oApp.LoginOptions = DvLoginOptions.DvLoginForceAsyncDuplicate;
oAcc = oApp.Logon("", "", "", "", "", "NOAUTH");
oArchive = oAcc.GetSpecialArchive(DvArchiveTypes.DvArchivePersonalIn);
oMessageItems = oArchive.AllItems;
for (int i = 0; oMessageItems.Count > i; i++)
{
if (oMessageItems.Item(i).Type == DvItemTypes.DvEMailItem)
{
oMailItem = (MailItem)oMessageItems.Item(i);
StringBuilder oSb = new StringBuilder(260);
if (DVEmlFromMailItem(oMailItem, oSb) != 0)
{
System.IO.File.Copy(oSb.ToString(), @"c:\temp\" + oMailItem.Subject + ".eml");
}
}
}
oAcc.Logoff();
}
}
}
Alles anzeigen
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