[英]Count unread emails from multiple outlook mailboxes using EWS c#
我想使用C#使用Exchange Web服務來計算來自多個Outlook郵箱(通訊組列表)的未讀收件箱計數。 但是代碼會繼續計算我的 收件箱中未讀的電子郵件,而不是我在代碼中提供的郵箱中。
下面是我的代碼,
protected void Page_Load(object sender, EventArgs e)
{
getunreademailcount_valid();
getunreademailcount_invalid();
}
public void getunreademailcount_valid()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.AutodiscoverUrl("validdocs@abc.com");
Mailbox mb = new Mailbox("validdocs@abc.com");
int unreadCount = 0;
FolderView viewFolders = new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep, PropertySet = new PropertySet(BasePropertySet.IdOnly) };
ItemView viewEmails = new ItemView(int.MaxValue) { PropertySet = new PropertySet(BasePropertySet.IdOnly) };
SearchFilter unreadFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
SearchFilter folderFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "AllItems"));
FindFoldersResults inboxFolders = service.FindFolders(WellKnownFolderName.Inbox,
new FolderView(int.MaxValue));
if (inboxFolders.Count() == 0)
{
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, unreadFilter, viewEmails);
unreadCount += findResults.Count();
inboxFolders = service.FindFolders(WellKnownFolderName.Inbox, viewFolders);
foreach (Folder folder in inboxFolders.Folders)
{
findResults = service.FindItems(folder.Id, unreadFilter, viewEmails);
unreadCount += findResults.Count();
Response.Write(folder.DisplayName + " : " + findResults.Count() + "<br /><br />");
}
}
else
{
foreach (Folder folder in inboxFolders.Folders)
{
FindItemsResults<Item> findResults = service.FindItems(folder.Id, unreadFilter, viewEmails);
Response.Write(folder.DisplayName + " : " + findResults.Count() + "<br /><br />");
}
}
}
public void getunreademailcount_invalid()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.AutodiscoverUrl("invaliddocs@abc.com");
Mailbox mb = new Mailbox("invaliddocs@abc.com");
int unreadCount = 0;
FolderView viewFolders = new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep, PropertySet = new PropertySet(BasePropertySet.IdOnly) };
ItemView viewEmails = new ItemView(int.MaxValue) { PropertySet = new PropertySet(BasePropertySet.IdOnly) };
SearchFilter unreadFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
SearchFilter folderFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "AllItems"));
FindFoldersResults inboxFolders = service.FindFolders(WellKnownFolderName.Inbox,
new FolderView(int.MaxValue));
if (inboxFolders.Count() == 0)
{
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, unreadFilter, viewEmails);
unreadCount += findResults.Count();
inboxFolders = service.FindFolders(WellKnownFolderName.Inbox, viewFolders);
foreach (Folder folder in inboxFolders.Folders)
{
findResults = service.FindItems(folder.Id, unreadFilter, viewEmails);
unreadCount += findResults.Count();
Response.Write(folder.DisplayName + " : " + findResults.Count() + "<br />");
}
}
else
{
foreach (Folder folder in inboxFolders.Folders)
{
FindItemsResults<Item> findResults = service.FindItems(folder.Id, unreadFilter, viewEmails);
Response.Write(folder.DisplayName + " : " + findResults.Count() + "<br />");
}
}
}
我在這里做錯了什么?
您需要使用FolderId重載來指定要訪問的郵箱,否則就屬於您正在使用的憑據的郵箱。 鑒於您要嘗試執行的操作,您的代碼沒有多大意義,例如,如果您要做的只是訪問文件夾中的未讀郵件計數,則可以在該文件夾上使用UnreadCount,而無需使用FindItem。
Mailbox MailboxYouWantToAccess = new Mailbox("mailbox@yourdomain.com");
FolderId InboxFolderId = new FolderId(WellKnownFolderName.Inbox, MailboxYouWantToAccess);
Folder InboxFolder = Folder.Bind(service, InboxFolderId);
Console.WriteLine(InboxFolder.UnreadCount);
如果要使用AllItems文件夾(僅在使用Outlook Desktop客戶端時才是它們),則可以使用
SearchFilter AllItemsSF = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "AllItems");
ExtendedPropertyDefinition PR_FOLDER_TYPE = new ExtendedPropertyDefinition(13825, MapiPropertyType.Integer);
SearchFilter SearchFoldersOnly = new SearchFilter.IsEqualTo(PR_FOLDER_TYPE, 2);
SearchFilter sfCol = new SearchFilter.SearchFilterCollection(LogicalOperator.And) { AllItemsSF, SearchFoldersOnly };
FolderId SearchRootId = new FolderId(WellKnownFolderName.Root, MailboxYouWantToAccess);
FolderView fvFolderView = new FolderView(100);
fvFolderView.Traversal = FolderTraversal.Deep;
FindFoldersResults ffResults = service.FindFolders(SearchRootId, sfCol, fvFolderView);
if (ffResults.Folders.Count == 1)
{
Console.WriteLine(ffResults.Folders[0].UnreadCount);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.