סינון הודעות מתיבת הדואר של Exchange באמצעות WebDav

סינון הודעות באמצעות Web Dav

כדי לקבל הודעות מסוננות מתיבת דואר:

  1. התחבר לשרת Exchange.
  2. צור מופע של MailQuery והגדר את המאפיינים הרצויים.
  3. קרא למתודה ExchangeClient.listMessages(MailQuery query) והעבר את ה-MailQuery בפרמטרים כדי לקבל רק את ההודעות המסוננות.

דוגמאות הקוד למטה מראות איך להתחבר לתיבת Exchange ולקבל הודעות שבהן המחרוזת "Newsletter" מופיעה בנושא ונשלחו היום.

ExchangeClient client = new ExchangeClient("http://MachineName/exchange/Username", "username", "password", "domain");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
// Subject contains "Newsletter"
builder.getSubject().contains("Newsletter");

// Emails that arrived today
try {
	builder.getInternalDate().on(sdf.parse("10/05/2016 10:00:00"));
} catch (ParseException e) {
	e.printStackTrace();
}

// Build the query
MailQuery query = builder.getQuery();

// Get list of messages
ExchangeMessageInfoCollection messages = client.listMessages(client.getMailboxInfo().getInboxUri(), query, false);
System.out.println("Imap: " + messages.size() + " message(s) found.");

קבל הודעות העומדות בקריטריונים ספציפיים

קוד הדוגמאות מעלה מסנן הודעות על בסיס נושא הדוא"ל ותאריך. ניתן לסנן גם על מאפיינים אחרים. להלן כמה דוגמאות להגדרת התנאים באמצעות MailQuery.

קריטריון סינון תאריך היום

קוד המקטע הבא מראה כיצד לסנן את כל הודעות הדוא"ל על בסיס תאריך היום.

// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());

קריטריון סינון טווח תאריכים

קוד המקטע הבא מראה כיצד לסנן את כל הודעות הדוא"ל על בסיס טווח תאריכים.

MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));

קריטריון סינון שולח ספציפי

קוד המקטע הבא מראה כיצד לסנן את כל הודעות הדוא"ל על בסיס שולח ספציפי.

MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");

קריטריון סינון תחום ספציפי

קוד המקטע הבא מראה כיצד לסנן את כל הודעות הדוא"ל על בסיס תחום ספציפי.

MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");

קריטריון סינון נמען ספציפי

קוד המקטע הבא מראה כיצד לסנן את כל הודעות הדוא"ל על בסיס נמען ספציפי.

MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");

קריטריון סינון לפי MessageID

קוד המקטע הבא מראה כיצד לסנן את כל הודעות הדוא"ל על בסיס MessageID.

// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.getMessageId().equals("MessageID");

קריטריון סינון כל הודעות משלוח דואר

קוד המקטע הבא מראה כיצד לסנן את כל הודעות הדוא"ל על בסיס כל התראות משלוח דואר.

// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());

בניית שאילתות מורכבות

אם מאפייני QueryBuilder שונים מוגדרים בהצהרות נפרדות, כל התנאים מתאימים. לדוגמה, כדי לקבל הודעה בטווח תאריכים מסוים וממארח ספציפי, כתוב שלוש הצהרות:

שילוב שאילתות עם AND

MailQueryBuilder builder = new MailQueryBuilder();

// Emails from specific host
builder.getFrom().contains("SpecificHost.com");
// AND all emails that arrived before today
builder.getInternalDate().before(new Date());
// AND all emails that arrived since 7 days ago
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(-7)));

שילוב שאילתות עם OR

QueryBuilder מספקת את המתודה or() המקבלת שני מופעים של MailQuery כפרמטרים. היא משיגה הודעות התואמות לאחד משני התנאים שהוגדרו. הדוגמה למטה מסננת הודעות שבהן יש את המילה "test" בנושא או "noreply@host.com" כשולח.

MailQueryBuilder builder = new MailQueryBuilder();
		
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));

סינון דוא"ל רגיש רישיות

ניתן לסנן הודעות דוא"ל על בסיס רגישות רישיות על ידי ציון הדגל IgnoreCase בתנאי הסינון כפי שמוצג בדוגמה הבאה.

//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();