تصفية وفرز الرسائل في صندوق بريد Exchange باستخدام EWS

تصفية وفرز الرسائل باستخدام EWS

الـ IEWSClient الواجهة توفر الـ ListMessages() طريقة تسترجع جميع الرسائل من صندوق البريد. للحصول على الرسائل التي تطابق شرطًا ما فقط، استخدم النسخة المحمّلة. ListMessages() طريقة تأخذ الـ MailQuery الفئة كمعامل. الـ MailQuery توفر الفئة خصائص مختلفة لتحديد الشروط، مثل التاريخ، الموضوع، المرسل والمستلم. بالإضافة إلى ذلك، يتيح API أيضًا تطبيق مرشحات حسّاسية لحالة الأحرف لاسترجاع رسائل البريد من صندوق البريد.

ترشيح الرسائل حسب المعايير

للحصول على رسائل مصفاة من صندوق بريد:

  1. الاتصال بخادم Exchange.
  2. إنشاء نسخة من MailQuery وتعيين الخصائص المطلوبة.
  3. استدعِ الـ IEWSClient.ListMessages() الطريقة وتمرير الـ MailQuery في المعلمات للحصول على الرسائل المصفاة فقط.

يوضح المقتطف البرمجي التالي كيفية الاتصال بصندوق بريد IMAP والحصول على الرسائل التي تحتوي السلسلة "Newsletter" في الموضوع وتم إرسالها اليوم.

try
{                
    // Connect to EWS
    const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
    const string username = "username";
    const string password = "password";
    const 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.Subject.Contains("Newsletter");
    builder.InternalDate.On(DateTime.Now);

    MailQuery query = builder.GetQuery();

    // Get list of messages
    ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false);
    Console.WriteLine("EWS: " + messages.Count + " message(s) found.");

    // Disconnect from EWS
    client.Dispose();                
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

حسب تاريخ اليوم

يوضح المقتطف البرمجي التالي كيفية تصفية جميع رسائل البريد الإلكتروني بناءً على تاريخ اليوم.

// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.InternalDate.On(DateTime.Now);

حسب نطاق التاريخ

توضح قطعة الكود التالية كيفية تصفية جميع الرسائل بناءً على نطاق التاريخ.

// Emails that arrived in last 7 days
builder.InternalDate.Before(DateTime.Now);
builder.InternalDate.Since(DateTime.Now.AddDays(-7));

حسب المرسل

توضح قطعة الكود التالية كيفية تصفية جميع الرسائل بناءً على مرسل محدد.

// Get emails from specific sender
builder.From.Contains("saqib.razzaq@127.0.0.1");

حسب النطاق

توضح قطعة الكود التالية كيفية تصفية جميع الرسائل بناءً على نطاق محدد.

// Get emails from specific domain
builder.From.Contains("SpecificHost.com");

حسب المستلم

توضح قطعة الكود التالية كيفية تصفية جميع الرسائل بناءً على مستلم محدد.

// Get emails sent to specific recipient
builder.To.Contains("recipient");

حسب معرف الرسالة

توضح قطعة الكود التالية كيفية تصفية جميع الرسائل بناءً على معرف الرسالة (MessageID).

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

حسب إشعارات تسليم البريد

توضح قطعة الكود التالية كيفية تصفية جميع الرسائل بناءً على كافة إشعارات تسليم البريد.

// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.ContentClass.Equals(ContentClassType.MDN.ToString());

حسب حجم الرسالة

builder1 = new ExchangeQueryBuilder();
builder1.ItemSize.Greater(80000);

إنشاء استعلامات معقدة

إذا كان مختلفًا MailQueryBuilder يتم تعيين الخصائص في بيان منفصل، وتتم مطابقة جميع الشروط. على سبيل المثال، للحصول على رسالة في نطاق تاريخ معين ومن مضيف محدد، اكتب ثلاث بيانات:

دمج الاستعلامات باستخدام AND

يعرض لك مقتطف الشيفرة التالي كيفية دمج الاستعلامات باستخدام AND.

// Emails from specific host, get all emails that arrived before today and all emails that arrived since 7 days ago
builder.From.Contains("SpecificHost.com");
builder.InternalDate.Before(DateTime.Now);
builder.InternalDate.Since(DateTime.Now.AddDays(-7));

دمج الاستعلامات باستخدام OR

MailQueryBuilder توفر الـ Or() طريقة تأخذ اثنتين MailQuery مثيلات كمعلمات. يحصل على الرسائل التي تطابق أيًا من الشرطين المحددين. يصف المثال أدناه الرسائل التي تحتوي إما على كلمة “test” في الموضوع أو “noreply@host.com” كمرسل. يُظهر مقتطف الشيفرة التالي كيفية دمج الاستعلامات باستخدام OR.

builder.Or(builder.Subject.Contains("test"), builder.From.Contains("noreply@host.com"));

تصفية البريد الإلكتروني بحساسية الأحرف

يمكن تصفية رسائل البريد بناءً على حساسية الأحرف عن طريق تحديد علامة IgnoreCase في معايير التصفية كما هو موضح في مقتطف الشيفرة التالي.

// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();                
builder.Subject.Contains("Newsletter", true);
builder.InternalDate.On(DateTime.Now);
MailQuery query = builder.GetQuery();

تصفية الرسائل مع دعم الترصف

int itemsPerPage = 5;
string sGuid = Guid.NewGuid().ToString();
string str1 = sGuid + " - " + "Query 1";
string str2 = sGuid + " - " + "Query 2";

MailQueryBuilder queryBuilder1 = new MailQueryBuilder();
queryBuilder1.Subject.Contains(str1);
MailQuery query1 = queryBuilder1.GetQuery();
List<ExchangeMessagePageInfo> pages = new List<ExchangeMessagePageInfo>();
ExchangeMessagePageInfo pageInfo = client.ListMessagesByPage(client.MailboxInfo.InboxUri, query1, itemsPerPage);
pages.Add(pageInfo);
int str1Count = pageInfo.Items.Count;
while (!pageInfo.LastPage)
{
    pageInfo = client.ListMessagesByPage(client.MailboxInfo.InboxUri, query1, itemsPerPage, pageInfo.PageOffset + 1);
    pages.Add(pageInfo);
    str1Count += pageInfo.Items.Count;
}

فرز الرسائل المصفاة بترتيب تصاعدي/تنازلي

يمكن دعم تصفية البريد الإلكتروني مع فرز الرسائل بترتيب تصاعدي/تنازلي. في هذه الحالة، OrderBy تُستخدم الطريقة لتحديد ترتيب فرز نتائج بحث البريد باستخدام فئة MailQueryBuilder. تسمح لك هذه الطريقة بتعريف معايير الفرز لاستعلام البحث، موضحًا ما إذا كان يجب فرز النتائج تصاعديًا أو تنازليًا بناءً على خاصية معينة.

تقبل الطريقة المعامل ascending، الذي يحدد ترتيب الفرز للخاصية المحددة. إذا كان المعامل ascending صحيحًا (true)، فهذا يعني أن نتائج البحث يجب أن تُرتّب بترتيب تصاعدي. وعلى العكس، إذا كان المعامل ascending غير صحيح (false)، فهذا يعني أن نتائج البحث يجب أن تُرتّب بترتيب تنازلي.

MailQueryBuilder builder = new MailQueryBuilder();
builder.Subject.Contains("Report");
builder.InternalDate.Since(new DateTime(2020, 1, 1));
builder.Subject.OrderBy(true); // sort the subject ascending
builder.InternalDate.OrderBy(false); // sort the date descending

MailQuery query = builder.GetQuery();

// Get list of messages
ExchangeMessageInfoCollection messages = client.ListMessages(client.MailboxInfo.InboxUri, query, false);

في مقطع الشيفرة أعلاه، تم تطبيق طريقة OrderBy مرتين، مرة للموضوع ومرة لتاريخ الرسائل. نتيجة تنفيذ طريقة ListMessages مع الطلب الممرر، سنحصل على قائمة رسائل تحتوي على الموضوع الذي يتضمن كلمة "Report" والتي تم استلامها في التاريخ المحدد أو بعده. في الوقت نفسه، سيتم فرز النتائج حسب الموضوع بترتيب تصاعدي. هذا يعني أن الرسائل ستُرتّب أبجديًا من A إلى Z حسب موضوعها. كما سيتم فرز النتائج حسب التاريخ بترتيب تنازلي. وهذا يعني أن المشاركات ستُرتّب من الأحدث إلى الأقدم.

تصفية الرسائل باستخدام AQS

مع Aspose.Email لـ .NET، يمكن للمستخدمين الاستفادة من القدرات القوية لنسق الاستعلام المتقدم (AQS) لتصفية الرسائل مباشرة من صندوق بريد Exchange. يوفر AQS وسيلة قوية وبديهية لإنشاء استعلامات تستهدف رسائل البريد بدقة بناءً على معايير محددة مثل التاريخ، والمرسل، والموضوع. لمزيد من الرؤى التفصيلية حول دمجه في عمليات تصفية البريد الإلكتروني وعينات الشيفرة الشاملة حول تنفيذ تصفية الرسائل باستخدام AQS مع Aspose.Email لـ .NET، يرجى الرجوع إلى تصفية الرسائل باستخدام AQS من صندوق بريد Exchange المقالة.