Exchangeサーバーに接続して、共有メールボックス(自分の「[email protected]」ではないメールボックス)からメールを読み取るにはどうすればよいですか。
これまでのところ私のコードです:
//Create a service
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
//Autodiscover end point
service.AutodiscoverUrl("[email protected]");
FindFoldersResults folderSearchResults = service.FindFolders(WellKnownFolderName.Inbox, new FolderView(int.MaxValue));
Microsoft.Exchange.WebServices.Data.Folder exchangeMailbox = folderSearchResults.Folders.ToList().Find(
f => f.DisplayName.Equals("NameOfSharedMailboxIwant", StringComparison.CurrentCultureIgnoreCase));
//Set the number of items we can deal with at anyone time.
ItemView itemView = new ItemView(int.MaxValue);
foreach (Microsoft.Exchange.WebServices.Data.Folder folderFromSearchResults in folderSearchResults.Folders)
{
if (folderFromSearchResults.DisplayName.Equals("NameOfSharedMailboxIWant", StringComparison.OrdinalIgnoreCase))
{
Microsoft.Exchange.WebServices.Data.Folder boundFolder =
Microsoft.Exchange.WebServices.Data.Folder.Bind(service, folderFromSearchResults.Id);
SearchFilter unreadSearchFilter =
new SearchFilter.SearchFilterCollection(
LogicalOperator.And, new SearchFilter.IsEqualTo(
EmailMessageSchema.IsRead, false));
//Find the unread messages in the email folder.
FindItemsResults<Item> unreadMessages = boundFolder.FindItems(unreadSearchFilter, itemView);
foreach (EmailMessage message in unreadMessages)
{
message.Load();
Console.WriteLine(message.Subject);
}
}
これを実行すると、次の間に「SMTPアドレスにはメールボックスが関連付けられていません」という例外がスローされます。
Microsoft.Exchange.WebServices.Data.Folder exchangeMailbox = folderSearchResults.Folders.ToList().Find(
f => f.DisplayName.Equals("BA", StringComparison.CurrentCultureIgnoreCase));
何が欠けていますか?私はほとんどそこにいるようで、これはEWSマネージAPI 2.0のドキュメントに従って機能するはずですが、私は
FolderIdオーバーロードを使用して、アクセスするメールボックスを指定するだけです。たとえば、共有メールボックスの名前が[email protected]の場合は、
_FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox,"[email protected]");
ItemView itemView = new ItemView(1000);
service.FindItems(SharedMailbox,itemView);
_
また使用しないでください
ItemView itemView = new ItemView(int.MaxValue);
Exchangeはスロットルのために返されるアイテムの最大量を制限するため、これは機能しません。 findItemsとfindfoldersの結果を常にページングする http://blogs.msdn.com/b/exchangedev/archive/2010/03/12/throttling-policies-and-the-ewsfindcountlimit.aspx を参照
チアーズグレン