C# Outlook赎回-从eml到pst-指定文件夹权限

C# Outlook赎回-从eml到pst-指定文件夹权限,c#,outlook,outlook-redemption,C#,Outlook,Outlook Redemption,我正在使用Outlook redemption()和下面的C代码从.eml文件生成一个PST文件 RDOSession session = new RDOSession(); RDOPstStore store = session.LogonPstStore(newpstpath); RDOFolder folder = store.IPMRootFolder.Folders.Item(directoryEmlFile);

我正在使用Outlook redemption()和下面的C代码从.eml文件生成一个PST文件

            RDOSession session = new RDOSession();
            RDOPstStore store = session.LogonPstStore(newpstpath);
            RDOFolder folder = store.IPMRootFolder.Folders.Item(directoryEmlFile);
            if (folder == null)
            {
                folder = store.IPMRootFolder.Folders.Add(directoryEmlFile);
            }

            RDOMail mail = folder.Items.Add("IPM.Note");
            mail.Import(directoryEmlFile + "\\0a53e310-b841-43bf-9586-8e7ddb4cd175" + ".eml");
            mail.Sent = true;
            mail.Save();
            store.Save();
它会创建一个PST文件,但当我将其导入outlook时,文件夹结构与此类似

Personal Folders
  -C:\Users\asanka\eml
在C:\Users\asanka\eml文件夹中,我可以看到导入的电子邮件。这就是.eml文件最初所在的文件夹。我需要摆脱它,并有这样的文件夹结构

Personal Folders
  -asanka
    -inbox

我该怎么做?非常感谢您的帮助。

这是您传递给
文件夹的文件夹名称。添加
,对吗?您需要传递适当的名称(asanka)来创建文件夹。由于您有两个文件夹,因此可能需要执行两次:

RDOFolder folder1 = store.IPMRootFolder.Folders.Item("asanka");
if (folder1 == null) folder1 = store.IPMRootFolder.Folders.Add("asanka");
RDOFolder folder = folder1.Folders.Item("Inbox");
if (folder == null) folder = folder1.Folders.Add("Inbox");

这是您传递给
文件夹的文件夹名称。添加
,对吗?您需要传递适当的名称(asanka)来创建文件夹。由于您有两个文件夹,因此可能需要执行两次:

RDOFolder folder1 = store.IPMRootFolder.Folders.Item("asanka");
if (folder1 == null) folder1 = store.IPMRootFolder.Folders.Add("asanka");
RDOFolder folder = folder1.Folders.Item("Inbox");
if (folder == null) folder = folder1.Folders.Add("Inbox");

谢谢你的回答。我按照你的指示更新了代码。但现在我在执行mail.Import行时遇到了一个异常。它表示{“错误导入:0x80030050”}System.Exception{System.Runtime.InteropServices.comeexception}错误代码是STG_E_filereadyexists。调用Import时没有指定格式,因此Redemption默认为olMsg。指定rdoSaveAsType.olRFC822I取消您对我的答案的更改-您的代码为;效率较低,因为它两次调用folder.Folders.Item(“收件箱”)。这将导致对联机配置文件进行RPC调用。这不是世界末日,但这是一个额外的性能打击没有充分的理由。您甚至可能希望缓存folder.Folders的值,以避免对每个子文件夹调用它两次。我使用了您的代码,但在执行这一行时出现空指针异常。如果(folder==null)folder=folder.Folders.Add(“收件箱”);这就是我更改代码的原因。:)如果文件夹为null,我们如何对null对象调用folder.Folders()方法:)我正在尝试运行与web应用程序相同的应用程序。在这种情况下,我得到以下错误。IProfAdmin::CreateProfile中出错:MAPI_E_调用失败。我是否需要安装exchange server才能正常工作?谢谢您的回答。我按照你的指示更新了代码。但现在我在执行mail.Import行时遇到了一个异常。它表示{“错误导入:0x80030050”}System.Exception{System.Runtime.InteropServices.comeexception}错误代码是STG_E_filereadyexists。调用Import时没有指定格式,因此Redemption默认为olMsg。指定rdoSaveAsType.olRFC822I取消您对我的答案的更改-您的代码为;效率较低,因为它两次调用folder.Folders.Item(“收件箱”)。这将导致对联机配置文件进行RPC调用。这不是世界末日,但这是一个额外的性能打击没有充分的理由。您甚至可能希望缓存folder.Folders的值,以避免对每个子文件夹调用它两次。我使用了您的代码,但在执行这一行时出现空指针异常。如果(folder==null)folder=folder.Folders.Add(“收件箱”);这就是我更改代码的原因。:)如果文件夹为null,我们如何对null对象调用folder.Folders()方法:)我正在尝试运行与web应用程序相同的应用程序。在这种情况下,我得到以下错误。IProfAdmin::CreateProfile中出错:MAPI_E_调用失败。我是否需要安装exchange server才能正常工作?