मैं विशिष्ट उपयोगकर्ता के लिए एक्सचेंज से अपठित ईमेल की संख्या प्राप्त करने का प्रयास कर रहा हूं।ईडब्ल्यूएस सभी फ़ोल्डरों से अपठित ईमेल की गिनती
मैं तो जैसे इनबॉक्स से ईमेल की संख्या प्राप्त करने में सक्षम हूँ:
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
ItemView view = new ItemView(int.MaxValue);
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, sf, view);
int unreadCount = 0;
foreach (EmailMessage i in findResults)
{
unreadCount++;
}
label1.Text = unreadCount.ToString();
यह काम करता है महान।
मैं भी सभी सबफ़ोल्डर्स प्राप्त करने में सक्षम हूँ इनबॉक्स है:
FindFoldersResults findResults1 = service.FindFolders(
WellKnownFolderName.Inbox,
new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep });
foreach (Folder folder in findResults1.Folders)
{
Console.WriteLine(folder.DisplayName);
}
समस्या है कि मैं इन दोनों को एक साथ गठबंधन करने में सक्षम नहीं हूँ।
मुझे पता है कि मैं नेस्टेड फोरैच लूप कर सकता हूं, लेकिन मैं इससे बचना चाहूंगा।
मुझे ये प्रश्न मिला: Exchange Web Services (EWS) FindItems within All Folders, लेकिन AllItems
फ़ोल्डर बनाने के लिए इसे कम से कम Outlook 2010 का उपयोग करने की आवश्यकता है।
मुझे पता है कि मैं SearchFilterCollection
बना सकता हूं, लेकिन इसमें नियम कैसे जोड़ सकते हैं ताकि यह इनबॉक्स और सभी उपफोल्डर्स में अपठित ईमेल की खोज करे?
संपादित करें:
यह मैं अब तक क्या करने की कोशिश की है क्या:
private int getEmailCount()
{
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));
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, unreadFilter, viewEmails);
unreadCount += findResults.Count();
FindFoldersResults inboxFolders = service.FindFolders(WellKnownFolderName.Inbox, viewFolders);
foreach (Folder folder in inboxFolders.Folders)
{
findResults = service.FindItems(folder.Id, unreadFilter, viewEmails);
unreadCount += findResults.Count();
}
return unreadCount;
}
मूल रूप से इस काम करता है, लेकिन जब मैं कई उप-फ़ोल्डर बनाया है यह बहुत धीमी गति से काम करने के लिए शुरू कर दिया।
एक ही परिणाम प्राप्त करने के लिए मैं कई प्रश्नों के बजाय क्या कर सकता हूं?
महान कोड, लेकिन इसमें AllItems का उपयोग करते समय हटाए गए आइटम फ़ोल्डर शामिल हैं, जो सभी परिस्थितियों में आदर्श नहीं हो सकता है। – Zone12
@ जोन 12 - मैंने अभी जांच की है और मेरे मामले में 'AllItems' फ़ोल्डर में हटाए गए आइटम शामिल नहीं हैं। मैं यह नहीं कह रहा हूं कि यह हर सर्वर पर है क्योंकि मैं एक्सचेंज विशेषज्ञ नहीं हूं। हो सकता है कि एक्सचेंज पर कॉन्फ़िगरेशन के सॉम नरम हो, 'ऑलइटम' फ़ोल्डर में कौन से आइटम शामिल हैं? – Misiu
क्या आप '' SearchFilterCollection'' उदाहरण बनाने के लिए बाध्य हैं जब आप उनमें केवल एक '' खोज फ़िल्टर 'रखते हैं? यह ओवरकिल दिखता है। (मूल प्रश्न पर भी लागू होता है।) – Chop