تصفية الرسائل من صندوق بريد 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).
// 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);
ترشيح الرسائل حسب قيمة السلسلة
يوضح المقتطف البرمجي التالي كيفية تصفية جميع رسائل البريد الإلكتروني بناءً على السلسلة المحددة في رؤوس الرسالة (الموضوع، من، إلى، نسخة). 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();
}