web-dev-qa-db-fra.com

API managée C # EWS: comment accéder aux boîtes aux lettres partagées mais pas à ma propre boîte de réception

Comment puis-je me connecter à un serveur d'échange et lire le courrier à partir d'une boîte aux lettres partagée (qui n'est pas mon propre "[email protected]").

Voici mon code jusqu'à présent:

//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);


               }    
                }

Lorsque j'exécute cela, j'obtiens une exception levée qui dit que "l'adresse SMTP n'a pas de boîte aux lettres associée" pendant:

 Microsoft.Exchange.WebServices.Data.Folder exchangeMailbox = folderSearchResults.Folders.ToList().Find(
            f => f.DisplayName.Equals("BA", StringComparison.CurrentCultureIgnoreCase));

Qu'est-ce que je rate? Je sens que j'y suis presque et que cela devrait fonctionner selon la documentation EWS Managed API 2.0, mais je

15
Dillon Willis

Vous devez simplement utiliser la surcharge FolderId pour spécifier la boîte aux lettres à laquelle vous souhaitez accéder. Par exemple, si votre boîte aux lettres partagée s'appelait [email protected], utilisez

FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox,"[email protected]");
ItemView itemView = new ItemView(1000);
service.FindItems(SharedMailbox,itemView);

N'utilisez pas non plus

ItemView itemView = new ItemView(int.MaxValue);

Cela ne fonctionnera pas, car Exchange limitera le nombre maximal d'éléments retournés en raison de la limitation. Paginez toujours le résultat pour findItems et findfolders voir http://blogs.msdn.com/b/exchangedev/archive/2010/03/12/throttling-policies-and-the-ewsfindcountlimit.aspx

Cheers Glen

24
Glen Scales