2013-03-22 161 views
0

我有一些Outlook MSG需要保存爲備用格式,例如MHT。每個MSG都有成千上萬的收件人,並且我知道MSG結構不足以處理大量的收件人。我相信我的第一步是將MSG導入可處理大量收件人的PST。將成千上萬的收件人導入Outlook中的Outlook MSG

我正在使用Outlook 2010和Redemption 5.4(完整版)。我準備使用Outlook對象模型或Redemption來實現我的目標。平臺:Windows 7 SP1,64位。

我曾嘗試以下方法:

//Establish Session 
RDOSession rdoSession = new RDOSession(); 
rdoSession.Logon(null, null, false, true, null, true); 

//Create empty mail item in PST. 
RDOMail rdoMail = rdoSession.GetDefaultFolder(rdoDefaultFolders.olFolderInbox).Items.Add(null); 

//Merge MSG into new, empty mail 
//fi.FullName = C:\<subdirectories>\009.msg 
rdoMail.Import(fi.FullName, rdoSaveAsType.olMSGUnicode); 
rdoMail.Save(); 

//Save as MHT 
rdoMail.SaveAs(diMht.FullName + @"\" + strNormalizedSubject + ".mht", Redemption.rdoSaveAsType.olMHTML); 

此代碼不能味精導入到PST。我收到此異常: {"Error importing: 0x8004011B"}

我也試過這種方法,它不依賴於PST。

RDOMail rdoMail = rdoSession.GetMessageFromMsgFile(fi.FullName, false); 
string strNormalizedSubject = NormalizeSubject(rdoMail.Subject); 

rdoMail.SaveAs(diMht.FullName + @"\" + strNormalizedSubject + ".mht", Redemption.rdoSaveAsType.olMHTML); 

此代碼導致以下例外情況:Error in OpenIMsgOnIStg: MAPI_E_CORRUPT_DATA

我相信Transend Migrator可以將MSGs轉換爲大數字或收件人。但是,由於許可成本高,這不是一個選擇。

如何將MSG保存爲其他格式?

回答

0

德米特里建議我將MSG文件視爲OLE存儲文件。這個想法導致我到這個網站:閱讀C#中的Outlook MSG文件#CodeProject

我確認該項目能夠打開大量收件人的留言。我用一個有2499個收件人的MSG測試了它。

該項目可能使提取構建MHT文件所需的數據成爲可能。

0

0x8004011B是MAPI_E_CORRUPT_DATA。看起來你有一個腐敗的PST商店。你有沒有嘗試使用scanpst.exe來修復它?

+0

我相信被報告爲腐敗的數據是味精。我想導入MSG的PST很好,我可以導入其他MSG而沒有問題。 MSG有成千上萬的收件人,這使得Outlook無法打開它。我有兩個版本的009.msg,一個是使用OutlookSpy創建的,另一個是通過將郵件從PST拖動到我的桌面創建的。兩者都表現出相同的行爲。 – 2013-03-22 18:04:15

+0

如果您可以重新創建它們,請將它們保存爲olMsgUnicode格式而不是olMsg。 – 2013-03-23 21:39:26

+0

嘗試使用olMsgUnicode從PST源重新創建MSG導致此OutlookSpy腳本錯誤:'沒有足夠的可用內存來運行此程序。退出一個或多個程序,然後重試。「通常,我無法指定源MSG的格式。我從許多客戶處獲得MSG,他們可能會使用各種系統。我仍然認爲這個問題是大量的收件人。 – 2013-03-25 20:59:24