Email 以编程方式在Outlook中导入电子邮件文件

Email 以编程方式在Outlook中导入电子邮件文件,email,outlook,outlook-2010,pst,Email,Outlook,Outlook 2010,Pst,我有一个目录,里面满是要导入Outlook的电子邮件文件 这些文件应为RFC822格式。用Notepad++打开它们会显示以下内容和更多纯文本 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

我有一个目录,里面满是要导入Outlook的电子邮件文件

这些文件应为RFC822格式。用Notepad++打开它们会显示以下内容和更多纯文本

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 windows中一半有效:电子邮件不会预览,但我可以双击它们。并不是所有的电子邮件都会被导入(我说的是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??
}

我尝试从

。如果你使用C++或Delphi,你可以使用ICOMVIELTSISTAL MAPI接口(如果你点击ICONVIELT会话按钮,你可以玩它)。 否则,您可以使用MIME格式及其对象—其导入方法支持MIME格式(在十几种其他格式中)


没有“展望2012”这样的东西,只有2010年(个人电脑)、2011年(Mac电脑)和2013年(个人电脑)。您能验证一下您使用的版本吗?对不起。我是说Office 2010
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()
  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