9

最近、C#を使用して.NETコンソールアプリをコーディングしました。目的は、特定のフォルダー内の電子メールを読み取り、特定の値についてそれらを解析し、データベースに保存することでした。

私が最初にこれをコーディングしたときの電子メールシステムはExchange2003でした。しかし、まもなくExchange 2010にアップグレードすることに気づきました。エルゴ、両方の環境で機能するようにコードを作成しました。

ただし、Exchange 2010への移行後、アプリは壊れています。

このアプリは、EWS APIfor2010の機能を使用します。ExchangeServiceのFindFoldersメソッドを使用してpublicfoldersrootを検索しようとすると、例外がスローされます。コードは次のとおりです。

ExchangeService service = new ExchangeService();
FindFoldersResults findRootFldrs;

service.UseDefaultCredentials = true;
service.AutodiscoverUrl("xxxxx@xxxx.xxx", delegate(string x) {
return true; });

FolderView fview = new FolderView(100);
fview.Traversal = FolderTraversal.Deep;

findRootFldrs = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, 
fview);

例外:ErrorInvalidSchemaVersionForMailboxVersion、別名:

要求されたメールボックスは、指定されたRequestServerVersionをサポートしていません

私が試みた:

  • exchangeserviceを2007に設定します(例外をスローします:「内部サーバーエラーが発生しました。操作は失敗しました。」)

  • パブリックフォルダへの最高レベルの許可を自分に与える(効果なし)

  • クレデンシャルを手動で設定する(効果なし)

Outlook2007でパブリックフォルダを表示できます。publicfoldersrootプロパティは、インテリセンスで使用できます。コードはローカルフォルダーで機能します(受信トレイを解析できます)。

私の現在の考えは、これはExchange 2010の最近のセットアップの設定であると考えています。残念ながら、それは実際には私の分野ではありません。例外は、以前のバージョンのExchangeを使用しようとしていることを示しています。2007に設定すると、コードが失敗し、内部サーバーエラーが発生します。

4

3 に答える 3

2

古い投稿ですが、これが私にとっての答えであることが判明しました: http://technet.microsoft.com/en-us/library/bb629522.aspx

基本的に、EWS との接続に使用されるアカウントには、既定のパブリック フォルダー サーバーがまだ Exchange 2003 であるメールボックス データベース内のメールボックスがありました。EWS を介してパブリック フォルダーを列挙する試みはすべて失敗しました。2010 年のバックエンド サーバーに交換すると、すぐに治りました。

于 2011-12-08T23:04:09.250 に答える
1

この行を変更します。

ExchangeService service = new ExchangeService(); 

このようなものに:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);

また

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);

バージョンによって異なります。

于 2011-09-01T12:53:10.603 に答える
1

esb.RequestServerVersion .Version = ExchangeVersionTypeを試しましたか。Exchange2010 (または SP1)

于 2010-05-11T23:21:43.737 に答える