एक्सचेंज मेलबॉक्स से संदेश फ़िल्टर करें
EWS का उपयोग करके संदेश फ़िल्टर करना
यह IEWSClient class प्रदान करता है listMessages() वह विधि जो एक मेलबॉक्स से सभी संदेश प्राप्त करती है। केवल उन संदेशों को प्राप्त करने के लिए जो किसी शर्त से मेल खाते हैं, ओवरलोडेड का उपयोग करें listMessages() वह विधि जो लेती है MailQuery class को एक आर्ग्युमेंट के रूप में। यह MailQuery क्लास विभिन्न प्रॉपर्टीज़ प्रदान करती है जो शर्तों को निर्दिष्ट करने के लिए उपयोगी हैं, उदाहरण के लिए, तिथि, विषय, प्रेषक और प्राप्तकर्ता। अतिरिक्त रूप से, API मेलबॉक्स से ईमेल प्राप्त करने के लिए केस-सेंसिटिव फ़िल्टर लागू करने की सुविधा भी देती है।
संदेश फ़िल्टरिंग
मेलबॉक्स से फ़िल्टर किए गए संदेश प्राप्त करने के लिए:
- Exchange सर्वर से कनेक्ट करें।
- MailQuery का एक इंस्टेंस बनाएं और वांछित प्रॉपर्टीज़ सेट करें।
- फ़िल्टर किए गए संदेशों को प्राप्त करने के लिए IEWSClient.listMessages() विधि को कॉल करें और पैरामीटर्स में MailQuery पास करें।
निम्न कोड स्निपेट दर्शाता है कि कैसे IMAP मेलबॉक्स से कनेक्ट करें और उन संदेशों को प्राप्त करें जिनके विषय में "Newsletter" स्ट्रिंग है और जो आज भेजे गए थे।
try {
// Connect to EWS
final String mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
final String username = "username";
final String password = "password";
final String domain = "domain";
IEWSClient client = EWSClient.getEWSClient(mailboxUri, username, password, domain);
// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
// Set Subject and Emails that arrived today
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
MailQuery query = builder.getQuery();
// Get list of messages
ExchangeMessageInfoCollection messages = client.listMessages(client.getMailboxInfo().getInboxUri(), query, false);
System.out.println("EWS: " + messages.size() + " message(s) found.");
// Disconnect from EWS
client.dispose();
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
मानदंड के अनुसार संदेश फ़िल्टर करें
ऊपर के कोड नमूने ईमेल विषय और तिथि के आधार पर संदेशों को फ़िल्टर करते हैं। हम अन्य प्रॉपर्टीज़ पर भी फ़िल्टर कर सकते हैं। नीचे कुछ उदाहरण हैं जो स्थितियों को सेट करने के लिए उपयोग किए गए हैं MailQuery.
आज की तारीख के अनुसार संदेश फ़िल्टर करें
निम्न कोड स्निपेट दर्शाता है कि आज की तारीख के आधार पर सभी ईमेल को कैसे फ़िल्टर करें।
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
तारीख सीमा के अनुसार संदेश फ़िल्टर करें
निम्नलिखित कोड स्निपेट दिखाता है कि सभी ईमेल को तिथि रेंज के आधार पर कैसे फ़िल्टर करें।
// Emails that arrived in last 7 days
Calendar cal = Calendar.getInstance();
builder.getInternalDate().before(cal.getTime());
cal.add(Calendar.DATE, -7);
builder.getInternalDate().since(cal.getTime());
निर्दिष्ट प्रेषक द्वारा संदेश फ़िल्टर करें
निम्नलिखित कोड स्निपेट दिखाता है कि सभी ईमेल को एक विशिष्ट प्रेषक के आधार पर कैसे फ़िल्टर करें।
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
निर्दिष्ट डोमेन द्वारा संदेश फ़िल्टर करें
निम्नलिखित कोड स्निपेट दिखाता है कि सभी ईमेल को एक विशिष्ट डोमेन के आधार पर कैसे फ़िल्टर करें।
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
निर्दिष्ट प्राप्तकर्ता द्वारा संदेश फ़िल्टर करें
निम्नलिखित कोड स्निपेट दिखाता है कि सभी ईमेल को एक विशिष्ट प्राप्तकर्ता के आधार पर कैसे फ़िल्टर करें।
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
MessageID के अनुसार संदेश फ़िल्टर करें
निम्नलिखित कोड स्निपेट दिखाता है कि सभी ईमेल को MessageID के आधार पर कैसे फ़िल्टर करें।
// Get email with specific MessageId
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getMessageId().equals("MessageID");
सभी मेल डिलीवरी नोटिफिकेशन के द्वारा संदेश फ़िल्टर करें
निम्नलिखित कोड स्निपेट दिखाता है कि सभी ईमेल को सभी मेल डिलीवरी नोटिफिकेशन्स के आधार पर कैसे फ़िल्टर करें।
// Get Mail Delivery Notifications
builder = new ExchangeQueryBuilder();
builder.getContentClass().equals(ContentClassType.getMDN().toString());
आकार के अनुसार संदेश फ़िल्टर करें
builder = new ExchangeQueryBuilder();
builder.getItemSize().greater(80000);
स्ट्रिंग मान के अनुसार संदेश फ़िल्टर करें
निम्न कोड स्निपेट दर्शाता है कि हेडर्स (विषय, प्रेषक, प्राप्तकर्ता, सीसी) में निर्दिष्ट स्ट्रिंग के आधार पर सभी ईमेल कैसे फ़िल्टर करें। The getText() विधि संदेश के बॉडी के साथ स्ट्रिंग मान लौटाती है।
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getText().equals("SomeText");
MailQuery query = builder.getQuery();
ExchangeMessageInfoCollection messages = ewsClient.listMessages("InboxUri", query, false);
आरोही/अवरोही क्रम में संदेश फ़िल्टर करें
Aspose.Email प्रदान करता है ComparisonField.orderBy(boolean ascending) मेथड जो यह मूल्य सेट करता है कि क्लाइंट खोज फ़ील्ड पर आरोही या अवरोही क्रम में सॉर्टिंग का उपयोग करता है। यह आपको निर्दिष्ट मानदंड के आधार पर ईमेल संदेशों को आरोही/अवरोही क्रम में सॉर्ट करने की अनुमति देता है। MailQueryBuilder.
नीचे दिया गया कोड स्निपेट दर्शाता है कि संदेशों को आरोही/अवरोही क्रम में कैसे फ़िल्टर किया जाए:
MailQueryBuilder builder = new MailQueryBuilder();
builder.getSubject().contains("Report");
builder.getInternalDate().since(sinceDate);
builder.getSubject().orderBy(true); // sort the subject ascending
builder.getInternalDate().orderBy(false); // sort the date descending
ExchangeMessageInfoCollection miColl = client.listMessages(client.getMailboxInfo().getInboxUri(), builder.getQuery());
जटिल क्वेरियों का निर्माण
यदि विभिन्न MailQueryBuilder गुणधर्म एक अलग कथन में सेट किए जाते हैं, सभी शर्तें मिलती हैं। उदाहरण के लिए, किसी विशिष्ट तिथि सीमा में और एक विशेष होस्ट से संदेश प्राप्त करने के लिए, तीन कथन लिखें:
AND के साथ क्वेरीज़ को संयोजित करना
निम्नलिखित कोड स्निपेट दिखाता है कि AND के साथ क्वेरीज़ को कैसे संयोजित किया जाए।
// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.getFrom().contains("SpecificHost.com");
Calendar cal = Calendar.getInstance();
builder.getInternalDate().before(cal.getTime());
cal.add(Calendar.DATE, -7);
builder.getInternalDate().since(cal.getTime());
OR के साथ क्वेरीज़ को संयोजित करना
MailQueryBuilder प्रदान करता है or() मेथड जो दो लेता है MailQuery पैरामीटर के रूप में इंस्टेंस। यह उन संदेशों को प्राप्त करता है जो निर्दिष्ट दो स्थितियों में से किसी एक से मेल खाते हैं। नीचे का उदाहरण उन संदेशों को फ़िल्टर करता है जिनके विषय में "test" शब्द है या प्रेषक "noreply@host.com" है। निम्नलिखित कोड स्निपेट दिखाता है कि OR के साथ क्वेरीज़ को कैसे मिलाया जाए।
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
केस-सेंसिटिव ईमेल फ़िल्टरिंग
फ़िल्टर मानदंड में IgnoreCase फ़्लैग निर्दिष्ट करके ईमेल को केस‑सेंसिटिविटी के आधार पर फ़िल्टर किया जा सकता है, जैसा कि नीचे कोड स्निपेट में दिखाया गया है।
// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
builder.getSubject().contains("Newsletter", true);
builder.getInternalDate().on(new Date());
MailQuery query = builder.getQuery();
पेजिंग समर्थन के साथ संदेश फ़िल्टर करना
int itemsPerPage = 5;
String sGuid = UUID.randomUUID().toString();
String str1 = sGuid + " - " + "Query 1";
String str2 = sGuid + " - " + "Query 2";
MailQueryBuilder queryBuilder1 = new MailQueryBuilder();
queryBuilder1.getSubject().contains(str1);
MailQuery query1 = queryBuilder1.getQuery();
List<ExchangeMessagePageInfo> pages = new ArrayList<ExchangeMessagePageInfo>();
ExchangeMessagePageInfo pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), query1, itemsPerPage);
pages.add(pageInfo);
int str1Count = pageInfo.getItems().size();
while (!pageInfo.getLastPage()) {
pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), query1, itemsPerPage, pageInfo.getPageOffset() + 1);
pages.add(pageInfo);
str1Count += pageInfo.getItems().size();
}