סינון הודעות מתיבת דואר Exchange
סינון הודעות באמצעות EWS
ה IEWSClient class מספקת את listMessages() מתודה שמקבלת את כל ההודעות מתיבת דואר. כדי לקבל רק הודעות שתואמות תנאי מסוים, השתמש ב listMessages() מתודה שלוקחת את MailQuery מחלקה כארגומנט. ה- 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);
סינון הודעות לפי ערך מחרוזת
קטע הקוד הבא מראה כיצד לסנן את כל המיילים על בסיס המחרוזת שצוינה בכותרות (subject, from, to, cc). ה 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();
}