الاتصال بخوادم IMAP في بايثون

يتضمن Aspose.Email للبايثون عبر .NET الـ ImapClient فئة تسمح للمطورين بالاتصال بخوادم البريد باستخدام بروتوكول IMAP (Internet Message Access Protocol). تتيح هذه الفئة إدارة بريد إلكتروني آمنة وفعالة داخل تطبيقات بايثون، بما في ذلك استرجاع، قراءة، نقل، حذف وتحديث رسائل البريد الإلكتروني.

باستخدام عميل IMAP، يمكنك توثيق المستخدمين، إدارة مجلدات صندوق البريد، الاتصال عبر SSL، تعيين مهلات مخصصة، والوصول إلى حسابات البريد الإلكتروني عبر خوادم بروكسي أو مصادقة CRAM-MD5.

اتصال IMAP أساسي

للاتصال بخادم IMAP باستخدام Aspose.Email، اتبع الخطوات الثلاث البسيطة التالية:

  1. إنشاء مثيل من الـ ImapClient فئة.
  2. حدد اسم المضيف، المنفذ، اسم المستخدم وكلمة المرور.
  3. حدد خيار الأمان المطلوب.

تُظهر عينة الشيفرة أدناه كيفية الاتصال بخادم IMAP برمجياً:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")

تمكين SSL لاتصالات IMAP

للاتصال بخادم IMAP مدعوم SSL، عيّن الـ security_options خاصية إلى SSLImplicit:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")

# Set the security mode to implicit
client.security_options = ae.clients.SecurityOptions.SSL_EXPLICIT

الاتصال عبر بروكسي SOCKS

يدعم Aspose.Email إصدارات SOCKS 4 و 4a و 5 للاتصالات عبر البروكسي. استخدم الخطوات التالية للاتصال عبر بروكسي SOCKS:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", "username", "password")
client.security_options = ae.clients.SecurityOptions.AUTO

proxy = ae.clients.SocksProxy("192.168.203.142", 1080, ae.clients.SocksVersion.SOCKS_V5)
client.proxy = proxy

client.select_folder("Inbox")

الاتصال بالخادم عبر بروكسي HTTP

كما يتيح Aspose.Email اتصالات IMAP عبر بروكسي HTTP:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", "username", "password")
client.proxy = ae.clients.HttpProxy("18.222.124.59", 8080)
client.select_folder("Inbox")

الوصول إلى صندوق البريد بوضع القراءة فقط

لمنع تغييرات محتويات صندوق البريد، فعِّل وضع القراءة فقط. الـ read_only تعيين الخاصية إلى True يعني عدم السماح بالتغييرات. تُظهر عينة الشيفرة التالية كيفية استخدام هذه الخاصية في مشروع:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.security_options = ae.clients.SecurityOptions.SSL_EXPLICIT
client.read_only = True

استخدام مصادقة CRAM-MD5

لتحسين الأمان، قم بتكوين العميل لاستخدام مصادقة CRAM-MD5:

توضح عينة الشيفرة التالية كيفية تكوين العميل لقبول CRAM-MD5 كإحدى طرق المصادقة المدعومة للاتصال بخادم IMAP:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.allowed_authentication = ae.clients.imap.ImapKnownAuthenticationType.CRAM_MD5

تعيين مهلة العملية

منع العميل من الانتظار إلى ما لا نهاية عن طريق تعيين مهلة (بالملي ثانية):

يظهر مقطع الشيفرة التالي كيفية تعيين مهلة قدرها 60,000 مللي ثانية (60 ثانية) للعميل للانتظار لاستجابة الخادم:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)
#  60 seconds
client.timeout = 60000

تعيين مهلة الترحيب

التحكم في مدة انتظار العميل أثناء المصافحة الأولية مع خادم البريد.

يظهر مقطع الشيفرة التالي كيفية تقييد مهلة الترحيب باستخدام خاصية greeting_timeout للـ ImapClient فئة:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")

client.greeting_timeout = 4000
client.select_folder(ae.clients.imap.ImapFolderInfo.IN_BOX)

استخدام TLS مع عميل IMAP

يدعم Aspose.Email بروتوكولي TLS و SSL للاتصالات الآمنة. استخدم الـ supported_encryption خاصية لتحديد إصدارات البروتوكول المقبولة.

ملاحظة: يمكنك تعيين فقط إصدارات البروتوكول التي يدعمها .NET Framework. إذا لم تكن بعض إصدارات البروتوكول مدعومة في إصدار .NET Framework الحالي لديك، سيتم تجاهلها وتخطيها. قد يؤدي ذلك إلى تقليل مستوى أمان TLS. في هذه الحالة، لن يتم إنشاء استثناءات. يرجى استخدام طريقة ‘set_supported_encryption_unsafe(value)’ إذا رغبت في تعيين البروتوكولات دون أي فحوصات توافق.

يوضح لك مثال الشيفرة أدناه كيفية تعيين TLS 1.3 لـ ImapClient مثيل الفئة.

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.supported_encryption = ae.clients.base.EncryptionProtocols.TLS13

في حالة عدم دعم بروتوكول تشفير محدد في الإصدار الحالي من .NET Framework، الفرق في السلوك بين طريقة set_supported_encryption_unsafe(value) وخاصة supported_encryption هو كما يلي:

  • إذا تم استخدام خاصية supported_encryption، فإن عميل البريد الإلكتروني يخفض بروتوكول التشفير إلى مستوى مدعوم.
  • إذا تم استخدام طريقة set_supported_encryption_unsafe(value)، فإن عميل البريد الإلكتروني يطرح استثناءات.

التحقق من بيانات اعتماد خادم IMAP

لإنشاء اتصال آمن بخادم IMAP قبل القيام بمزيد من الإجراءات، يتم فحص بيانات اعتماد المستخدم والتحقق من صحتها. طريقة validate_credentials للـ ImapClient الفئة تساعد على التحقق مما إذا كان اسم المستخدم وكلمة المرور المقدمة صحيحتين. إذا كانت بيانات الاعتماد صالحة بالفعل، يمكن للعميل أن يُوثق بنجاح مع خادم IMAP. تُظهر عينة الشيفرة التالية كيفية تنفيذ هذه الطريقة في مشروعك:

import aspose.email as ae

with ae.clients.imap.ImapClient("your imap server", 993, "your username", "your password", ae.clients.SecurityOptions.AUTO) as client:
    client.timeout = 4000

    if client.validate_credentials():
        # Further actions

تمكين تسجيل نشاط IMAP

يتضمن تسجيل النشاط تسجيل اتصالات الخادم، تفاصيل نقل الرسائل المرسلة والمستلمة، رسائل الخطأ أثناء معالجة البريد الإلكتروني، وأي إجراءات أخرى يقوم بها العميل أو الخادم. لتتبع نشاط عميل IMAP وتفاعلاته مع الخادم، استخدم عينة الشيفرة التالية التي تستخدم خاصية log_file_name لـ ImapClient فئة لتسجيل المعلومات إلى ملف السجل المحدد:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

# Set the path to the log file using the LogFileName property.
client.log_file_name = "C:\\Aspose.Email.IMAP.log"
# Set the UseDateInLogFileName property if it is necessary.
client.use_date_in_log_file_name = False