إشعار وصول البريد الإلكتروني مع عميل Indy IMAP (Delphi 2009)

StackOverflow https://stackoverflow.com/questions/3161268

سؤال

أنا أعمل على تطبيق Deamon الذي يستخدم صندوق الوارد للبريد الإلكتروني كحوض إدخال الخاص به. يجب أن تكون أوقات الاستجابة مرتفعة قدر الإمكان مع الحفاظ على النفقات العامة للخادم إلى الحد الأدنى ، لذا فإن استطلاع البريد الإلكتروني للرسائل البريد الإلكتروني أمر غير وارد. نظرًا لأن بروتوكول IMAP يمكّن الإخطارات على رسائل البريد الإلكتروني الجديدة ، يعد هذا مثاليًا للتطبيق.

ومع ذلك ، فقد واجهت مشاكل عندما حاولت تنفيذ هذه الآلية في تطبيق Delphi/Indy. يعمل Tidimap4 بشكل رائع (بصرف النظر عن بعض مشاكل Unicode التي لا علاقة لها في حالتي) لكنني لم أتمكن من العثور على طريقة لتنفيذ الإخطارات فيه.

يجب أن تكون هذه مشكلة بسيطة في GIYF ولكن بالنسبة لسبب ما إلى Me-unknown ، لا يمكنني العثور على أي معلومات ذات صلة عن مكونات Indy عند البحث عبر الإنترنت.

الحل أو النهج البديلة سيكون موضع تقدير عميق.

تحرير: نظرًا لأن Indy لا تدعم إشعارات البريد الإلكتروني غير المتزامنة ، فهل يعرف أي شخص ما هي المكونات المجانية لـ Delphi التي ستمكن ذلك.

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

المحلول

لا يدعم TIDIMAP4 تلقي الإخطارات غير المتزامنة ، مثل الإخطار عبر البريد الإلكتروني الجديد. سيتطلب ذلك تغيير تنفيذ TidimAP4 إلى نموذج متعدد مؤشرات الترابط يشبه ما يستخدمه Tidtelnet ، ولكن أكثر تعقيدًا بسبب نموذج أمر/استجابة حظر TidimAP4 الحالي. في الوقت الحالي ، يجب عليك استطلاع صندوق الوارد بشكل دوري.

نصائح أخرى

لماذا لا تجعل التطبيق خادم SMTP ، بدلاً من العميل.

وبهذه الطريقة ، لديك إشعار مباشر حيث يتم إرسال البريد الإلكتروني مباشرة إلى تطبيقك ، بدلاً من سحب البريد الإلكتروني الجديد.

هناك عدد قليل من الاحتياطات ، في هذا البريد الإلكتروني لن يتم طوابير إذا كان تطبيقك قد انخفض ، على الرغم من أنني متأكد من أن MS Exchange ، أو postfix ، إلخ يمكن إعداده للعمل معه بشكل جيد.

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

ببساطة استطلاع قاعدة البيانات على أساس منتظم. سيكون هذا أسرع بكثير من استقصاء صندوق بريد إلكتروني ، وأسرع بكثير مما تعتقد. إن استطلاع قاعدة البيانات سريع للغاية ويمكنك بسهولة استطلاع جدول قاعدة البيانات عدة مئات من المرات في الدقيقة مع تأثير كبير جدًا على الأداء.

ما عليك سوى إنشاء جدول لتخزين عناصر Q الخاصة بك وإضافة حقل إضافي يمكنك تخزين طابع زمني أو علامة تم معالجته هذا العنصر Q ، ثم تقوم فقط بإخراج العنصر التالي غير المعدل من المكدس

مثل MSSQL

select Top 1 * from tbl_MyQ where AlreadyHandled = 0 

MySQL

select  * from tbl_MyQ where AlreadyHandled = 0 Limit 1

ومن بعد

update tbl_MyQ Set AlreadyHandled = 1 where QueueID = #ItemIDRetrieved#

قواعد البيانات سريعة ، قم بإجراء اختبار إذا كنت قلقًا. وهي أقل تعقيدًا بكثير من أحداث IMAP وصناديق البريد الإلكتروني.

إذا كان صندوق البريد الإلكتروني (IMAP) مطلبًا أساسيًا في بنية بنيةك ولم يكن هناك عملاء IMAP متاح ، فسأحاول العثور على عميل IMAP مع إشعار غير متزامن مكتوب بلغة مختلفة (C ، C# أو حتى Java) لتنفيذ A ' Proxy 'أو Gateway الذي سيؤدي بعد ذلك إلى تشغيل تطبيق Delphi Daemon عند وصول رسائل جديدة.

يمكن أن يستخدم Delphi Daemon بروتوكولًا بسيطًا يعتمد على المقبس أو HTTP لتلقي الرسائل (Tidhttpserver ، TidtCpclient).

إذا كان منحنى التعلم لـ Indy ينحدر ، فيمكنك كتابة بروتويبي مع مكتبة Ararat Synapse TCP/IP التي هي مجانية ومفتوحة المصدر ، فهو يعمل بشكل جيد للغاية في تطبيقات Delphi 2009 (باستثناء أن المترجم يشتكي من بعض السلسلة/ANSI التحويلات).

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