العمل مع الرسائل من الخادم

الحصول على معلومات صندوق البريد

يمكننا الحصول على معلومات حول صندوق البريد مثل عدد الرسائل وحجم الصندوق باستخدام طريقتي GetMailBoxSize() و GetMailBoxInfo().

  • ترجع طريقة GetMailBoxSize() حجم صندوق البريد بالبايت.
  • ترجع طريقة GetMailBoxInfo() كائنًا من النوع Pop3MailBoxInfo.

يمكن أيضًا الحصول على عدد الرسائل باستخدام خاصية MessageCount والحجم باستخدام خاصية OccupiedSize. يوضح مثال الشيفرة التالي كيفية الحصول على معلومات حول صندوق البريد. يوضح كيفية:

  1. إنشاء Pop3Client.
  2. الاتصال بخادم POP3.
  3. احصل على حجم صندوق البريد.
  4. احصل على معلومات صندوق البريد.
  5. احصل على عدد الرسائل في صندوق البريد.
  6. احصل على الحجم المشغول.

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

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

يتيح Aspose.Email للمطوِّرين التعامل مع رسائل البريد بطرق مختلفة عديدة. على سبيل المثال، يمكنهم استرجاع معلومات الرأس قبل اتخاذ قرار بتنزيل البريد. أو يمكنهم استرجاع رسائل البريد من خادم وحفظها دون تحليلها (أسرع) أو بعد تحليلها (أبطأ). يوضح هذا المقال كيفية استرجاع وتحويل رسائل البريد.

استرجاع معلومات رؤوس البريد الإلكتروني

يمكن لرؤوس البريد أن تزودنا بمعلومات حول رسالة البريد التي يمكن استخدامها لتحديد ما إذا كنا سنسترجع الرسالة بالكامل أم لا. عادةً ما تحتوي معلومات الرؤوس على المرسل، الموضوع، تاريخ الاستلام وغيرها. (تم وصف رؤوس البريد بالتفصيل في تخصيص رؤوس البريد. ذلك الموضوع يختص بإرسال البريد عبر SMTP، لكن معلومات محتوى رأس البريد تظل صالحة لرسائل POP3). تُظهر الأمثلة التالية كيفية استرجاع رؤوس البريد من خادم POP3 باستخدام رقم تسلسل الرسالة.

استرجاع رسائل البريد الإلكتروني

توفر مكوّن الفئة Aspose.Email.Pop3 القدرة على استرجاع رسائل البريد من خادم POP3، وتحليلها إلى كائن MailMessage بمساعدة مكونات MailMessage. تحتوي فئة MailMessage على عدة خصائص وطرق للتعامل مع محتوى البريد. باستخدام وظيفة FetchMessage في فئة Pop3Client، يمكنك الحصول على كائن MailMessage مباشرةً من خادم POP3. يوضح مقتطف الشيفرة التالي كيفية استرجاع رسالة بريد إلكتروني كاملة من خادم POP3.

استرجاع معلومات ملخص الرسالة باستخدام المعرف الفريد

يمكن لعميل POP3 في الـ API استرجاع معلومات ملخص الرسالة من الخادم باستخدام المعرف الفريد للرسالة. هذا يوفر وصولًا سريعًا إلى المعلومات المختصرة للرسالة دون الحاجة أولاً إلى استرجاع الرسالة كاملةً من الخادم. يوضح مقتطف الشيفرة التالي كيفية استرجاع معلومات ملخص الرسالة.

قائمة الرسائل باستخدام الاتصال المتعدد

للعمليات ذات الحمل الثقيل يقدم Aspose.Email خاصية ‘use_multi_connection’ في Pop3Client فئة لاستخدام اتصالات متعددة أثناء استرجاع الرسائل. ومع ذلك، لا يعني استخدام هذا الوضع بالضرورة تحسين الأداء. يوضح مقتطف الشيفرة التالي كيفية إقامة اتصال بخادم POP3، ضبط العميل للسماح بحد أقصى 5 اتصالات متزامنة وتفعيل وضع الاتصال المتعدد لاسترجاع معلومات حول الرسائل الموجودة على الخادم:

import aspose.email as ae

client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)

client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
message_info_coll = client.list_messages()

جلب الرسائل من الخادم وحفظها على القرص

حفظ الرسالة إلى القرص بدون تحليل

إذا رغبت في تحميل رسائل البريد من خادم POP3 دون تحليلها، استخدم دالة SaveMessage في فئة Pop3Client. لا تقوم دالة SaveMessage بتحليل رسالة البريد لذا فهي أسرع من دالة FetchMessage. يوضح مقتطف الشيفرة التالي كيفية حفظ رسالة باستخدام رقم تسلسلها، في هذه الحالة الرقم 1. تقوم طريقة SaveMessage بحفظ الرسالة بالتنسيق الأصلي EML دون تحليلها.

تحليل الرسالة قبل الحفظ

استخدم طريقة ‘fetch_message’ لكائن العميل الذي تم إنشاؤه باستخدام Pop3Client فئة لاسترجاع الرسالة برقم تسلسل محدد. يوضح مثال الشيفرة أدناه كيفية استرجاع رسالة معينة وحفظها باستخدام موضوعها كاسم للملف عبر استدعاء طريقة ‘save’ على كائن msg:

import aspose.email as ae

client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)

# Fetch the message by its sequence number and Save the message using its subject as the file name
msg = client.fetch_message(1)
msg.save("first-message_out.eml", ae.SaveOptions.default_eml)

تصفية الرسائل حسب المرسل أو المستلم أو التاريخ

توفر فئة Pop3Client، كما هو موضح في ربط بخادم POP3، الطريقة list_messages() التي تجلب جميع الرسائل من صندوق البريد. للحصول على الرسائل التي تطابق شرطًا معينًا فقط، استخدم الطريقة المتعدّدة ListMessages() التي تقبل كائن MailQuery كوسيط. تقدم فئة MailQuery عدة خصائص لتحديد شروط الاستعلام، مثل التاريخ، الموضوع، المرسل، المستلم، وما إلى ذلك. تُستخدم فئة MailQueryBuilder لبناء تعبير البحث. أولاً تُحدَّد جميع الشروط والقيود، ثم يُملأ كائن MailQuery بالاستعلام الذي تم إنشاؤه بواسطة MailQueryBuilder. يستخدم كائن فئة MailQuery من قبل Pop3Client لاستخراج المعلومات المفلترة من الخادم. تُظهر هذه المقالة كيفية تصفية رسائل البريد من صندوق البريد. يوضح المثال الأول كيفية تصفية الرسائل بناءً على التاريخ والموضوع. نعرض أيضًا كيفية التصفية بحسب معايير أخرى وكيفية بناء استعلامات أكثر تعقيدًا. كما يوضح تطبيق فلتر التاريخ والوقت لاسترجاع رسائل معينة من صندوق البريد. بالإضافة إلى ذلك، يُظهر كيفية تطبيق التصفية حسّاسة لحالة الأحرف.

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

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

  1. الاتصال وتسجيل الدخول إلى خادم POP3.
  2. أنشئ مثيلًا من MailQuery واضبط الخصائص المطلوبة.
  3. استدعِ الطريقة Pop3Client.list_messages(MailQuery query) ومرّر MailQuery كمعامل للحصول على الرسائل المفلترة فقط.

يوضح مقتطف الشيفرة التالي كيفية الاتصال بصندوق بريد POP3 والحصول على الرسائل التي وصلت اليوم وتحتوي كلمة "newsletter" في الموضوع.

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

يتيح Aspose.Email أيضًا إمكانية بناء معايير بحث معقدة للاستعلام وتصفية رسائل البريد الإلكتروني. لهذا الغرض استخدم الـ MailQueryBuilder الفئة وخصائصها. معايير الجلب كما يلي:

  • جلب الرسائل حسب تاريخ التسليم.
  • جلب الرسائل ضمن نطاق.
  • جلب الرسائل من مرسل معين.
  • جلب الرسائل من نطاق معين.
  • جلب الرسائل إلى مستلم محدد.

تاريخ اليوم

لجلب الرسائل حسب تاريخ التسليم، استخدم الخاصية ‘internal_date’ كما هو موضح في مثال الشيفرة أدناه:

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’ كما هو موضح في مثال الشيفرة أدناه:

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")

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

أحيانًا يكون من الضروري تلبية أكثر من استعلام. يجعل 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.

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))

تطبيق عوامل تصفية حساسة لحالة الأحرف

يوفر الـ API أيضًا القدرة على تصفية الرسائل من صندوق البريد بناءً على معيار حسّاس لحالة الأحرف. الطرق التالية من الـ StringComparisonField الفئة توفر القدرة على البحث في الرسائل مع تحديد علامات حساسية الحالة.

الطريقة Aspose.Email.StringComparisonField.contains(value, ignore_case) الطريقة Aspose.Email.StringComparisonField.equals(value, ignore_case) الطريقة Aspose.Email.StringComparisonField.not_contains(value, ignore_case) الطريقة Aspose.Email.StringComparisonField.not_equals(value, ignore_case)

يوضح مقتطف الشيفرة التالي كيفية تنفيذ هذه القدرة في مشروعك:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)