Можно ли прочитать файл .PST с помощью C #? Я хотел бы сделать это как отдельное приложение, а не как надстройку Outlook (если это возможно).
Если вы видели другое SO вопросы похожие на это упоминание MailNavigator но я хочу сделать это программно в C #.
Я посмотрел на пространство имен Microsoft.Office.Interop.Outlook , но, похоже, это только для надстроек Outlook. LibPST , кажется, может читать файлы PST, но это на C (извините, Джоэл, я не изучил C до окончания ).
Любая помощь будет принята с благодарностью, спасибо!
РЕДАКТИРОВАТЬ:
Спасибо всем за ответы! Я принял ответ Мэтью Растона как ответ, потому что в конечном итоге он привел меня к коду, который я искал. Вот простой пример того, что я получил для работы (вам нужно будет добавить ссылку на Microsoft.Office.Interop.Outlook):
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 установлен и уже настроен для текущего пользователя. Он использует профиль по умолчанию (вы можете редактировать профиль по умолчанию, перейдя в раздел «Почта» на панели управления). Одним из основных улучшений в этом коде будет создание временного профиля для использования вместо Default, а затем его уничтожение после завершения.