سؤال

أنا أعمل في مشروع عميل بريد باستخدام C#.أنا أستخدم بروتوكولي POP وIMAP للتواصل مع الخادم.تكمن المشكلة في عدم قدرتي على معرفة سبب اختلاف النتيجة من خادم POP عن خادم IMAP عندما أرغب في الحصول على المعرف الفريد (UID) لرسالة.

POP
C: UIDL 1
S: +OK 1 UID2-1269789826

و

IMAP
C: $ FETCH 1 (UID)
S: * 1 FETCH (UID 2)
S: $ OK Fetch completed.

لماذا تكون نتيجة الحصول على UID مختلفة جدًا؟في IMAP هي وظيفة أخرى لهذا؟أي مساعدة هي موضع ترحيب.شكرًا.

هل كانت مفيدة؟

المحلول

POP3 وIMAP هما بروتوكولان متميزان.معرفات UID المستخدمة بواسطة هذين البروتوكولين ليست مرتبطة وليس من المفترض أن تكون متماثلة على الإطلاق.في الواقع، POP3 UID عبارة عن سلسلة عشوائية بينما IMAP UID هو رقم 32 بت (يتم إرساله كسلسلة).

من الناحية النظرية، من الممكن كتابة خادم بريد يدعم كلاً من IMAP وPOP3 باستخدام نفس المعرف الفريد (UID) لكلا البروتوكولين، لكنني لست على علم بأي خادم يمكنه القيام بذلك بالفعل. في الممارسة العملية، يتعين عليك التعامل مع معرفات POP3 UIDs وIMAP UIDs كقيم غير مرتبطة.

آر إف سي 1939 (بوب 3):المعرف الفريد للرسالة عبارة عن سلسلة عشوائية يحددها الخادم، وتتكون من حرف واحد إلى 70 حرفًا في النطاق من 0x21 إلى 0x7E، والتي تحدد الرسالة بشكل فريد ضمن قطرة بريد وتستمر عبر الجلسات.

آر إف سي 3501 (IMAP):(سمة رسالة المعرف الفريد (UID) هي) قيمة 32 بت مخصصة لكل رسالة، والتي عند استخدامها مع قيمة صلاحية المعرف الفريد (انظر أدناه) تشكل قيمة 64 بت يجب ألا تشير إلى أي رسالة أخرى في صندوق البريد أو أي صندوق بريد لاحق بنفس الاسم إلى الأبد.

نصائح أخرى

حقيقة IMAP مهمة جدًا

هذا ما تعلمته من اللعب باستخدام GMail (أتوقع أن تكون الأنظمة الأخرى هي نفسها):

  • أرسلت رسالة إلى صندوق الوارد الخاص بي
  • لديها UID 45
  • انقل الرسالة إلى البريد غير الهام
  • أصبح لديه الآن UID 5 (لأن UID فريد لكل صندوق بريد)
  • قم بإعادته مرة أخرى إلى البريد الوارد
  • لديها الآن UID 46
  • نقله مرة أخرى إلى غير المرغوب فيه
  • أصبح لديه الآن UID 6
  • الحصول على فكرة...

لقد قمت بنقل الرسائل باستخدام واجهة مستخدم GMail.com

بقدر ما أستطيع أن أقول إن UID مفيد فقط في العثور على أحدث رسائل البريد الإلكتروني في مجلد.يمكنك تشغيل الأمر بحث("UID 34:*) للحصول على كافة الرسائل الموجودة في مجلد باستخدام UID 34 أو أعلى.

لكن لا تبدأ في استخدام UID كمفتاح لتلك الرسالة في قاعدة البيانات وإلا فسوف ينتهي بك الأمر إلى الخداع.

أعتقد أنني سأستغرق الوقت الذي تلقيته وأقوم بتجزئته مع محتويات الرسالة للحصول على معرف فريد (UID) يمكنني وضعه بالفعل في قاعدة بيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top