Scroll to navigation

PROCMAILRC(5) File Formats Manual PROCMAILRC(5)

الاسم

procmailrc - ملف إعدادات procmail

موجز

$HOME/.procmailrc

الوصف

للبدء السريع، طالع قسم NOTES في نهاية صفحة دليل procmail(1).

يمكن أن يحتوي ملف الإعدادات على مزيج من تعيينات متغيرات البيئة (التي لبعضها معانٍ خاصة لدى procmail)، والوصفات (recipes). في أبسط صورها، تكون الوصفات عبارة عن تعبيرات نمطية من سطر واحد يجري البحث عنها في ترويسة البريد الوارد. تُستخدم أول وصفة تطابق لتحديد وجهة البريد (عادةً ما تكون ملفاً). إذا انتهت المعالجة عند نهاية ملف الإعدادات، سيُسلّم procmail البريد إلى $DEFAULT.

يوجد نوعان من الوصفات: وصفات التسليم ووصفات غير التسليم. إذا طابقت وصفة تسليم، يعتبر procmail البريد (كما خمنت) مُسلّماً وسيُوقف معالجة ملف الإعدادات بعد تنفيذ سطر الإجراء الخاص بالوصفة بنجاح. إذا طابقت وصفة غير تسليم، فستستمر معالجة ملف الإعدادات بعد تنفيذ سطر الإجراء الخاص بهذه الوصفة.

وصفات التسليم هي تلك التي تسبب كتابة ترويسة و/أو نص البريد في ملف، أو امتصاصه من قبل برنامج، أو إعادة توجيهه إلى عنوان بريد إلكتروني.

وصفات غير التسليم هي تلك التي تتسبب في التقاط مخرجات برنامج أو مرشح (فلتر) مرة أخرى بواسطة procmail أو تلك التي تبدأ كتلة متداخلة.

يمكنك إخبار procmail بمعاملة وصفة تسليم كأنها وصفة غير تسليم عبر تحديد العلم `c' في مثل هذه الوصفة. سيجعل هذا procmail يُنشئ نسخة كربونية (carbon copy) من البريد عبر تسليمها إلى هذه الوصفة، مع الاستمرار في معالجة ملف الإعدادات.

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

يمكن خلط تعيينات متغيرات البيئة والوصفات بحرية في ملف الإعدادات. إذا كان لأي متغير بيئة معنى خاص لدى procmail، فسيُستخدم بشكل مناسب في اللحظة التي يُحلل فيها (أي يمكنك تغيير المجلد الحالي متى شئت عبر تحديد MAILDIR جديد، أو تبديل ملفات القفل عبر تحديد LOCKFILE جديد، أو تغيير umask في أي وقت، إلخ، الاحتمالات لا حصر لها :-).

تُعالج تعيينات واستبدالات متغيرات البيئة هذه تماماً كما هو الحال في sh(1) (يشمل ذلك جميع علامات الاقتباس والهروب الممكنة)، مع ميزة إضافية هي تجاهل الفراغات حول علامة '='، وإذا ظهر متغير بيئة بدون '=' تالية، فسيُزال من البيئة. أي برنامج داخل علامات الاقتباس العكسية يبدأه procmail سيكون لديه البريد بأكمله في مدخله القياسي (stdin).

ملاحظات

تُتجاهل أي كلمة تبدأ بـ # وجميع الأحرف التالية لها حتى سطر جديد (NEWLINE). لا ينطبق هذا على أسطر الشروط، التي لا يمكن وضع تعليقات عليها.

الوصفات

السطر الذي يبدأ بـ ':' يمثل بداية وصفة. ويكون له التنسيق التالي:

:0 [الأعلام] [ : [ملف_القفل_المحلي] ] <صفر أو أكثر من الشروط (شرط
واحد لكل سطر)> <سطر إجراء واحد بالضبط>

تبدأ الشروط بعلامة `*' في البداية، ويُمرر كل ما يلي هذا الحرف إلى egrep الداخلي حرفياً، باستثناء المسافات البيضاء في البداية والنهاية. هذه التعبيرات النمطية متوافقة تماماً مع التعبيرات النمطية الموسعة لـ egrep(1) العادي. طالع أيضًا Extended regular expressions.

الشروط تُربط بـ "و" المنطقية (anded)؛ إذا لم توجد شروط، ستكون النتيجة صائبة مبدئياً.

يمكن أن تكون الأعلام أيّاً مما يلي:

استخدام egrep على الترويسة (مبدئي).
استخدام egrep على المتن.
إخبار egrep الداخلي بالتمييز بين الأحرف الكبيرة والصغيرة (خلافاً للمبدئي الذي يتجاهل حالة الأحرف).
لن تُنفذ هذه الوصفة ما لم تطابق شروط آخر وصفة سابقة (على مستوى تداخل الكتل الحالي) بدون العلم `A' أو `a' أيضًا. يتيح لك هذا ربط الإجراءات التي تعتمد على شرط مشترك.
له نفس معنى العلم `A'، مع شرط إضافي هو أن تكون الوصفة السابقة مباشرة قد أُكملت بنجاح قبل تنفيذ هذه الوصفة.
لا تُنفذ هذه الوصفة إلا إذا لم تُنفذ الوصفة السابقة مباشرة. كما يُعطل تنفيذ هذه الوصفة أي وصفات تالية مباشرة تحمل العلم 'E'. يتيح لك هذا تحديد إجراءات `else if' (وإلا إذا).
لا تُنفذ هذه الوصفة إلا إذا فشلت الوصفة السابقة مباشرة (أي، حُولت تجربة سطر الإجراء، ولكن نتج عنها خطأ).
تغذية الترويسة إلى الأنبوب (pipe)، أو الملف، أو وجهة البريد (مبدئي).
تغذية المتن إلى الأنبوب (pipe)، أو الملف، أو وجهة البريد (مبدئي).
اعتبار الأنبوب كمرشح.
توليد نسخة كربونية من هذا البريد. هذا منطقي فقط في وصفات التسليم. الوصفة الوحيدة غير المخصصة للتسليم التي يكون لهذا العلم تأثير عليها هي كتلة التداخل، حيث سيقوم هذا لغرض توليد نسخة كربونية بـ استنساخ عملية procmail الجارية (لن تُورث ملفات القفل)، وبموجبه سيتابع المستنسخ كالمعتاد بينما سيقفز الأصل فوق الكتلة.
انتظار انتهاء المرشح أو البرنامج والتحقق من كود الخروج الخاص به (يُتجاهل عادةً)؛ إذا كان المرشح غير ناجح، فلن يكون النص قد رُشح.
له نفس معنى العلم `w'، لكنه سيقمع أي رسالة `Program failure' (فشل البرنامج).
تجاهل أي أخطاء كتابة في هذه الوصفة (أي، عادةً بسبب أنبوب مغلق مبكراً).
الوضع الخام، لا تحاول ضمان انتهاء البريد بسطر فارغ، بل اكتبه كما هو.

هناك بعض الشروط الخاصة التي يمكنك استخدامها والتي ليست تعبيرات نمطية مباشرة. لاختيارها، يجب أن يبدأ الشرط بـ:

!
عكس الشرط.
$
تقييم بقية هذا الشرط وفقاً لقواعد استبدال sh(1) داخل علامات اقتباس مزدوجة، وتخطي المسافات البيضاء في البداية، ثم إعادة تحليله.
?
استخدام كود الخروج الخاص بالبرنامج المحدد.
<
التحقق مما إذا كان الطول الإجمالي للبريد أقصر من عدد البايتات المحدد (بالنظام العشري).
>
مشابه لـ '<'.
مطابقة بقية هذا الشرط مقابل قيمة متغير البيئة هذا (الذي لا يمكن أن يكون متغيراً زائفاً). حالة خاصة هي إذا كان اسم المتغير يساوي `B'، أو `H'، أو `HB'، أو `BH'؛ هذا يتجاوز ببساطة منطقة البحث المبدئية في الترويسة/المتن المحددة بواسطة الأعلام الأولية في هذه الوصفة.
\
لاقتباس أي مما سبق في بداية السطر.

ملف قفل محلي

إذا وضعت ':' ثانية (لاحقة) في سطر الوصفة الأول، فسيستخدم procmail ملف قفل محلي (locallockfile) (لهذه الوصفة فقط). يمكنك اختيارياً تحديد ملف القفل المحلي المراد استخدامه؛ إذا لم تفعل ذلك، فسيستخدم procmail اسم ملف الوجهة (أو اسم الملف الذي يلي '>>' الأولى) ويُلحق به $LOCKEXT.

سطر إجراء الوصفة

يمكن أن يبدأ سطر الإجراء بالأحرف التالية:

!
إعادة التوجيه إلى جميع عناوين البريد المحددة.
|
يبدأ البرنامج المحدد، ربما في $SHELL إذا تم رصد أي من أحرف $SHELLMETAS. يمكنك اختيارياً إلحاق بادئة برمز الأنبوب هذا بـ variable=، مما سيؤدي إلى التقاط المخرج القياسي (stdout) للبرنامج في متغير البيئة (لن يُنهي procmail معالجة ملف rcfile في هذه النقطة). إذا حددت رمز الأنبوب هذا فقط، بدون أي برنامج، فسيقوم procmail بتوجيه البريد إلى المخرج القياسي.
{
المتبوع بمسافة واحدة على الأقل، أو علامة جدولة أو سطر جديد سيمثل بداية كتلة متداخلة. سيعتمد كل شيء حتى قوس الإغلاق التالي على الشروط المحددة لهذه الوصفة. يُسمح بالتداخل غير المحدود. يوجد قوس الإغلاق فقط لترسيم الكتلة، ولن يتسبب في إنهاء procmail بأي شكل من الأشكال. إذا تم الوصول إلى نهاية الكتلة، فستستمر المعالجة كالمعتاد بعد الكتلة. في الكتلة المتداخلة، تؤثر الأعلام `H' و `B' فقط على الشروط المؤدية إلى الكتلة، ولا يكون للأعلام `h' و `b' أي تأثير على الإطلاق.

سيُؤخذ أي شيء آخر كاسم صندوق بريد (إما اسم ملف أو دليل، مطلق أو نسبي إلى الدليل الحالي (انظر MAILDIR)). إذا كان اسم ملف (قد لا يكون موجوداً بعد)، فسيُلحق البريد به.

إذا كان دليلاً، فسيُسلّم البريد إلى ملف مُنشأ حديثاً، ومضمون أن يكون فريداً باسمه $MSGPREFIX* في الدليل المحدد. إذا انتهى اسم صندوق البريد بـ "/."، فمن المفترض أن هذا الدليل مجلد MH؛ أي سيستخدم procmail الرقم التالي الذي يجده متاحاً. إذا انتهى اسم صندوق البريد بـ "/"، فمن المفترض أن هذا الدليل مجلد maildir؛ أي سيُسلّم procmail الرسالة إلى ملف في دليل فرعي باسم "tmp" ويعيد تسميته ليكون داخل دليل فرعي باسم "new". إذا حُدّد صندوق البريد ليكون مجلد MH أو مجلد maildir، فسيُنشئ procmail الأدلة اللازمة إذا لم تكن موجودة، بدلاً من التعامل مع صندوق البريد كاسم ملف غير موجود. عند تسليم procmail إلى الأدلة، يمكنك تحديد أدلة متعددة للتسليم إليها (سيقوم procmail بذلك باستخدام الروابط الصلبة).

مباديء متغيرات البيئة

مباديء (المستلم) الخاصة بك
$HOME/bin :/usr/local/bin :/usr/bin :/bin (Except أثناء معالجة ملف /etc/procmailrc، عندما يُضبط إلى `/usr/local/bin :/usr/bin :/bin'.)
& |<>~;?*[
-c
/var/mail/$LOGNAME
(ما لم يُحدد -m، وفي هذه الحالة يكون غير مُعيّن)
$HOME
(ما لم يبدأ اسم أول ملف rcfile فُتح بنجاح بـ `./' أو إذا حُدّد -m، وفي هذه الحالة يكون المبدئي هو `.')
$ORGMAIL
msg.
/usr/sbin/sendmail
-oi
اسم المضيف الحالي
no
(إذا حُدّد rcfile في سطر الأوامر)
3.23pre
.lock

متغيرات البيئة الأخرى الممسوحة أو المضبوطة مسبقاً هي IFS و ENV و PWD.

لأسباب أمنية، عند بدء التشغيل سيمسح procmail جميع متغيرات البيئة التي يُشتبه في تعديلها لسلوك رابط وقت التشغيل.

البيئة

قبل أن تضيع في كثرة متغيرات البيئة، ضع في اعتبارك أن جميعها لها قيم مبدئية معقولة.

الدليل الحالي أثناء تنفيذ procmail (وهذا يعني أن جميع المسارات نسبية إلى $MAILDIR).
ملف صندوق البريد المبدئي (إذا لم يُطلب خلاف ذلك، فسيفرغ procmail البريد في صندوق البريد هذا). سيستخدم procmail آلياً $DEFAULT$LOCKEXT كملف قفل قبل الكتابة في صندوق البريد هذا. لست بحاجة إلى ضبط هذا المتغير، لأنه يشير بالفعل إلى صندوق البريد المبدئي للنظام.
سيحتوي هذا الملف أيضًا على أي رسائل خطأ أو تشخيصية من procmail (عادة لا يوجد :-)) أو أي برامج أخرى يبدأها procmail. إذا لم يُحدد هذا الملف، فسيتم إرسال أي رسائل تشخيصية أو خطأ بالبريد مرة أخرى إلى المرسل. انظر أيضًا LOGABSTRACT.
يمكنك تشغيل التشخيصات الموسعة عن طريق ضبط هذا المتغير على `yes' أو `on'، ولإيقاف تشغيله مرة أخرى اضبطه على `no' أو `off'.
مباشرة قبل خروج procmail، يسجل ملخصاً للرسالة المُسلّمة في $LOGFILE يوضح حقول `From ' و `Subject:' في الترويسة، والمجلد الذي ذهبت إليه في النهاية، وكم كان طول الرسالة (بالبايت). عن طريق ضبط هذا المتغير على `no'، يتم قمع توليد هذا الملخص. إذا ضبطته على `all'، فسيسجل procmail ملخصاً لكل وصفة تسليم ناجحة يعالجها.
أي شيء يُعيّن لهذا المتغير سيُلحق بـ $LOGFILE.
عادةً صندوق البريد الخاص بالنظام (ORiGinal MAILbox). إذا تعذر تسليم البريد لسبب غامض (مثل `filesystem full')، فسيكون صندوق البريد هذا هو الملاذ الأخير. إذا فشل procmail في حفظ البريد هنا (مشكلة عميقة، عميقة :-)، فسيرتد البريد مرة أخرى إلى المرسل.
ملف إشارة عالمي (Semaphore). إذا كان هذا الملف موجوداً بالفعل، فسينتظر procmail حتى يزول قبل المتابعة، وسينشئه بنفسه (مع تنظيفه عند الجاهزية، بالطبع). إذا حُدّد أكثر من lockfile واحد، فسيُزال السابق قبل محاولة إنشاء الجديد. يُثبّط استخدام ملف قفل عالمي، واستخدم بدلاً منه ملفات القفل المحلية (locallockfiles) كلما أمكن ذلك (على أساس كل وصفة).
الامتداد المبدئي الذي يُلحق بملف الوجهة لتحديد ملف القفل (lockfile) المحلي المراد استخدامه (فقط إذا كان قيد التشغيل، على أساس كل وصفة).
عدد الثواني التي سينامها procmail قبل إعادة المحاولة على ملف القفل (lockfile) (إذا كان موجوداً بالفعل)؛ إذا لم يُحدد، فإنه يُضبط مبدئياً على 8 ثوانٍ.
عدد الثواني التي يجب أن تكون قد مرت منذ آخر تعديل/إنشاء لملف قفل (lockfile) قبل أن يقرر procmail أن هذا يجب أن يكون ملف قفل متبقٍ بشكل خاطئ ويمكن إزالته بالقوة الآن. إذا كان صفراً، فلن تُستخدم مهلة وسينتظر procmail إلى الأبد حتى يُزال ملف القفل؛ إذا لم يُحدد، فإنه يُضبط مبدئياً على 1024 ثانية. هذا المتغير مفيد لمنع تعليق sendmail/procmail لأجل غير مسمى. procmail محصن ضد انحراف الساعة عبر الحواسيب.
عدد الثواني التي يجب أن تكون قد مرت قبل أن يقرر procmail أن بعض العمليات الابنة التي بدأها يجب أن تكون معلقة. سيتلقى البرنامج المسبب للمشكلة إشارة إنهاء (TERMINATE) من procmail، وستستمر معالجة rcfile. إذا كان صفراً، فلن تُستخدم مهلة وسينتظر procmail إلى الأبد حتى تنتهي العملية الابنة؛ إذا لم يُحدد، فإنه يُضبط مبدئياً على 960 ثانية.
بادئة اسم الملف التي تُستخدم عند التسليم إلى دليل (لا تُستخدم عند التسليم إلى maildir أو دليل MH).
إذا لم يكن هذا هو اسم مضيف الحاسوب، فستتوقف معالجة rcfile الحالي فوراً. إذا حُدّدت ملفات rcfile أخرى في سطر الأوامر، فستستمر المعالجة مع الملف التالي. إذا استُنفدت جميع ملفات rcfile، سينتهي البرنامج، لكنه لن يولد خطأ (أي، بالنسبة لمُرسل البريد، سيبدو أن البريد قد سُلّم).
الاسم يغني عن التعريف (إذا لم يكن كذلك، فانسَ أمر هذا :-). أي شيء يُعيّن لـ UMASK يُؤخذ كرقم ثماني. إذا لم يُحدد، فإن umask يُضبط مبدئياً على 077. إذا سمح umask بـ o+x، فستتلقى جميع صناديق البريد التي يُسلّم إليها procmail مباشرةً تغييراً في نمط o+x. يمكن استخدام هذا للتحقق مما إذا كان قد وصل بريد جديد.
إذا ظهر أي من الأحرف في SHELLMETAS في السطر الذي يحدد مرشحاً أو برنامجاً، فسيُلقّم السطر إلى $SHELL بدلاً من تنفيذه مباشرةً.
أي استدعاء لـ $SHELL سيكون مثل:
"$SHELL" "$SHELLFLAGS" "$*";
إذا كنت لا تستخدم مرفق إعادة التوجيه فلا تقلق بشأن هذا. إنه يحدد البرنامج الذي يُستدعى لإعادة توجيه أي بريد.
يُستدعى كـ: "$SENDMAIL" $SENDMAILFLAGS "$@"؛
عدد محاولات الإعادة التي ستُجرى إذا حدث خطأ `process table full' (جدول العمليات ممتلئ)، أو `file table full' (جدول الملفات ممتلئ)، أو `out of memory' (نفاد الذاكرة)، أو `out of swap space' (نفاد مساحة المبادلة). إذا كان هذا العدد سالبًا، فسيُعيد procmail المحاولة إلى ما لا نهاية؛ إذا لم يُحدد، فسيُضبط مبدئيًا على 4 مرات. تحدث المحاولات بفاصل زمني مقداره $SUSPEND ثانية. الفكرة من وراء ذلك هي أنه إذا نَفدت مثلاً مساحة swap (المبادلة) أو امتلأ process table (جدول العمليات)، فعادة ما ستكتشف برامج أخرى كثيرة هذا أيضًا وتتوقف أو تنهار 8-)، مما يحرر resources (موارد) قيمة لـ procmail.
عدد الثواني التي سيتوقف فيها procmail مؤقتًا إذا اضطر للانتظار لشيء غير متاح حاليًا (ذاكرة، تفرع fork، إلخ)؛ إذا لم يُحدد، فسيُضبط مبدئيًا على 16 ثانية. انظر أيضًا: LOCKSLEEP.
طول مخازن الأسطر المؤقتة الداخلية، لا يمكن ضبطه على قيمة أصغر من 128. يجب ألا تتجاوز جميع الأسطر المقروءة من rcfile عدد $LINEBUF من المحارف قبل وبعد التوسع. إذا لم يُحدد، فسيُضبط مبدئيًا على 2048. هذا الحد، بالطبع، لا ينطبق على البريد نفسه، الذي يمكن أن يحتوي على أطوال أسطر اختيارية، أو قد يكون ملفًا ثنائيًا لهذا الغرض. انظر أيضًا PROCMAIL_OVERFLOW.
إذا ضُبط على `yes'، فسيُتظاهر procmail (أمام وكيل البريد) بأنه قد تم تسليم البريد. إذا تعذر تسليم البريد بعد استيفاء هذا التعيين (الضبط على `yes')، فسيُفقد البريد (أي لن يُعاد توجيهه bounce).
عندما ينهي procmail عمله من تلقاء نفسه وليس بسبب تلقيه إشارة، فسينفذ محتوى هذا المتغير. يمكن قراءة نسخة من البريد من stdin. أي مخرجات ينتجها هذا الأمر ستُلحق بـ $LOGFILE. الاستخدامات الممكنة لـ TRAP هي: إزالة الملفات المؤقتة، تسجيل ملخصات مخصصة، إلخ. انظر أيضًا EXITCODE و LOGABSTRACT.
مبدئيًا، يُرجع procmail رمز خروج صفريًا (نجاح) إذا سَلَّم الرسالة بنجاح أو إذا ضُبط متغير HOST بشكل خاطئ ولم تكن هناك المزيد من ملفات rcfiles على سطر الأوامر؛ بخلاف ذلك يُرجع رمز فشل. قبل القيام بذلك، يفحص procmail قيمة هذا المتغير. إذا ضُبط على قيمة عددية موجبة، فسيستخدم procmail هذه القيمة بدلاً من ذلك كرمز خروجه. إذا كان هذا المتغير مضبوطًا ولكنه فارغ وكان TRAP مضبوطًا، فسيضبط procmail رمز الخروج على أي قيمة يُرجعها برنامج TRAP. إذا لم يُضبط هذا المتغير، فسيضبطه procmail قبل وقت قصير من استدعاء برنامج TRAP.
يُسند procmail قيمة لهذا المتغير كلما سَلَّم إلى مجلد أو برنامج. يحتوي دائمًا على اسم آخر ملف (أو برنامج) سَلَّم إليه procmail. إذا كان التسليم الأخير إلى عدة مجلدات دليلية معًا، فسيحتوي $LASTFOLDER على أسماء الملفات المرتبطة ارتباطًا صلبًا (hardlinked) كقائمة مفصولة بمسافات.
يُسند procmail قيمة لهذا المتغير كلما أُمِر باستخراج نص من تعبير نمطي مطابق. سيحتوي على كل النصوص المطابقة للتعبير النمطي بعد الرمز `\/'.
إسناد قيمة موجبة لهذا المتغير له نفس تأثير أمر `shift' في sh(1). هذا الأمر مفيد جدا لاستخراج وسائط إضافية مُمررة إلى procmail عند عمله كمرشح بريد عام.
يُسمي ملف rcfile (نسبي إلى المجلد الحالي) سيُدرج هنا كما لو كان جزءًا من ملف rcfile الحالي. التداخل مسموح به ومحدود فقط بموارد النظام (الذاكرة وموصوفات الملفات). نظرًا لعدم إجراء أي فحص على أذونات أو ملكية ملف rcfile، يجب على مستخدمي INCLUDERC التأكد من أن المستخدمين الموثوقين فقط لديهم حق الوصول للكتابة إلى ملف rcfile المُدرج أو المجلد الموجود فيه. لا يكون لتعيينات سطر الأوامر لـ INCLUDERC أي تأثير.
يُسمي ملف rcfile (نسبي إلى المجلد الحالي) الذي سيتحول إليه المعالجة. إذا كان ملف rcfile المُسمى غير موجود أو لم يكن ملفًا عاديًا أو /dev/null، فسيُسجل خطأ وستستمر المعالجة في ملف rcfile الحالي. بخلاف ذلك، ستُجهض معالجة ملف rcfile الحالي ويُبدأ بملف rcfile المُسمى. إلغاء ضبط SWITCHRC يُجهض معالجة ملف rcfile الحالي كما لو كان قد انتهى عند التعيين. كما هو الحال مع INCLUDERC، لا يتم إجراء أي فحص على أذونات أو ملكية ملف rcfile ولا يكون لتعيينات سطر الأوامر أي تأثير.
رقم إصدارة ملف procmail الثنائي قيد التشغيل.
سيُضبط هذا المتغير على قيمة غير فارغة إذا اكتشف procmail فيض مخزن مؤقت. انظر قسم BUGS أدناه للحصول على تفاصيل أخرى حول العملية عند حدوث فيض.
إشعار Comsat(8)/biff(1) مُفعل مبدئيًا، ويمكن إيقافه بضبط هذا المتغير على `no'. بدلاً من ذلك، يمكن تخصيص خدمة biff بضبطها على إما `service@'، أو `@hostname'، أو `service@hostname'. عندما لا يُحدد، فإنه يُضبط مبدئيًا على biff@localhost.
إذا ضُبط على `yes'، فسيُسقط procmail جميع الصلاحيات التي قد يكون امتلكها (suid أو sgid). هذا مفيد فقط إذا كنت تريد ضمان تنفيذ النصف السفلي من ملف /etc/procmailrc نيابة عن المستلم.

تعابير نمطية موسعة

الرموز التالية معروفة لكل من egrep الداخلي الخاص بـ procmail و egrep(1) القياسي (انتبه إلى أن بعض تطبيقات egrep تتضمن امتدادات أخرى غير قياسية؛ وبشكل خاص، عامل التكرار { غير مدعوم بواسطة egrep الخاص بـ procmail):

^
بداية السطر.
$
نهاية السطر.
.
أي محرف باستثناء سطر جديد.
أي تسلسل لصفر أو أكثر من a.
أي تسلسل لواحد أو أكثر من a.
إما صفر أو واحد من a.
[^-a-d]
أي محرف ليس إما شرطة، أو a، أو b، أو c، أو d، أو سطرًا جديدًا.
إما التسلسل `de' أو `abc'.
(abc)*
صفر أو أكثر من مرات التسلسل `abc'.
\.
يطابق نقطة مفردة؛ استخدم \ لاقتباس أي من المحارف السحرية للتخلص من معناها الخاص. انظر أيضًا استبدال المتغير $\.

كانت هذه عينات فقط، بالطبع، أي تركيب أكثر تعقيدًا صالح أيضًا.

معاني الرموز التالية هي امتدادات خاصة لـ procmail:

^ or $
مطابقة سطر جديد (للمطابقات متعددة الأسطر).
^^
تثبيت التعبير في بداية منطقة البحث تمامًا، أو إذا صادفته في نهاية التعبير، ثبته في نهاية منطقة البحث تمامًا.
\< أو \>
مطابقة المحرف قبل أو بعد كلمة. إنها مجرد اختصار لـ `[^a-zA-Z0-9_]'، ولكنها يمكن أن تطابق أيضًا الأسطر الجديدة. نظرًا لأنها تطابق محارف فعلية، فهي مناسبة فقط للفصل بين الكلمات، وليس للفصل بين المساحات التي بين الكلمات.
\/
تقسم التعبير إلى جزأين. كل شيء يطابق الجزء الأيمن سيُسند إلى متغير البيئة MATCH.

أمثلة

انظر في صفحة دليل procmailex(5).

تحذيرات

الأسطر المستمرة في سطر إجراء يحدد برنامجًا يجب أن تنتهي دائمًا بشرطة مائلة عكسية، حتى لو لم تكن الصدفة (shell) الأساسية بحاجة إليها أو لا تريد الشرطة المائلة العكسية للإشارة إلى الاستمرار. يرجع هذا إلى عملية التحليل ثنائية التمرير المطلوبة (أولاً procmail، ثم الصدفة (shell) (أو لا، اعتمادًا على SHELLMETAS)).

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

المسافات البادئة في أسطر شرط التعبير النمطي المستمرة عادة ما تُتجاهل (بحيث يمكن إزاحتها)، ولكن ليس في أسطر الشرط المستمرة التي تُقيم وفقًا لقواعد استبدال sh(1) داخل علامتي اقتباس مزدوجتين.

انتبه من حالات الجمود (deadlocks) عند القيام بأشياء غير سليمة مثل إعادة توجيه البريد إلى حسابك الخاص. يمكن كسر حالات الجمود بالاستخدام الصحيح لـ LOCKTIMEOUT.

أي قيم مبدئية يمتلكها procmail لبعض متغيرات البيئة ستتجاوز دائمًا تلك التي عُرّفت بالفعل. إذا كنت تريد حقًا تجاوز القيم المبدئية، فيجب عليك إما وضعها في rcfile أو على سطر الأوامر كوسائط.

لا يمكن لملف /etc/procmailrc تغيير إعداد PATH الذي تراه ملفات rc الخاصة بالمستخدم، حيث تُعاد تهيئة القيمة عند انتهاء procmail من تنفيذ ملف /etc/procmailrc. وبينما يُتوقع إجراء تحسينات مستقبلية في هذا الجانب، فإن إعادة تجميع procmail بالقيمة المطلوبة هي الحل الصحيح الوحيد حاليًا.

متغيرات البيئة المضبوطة داخل جزء الإجراء المفسَّر بواسطة الصدفة الذي يبدأ بـ `|' في وصفة ما لن تحتفظ بقيمتها بعد انتهاء الوصفة، لأنها تُضبط في صدفة فرعية لـ procmail. لضمان الاحتفاظ بقيمة متغير البيئة، يجب وضع عملية الإسناد للمتغير قبل علامة `|' التي تبدأ الوصفة، حتى يتسنى لها التقاط المخرج المعياري (stdout) للبرنامج.

إذا حددت فقط علامة `h' أو `b' في وصفة تسليم، وتطابقت الوصفة، فسيُفقد جسم الرسالة أو ترويستها (على التوالي) بصمت، ما لم تكن علامة `c' موجودة أيضًا.

انظر أيضًا

procmail(1)، procmailsc(5)، procmailex(5)، sh(1)، csh(1)، mail(1)، mailx(1)، uucp(1)، aliases(5)، sendmail(8)، egrep(1)، regexp(5)، grep(1)، biff(1)، comsat(8)، lockfile(1)، formail(1)

العلل

عمليات التعويض الوحيدة لمتغيرات البيئة التي يمكن لـ procmail التعامل معها هي من النوع $name و ${name} و ${name:-text} و ${name:+text} و ${name-text} و ${name+text} و $\name و $# و $n و $$ و $? و $_ و $- و $=؛ حيث يتم تعويض $\name بالمكافئ لـ $name بعد إبطال مفعول كافة أحرف التعبيرات النمطية السحرية، ويُعوَّض $_ باسم ملف rc الحالي، و $- بـ $LASTFOLDER، بينما سيحتوي $= على درجة الوصفة الأخيرة. علاوة على ذلك، لن يتم تقسيم نتيجة تعويض $\name عند المسافات البيضاء أبدًا. عند استخدام الخيارين -a أو -m، سيتوسع $# إلى عدد الوسائط المحددة بهذه الطريقة، وسيتوسع "$@" (علامات الاقتباس مطلوبة) إلى الوسائط المحددة. مع ذلك، لن يتم توسيع "$@" إلا عند استخدامه في قائمة وسائط برنامج ما، وعندها لن يتم توسيع سوى ظهور واحد فقط.

عمليات توسيع المتغيرات غير المقتبسة التي يُجريها procmail تُقسم دائمًا عند أحرف المسافة، والجدولة (tab)، والسطر الجديد؛ لا يُستخدم متغير IFS داخليًا.

لا يدعم procmail توسيع `~'.

يُستخدم مخزن مؤقت للسطر بطول $LINEBUF عند معالجة rcfile، وأي عمليات توسيع لا تتسع ضمن هذا الحد ستُقتطع وسيُضبط PROCMAIL_OVERFLOW. إذا كان السطر المتجاوز للحد شرطًا أو سطر إجراء، فسيُعتبر فاشلًا وسيستمر procmail في المعالجة. أما إذا كان سطر إسناد متغير أو سطر بدء وصفة، فسيقوم procmail بإنهاء معالجة ملف rc بالكامل.

إذا كان لملف القفل العام مسار نسبي، ولم يكن الدليل الحالي هو نفسه وقت إنشاء ملف القفل العام، فلن يُحذف ملف القفل العام إذا خرج procmail عند تلك النقطة (الحل: استخدم مسارات مطلقة لتحديد ملفات القفل العامة).

إذا كان لملف rc مسار نسبي، وعند فتح ملف rc لأول مرة كان MAILDIR يحتوي على مسار نسبي، وإذا أُمر procmail في مرحلة ما باستنساخ نفسه وتغير الدليل الحالي منذ فتح ملف rc، فلن يتمكن procmail من استنساخ نفسه (الحل: استخدم مسارًا مطلقًا للإشارة إلى ملف rc أو تأكد من أن MAILDIR يحتوي على مسار مطلق عند فتح ملف rc).

لا يعمل ملف القفل المحلي (locallockfile) في الوصفة التي تُمثّل بداية كتلة متداخلة غير متفرعة (non-forking) كما هو متوقع.

عند التقاط المخرج المعياري (stdout) من وصفة ما ووضعه في متغير بيئة، سيُحذف سطر جديد واحد فقط من النهاية.

بعض التعبيرات النمطية غير المثالية وغير الواضحة تضبط MATCH على قيمة غير صحيحة. يمكن جعل التعبير النمطي يعمل عن طريق إزالة واحد أو أكثر من معاملات '*' أو '+' أو '?' غير الضرورية الموجودة على الجانب الأيسر من الرمز \/.

متنوعات

إذا احتوى التعبير النمطي على `^TO_' فسيتم تعويضه بـ `(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope |Apparently(-Resent)?)-To) :(.*[^-a-zA-Z0-9_.])?)', which should catch all destination specifications containing a specific address.

إذا احتوى التعبير النمطي على `^TO' فسيتم تعويضه بـ `(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope |Apparently(-Resent)?)-To) :(.*[^a-zA-Z])?)', which should catch all destination specifications containing a specific word.

إذا احتوى التعبير النمطي على `^FROM_DAEMON' فسيتم تعويضه بـ `(^(Mailing-List : |Precedence :.*(junk |bulk |list) |To : Multiple recipients of |(((Resent-)?(From |Sender) |X-Envelope-From) : |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma?(st(e?r)? |n) |office) |(send)?Mail(er)? |daemon |m(mdf |ajordomo) |n?uucp |LIST(SERV |proc) |NETSERV |o(wner |ps) |r(e(quest |sponse) |oot) |b(ounce |bs\.smtp) |echo |mirror |s(erv(ices? |er) |mtp(error)? |ystem) |A(dmin(istrator)? |MMGR |utoanswer))(([^).! :a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>] |$)))', which should catch mails coming from most daemons (how's that for a regular expression :-).

إذا احتوى التعبير النمطي على `^FROM_MAILER' فسيتم تعويضه بـ `(^(((Resent-)?(From |Sender) |X-Envelope-From) : |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma(st(er)? |n) |office) |(send)?Mail(er)? |daemon |mmdf |n?uucp |ops |r(esponse |oot) |(bbs\.)?smtp(error)? |s(erv(ices? |er) |ystem) |A(dmin(istrator)? |MMGR))(([^).! :a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>] |$))' (a stripped down version of `^FROM_DAEMON'), which should catch mails coming from most mailer-daemons.

عند إسناد قيم منطقية لمتغيرات مثل VERBOSE أو DELIVERED أو COMSAT، يقبل procmail كقيمة صحيحة (true) أي سلسلة نصية تبدأ بـ: قيمة غير صفرية، أو `on'، أو `y'، أو `t'، أو `e'. والقيمة الخاطئة (false) هي أي سلسلة تبدأ بـ: قيمة صفرية، أو `off'، أو `n'، أو `f'، أو `d'.

إذا حدد سطر الإجراء في وصفة ما برنامجًا، فسيتم تحويل زوج الشرطة المائلة العكسية-سطر جديد الموجود بمفرده في سطر فارغ بخلاف ذلك إلى سطر جديد.

محرك التعبيرات النمطية المدمج في procmail لا يدعم فئات الأحرف المُسمّاة.

ملاحظات

بما أن المسافات البيضاء البادئة غير المقتبسة تُتجاهل عمومًا في ملف rc، يمكنك إزاحة كل شيء حسب ذوقك.

تُحذف علامة `|' البادئة في سطر الإجراء المخصصة لتحديد برنامج أو مرشح (filter) قبل التحقق من $SHELLMETAS.

الملفات المُدرجة بواسطة التوجيه INCLUDERC والتي تحتوي فقط على إسنادات متغيرات بيئة يمكن مشاركتها مع sh.

السلوك الحالي للإسنادات على سطر الأوامر لـ INCLUDERC و SWITCHRC غير مضمون، وقد تغير مرة بالفعل، وقد يتغير مجددًا أو يُزال في الإصدارات المستقبلية.

للمعالجة المعقدة بشكل حقيقي، يمكنك حتى التفكير في استدعاء procmail بشكل تكراري.

في الأيام الخوالي، كان يجب تغيير `:0' التي تمثل بداية الوصفة إلى `:n'، حيث تشير `n' إلى عدد الشروط التي تليها.

المؤلفون

ستيفن ر. فان دن بيرج

<srb@cuci.nl>

Philip A. Guenther

<guenther@sendmail.com>

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.

2001/08/04 BuGless