2

私は数日間解決策を探していました。Interop.OutlookのMSDNを調べましたが、必要なものは見つかったと思いますが、正しく実装できないようです。

これは、VBAで見たものと同様のものに基づいて私が思いついたコードです。

class Program
{
    Stores allstores = new Stores();
    Store store;

    static void Main(string[] args)
    {
        foreach (var store in allstores)
        {
            MessageBox.Show(store.FilePath);
        }

    }
}

`

これは基本的に、コンピューターのリストを循環し、各Outlookプロファイルで接続されているすべてのPSTのインベントリを作成するために、Outlook(一部の2003、一部の2007)でこのコードを実行する必要があります。これにはもっと多くのコードがあると確信していますが、この部分をまったく機能させることができません。Outlookデータファイルのインベントリに関する情報が不足しているようです。そのほとんどは、データファイル自体ではなく、メールボックスから電子メールを読み取っています。

誰かが私が見落としているものに光を当てることができれば、それは大いにありがたいです。

編集:

私は実際に作業用のコードを作成しましたが、互換性に問題があります。プログラムはOffice2010/2007で設計されたとおりに動作しますが、2003バージョンにアクセスするとクラッシュします。Microsoft Office Object 11.0を使用する必要があると思いますが、Microsoft Office Object 12.0しかリストされていません-11.0リファレンスを取得する方法はありますか?

4

2 に答える 2

0

これは役に立つかもしれません、かなり徹底的なオブジェクトモデルの比較と開発ガイド。

于 2012-01-16T22:13:49.077 に答える
0

Outlookプロファイルに実際にログインする理由はありません(認証プロンプトが必要になる場合があります)。すべての情報は、レジストリのプロファイルセクションにすでにあります。正確な場所はOutlookのバージョン固有であり、プロファイルセクションのGUIDはランダムに生成されるため、文書化されたプロファイル管理API(IProfAdminなど)が最適ですが、残念ながら、これは拡張MAPIであり、C++またはDelphiが必要です。

償還の使用がオプションである場合、実際にログインしなくてもすべてのローカルプロファイルからすべてのPSTファイルの場所を抽出できるProfManライブラリ(任意の言語でアクセス可能)が含まれています。

    'Print the path to all the PST files in all profiles
     PR_PST_PATH = &H6700001E
     set Profiles=CreateObject("ProfMan.Profiles")
     for i = 1 to Profiles.Count
       set Profile = Profiles.Item(i)
       set Services = Profile.Services
       Debug.Print "------ Profile: " & Profile.Name & " ------"
       for j = 1 to Services.Count
         set Service = Services.Item(j)
         If (Service.ServiceName = "MSPST MS") or (Service.ServiceName = "MSUPST MS") Then
            'there should be only one provider for this service
            'but we should really loop through all the providers
            Debug.Print Service.Providers.Item(1).ProfSect.Item(PR_PST_PATH)
         End If
       next
     next
于 2015-12-20T20:37:46.550 に答える