首页 文章

将邮箱从Exchange Server导出到PST文件

提问于
浏览
2

我尝试将(任何用户的)邮箱从Exchange 2010 Server导出到PST文件 . 存档这个的最佳方法是什么?

首先我看的是COM-Interop模型 . 但这似乎只是为了能够导出当前登录到Outlook的用户的邮箱 . 或者我错过了什么?我试过这个:

Dim app As New Outlook.Application()
Dim ns As Outlook.NameSpace = app.GetNamespace("MAPI")
ns.AddStore("C:\backup.pst")
Dim backupFolder As Outlook.MAPIFolder = ns.Session.Folders.GetLast()
Dim selectedMailBox As Outlook.MAPIFolder = ns.Folders("mymail@company.com") 'NOT Working
selectedMailBox.CopyTo(backupFolder)
ns.RemoveStore(backupFolder)

后来我发现了这个PowerShell函数: New-MailboxExportRequest 遗憾的是我找不到从.NET调用它的方法 . 有没有可能从.NET调用它?

或者我是否需要使用任何其他库从Exchange导出文件? (也许使用POP3获取所有邮件并将其转换为PST?)

2 回答

  • 1

    您可以使用Redemption - 将您的代码作为可以访问相关邮箱的域用户运行并调用RDOSession.LogonExchangeMailbox . 然后,您可以使用RDOSession.Stores.GetSharedMailbox打开其他用户的邮箱 . 获得RDOStore对象后,您将能够访问以RDOStore.IPMRootFolder开头的所有文件夹和消息 .

    要复制到PST存储,可以使用RDOSession.Stores.AddPstStore添加新的或现有的PST文件 .

    要复制所有文件夹,请使用以下内容

    foreach (RDOFolder sourceFolder in ExchangeStore.IPMRootFolder.Folders)
    {
      sourceFolder.CopyTo(PstStore.IPMRootFolder);
    }
    
  • 0

    您可以使用System.Management.Automation和System.Management.Automation.Runspaces在C#中执行Powershell命令 .

    一个非常有限的例子:

    int GetMiliseconds()
    {
        using (var ps = System.Management.Automation.PowerShell.Create())
        {
            var cmd = new System.Management.Automation.Runspaces.Command("Get-Date");
            ps.Commands.AddCommand(cmd);
            var result = ps.Invoke();
            return result != null && result.Any() ? result.First().Members["Millisecond"].Value as Int32? ?? 0 : 0;
        }
    }
    

    最棘手的部分是结果总是以 ICollection<PSObject> 的形式返回,并且您必须始终关注异常抛出和空值 .

相关问题