【发布时间】:2013-05-01 18:39:20
【问题描述】:
我有一个目录,里面有我想导入 Outlook 的电子邮件文件。
这些文件应该是,AFAIK,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 互操作的了解非常少。
将未命名的文件重命名为.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
【问题讨论】:
-
没有“Outlook 2012”之类的东西。有 2010 (PC)、2011 (Mac) 和 2013 (PC)。您能验证一下您使用的版本吗?
-
对不起。我的意思是 Office 2010
-
如果 Outlook 不是您的用例的核心,您应该会发现几乎任何其他电子邮件应用程序都不会那么痛苦。
标签: email outlook outlook-2010 pst