我有一个目录,里面装满了我要导入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 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??
}
从另一个SO答案中复制GetApplicationObject
的地方。
问题:是否可以根据文件内容创建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 :(得分: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