IMAP क्लाइंट का उपयोग करके सर्वर से संदेश फ़िल्टर करें

यह ImapClient class प्रदान करता है listMessages() मेथड जो मेलबॉक्स से सभी संदेश प्राप्त करता है। केवल उन संदेशों को प्राप्त करने के लिये जो किसी शर्त से मेल खाते हैं, अतिव्याप्त का उपयोग करें listMessages() मेथड जो लेता है MailQuery को आर्ग्यूमेंट के रूप में। MailQuery क्लास विभिन्न प्रॉपर्टीज़ प्रदान करता है जो शर्तें निर्दिष्ट करती हैं, जैसे तिथि, विषय, प्रेषक, प्राप्तकर्ता आदि। पहला उदाहरण दिखाता है कि तिथि और विषय के आधार पर संदेशों को कैसे फ़िल्टर किया जाए। हम अन्य मानदंडों पर फ़िल्टर करने और अधिक जटिल क्वेरी बनाने का भी प्रदर्शन करते हैं। API केस-सेंसिटिव खोज मानदंड लागू करके सटीक फ़िल्टरिंग मानदंड से मेल खाने की क्षमता भी प्रदान करता है। API मेलबॉक्स से संदेशों को फ़िल्टर करने के लिए खोज स्ट्रिंग की एन्कोडिंग निर्दिष्ट करने की अनुमति भी देता है।

मेलबॉक्स से संदेश फ़िल्टर करना

  1. एक IMAP सर्वर से कनेक्ट हों और लॉग इन करें
  2. का एक इंस्टेंस बनाएं MailQuery और प्रॉपर्टीज़ सेट करें
  3. कॉल करें ImapClient.listMessages(MailQuery query) विधि और पास करें MailQuery केवल फ़िल्टर किए गए संदेश प्राप्त करने के लिए पैरामीटर के साथ।

निम्नलिखित कोड स्निपेट दिखाता है कि कैसे एक IMAP मेलबॉक्स से कनेक्ट हों और आज आए संदेशों को प्राप्त करें जिनके विषय में "newsletter" शब्द हो।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP
final String host = "host";
final int port = 143;
final String username = "user@host.com";
final String password = "password";
ImapClient client = new ImapClient(host, port, username, password);
client.selectFolder("Inbox");
// Set conditions, Subject contains "Newsletter", Emails that arrived today
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());
// Build the query and Get list of messages
MailQuery query = builder.getQuery();
ImapMessageInfoCollection messages = client.listMessages(query);
System.out.println("Imap: " + messages.size() + " message(s) found.");
// Disconnect from IMAP
client.dispose();

विशिष्ट मानदंडों को पूरा करने वाले संदेश प्राप्त करें

ऊपर के कोड नमूने ईमेल विषय और तिथि के आधार पर संदेश फ़िल्टर करें। हम अन्य प्रॉपर्टीज़ का उपयोग करके अन्य समर्थित शर्तें भी सेट कर सकते हैं। नीचे कुछ उदाहरण हैं जो शर्तें सेट करने के लिए उपयोग किए गए हैं MailQuery. निम्नलिखित कोड स्निपेट्स दिखाते हैं कि ईमेल कैसे फ़िल्टर किए जाएँ:

  1. आज की तिथि।
  2. एक तिथि सीमा।
  3. एक विशिष्ट प्रेषक से।
  4. एक विशिष्ट डोमेन से।
  5. एक विशिष्ट प्राप्तकर्ता से।

आज की तिथि

निम्नलिखित कोड स्निपेट दिखाता है कि आज की तिथि पर ईमेल कैसे फ़िल्टर करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
~~
### **Date Range*
The following code snippet shows you how to filter emails on the date range.

~~~Java
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// 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());

विशिष्ट प्रेषक

निम्नलिखित कोड स्निपेट दिखाता है कि विशिष्ट प्रेषक पर ईमेल कैसे फ़िल्टर करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");

विशिष्ट डोमैन्

निम्नलिखित कोड स्निपेट दिखाता है कि विशिष्ट डोमेन पर ईमेल कैसे फ़िल्टर करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");

विशिष्ट प्राप्तकर्ता

निम्नलिखित कोड स्निपेट दिखाता है कि विशिष्ट प्राप्तकर्ता पर ईमेल कैसे फ़िल्टर करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get emails sent to specific recipient
builder.getTo().contains("recipient");

जटिल क्वेरियों का निर्माण

यदि विभिन्न MailQueryBuilder प्रॉपर्टीज़ अलग-अलग कथनों में सेट की गई हैं, तब सभी शर्तें मेल खाएँगी। उदाहरण के लिए, यदि हम एक तिथि सीमा और एक विशिष्ट होस्ट से संदेश प्राप्त करना चाहते हैं, तो हमें तीन कथन लिखने होंगे।

AND के साथ क्वेरीज़ को संयोजित करना

निम्नलिखित कोड स्निपेट दिखाता है कि कैसे AND के साथ क्वेरीज़ को संयोजित किया जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// 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 के साथ क्वेरी कैसे मिलाएं।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

InternalDate पर फ़िल्टरिंग

सर्वर से संदेश InternalDate के आधार पर निकाले जा सकते हैं, लेकिन कभी-कभी सर्वर सभी संदेश इनबॉक्स में दिखाई देने वाले नहीं लौटाता। इसका कारण सर्वर टाइमज़ोन हो सकता है क्योंकि सभी सर्वर UTC नहीं हो सकते जैसे Gmail. Aspose 008 SEARCH ON 4-May-2014 जैसी कमांड भेजता है जैसा कि IMAP प्रोटोकॉल हालांकि परिणाम सर्वर समय क्षेत्र सेटिंग्स के कारण भिन्न हो सकते हैं। एक नया सदस्य जोड़ा गया है ImapMessageInfo as InternalDate जो संदेशों को फ़िल्टर करने में और मदद करता है। निम्नलिखित कोड स्निपेट उपयोग दिखाता है InternalDate संदेशों को फ़िल्टर करने के लिए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Connect and log in to IMAP
final String host = "host";
final int port = 143;
final String username = "user@host.com";
final String password = "password";
ImapClient client = new ImapClient(host, port, username, password);
client.selectFolder("Inbox");

// Set conditions, Subject contains "Newsletter", Emails that arrived today
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.getSubject().contains("Newsletter");
builder.getInternalDate().on(new Date());

// Build the query and Get list of messages
MailQuery query = builder.getQuery();
ImapMessageInfoCollection messages = client.listMessages(query);
for (ImapMessageInfo info : messages) {
    System.out.println("Internal Date: " + info.getInternalDate());
}

// Disconnect from IMAP
client.dispose();

केस-सेंसिटिव ईमेल फ़िल्टरिंग

निम्नलिखित कोड स्निपेट दिखाता है कि केस-सेंसिटिव ईमेल फ़िल्टरिंग का उपयोग कैसे किया जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set conditions, Subject contains "Newsletter", Emails that arrived today
ImapQueryBuilder builder = new ImapQueryBuilder();
builder.getSubject().contains("Newsletter", true);
builder.getInternalDate().on(new Date());
MailQuery query = builder.getQuery();

क्वेरी बिल्डर के लिए एन्कोडिंग निर्दिष्ट करें

API का ImapQueryBuilder कन्स्ट्रक्टर का उपयोग खोज स्ट्रिंग के लिए एन्कोडिंग निर्दिष्ट करने के लिए किया जा सकता है। इसे भी उपयोग करके सेट किया जा सकता है DefaultEncoding MailQueryBuilder की प्रॉपर्टी। निम्नलिखित कोड स्निपेट दिखाता है कि क्वेरी बिल्डर के लिए एन्कोडिंग कैसे निर्दिष्ट करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set conditions
ImapQueryBuilder builder = new ImapQueryBuilder(Charset.forName("utf-8"));
builder.getSubject().contains("ğüşıöç", true);
MailQuery query = builder.getQuery();

पेजिंग समर्थन के साथ संदेश फ़िल्टर करें

यह ImapClient मेलबॉक्स से संदेशों को खोजने और पेजिंग समर्थन के साथ उन्हें सूचीबद्ध करने की क्षमता प्रदान करता है। निम्नलिखित कोड स्निपेट दिखाता है कि पेजिंग समर्थन के साथ संदेशों को कैसे फ़िल्टर किया जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
/// <summary>
/// This example shows how to search for messages using ImapClient of the API with paging support
/// Introduced in Aspose.Email for .NET 6.4.0
/// </summary>
final ImapClient client = new ImapClient("host.domain.com", 84, "username", "password");
try {
    try {
        // Append some test messages
        int messagesNum = 12;
        int itemsPerPage = 5;
        MailMessage message = null;
        for (int i = 0; i < messagesNum; i++) {
            message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35128 - " + UUID.randomUUID(), "111111111111111");
            client.appendMessage(ImapFolderInfo.IN_BOX, message);
        }
        String body = "2222222222222";
        for (int i = 0; i < messagesNum; i++) {
            message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35128 - " + UUID.randomUUID(), body);
            client.appendMessage(ImapFolderInfo.IN_BOX, message);
        }

        client.selectFolder("Inbox");
        ImapQueryBuilder iqb = new ImapQueryBuilder();
        iqb.getBody().contains(body);
        MailQuery query = iqb.getQuery();

        client.selectFolder(ImapFolderInfo.IN_BOX);
        ImapMessageInfoCollection totalMessageInfoCol = client.listMessages(query);
        System.out.println(totalMessageInfoCol.size());

        //////////////////////////////////////////////////////

        List<ImapPageInfo> pages = new ArrayList<ImapPageInfo>();

        PageSettings ps = new PageSettings();
        ps.setFolderName(ImapFolderInfo.IN_BOX);
        PageInfo pi = new PageInfo(itemsPerPage);
        ImapPageInfo pageInfo = client.listMessagesByPage(query, pi, ps);

        pages.add(pageInfo);
        while (!pageInfo.getLastPage()) {
            pageInfo = client.listMessagesByPage(query, pageInfo.getNextPage(), ps);
            pages.add(pageInfo);
        }
        int retrievedItems = 0;
        // foreach to while statements conversion
        for (ImapPageInfo folderCol : pages) {
            retrievedItems += folderCol.getItems().size();
        }
    } finally {
    }
} finally {
    if (client != null)
        client.dispose();
}

कस्टम फ़्लैग के साथ संदेश फ़िल्टर करें

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapQueryBuilder queryBuilder = new ImapQueryBuilder();

queryBuilder.hasFlags(ImapMessageFlags.keyword("custom1"));

queryBuilder.hasNoFlags(ImapMessageFlags.keyword("custom2"));

कस्टम खोज का उपयोग करके संदेश फ़िल्टर करें

उदाहरण के लिए, RFC 3501 मानक संदेश में संलग्नकों की उपस्थिति के आधार पर खोज की अनुमति नहीं देता है। लेकिन Gmail प्रदान करता है IMAP एक्सटेंशन जो ऐसी खोज करने की अनुमति देती हैं। Aspose.Email प्रदान करता है customSearch विधि ImapQueryBuilder संबंधित क्वेरी बनाने के लिए क्लास।

नीचे दिया गया कोड नमूना दिखाता है कि IMAP प्रोटोकॉल और एक कस्टम खोज मानदंड का उपयोग करके सर्वर से संलग्नक वाले ईमेल संदेशों की सूची कैसे प्राप्त करें:

ImapQueryBuilder builder = new ImapQueryBuilder();
builder.customSearch("X-GM-RAW \"has:attachment\"");
MailQuery query = builder.getQuery();
messageInfoCol = client.listMessages(query);