2013-05-07 121 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 
相关问题