تصفية الرسائل من صندوق بريد Exchange باستخدام WebDav
تصفية الرسائل باستخدام Web Dav
للحصول على رسائل مصفاة من صندوق بريد:
- الاتصال بخادم Exchange.
- أنشئ مثيلًا من MailQuery واضبط الخصائص المطلوبة.
- استدعِ طريقة 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();