を読むことはできますか見通し(2003/2007)PSTファイルのC#?
-
06-09-2019 - |
質問
読み込むことは可能ですPSTファイルをC#?をしたいと思っているこのジョブロテーション用としてではなく先行きのアドインが可能です)。-
さて見る その他 なので 質問 類似の ここにも MailNavigator なんだこのプログラムにクライアントまで、フルのC#.
私の場合の近似式は以下のようにな Microsoft.ます。Interop.展望 名前空間でこれだけの展望addins. LibPST が読むことのできるPSTファイルはC(ジョエルさん 学習C後).
のお役に立てるようお願い申し上げます。
編集:
すべての対応!お引受けさせてもらいましたマシュー Rustonの対応については、その答えなので最終的にはったりとしたコードがいっぱいになりました。ここでは、簡単な例として、何かを作る必要がありま追加を参照しまいました。ます。Interop.展望):
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;
}
}
}
注意: このコードは、先行きの設置や既に設定され、現在のユーザーです。このデフォルトのロールを編集することができ、デフォルトのプロファイルをメールでの制御パネル)。大きな改善このコードする時のプロファイル用のデフォルトの代わりに、その後破棄します。
解決
の見通しInterop図書館はどのようなaddins.例えばこの書き込みに使用するコンソールアプリだけを読み込みすべてについての見通します。っている標準のMicrosoft Outlook Interop図書館までメールの読み-もれる安全迅速に展する見通しであることから、ユーザーをクリックします。
編集:実際の実施にメールを用いた見通しInteropのように定義の単独'ます。の見通しInterop libを必要との見通しインストールする必要がありますのクライアントマシンのための機能です。
// Dumps all email in Outlook to console window.
// Prompts user with warning that an application is attempting to read Outlook data.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace OutlookEmail
{
class Program
{
static void Main(string[] args)
{
Outlook.Application app = new Outlook.Application();
Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
foreach (Outlook.MailItem item in emailFolder.Items)
{
Console.WriteLine(item.SenderEmailAddress + " " + item.Subject + "\n" + item.Body);
}
Console.ReadKey();
}
}
}
他のヒント
私ためにリファクタリングのためのサブフォルダ
private static IEnumerable<MailItem> readPst(string pstFilePath, string pstName)
{
List<MailItem> mailItems = new List<MailItem>();
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
NameSpace outlookNs = app.GetNamespace("MAPI");
// Add PST file (Outlook Data File) to Default Profile
outlookNs.AddStore(pstFilePath);
string storeInfo = null;
foreach (Store store in outlookNs.Stores)
{
storeInfo = store.DisplayName;
storeInfo = store.FilePath;
storeInfo = store.StoreID;
}
MAPIFolder rootFolder = outlookNs.Stores[pstName].GetRootFolder();
// Traverse through all folders in the PST file
Folders subFolders = rootFolder.Folders;
foreach (Folder folder in subFolders)
{
ExtractItems(mailItems, folder);
}
// Remove PST file from Default Profile
outlookNs.RemoveStore(rootFolder);
return mailItems;
}
private static void ExtractItems(List<MailItem> mailItems, Folder folder)
{
Items items = folder.Items;
int itemcount = items.Count;
foreach (object item in items)
{
if (item is MailItem)
{
MailItem mailItem = item as MailItem;
mailItems.Add(mailItem);
}
}
foreach (Folder subfolder in folder.Folders)
{
ExtractItems(mailItems, subfolder);
}
}
すでに述べたように、一つのように連結された問題で、私もお使いになることをお勧めし 償還 図書館があります。私が使っているので商用アプリケーション処理済メールのやさまざまな作業です。い正の防止をするにあィアラートを設定できます。この平均を使用visualがな問題です。
ある図書館がなければなりませんがRDOで置き換え、CDO1.21可能にアクセスすPSTファイル。それと書きVB6コード):
set Session = CreateObject("Redemption.RDOSession")
'open or create a PST store
set Store = Session.LogonPstStore("c:\temp\test.pst")
set Inbox = Store.GetDefaultFolder(6) 'olFolderInbox
MsgBox Inbox.Items.Count
利用できる pstsdk.net:.純港PSTファイル形式SDK 図書館がオープンソースの読みpstファイル なし 展望す。
の方に違いの店舗コレクション
の店舗の収集のための見通し2007年.こうして使用interop図書館が作成したから前のバージョン(みれ独立した-これはver共通してこうぜんの店。
ごみのオプションの店舗は次のいずれかの操作を行います:
- 使用interop図書館のための見通し2007年(当然のことながら、お客様コードが成り立たないと思う以前のバージョンの展望).
- 列挙すべてのトップレベルのフォルダの見通しオブジェクトモデルの抽出StoreIDの各フォルダに利用し、CDOは圧倒界面に関する詳細情報を取得するために各店です。
- 列挙のInfoStores収spcが発行した債務担保証券のセッションオブジェクトを使用しての分野に集InfoStoreオブジェクトを順に関する詳細情報を取得するために各店です。
- (そう)の使用拡張圧倒および電話会議システムのコー C++のみ):IMAPISession::GetMsgStoresTable.
に圧倒のAPIです。残念ながら利用できません。純う思いのリゾートを呼び出すポコードです。
迅速にGoogleから複数のラッパー、そうですが、大丈夫ですか?
このとして提供するものであり、役に立: http://www.wischik.com/lu/programmer/mapi_utils.html
この .NET用のコネクターの展望うにしてください.
あり、Independentsoft PST.ネット閲覧可能な状態と輸出入のパスワード保護暗号化して送信します。pstファイルです。
この資源から直接マイクロソフトがあります。A 検索MSDN 明らかにします。
- 使い方はMicrosoft Outlookオブジェクト図書館の取得からのメッセージの受信トレイを使Visual C#
- 使い方はMicrosoft Outlookオブジェクトライブラリを取り出すには予約制によVisual C#
りますのでご注意ください追加の参照できました。ます。Interop.展望 の書類 の主張にこの限りではありませんよ。純タブの代わりにCOMタブがあります。
本当に多く使コードです。まpstおメッセージをその根なしディレクトリ)を可能にするには、以下の方法readPst:
MAPIFolder rootFolder = outlookNs.Stores[pstName].GetRootFolder();
Items items = rootFolder.Items;
foreach (object item in items)
{
if (item is MailItem)
{
MailItem mailItem = item as MailItem;
mailItems.Add(mailItem);
}
}
有利用できるMSアクセスしますのいずれかをインポートすpstコンテンツやリンクします(ゆっくりとした!).