package com.aspose.email.examples.imap;
import java.nio.charset.Charset;
import java.util.Calendar;
import java.util.Date;
import com.aspose.email.ImapClient;
import com.aspose.email.ImapFolderInfo;
import com.aspose.email.ImapMessageInfo;
import com.aspose.email.ImapMessageInfoCollection;
import com.aspose.email.ImapPageInfo;
import com.aspose.email.ImapQueryBuilder;
import com.aspose.email.MailQuery;
import com.aspose.email.MailQueryBuilder;
import com.aspose.email.SecurityOptions;
import com.aspose.email.system.collections.generic.List;
public class FilterMessagesFromIMAPMailbox {
public static void main(String[] args) {
// Filtering Messages from Mailbox
filterMessagesFromMailbox();
// Filter emails on Today's Date
filterEmailBasedOnTodayDate();
// Filter emails on Date Range
filterEmailBasedOnDateRange();
// Filter emails on Specific Sender
filterEmailBasedOnSpecificSender();
// Filter emails on Specific Domain
filterEmailBasedOnSpecificDomain();
// Filter emails on Specific Recepient
filterEmailBasedOnSpecificRecepient();
// Filter and Display messages on Internal Date
filterAndDisplayMessagesOnInternalDate();
// Case Sensitive Email Filtering
caseSensitiveEmailFiltering();
// Specifying Encoding for Query Builder
specifyEncodingForQueryBuilder();
// Filter Messages and List with Paging Support
filterMessagesAndListWithPagingSupport();
}
public static void filterMessagesFromMailbox() {
//Connect and log in to IMAP
String host = "host";
int port = 143;
String username = "user@host.com";
String password = "password";
ImapClient client = new ImapClient(host, port, username, password);
client.selectFolder("Inbox");
//Set conditions
ImapQueryBuilder builder = new ImapQueryBuilder();
//Subject contains "Newsletter"
builder.getSubject().contains("Newsletter");
//Email that arrived today
builder.getInternalDate().on(new Date());
//Build the query
MailQuery query = builder.getQuery();
//Get list of messages
ImapMessageInfoCollection messages = client.listMessages(query);
System.out.println("Imap: " + messages.size() + " message(s) found.");
}
public static void filterEmailBasedOnTodayDate() {
// Emails that arrived today
Calendar c = Calendar.getInstance();
c.set(2016, 04, 24, 14, 30, 0);
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(c.getTime());
}
public static void filterEmailBasedOnDateRange() {
// Emails that arrived in last 7 days
Calendar c1 = Calendar.getInstance();
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().before(c1.getTime());
c1.set(2016, 04, 17, 14, 30, 0);
builder.getInternalDate().since(c1.getTime());
}
public static void filterEmailBasedOnSpecificSender() {
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("elon.musk@127.0.0.1");
}
public static void filterEmailBasedOnSpecificDomain() {
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
}
public static void filterEmailBasedOnSpecificRecepient() {
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
}
public static void filterAndDisplayMessagesOnInternalDate() {
// Connect and log in to IMAP
String host = "host";
int port = 143;
String username = "user@host.com";
String password = "password";
ImapClient client = new ImapClient(host, port, username, password);
client.selectFolder("Inbox");
// Set conditions
ImapQueryBuilder builder = new ImapQueryBuilder();
// Subject contains "Newsletter"
builder.getSubject().contains("Newsletter");
// Emails that arrived today
Calendar c2 = Calendar.getInstance();
builder.getInternalDate().on(c2.getTime());
// Build the query
MailQuery query = builder.getQuery();
// Get list of messages
ImapMessageInfoCollection messages = client.listMessages(query);
for (ImapMessageInfo info : messages) {
System.out.println("Internal Date: " + info.getInternalDate().getTime());
}
}
public static void caseSensitiveEmailFiltering() {
// Set conditions
ImapQueryBuilder builder = new ImapQueryBuilder();
// Subject contains "Newsletter"
builder.getSubject().contains("Newsletter", true);
// Emails that arrived today
Calendar c2 = Calendar.getInstance();
builder.getInternalDate().on(c2.getTime());
// Build the query
MailQuery query = builder.getQuery();
}
public static void specifyEncodingForQueryBuilder() {
ImapQueryBuilder builder = new ImapQueryBuilder(Charset.forName("UTF-8"));
builder.getSubject().contains("ğüşıöç", true);
MailQuery query = builder.getQuery();
}
public static void filterMessagesAndListWithPagingSupport() {
ImapClient client = new ImapClient("host.domain.com", 889, "username", "password");
client.setSecurityOptions(SecurityOptions.Auto);
//Number of items per page
int itemsPerPage = 5;
//Search string
String body = "2222222222222";
//Define query builder
ImapQueryBuilder iqb = new ImapQueryBuilder();
iqb.getBody().contains(body);
MailQuery query = iqb.getQuery();
//Select the inbox folder where the messages with such body reside
client.selectFolder(ImapFolderInfo.IN_BOX);
//Search with normal list messages for reference - without paging
ImapMessageInfoCollection totalMessageInfoCol = client.listMessages(query);
List<ImapPageInfo> pages = new List<ImapPageInfo>();
//search the messages with paging support
ImapPageInfo pageInfo = client.listMessagesByPage(ImapFolderInfo.IN_BOX, query, itemsPerPage);
pages.add(pageInfo);
while (!pageInfo.getLastPage()) {
pageInfo = client.listMessagesByPage(ImapFolderInfo.IN_BOX, query, pageInfo.getNextPage());
pages.add(pageInfo);
}
int retrievedItems = 0;
//verify the number of items retrieved
for (ImapPageInfo folderCol : (Iterable<ImapPageInfo>) pages)
retrievedItems += folderCol.getItems().size();
client.dispose();
}
}