نص تصفية البريد PHP: رموز الخروج غير معروفة في ملف .qmail

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

  •  01-10-2019
  •  | 
  •  

سؤال

قصة قصيرة

لقد حصلت على نص برمجي PHP يقوم بتصفية البريد الوارد باستخدام ملف .qmail. يعمل البرنامج النصي بشكل جيد تمامًا ويسجل جميع الأنشطة ، ولكن ، على حد علمي ، لا ينبغي تنفيذ خط. QMail الأخير عندما يقوم البرنامج النصي بإرجاع رمز خروج DOT-QMAIL 99 الذي يجب أن يتوقف عن معالجة خطوط. Qmail.

قصة طويلة:

أنا أستخدم الإصدار 9.3.0 من لوحة Plessk Plesk ضمن Linux 2.6.18-4-686.

إصدار PHP CLI الخاص بي هو 5.2.0-8+ETCH16 (CLI) (بنيت: 24 نوفمبر 2009 11:14:47).

غير راضٍ عن Spamassassin و Dr. Web و Zen.spamhaus.org ونتائجهم ، قررت إنشاء البرنامج النصي الخاص بي الخاص بتصفية جميع البريد الوارد.

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

ومع ذلك ، أواجه صعوبة في تثبيت البرنامج النصي على الخادم.

QMailfilter هو البرنامج النصي الخاص بي ويمكنك رؤيته في http://titanpad.com/1ifdj1jvb0

لقد قمت بتحرير ملف .qmail موجود في /var/qmail/mailnames/customerdomain.com/username/.qmail أن تكون:

|/var/my/qmailfilter/qmailfilter
|/usr/bin/deliverquota ./Maildir

ينفذ برنامج QMailfilter PHP ويسجله تمامًا عندما أرسل رسالة إلى حساب المستخدم هذا ، وإرجاع رمز الخروج (99 لتجاهل الرسائل و 0 للمتابعة إلى خط. QMail الذي يقدم الرسالة).

تبين أنه يوفر الرسالة بعدم احترام العديد من رموز الخروج التي جربتها بالفعل.

يقوم البرنامج النصي (انظر السطر 174) بإخراج رمز خروج النص دون أي مساحة بيضاء قبل أو بعد. حاولت exit($code), print $code, echo($code) وحتى file_put_contents("php://stdout", $code), ، و أيضا exit(chr($code)).

dot-qmail الرموز هي:

0 - النجاح (انتقل إلى خط. qmail)

99 - النجاح والإجهاض (لا تنفذ الأسطر التالية)

100 - خطأ دائم (ترتد)

111 - خطأ ناعم (أعد إعادة المحاولة لاحقًا)

المصدر: صورة Qmail الكبيرة.

محاولات/تجارب أخرى:

  1. إزالة كوخ خط (#!/usr/bin/php) وغيرت الأولى .qmail خط ل |php -q /var/my/qmailfilter/qmailfilter

  2. فحص السطر الأخير من البرنامج النصي لتباين البيض

  3. اقرأ ملف رجل dot-qmail ولكن لم يتم العثور على أي شيء قاطع

  4. انضم إلى خطوط .qmail:

    |/var/my/qmailfilter/qmailfilter |/usr/bin/deliverquota ./maildir

في هذه الحالة ، تلقيت رسالة لها رمز الإرجاع المناسب فقط دون أي رأس أو موضوع أو هيئة رسائل.

  1. علق (#) الثاني .qmail خط ، لكنه توقف عن تلقي أي نوع من الرسائل.

  2. تحرير /var/qmail/control/defaultdelivery لإضافة السطر الأول:

    | php/var/my/qmailfilter/qmailfilter |/usr/bin/deliverquota ./maildir

وإعادة تسمية المستخدم .qmail ملف إلى _qmail. نفس النتائج.

هل يجب أن أقوم بتسليم الرسالة عبر البرنامج النصي PHP ونسيان رموز الخروج؟

إذا كان الأمر كذلك ، هل يكفي حفظ الرسالة إلى maildir/جديد؟

إذا كان الأمر كذلك ، فهل اسم الملف مهم؟

سيكون موضع تقدير أي فكرة. شكرا جزيلا!

تحديث: لأولئك منكم الذين يحتاجون إليها ، نشرت البرنامج النصي النهائي في IceBex.com Slash Qmailfilter

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

المحلول

لقد ألقيت نظرة سريعة على الكود فقط ، لكن يبدو أنك تستخدم قيم السلسلة. exit('99') و exit(99) ليسوا متشابهين. تأكد من استخدام الأعداد الصحيحة وليس السلاسل.

  • سيقوم Exit ('99 ') بطباعة 99 وإرجاع 0.

  • سيعود Exit (99) 99.

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