2012-12-10 71 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); 
} 
相關問題