2013-05-07 118 views
1

我有一個目錄充滿了我想要導入Outlook的電子郵件文件。以編程方式導入Outlook中的電子郵件文件

這些文件應該是,AFAIK,採用RFC822格式。用記事本打開這些++顯示以下,更明文

Return-Path: XXX 
Received: XXX 
Authentication-Results: XXX 
X-Message-Status: XXX 
X-SID-PRA: XXX 
X-SID-Result: XXX 
X-AUTH-Result: XXX 
X-Message-Delivery: XXX 
X-Message-Info: XXXX 
Received: from XXX 
Received: from XXX 
DomainKey-Signature: XXX 

所以我猜他們是普通的舊格式。現在我想將它們導入到PST文件中,以便索引並使其可被搜索。我對Outlook Interop知之甚少。

將無標題文件重命名爲.eml的作品,我可以使用Outlook 2010將其打開。將它們拖入Outlook窗口一半作品:電子郵件不會預覽,但我可以雙擊它們。並非所有的電子郵件都被導入(我正在談論3000多封郵件),並且Outlook不會損壞文件,因此無論是全部還是全部。

我在探索Outlook互操作。

基本思想如下:對於每個文本文件,將其作爲電子郵件導入給定文件夾。

我試圖寫,但尚未進行測試,下面的代碼

Application outlook = GetApplicationObject(); 

outlook.Session.AddStore(pstPath); 

Store theStore = outlook.Session.Stores.Cast<Store>().FirstOrDefault(store => store.FilePath == pstPath); 

if (theStore == null) throw new Exception(); 

try 
{ 
    string[] files = Directory.GetFiles(dataDirectory, "*", SearchOption.AllDirectories); 

    Folder folder = (Folder)theStore.GetRootFolder(); 

    foreach (string file in files.Where(file => file.EndsWith(".eml"))) 
    { 
     //What? 


    } 
} 
finally 
{ 
    //Dispose?? 
} 

GetApplicationObject從另一個複製SO回答。

問題:是否可以基於文件的內容創建MailItem?或者我必須使用電子郵件閱讀器,然後按字段創建MailItem字段?就像我寫了下面......

IMail mail = builder.CreateFromEmlFile(file); 

MailItem outlookMail = outlook.CreateItem(OlItemType.olMailItem); 
outlookMail.Body = mail.GetBodyAsText(); 
outlookMail.CC = string.Join("; ", mail.Cc.Select(x => x.Render())); 
outlookMail.HTMLBody = mail.GetBodyAsHtml(); 

if (MimeImportance.High.Equals(mail.Importance)) 
    outlookMail.Importance = OlImportance.olImportanceHigh; 
else if (MimeImportance.Low.Equals(mail.Importance)) 
    outlookMail.Importance = OlImportance.olImportanceLow; 
else 
    outlookMail.Importance = OlImportance.olImportanceNormal; 

outlookMail.Sender=outlook.CreateItem() 

圖書館我想是從http://www.limilabs.com/mail

+0

有沒有這樣的事情「Outlook 2012」。有2010(PC),2011(Mac)和2013(PC)。你能否驗證你使用的版本? – Charles 2013-05-07 18:41:55

+0

對不起。我的意思是Office 2010 – 2013-05-07 18:43:49

回答

0

如果您使用C++或Delphi,你可以使用IConverterSession MAPI接口(可以用它玩如果您單擊IConverterSession按鈕,則爲OutlookSpy)。 否則,您可以Redemption及其RDOMail對象 - 其導入方法支持MIME格式(十幾種其他格式之一)。

set Session = CreateObject("Redemption.RDOSession") 
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
    set Inbox = Session.GetDefaultFolder(olFolderInbox) 
    set Msg = Inbox.Items.Add 
    Msg.Sent = true 
    Msg.Import "C:\Temp\test.eml", 1024 
    Msg.save 
相關問題