البحث وتصفية رسائل IMAP في بايثون
لاسترجاع جميع الرسائل من صندوق بريد، توفر Aspose.Email الطريقة ’list_messages’ للـ ImapClient فئة. لإحضار الرسائل التي تلبي شروطًا محددة فقط، يمكنك استخدام الطريقة المُحمَّلة ’list_messages’ التي تقبل MailQuery كوسيط. الـ MailQuery فئة توفر خصائص متعددة لتحديد هذه الشروط، مثل التاريخ والموضوع والمرسل والمستلم.
توضح عينة الشفرة الأولى كيفية تصفية الرسائل بناءً على كل من التاريخ والموضوع. تُظهر أمثلة إضافية تصفية حسب معايير أخرى وإنشاء استعلامات أكثر تعقيدًا. علاوة على ذلك، يدعم API معايير البحث حساسة لحالة الأحرف لتصفية دقيقة ويسمح لك بتحديد ترميز سلسلة البحث عند تصفية الرسائل من صندوق البريد.
تصفية وجلب الرسائل من خادم IMAP
إنشاء استعلام IMAP بسيط
استخدم عينة الشفرة التالية للاتصال بصندوق بريد IMAP والحصول على الرسائل التي وصلت اليوم وتحتوي على كلمة "newsletter" في الموضوع.
- اتصل بخادم IMAP باستخدام المنفذ 993 مع اسم المستخدم وكلمة المرور.
- اختر مجلد "Inbox" للعمل مع رسائل البريد الواردة.
- إنشاء نسخة من ImapQueryBuilder لإنشاء استعلام بحث.
- حدد معايير البحث، على سبيل المثال، أن يحتوي موضوع البريد الإلكتروني على "Newsletter" وأن التاريخ الداخلي يطابق تاريخ اليوم.
- أنشئ استعلام البحث عن طريق استرجاعه من أداة الإنشاء.
- استخدم الاستعلام لسرد الرسائل التي تستوفي المعايير.
- اطبع إجمالي عدد الرسائل التي تطابق معايير البحث.
إنشاء معايير بحث معقدة
كما يتيح Aspose.Email بناء معايير بحث معقدة لاستعلام وتصفية رسائل البريد الإلكتروني مثل تاريخ التسليم، ضمن نطاق، مرسل محدد، نطاق محدد، أو مستلم محدد. لهذا الغرض، استخدم الـ MailQueryBuilder الفئة وخصائصها. ستوضح لك عينات الشيفرة أدناه كيفية جلب الرسائل وفقًا لمعايير محددة.
تصفية الرسائل الإلكترونية حسب تاريخ اليوم
لجلب الرسائل حسب تاريخ التسليم، استخدم خاصية ‘internal_date’ لـ MailQueryBuilder الصف كما هو موضح في مثال الشيفرة أدناه:
import aspose.email as ae
from datetime import datetime
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())
تصفية البريد الإلكتروني حسب نطاق التاريخ
لجلب الرسائل ضمن نطاق تاريخ معين، استخدم الخاصية ‘internal_date’ نفسها مع تحديد نطاق التاريخ كما هو موضح في مثال الشيفرة أدناه:
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
# Emails that arrived in last 7 days
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
تصفية الرسائل الإلكترونية حسب المرسل المحدد
لإحضار الرسائل من مرسل محدد، استخدم الخاصية ‘from_address’ للـ MailQueryBuilder الصف كما هو موضح في مثال الشيفرة أدناه:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")
تصفية البريد الإلكتروني حسب نطاق معين
لجلب الرسائل من نطاق معين، استخدم الخاصية ‘from_address’ كما هو موضح في مثال الشيفرة أدناه:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")
تصفية البريد الإلكتروني حسب مستلم معين
لجلب الرسائل إلى مستلم معين، استخدم الخاصية ’to’ كما هو موضح في مثال الشيفرة أدناه:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")
تصفية الرسائل حسب التاريخ الداخلي
أنشئ استعلامًا بناءً على الشروط المحددة مثل "internal date" و "subject contains". يشير "internal date" إلى تاريخ ووقت استلام رسالة البريد الإلكتروني أو إضافتها إلى خادم البريد ويمكن تعيينه باستخدام خاصية ‘internal_date’ للـ ImapQueryBuilder فئة. تُظهر عينة الشفرة أدناه كيفية جلب رسائل بريد محددة من صندوق الوارد بناءً على معايير الموضوع والتاريخ:
import aspose.email as ae
from datetime import datetime
client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.select_folder("Inbox")
# Set conditions, Subject contains "Newsletter", Emails that arrived today
builder = ae.clients.imap.ImapQueryBuilder()
builder.subject.contains("Newsletter")
builder.internal_date.on(datetime.now())
# Build the query and Get list of messages
query = builder.get_query()
messages = client.list_messages(query)
for info in messages:
print(f"Internal Date: {info.internal_date}")
تصفية الرسائل حسب أعلام الكلمات المفتاحية المخصصة
أنشئ استعلامًا للبحث في صندوق بريد IMAP عن رسائل تحتوي على أعلام الكلمات المفتاحية المخصصة، تحديدًا "custom1" و "custom2". لبناء استعلام، استخدم ImapQueryBuilder فئة التي تصفِّي الرسائل عند استرجاعها من خادم IMAP.
للبداية، أنشئ نسخة من أداة بناء الاستعلام. باستخدام has_flags طريقة، أضف شروطًا لتضمين فقط الرسائل التي تحمل الأعلام المفتاحية المحددة في IMAP. الكلمات المفتاحية المخصصة في IMAP، والتي تُعرف أيضًا بالأعلام المعرفة من قبل المستخدم، تسمح للمستخدمين بوضع علامات أو تصنيف الرسائل لأغراض مختلفة، مثل تمييز حالتها.
توضح عينة الشفرة التالية كيفية إنشاء استعلام لاسترجاع رسائل البريد بناءً على أعلام الكلمات المفتاحية المخصصة:
builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))
إنشاء استعلامات معقدة
أحيانًا يكون من الضروري تلبية أكثر من استعلام. يجعل Aspose.Email ذلك ممكنًا عبر دمج الاستعلامات في عدة عبارات. أنشئ MailQueryBuilder الكائن واستخدام خصائصه لبناء استعلامات محددة.
دمج الاستعلامات باستخدام AND
يوضح المقتطف البرمجي التالي كيفية دمج الاستعلامات باستخدام AND.
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
builder.from_address.contains("SpecificHost.com")
دمج الاستعلامات باستخدام OR
يُظهر مقتطف الشيفرة التالي كيفية دمج الاستعلامات باستخدام OR.
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
تطبيق عوامل تصفية حساسة لحالة الأحرف
يوفر الـ API أيضًا القدرة على تصفية الرسائل من صندوق البريد بناءً على معيار حسّاس لحالة الأحرف. الطرق التالية من الـ StringComparisonField الفئة توفر القدرة على البحث في الرسائل مع تحديد علامات حساسية الحالة.
- StringComparisonField.contains(value, ignore_case)
- StringComparisonField.equals(value, ignore_case)
- StringComparisonField.not_contains(value, ignore_case)
- StringComparisonField.not_equals(value, ignore_case)
يوضح مقتطف الشيفرة التالي كيفية تنفيذ هذه القدرة في مشروعك:
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)
تنفيذ استعلامات بحث مخصصة
أنشئ استعلام بحث لصندوق بريد IMAP يقوم بتصفية الرسائل بناءً على معيار بحث Gmail مخصص — تحديدًا الرسائل التي تحتوي على مرفقات.
ابدأ بإنشاء نسخة من ImapQueryBuilder، التي تساعد على بناء استعلامات بحث IMAP معقدة. استخدم custom_search طريقة لإضافة سلسلة بحث خاصة بـ Gmail إلى أداة بناء الاستعلام.
سلسلة البحث X-GM-RAW "has:attachment" تستفيد من خاصية IMAP الممتدة X-GM-RAW الخاصة بـ Gmail، مما يتيح استخدام صياغة بحث Gmail القوية داخل استعلامات IMAP. هنا، يُعيد المشغل has:attachment جميع الرسائل التي تحتوي على مرفقات.
تُظهر عينة الشفرة التالية كيفية تصفية البريد للحصول على جميع الرسائل ذات المرفقات:
builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")
mailQuery = builder.get_query()
تمكن هذه الطريقة من تصفية متقدمة خاصة بـ Gmail لجلب رسائل بريد إلكترونية مستهدفة.