是否可以阅读。PST 文件使用 C # ?我想这样做作为一个绿色软体,而不是作为一个 Outlook 插件(如果可能的话)。
如果已经看到 其他 那么 问题 相似到这提到 邮件导航员,但我期待这在 C # 的编程。
我已经查看了 Microsoft.Office. Interop. Outlook名称空间,但这似乎只适用于 Outlook 插件。LibPST似乎能够读取 PST 文件,但这是在 C (对不起,乔尔,我没有 毕业前学 C)。
任何帮助都将不胜感激,谢谢!
编辑:
谢谢大家的回应!我接受了 Matthew Ruston 的回答,因为它最终指引我找到了我正在寻找的代码。这里是一个简单的例子,我得到了什么工作(您将需要添加一个参考微软。办公室。互联系统。展望) :
using System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Outlook;
namespace PSTReader {
class Program {
static void Main () {
try {
IEnumerable<MailItem> mailItems = readPst(@"C:\temp\PST\Test.pst", "Test PST");
foreach (MailItem mailItem in mailItems) {
Console.WriteLine(mailItem.SenderName + " - " + mailItem.Subject);
}
} catch (System.Exception ex) {
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
private static IEnumerable<MailItem> readPst(string pstFilePath, string pstName) {
List<MailItem> mailItems = new List<MailItem>();
Application app = new Application();
NameSpace outlookNs = app.GetNamespace("MAPI");
// Add PST file (Outlook Data File) to Default Profile
outlookNs.AddStore(pstFilePath);
MAPIFolder rootFolder = outlookNs.Stores[pstName].GetRootFolder();
// Traverse through all folders in the PST file
// TODO: This is not recursive, refactor
Folders subFolders = rootFolder.Folders;
foreach (Folder folder in subFolders) {
Items items = folder.Items;
foreach (object item in items) {
if (item is MailItem) {
MailItem mailItem = item as MailItem;
mailItems.Add(mailItem);
}
}
}
// Remove PST file from Default Profile
outlookNs.RemoveStore(rootFolder);
return mailItems;
}
}
}
注意: 此代码假设 Outlook 已经安装并已为当前用户配置。它使用默认配置文件(您可以通过转到控制面板中的 Mail 来编辑默认配置文件)。此代码的一个主要改进是创建一个临时配置文件来代替默认配置文件,然后在完成后销毁它。