Exchange での EWS を使用したパブリック フォルダー アクセス
パブリック フォルダーへのアクセスとパブリック フォルダー要求のルーティングに、Exchange の EWS と EWS マネージ API を使用する方法について説明します。
パブリック フォルダーは、組織内のユーザーがアクセスできるアイテムの共有リポジトリを提供します。 Office 365、Exchange Online、および Exchange 2013 以降の Exchange のオンプレミス バージョンでは、新しいアーキテクチャのパブリック フォルダーが導入されています。 Exchange のパブリック フォルダーは、特別なメールボックスの設計 (パブリック フォルダー データベースの代わり) を使用して、パブリック フォルダー階層とパブリック フォルダーの内容を格納します。 パブリック フォルダーのアクセス許可は役割ベースのアクセス制御 (RBAC) で管理します。
Exchange Web サービス (EWS) や EWS マネージ API などのクライアント アクセス テクノロジにより、パブリック フォルダー階層とパブリック フォルダー データベース内のコンテンツ アイテムにプログラムからアクセスできます。 この記事では、パブリック フォルダーとパブリック フォルダー データにアクセスするために、EWS と EWS マネージ API を使用する方法について説明します。
パブリック フォルダーへのアクセスのための EWS 操作と EWS マネージ API
主要な EWS 操作のほとんどは、パブリック フォルダーへのアクセスをサポートしています。 次の表に示したフォルダーとアイテムの操作および EWS マネージ API のメソッドは、パブリック フォルダーに使用できます。
EWS マネージ API のメソッドの詳細については、「EWS マネージ API の名前空間」を参照してください。
EWS 操作 | EWS マネージ API メソッド |
---|---|
CreateFolder 操作 |
Folder.Save() |
UpdateFolder 操作 |
Folder.Update() |
DeleteFolder 操作 |
Folder.Delete() |
MoveFolder 操作1 |
Folder.Move() |
CopyFolder 操作2 |
Folder.Copy() |
GetFolder 操作 |
Folder.Bind() |
EmptyFolder 操作3 |
Folder.Empty() |
FindFolder 操作 |
ExchangeService.FindFolders() Folder.FindFolders() |
CreateItem 操作 |
Item.Save() |
MoveItem 操作 |
Item.Move() |
CopyItem 操作 |
Item.Copy() |
UpdateItem 操作 |
Item.Update() |
DeleteItem 操作 |
Item.Delete() |
FindItem 操作4 |
ExchangeService.FindItems() Folder.FindItems() |
GetItem 操作 |
Item.Bind() |
ConvertId 操作5 |
ExchangeService.ConvertId() ExchangeService.ConvertIds() |
1 パブリック フォルダーと非公開フォルダー間のフォルダー移動は、Exchange 2013 以降の Exchange のバージョンでは利用できません。
2 この操作は、Exchange Server 2007 と Exchange Server 2010 のパブリック フォルダーにのみ適用されます。
3 この操作は、Exchange 2010 のパブリック フォルダーにのみ適用されます。
4 QueryString 検索オプションによる単一パブリック フォルダー内でのテキスト全体のインデックス付き検索は、Exchange 2013 以降の Exchange のバージョンでサポートされています。
5 ConvertId 操作では、パブリック フォルダーの識別子は EWS の識別子からストアの識別子に正しく変換されません。 回避策として、返された識別子を手動で更新してください。
次に示す操作は、Exchange 2013 以降の Exchange のバージョンではサポートされていません (または、部分的にサポートされています)。
CopyFolder (サポート対象外)。 CopyItems 操作で CreateFolder を使用すると、CopyFolder 操作の機能を実装できます。
EmptyFolder (サポート対象外)。 DeleteItem 操作で FindItem を使用すると、EmptyFolder 操作の機能を実装できます。
MoveFolder (部分的にサポート)。 プライベート フォルダーとパブリック フォルダーの間でフォルダーを移動することはできません。 Exchange 2007 と Exchange 2010 では、プライベート フォルダーとパブリック フォルダーの間でフォルダーを移動できます。 Exchange のすべてのバージョンで、パブリック フォルダー内でのフォルダーの移動が可能です。
EWS と EWS マネージ API では、パブリック フォルダーに対する次の機能がサポートされません。
SyncFolderHierarchy の使用。 FindFolder、GetFolder、FindItem、GetItem の各操作を使用して、パブリック フォルダー メールボックス内のアイテムとフォルダーを同期します。
パブリック フォルダー階層の一括 (Deep Traversal) 検索。 パブリック フォルダー階層をスキャンする場合は、再帰的な FindFolder 操作の呼び出しを使用してください。
パブリック フォルダーのフォルダー階層を作成するための CreateFolderPath 操作の使用。 パブリック フォルダー メールボックスを対象にする場合は、別のフォルダー階層でフォルダー レベルごとに CreateFolder 操作を使用することが必要になります。
送信した電子メール メッセージのコピーを保存するための CreateItem 操作の使用。 代わりに、MoveItem 操作を使用してメッセージのコピーをパブリック フォルダーに移動します。
パブリック フォルダーの操作に EWS と EWS マネージ API を使用するシナリオ
Exchange メールボックス ユーザーにとって重要なシナリオの多くは、パブリック フォルダーによって可能になります。 EWS と EWS マネージ API を使用して、パブリック フォルダーにアクセスしてそのコンテンツを使用するためのカスタム ソリューションを実装することで、ユーザーの能力を強化できます。
配布リストに送信された電子メール メッセージへのプログラムによるアクセス
Exchange メールボックスのユーザーは、配布リストに送信された電子メール メッセージを保存するために、パブリック フォルダーを使用できます。 これは、配布リストの履歴を保存する際に便利な方法です。 EWS の FindItem 操作、または EWS マネージ API の ExchangeService.FindItems() メソッドと Folder.FindItems() メソッドを使用すると、保存されている配布リストの電子メール メッセージにアクセスできます。
重要な電子メール メッセージなどのメールボックス アイテムの共有
メールボックス ユーザーは、メールボックス アイテムの共有リポジトリとしてパブリック フォルダーを使用できます。 組織内の異なるユーザーは、パブリック フォルダーを使用して重要な電子メール メッセージや連絡先を共有できます。 EWS により、このように共有されたメールボックスのアイテムにアクセスできます。 EWS の MoveItem 操作、または EWS マネージ API の Item.Move() メソッドを使用すると、電子メール メッセージや連絡先などのメールボックスのアイテムをパブリック フォルダーから出し入れできます。
投稿アイテムによるパブリック ディスカッション
パブリック フォルダーは、投稿アイテムの便利なコンテナーになります。 投稿アイテムは、ユーザー間で電子メールを送信することなく、スレッド化された会話を行う方法を提供します。 ユーザーは、組織内の異なるメールボックス ユーザー間のスレッド化された会話をホストおよび維持管理するために、パブリック フォルダーと投稿アイテムを使用できます。 この方法により、メールボックス ユーザーは、会話に加わっていない場合でも、投稿アイテムを使用する会話の共有された履歴にアクセスできます。 EWS の CreateItem 操作、または EWS マネージ API の Item.Save() メソッドを使用すると、パブリック フォルダーに保存される投稿アイテムの作成と応答が可能になります。
パブリック フォルダー要求のルーティング
パブリック フォルダーのコンテンツは、複数のメールボックス サーバーに保存できます。 パブリック フォルダー階層を保存するメールボックスと、パブリック フォルダーのコンテンツを保存するメールボックスを別にすることができます。 そのため、それらのサーバーとユーザーが情報を要求するメールボックス サーバーが異なることもあります。 このような場合は、追加の X-AnchorMailbox ヘッダーと X-PublicFolderMailbox ヘッダーをパブリック フォルダー要求に含めることで、パブリック フォルダーに関する正確な情報を受け取れるようにすることが重要です。
X-AnchorMailbox と X-PublicFolderMailbox の値は、実行している要求がフォルダー階層に関連するものか、フォルダー コンテンツに関連するものかによって異なることがあります。 次の表では、EWS マネージ API メソッドまたは EWS 操作ごとに従う手順を示しています。
パブリック フォルダーの要求をルーティングするための EWS マネージ API のメソッドと EWS の操作
呼び出すメソッド | 呼び出す操作 | 使用する手順 |
---|---|---|
Folder.FindFolders Folder.Delete Folder.Update Folder.Move |
CreateFolder FindFolder DeleteFolder UpdateFolder MoveFolder |
パブリック フォルダー階層の要求をルーティングする |
Item.Bind Item.Update Item.Copy Item.Move Item.Delete Folder.Bind Folder.FindItems |
CreateItem GetItem UpdateItem CopyItem MoveItem DeleteItem GetFolder FindItem |
パブリック フォルダー コンテンツ要求をルーティングする |
バージョンの相違点
Exchange 2007 と Exchange 2010 では、パブリック フォルダーの識別子を EWS 識別子からストア識別子に変換する ConvertId 操作は期待どおりに動作します。