1

我有一个目录,里面装满了我想导入 Outlook 的电子邮件文件。

这些文件应该是RFC822 格式的 AFAIK。用 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 窗口中一半作品:不预览电子邮件,但我可以双击它们。并非所有电子邮件都被导入(我说的是 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??
}

从另一个SOGetApplicationObject答案复制的位置。

问题:是否可以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.limlabs.com/mail

4

1 回答 1

0

如果您使用的是 C++ 或 Delphi,则可以使用MAPI 接口(如果单击 IConverterSession 按钮IConverterSession,您可以在OutlookSpy中使用它)。否则,您可以使用Redemption及其RDOMail对象 - 它的 Import 方法支持 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
于 2013-05-07T19:28:03.203 回答