تصفية بريد IMAP - الطرق، المعايير وأمثلة الشيفرة
تصفية الرسائل الأساسية
الـ ImapClient class يوفر الـ ListMessages() طريقة التي تسترجع جميع الرسائل من صندوق بريد. للحصول على الرسائل التي تطابق شرطًا ما فقط، استخدم المنهج المتجاوز ListMessages() طريقة التي تأخذ MailQuery كوسيط. الـ MailQuery توفر الفئة خصائص متعددة لتحديد الشروط، مثل التاريخ، الموضوع، المرسل، المستلم وما إلى ذلك. يوضح المثال الأول كيفية تصفية الرسائل بناءً على التاريخ والموضوع. نعرض أيضًا كيفية التصفية وفق معايير أخرى وكيفية بناء استعلامات أكثر تعقيدًا. توفر الواجهة أيضًا القدرة على تطبيق معايير بحث حساسة لحالة الأحرف لتطابق معايير التصفية الدقيقة. كما تسمح الواجهة بتحديد ترميز سلسلة البحث لتصفية الرسائل من صندوق البريد.
تصفية الرسائل من صندوق البريد
- الاتصال وتسجيل الدخول إلى خادم IMAP
- إنشاء مثيل من الـ MailQuery واضبط الخصائص
- استدعِ الـ ImapClient.ListMessages(MailQuery query) الطريقة وتمرير الـ MailQuery مع المعلمات للحصول على الرسائل المصفاة فقط.
يوضح المقتطف البرمجي التالي كيفية الاتصال بصندوق بريد IMAP والحصول على الرسائل التي وصلت اليوم وتحتوي كلمة "newsletter" في الموضوع.
تصفية الرسائل بحسب معايير محددة
نماذج الكود أعلاه تصفية الرسائل بناءً على موضوع البريد وتاريخه. يمكننا استخدام خصائص أخرى لتعيين ظروف مدعومة أخرى كذلك. أدناه بعض الأمثلة على تعيين الشروط باستخدام MailQuery. توضح مقتطفات الشيفرة التالية كيفية تصفية الرسائل حسب:
- تاريخ اليوم.
- نطاق تاريخ.
- من مرسِل محدد.
- من نطاق محدد.
- من مستلم محدد.
تاريخ اليوم
يوضح المقتطف البرمجي التالي كيفية تصفية الرسائل حسب تاريخ اليوم.
نطاق تاريخ
يوضح مقتطف الشيفرة التالي كيفية تصفية رسائل البريد حسب نطاق التاريخ.
مرسل محدد
يوضح المقتطف البرمجي التالي كيفية تصفية الرسائل حسب مُرسل محدد.
نطاق محدد
يوضح المقتطف البرمجي التالي كيفية تصفية الرسائل حسب نطاق محدد.
مستلم محدد
يوضح المقتطف البرمجي التالي كيفية تصفية الرسائل حسب مستلم محدد.
بناء استعلامات متقدمة
إذا كان مختلفًا MailQueryBuilder تُضبط الخصائص في عبارات منفصلة، ثم يتم مطابقة جميع الشروط. على سبيل المثال، إذا أردنا الحصول على رسائل بين نطاق تاريخ ومن مضيف محدد، نحتاج إلى كتابة ثلاث عبارات.
دمج الاستعلامات باستخدام AND
يوضح المقتطف البرمجي التالي كيفية دمج الاستعلامات باستخدام AND.
دمج الاستعلامات باستخدام OR
MailQueryBuilder توفر الـ Or() طريقة تأخذ اثنتين MailQuery الحالات كمعايير. يحصل على الرسائل التي تطابق أيًا من الشرطين المحددين. يوضح المقتطف البرمجي التالي كيفية تصفية الرسائل التي تحتوي إما على كلمة “test” في العنوان أو أن المرسل هو “noreply@host.com”. كما يوضح كيفية دمج الاستعلامات باستخدام OR.
التصفية بناءً على InternalDate
يمكن استخراج الرسائل من الخادم بناءً على InternalDate ولكن أحيانًا لا يُرجع الخادم جميع الرسائل كما هو ظاهر في البريد الوارد. السبب قد يكون المنطقة الزمنية للخادم لأنها قد لا تكون UTC لجميع الخوادم مثل Gmail. يرسل Aspose أوامر مثل 008 SEARCH ON 4-May-2014 وفقًا لـ بروتوكول IMAP مع ذلك قد تختلف النتيجة بسبب إعدادات المنطقة الزمنية للخادم. تم إضافة عضو جديد في ImapMessageInfo كـ InternalDate والتي تساعد أكثر في تصفية الرسائل. يوضح المقتطف البرمجي التالي استخدام InternalDate لتصفية الرسائل.
تصفية حساسة لحالة الأحرف
يوضح المقتطف البرمجي التالي كيفية استخدام تصفية الرسائل البريدية حساسة لحالة الأحرف.
تحديد الترميز لمُنشئ الاستعلام
واجهة برمجة التطبيقات في ImapQueryBuilder يمكن استخدام الباني لتحديد الترميز لسلسلة البحث. يمكن أيضًا ضبط ذلك باستخدام DefaultEncoding خاصية في MailQueryBuilder. يوضح المقتطف البرمجي التالي كيفية تحديد الترميز لـ query builder.
خيارات تصفية مخصصة
تصفية الرسائل باستخدام علامة مخصصة
بحث مخصص للتصفية
على سبيل المثال، معيار RFC 3501 لا يسمح بالبحث عن رسائل بناءً على وجود مرفقات في الرسائل. لكن Gmail يوفر امتدادات IMAP التي تسمح بإجراء مثل هذا البحث. يوضح مقتطف الشيفرة التالي كيفية إنشاء استعلام مطابق.
ImapQueryBuilder queryBuilder = new ImapQueryBuilder();
queryBuilder.CustomSearch("X-GM-RAW \"has:attachment\"");
MailQuery mailQuery = queryBuilder.GetQuery();
ImapMessageInfoCollection messageInfoCollection = imapClient.ListMessages(mailQuery);
تصفية الرسائل مع دعم الترصف
الـ ImapClient يوفر القدرة على البحث عن رسائل من صندوق البريد وسردها مع دعم الترصف. يوضح المقتطف البرمجي التالي كيفية تصفية الرسائل مع دعم الترصف.