我尝试将(任何用户的)邮箱从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 回答
您可以使用Redemption - 将您的代码作为可以访问相关邮箱的域用户运行并调用RDOSession.LogonExchangeMailbox . 然后,您可以使用RDOSession.Stores.GetSharedMailbox打开其他用户的邮箱 . 获得RDOStore对象后,您将能够访问以RDOStore.IPMRootFolder开头的所有文件夹和消息 .
要复制到PST存储,可以使用RDOSession.Stores.AddPstStore添加新的或现有的PST文件 .
要复制所有文件夹,请使用以下内容
您可以使用System.Management.Automation和System.Management.Automation.Runspaces在C#中执行Powershell命令 .
一个非常有限的例子:
最棘手的部分是结果总是以
ICollection<PSObject>
的形式返回,并且您必须始终关注异常抛出和空值 .