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
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