2012-12-10 43 views
2

我试图将(从任何用户)的邮箱从Exchange 2010服务器导出到PST文件。什么是归档这个最好的方法?将邮箱从Exchange 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("[email protected]") 'NOT Working 
selectedMailBox.CopyTo(backupFolder) 
ns.RemoveStore(backupFolder) 

后来我发现这个PowerShell的功能:New-MailboxExportRequest 可悲的是,我不能找到一种方法,从.NET调用它。有没有可能从.NET调用它?

或者是否需要使用任何其他库从Exchange导出文件? (也许使用POP3接收所有邮件,并将其转换到PST?

回答

0

可以执行PowerShell中使用System.Management.Automation和System.Management.Automation.Runspaces在C#中的命令。

一个非常有限的例子:

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>,你必须保持你的眼睛打开抛出的异常和空值的所有时间。

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); 
} 
相关问题