C#を使用して.PSTファイルを読み取ることはできますか?私はスタンドアロンのアプリケーションとして、Outlookのアドイン(可能であれば)としてではなく、このようにしたいと思います。この言及MailNavigatorにSOquestionssimilarotherを見てきましたが、私はC#でプログラム的にこれを行うには探していた場合C#でOutlook(2003/2007)PSTファイルを読むことはできますか?
。
私はMicrosoft.Office.Interop.Outlook名前空間を調べましたが、これはOutlookアドインのためだけのようです。 LibPSTはPSTファイルを読み取ることができるようですが、これはC言語です(ごめんなさい、Joel、私はlearn C before graduating)。
ご協力いただきありがとうございます、ありがとうございます!
EDIT:
が回答ありがとうございました! Matthew Ruston氏の返答を答えとして受け入れました。最終的に私が探していたコードにつながったからです。ここで私は(あなたが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がインストールされていることを前提とし、すでに現在のユーザー用に構成されています。これはデフォルトプロファイルを使用します(コントロールパネルの[メール]に移動してデフォルトプロファイルを編集できます)。このコードの大きな改善点の1つは、デフォルトの代わりに使用する一時的なプロファイルを作成し、完了した後で破棄することです。
私はAddStoresや店舗リストもOutlookのAPIに存在していたことを知りませんでした。良い投稿! –
何か不足していますか?なぜoutlookNSのStoresコレクションにアクセスできないのですか?インテリセンスではない。 –
「Microsoft.Office.Interop.Outlook;を使用していますか?あなたのコードで? –