- unstable 4.31.0-1
| 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)؛ إذا لم توجد شروط، ستكون النتيجة صائبة مبدئياً.
يمكن أن
تكون
الأعلام
أيّاً مما
يلي:
- H
- استخدام egrep
على
الترويسة
(مبدئي).
- B
- استخدام egrep
على المتن.
- D
- إخبار egrep
الداخلي
بالتمييز
بين الأحرف
الكبيرة
والصغيرة
(خلافاً
للمبدئي
الذي
يتجاهل
حالة
الأحرف).
- A
- لن تُنفذ
هذه الوصفة
ما لم تطابق
شروط آخر
وصفة سابقة
(على مستوى
تداخل
الكتل
الحالي)
بدون العلم
`A' أو `a' أيضًا.
يتيح لك هذا
ربط
الإجراءات
التي تعتمد
على شرط
مشترك.
- a
- له نفس معنى
العلم `A'، مع
شرط إضافي
هو أن تكون
الوصفة
السابقة
مباشرة قد
أُكملت
بنجاح قبل
تنفيذ هذه
الوصفة.
- E
- لا تُنفذ
هذه الوصفة
إلا إذا لم
تُنفذ
الوصفة
السابقة
مباشرة. كما
يُعطل
تنفيذ هذه
الوصفة أي
وصفات
تالية
مباشرة
تحمل العلم
'E'. يتيح لك
هذا تحديد
إجراءات `else if'
(وإلا إذا).
- e
- لا تُنفذ
هذه الوصفة
إلا إذا
فشلت
الوصفة
السابقة
مباشرة (أي،
حُولت
تجربة سطر
الإجراء،
ولكن نتج
عنها خطأ).
- h
- تغذية
الترويسة
إلى
الأنبوب (pipe)،
أو الملف،
أو وجهة
البريد
(مبدئي).
- b
- تغذية
المتن إلى
الأنبوب (pipe)،
أو الملف،
أو وجهة
البريد
(مبدئي).
- f
- اعتبار
الأنبوب
كمرشح.
- c
- توليد
نسخة
كربونية
من هذا
البريد. هذا
منطقي فقط
في وصفات
التسليم.
الوصفة
الوحيدة
غير
المخصصة
للتسليم
التي يكون
لهذا العلم
تأثير
عليها هي
كتلة
التداخل،
حيث سيقوم
هذا لغرض
توليد نسخة
كربونية بـ
استنساخ
عملية procmail
الجارية (لن
تُورث
ملفات
القفل)،
وبموجبه
سيتابع
المستنسخ
كالمعتاد
بينما
سيقفز
الأصل فوق
الكتلة.
- w
- انتظار
انتهاء
المرشح أو
البرنامج
والتحقق من
كود الخروج
الخاص به
(يُتجاهل
عادةً)؛ إذا
كان المرشح
غير ناجح،
فلن يكون
النص قد
رُشح.
- W
- له نفس معنى
العلم `w'،
لكنه سيقمع
أي رسالة `Program
failure' (فشل
البرنامج).
- i
- تجاهل أي
أخطاء
كتابة في
هذه الوصفة
(أي، عادةً
بسبب أنبوب
مغلق
مبكراً).
- r
- الوضع الخام، لا تحاول ضمان انتهاء البريد بسطر فارغ، بل اكتبه كما هو.
هناك بعض
الشروط
الخاصة
التي يمكنك
استخدامها
والتي ليست
تعبيرات
نمطية
مباشرة.
لاختيارها،
يجب أن يبدأ
الشرط بـ:
- !
- عكس الشرط.
- $
- تقييم بقية
هذا الشرط
وفقاً
لقواعد
استبدال sh(1)
داخل
علامات
اقتباس
مزدوجة،
وتخطي
المسافات
البيضاء في
البداية،
ثم إعادة
تحليله.
- ?
- استخدام
كود الخروج
الخاص
بالبرنامج
المحدد.
- <
- التحقق مما
إذا كان
الطول
الإجمالي
للبريد
أقصر من عدد
البايتات
المحدد
(بالنظام
العشري).
- >
- مشابه لـ '<'.
- variablename ??
- مطابقة
بقية هذا
الشرط
مقابل قيمة
متغير
البيئة هذا
(الذي لا
يمكن أن
يكون
متغيراً
زائفاً).
حالة خاصة
هي إذا كان
اسم
المتغير
يساوي `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
بذلك
باستخدام
الروابط
الصلبة).
مباديء متغيرات البيئة¶
- LOGNAME, HOME و SHELL
- مباديء
(المستلم)
الخاصة بك
- PATH
- $HOME/bin :/usr/local/bin :/usr/bin :/bin (Except
أثناء
معالجة ملف
/etc/procmailrc، عندما
يُضبط إلى
`/usr/local/bin :/usr/bin :/bin'.)
- SHELLMETAS
- & |<>~;?*[
- SHELLFLAGS
- -c
- ORGMAIL
- /var/mail/$LOGNAME
(ما لم يُحدد -m، وفي هذه الحالة يكون غير مُعيّن)
- MAILDIR
- $HOME
(ما لم يبدأ اسم أول ملف rcfile فُتح بنجاح بـ `./' أو إذا حُدّد -m، وفي هذه الحالة يكون المبدئي هو `.')
- DEFAULT
- $ORGMAIL
- MSGPREFIX
- msg.
- SENDMAIL
- /usr/sbin/sendmail
- SENDMAILFLAGS
- -oi
- HOST
- اسم المضيف
الحالي
- COMSAT
- no
(إذا حُدّد rcfile في سطر الأوامر)
- PROCMAIL_VERSION
- 3.23pre
- LOCKEXT
- .lock
متغيرات البيئة الأخرى الممسوحة أو المضبوطة مسبقاً هي IFS و ENV و PWD.
لأسباب
أمنية، عند
بدء
التشغيل
سيمسح procmail
جميع
متغيرات
البيئة
التي
يُشتبه في
تعديلها
لسلوك رابط
وقت
التشغيل.
البيئة¶
قبل أن
تضيع في
كثرة
متغيرات
البيئة، ضع
في اعتبارك
أن جميعها
لها قيم
مبدئية
معقولة.
- MAILDIR
- الدليل
الحالي
أثناء
تنفيذ procmail
(وهذا يعني
أن جميع
المسارات
نسبية إلى
$MAILDIR).
- DEFAULT
- ملف صندوق
البريد
المبدئي
(إذا لم
يُطلب خلاف
ذلك،
فسيفرغ procmail
البريد في
صندوق
البريد
هذا).
سيستخدم procmail
آلياً $DEFAULT$LOCKEXT
كملف قفل
قبل
الكتابة في
صندوق
البريد هذا.
لست بحاجة
إلى ضبط هذا
المتغير،
لأنه يشير
بالفعل إلى
صندوق
البريد
المبدئي
للنظام.
- LOGFILE
- سيحتوي هذا
الملف
أيضًا على
أي رسائل
خطأ أو
تشخيصية من
procmail (عادة لا
يوجد :-)) أو أي
برامج أخرى
يبدأها procmail.
إذا لم
يُحدد هذا
الملف،
فسيتم
إرسال أي
رسائل
تشخيصية أو
خطأ
بالبريد
مرة أخرى
إلى المرسل.
انظر أيضًا
LOGABSTRACT.
- VERBOSE
- يمكنك
تشغيل
التشخيصات
الموسعة
عن طريق ضبط
هذا
المتغير
على `yes' أو `on'،
ولإيقاف
تشغيله مرة
أخرى اضبطه
على `no' أو `off'.
- LOGABSTRACT
- مباشرة قبل
خروج procmail،
يسجل
ملخصاً
للرسالة
المُسلّمة
في $LOGFILE يوضح
حقول `From ' و `Subject:'
في
الترويسة،
والمجلد
الذي ذهبت
إليه في
النهاية،
وكم كان طول
الرسالة
(بالبايت).
عن طريق ضبط
هذا
المتغير
على `no'، يتم
قمع توليد
هذا الملخص.
إذا ضبطته
على `all'،
فسيسجل procmail
ملخصاً لكل
وصفة
تسليم
ناجحة
يعالجها.
- LOG
- أي شيء
يُعيّن
لهذا
المتغير
سيُلحق بـ
$LOGFILE.
- ORGMAIL
- عادةً
صندوق
البريد
الخاص
بالنظام
(ORiGinal MAILbox). إذا
تعذر تسليم
البريد
لسبب غامض
(مثل `filesystem full')،
فسيكون
صندوق
البريد هذا
هو الملاذ
الأخير. إذا
فشل procmail في
حفظ البريد
هنا (مشكلة
عميقة،
عميقة :-)،
فسيرتد
البريد مرة
أخرى إلى
المرسل.
- LOCKFILE
- ملف إشارة
عالمي (Semaphore).
إذا كان هذا
الملف
موجوداً
بالفعل،
فسينتظر procmail
حتى يزول
قبل
المتابعة،
وسينشئه
بنفسه (مع
تنظيفه عند
الجاهزية،
بالطبع).
إذا حُدّد
أكثر من lockfile
واحد،
فسيُزال
السابق قبل
محاولة
إنشاء
الجديد.
يُثبّط
استخدام
ملف قفل
عالمي،
واستخدم
بدلاً منه
ملفات
القفل
المحلية (locallockfiles)
كلما أمكن
ذلك (على
أساس كل
وصفة).
- LOCKEXT
- الامتداد
المبدئي
الذي يُلحق
بملف
الوجهة
لتحديد ملف
القفل (lockfile)
المحلي
المراد
استخدامه
(فقط إذا
كان قيد
التشغيل،
على أساس كل
وصفة).
- LOCKSLEEP
- عدد
الثواني
التي
سينامها procmail
قبل إعادة
المحاولة
على ملف
القفل (lockfile)
(إذا كان
موجوداً
بالفعل)؛
إذا لم
يُحدد،
فإنه يُضبط
مبدئياً
على 8 ثوانٍ.
- LOCKTIMEOUT
- عدد
الثواني
التي يجب أن
تكون قد مرت
منذ آخر
تعديل/إنشاء
لملف قفل
(lockfile) قبل أن
يقرر procmail أن
هذا يجب أن
يكون ملف
قفل متبقٍ
بشكل خاطئ
ويمكن
إزالته
بالقوة
الآن. إذا
كان صفراً،
فلن
تُستخدم
مهلة
وسينتظر procmail
إلى الأبد
حتى يُزال
ملف القفل؛
إذا لم
يُحدد،
فإنه يُضبط
مبدئياً
على 1024 ثانية.
هذا
المتغير
مفيد لمنع
تعليق sendmail/procmail
لأجل غير
مسمى. procmail
محصن ضد
انحراف
الساعة عبر
الحواسيب.
- TIMEOUT
- عدد
الثواني
التي يجب أن
تكون قد مرت
قبل أن يقرر
procmail أن بعض
العمليات
الابنة
التي بدأها
يجب أن تكون
معلقة.
سيتلقى
البرنامج
المسبب
للمشكلة
إشارة
إنهاء (TERMINATE) من
procmail، وستستمر
معالجة rcfile.
إذا كان
صفراً، فلن
تُستخدم
مهلة
وسينتظر procmail
إلى الأبد
حتى تنتهي
العملية
الابنة؛
إذا لم
يُحدد،
فإنه يُضبط
مبدئياً
على 960 ثانية.
- MSGPREFIX
- بادئة اسم
الملف التي
تُستخدم
عند
التسليم
إلى دليل
(لا تُستخدم
عند
التسليم
إلى maildir أو
دليل MH).
- HOST
- إذا لم يكن
هذا هو اسم
مضيف
الحاسوب،
فستتوقف
معالجة rcfile
الحالي
فوراً. إذا
حُدّدت
ملفات rcfile
أخرى في سطر
الأوامر،
فستستمر
المعالجة
مع الملف
التالي. إذا
استُنفدت
جميع ملفات
rcfile، سينتهي
البرنامج،
لكنه لن
يولد خطأ
(أي،
بالنسبة
لمُرسل
البريد،
سيبدو أن
البريد قد
سُلّم).
- UMASK
- الاسم يغني
عن التعريف
(إذا لم يكن
كذلك،
فانسَ أمر
هذا :-). أي شيء
يُعيّن لـ UMASK
يُؤخذ كرقم
ثماني. إذا
لم يُحدد،
فإن umask يُضبط
مبدئياً
على 077. إذا
سمح umask بـ o+x،
فستتلقى
جميع
صناديق
البريد
التي
يُسلّم
إليها procmail
مباشرةً
تغييراً في
نمط o+x. يمكن
استخدام
هذا للتحقق
مما إذا كان
قد وصل بريد
جديد.
- SHELLMETAS
- إذا ظهر أي
من الأحرف
في SHELLMETAS في
السطر الذي
يحدد
مرشحاً أو
برنامجاً،
فسيُلقّم
السطر إلى $SHELL
بدلاً من
تنفيذه
مباشرةً.
- SHELLFLAGS
- أي استدعاء
لـ $SHELL سيكون
مثل:
"$SHELL" "$SHELLFLAGS" "$*";
- SENDMAIL
- إذا كنت لا
تستخدم
مرفق
إعادة
التوجيه
فلا تقلق
بشأن هذا.
إنه يحدد
البرنامج
الذي
يُستدعى
لإعادة
توجيه أي
بريد.
يُستدعى كـ: "$SENDMAIL" $SENDMAILFLAGS "$@"؛
- NORESRETRY
- عدد
محاولات
الإعادة
التي
ستُجرى إذا
حدث خطأ `process table
full' (جدول
العمليات
ممتلئ)، أو
`file table full' (جدول
الملفات
ممتلئ)، أو `out
of memory' (نفاد
الذاكرة)،
أو `out of swap space'
(نفاد مساحة
المبادلة).
إذا كان هذا
العدد
سالبًا،
فسيُعيد procmail
المحاولة
إلى ما لا
نهاية؛ إذا
لم يُحدد،
فسيُضبط
مبدئيًا
على 4 مرات.
تحدث
المحاولات
بفاصل زمني
مقداره $SUSPEND
ثانية.
الفكرة من
وراء ذلك هي
أنه إذا
نَفدت
مثلاً
مساحة swap
(المبادلة)
أو امتلأ process
table (جدول
العمليات)،
فعادة ما
ستكتشف
برامج أخرى
كثيرة هذا
أيضًا
وتتوقف أو
تنهار 8-)،
مما يحرر resources
(موارد)
قيمة لـ procmail.
- SUSPEND
- عدد
الثواني
التي
سيتوقف
فيها procmail
مؤقتًا إذا
اضطر
للانتظار
لشيء غير
متاح
حاليًا
(ذاكرة،
تفرع fork،
إلخ)؛ إذا
لم يُحدد،
فسيُضبط
مبدئيًا
على 16 ثانية.
انظر أيضًا:
LOCKSLEEP.
- LINEBUF
- طول مخازن
الأسطر
المؤقتة
الداخلية،
لا يمكن
ضبطه على
قيمة أصغر
من 128. يجب ألا
تتجاوز
جميع
الأسطر
المقروءة
من rcfile عدد $LINEBUF
من المحارف
قبل وبعد
التوسع. إذا
لم يُحدد،
فسيُضبط
مبدئيًا
على 2048. هذا
الحد،
بالطبع،
لا ينطبق
على البريد
نفسه، الذي
يمكن أن
يحتوي على
أطوال أسطر
اختيارية،
أو قد يكون
ملفًا
ثنائيًا
لهذا الغرض.
انظر أيضًا
PROCMAIL_OVERFLOW.
- DELIVERED
- إذا ضُبط
على `yes'،
فسيُتظاهر
procmail (أمام
وكيل
البريد)
بأنه قد تم
تسليم
البريد. إذا
تعذر تسليم
البريد بعد
استيفاء
هذا
التعيين
(الضبط على
`yes')، فسيُفقد
البريد (أي
لن يُعاد
توجيهه bounce).
- TRAP
- عندما ينهي
procmail عمله من
تلقاء نفسه
وليس بسبب
تلقيه
إشارة،
فسينفذ
محتوى هذا
المتغير.
يمكن قراءة
نسخة من
البريد من stdin.
أي مخرجات
ينتجها هذا
الأمر
ستُلحق بـ
$LOGFILE.
الاستخدامات
الممكنة لـ
TRAP هي: إزالة
الملفات
المؤقتة،
تسجيل
ملخصات
مخصصة، إلخ.
انظر أيضًا
EXITCODE و LOGABSTRACT.
- EXITCODE
- مبدئيًا،
يُرجع procmail رمز
خروج
صفريًا
(نجاح) إذا
سَلَّم
الرسالة
بنجاح أو
إذا ضُبط
متغير HOST
بشكل خاطئ
ولم تكن
هناك
المزيد من
ملفات rcfiles على
سطر
الأوامر؛
بخلاف ذلك
يُرجع رمز
فشل. قبل
القيام
بذلك، يفحص
procmail قيمة هذا
المتغير.
إذا ضُبط
على قيمة
عددية
موجبة،
فسيستخدم procmail
هذه القيمة
بدلاً من
ذلك كرمز
خروجه. إذا
كان هذا
المتغير
مضبوطًا
ولكنه فارغ
وكان TRAP
مضبوطًا،
فسيضبط procmail
رمز الخروج
على أي قيمة
يُرجعها
برنامج TRAP.
إذا لم
يُضبط هذا
المتغير،
فسيضبطه procmail
قبل وقت
قصير من
استدعاء
برنامج TRAP.
- LASTFOLDER
- يُسند procmail
قيمة لهذا
المتغير
كلما
سَلَّم إلى
مجلد أو
برنامج.
يحتوي
دائمًا على
اسم آخر ملف
(أو برنامج)
سَلَّم
إليه procmail. إذا
كان
التسليم
الأخير إلى
عدة مجلدات
دليلية
معًا،
فسيحتوي $LASTFOLDER
على أسماء
الملفات
المرتبطة
ارتباطًا
صلبًا (hardlinked)
كقائمة
مفصولة
بمسافات.
- MATCH
- يُسند procmail
قيمة لهذا
المتغير
كلما أُمِر
باستخراج
نص من تعبير
نمطي مطابق.
سيحتوي على
كل النصوص
المطابقة
للتعبير
النمطي بعد
الرمز `\/'.
- SHIFT
- إسناد قيمة
موجبة لهذا
المتغير له
نفس تأثير
أمر `shift' في sh(1).
هذا الأمر
مفيد جدا
لاستخراج
وسائط
إضافية
مُمررة إلى
procmail عند عمله
كمرشح بريد
عام.
- INCLUDERC
- يُسمي ملف rcfile
(نسبي إلى
المجلد
الحالي)
سيُدرج هنا
كما لو كان
جزءًا من
ملف rcfile
الحالي.
التداخل
مسموح به
ومحدود فقط
بموارد
النظام
(الذاكرة
وموصوفات
الملفات).
نظرًا لعدم
إجراء أي
فحص على
أذونات أو
ملكية ملف
rcfile، يجب على
مستخدمي INCLUDERC
التأكد من
أن
المستخدمين
الموثوقين
فقط لديهم
حق الوصول
للكتابة
إلى ملف rcfile
المُدرج أو
المجلد
الموجود
فيه. لا
يكون
لتعيينات
سطر
الأوامر لـ
INCLUDERC أي
تأثير.
- SWITCHRC
- يُسمي ملف rcfile
(نسبي إلى
المجلد
الحالي)
الذي
سيتحول
إليه
المعالجة.
إذا كان ملف
rcfile المُسمى
غير موجود
أو لم يكن
ملفًا
عاديًا أو
/dev/null، فسيُسجل
خطأ
وستستمر
المعالجة
في ملف rcfile
الحالي.
بخلاف ذلك،
ستُجهض
معالجة ملف
rcfile الحالي
ويُبدأ
بملف rcfile
المُسمى.
إلغاء ضبط
SWITCHRC يُجهض
معالجة ملف
rcfile الحالي
كما لو كان
قد انتهى
عند
التعيين.
كما هو
الحال مع
INCLUDERC، لا يتم
إجراء أي
فحص على
أذونات أو
ملكية ملف rcfile
ولا يكون
لتعيينات
سطر
الأوامر أي
تأثير.
- PROCMAIL_VERSION
- رقم إصدارة
ملف procmail
الثنائي
قيد
التشغيل.
- PROCMAIL_OVERFLOW
- سيُضبط هذا
المتغير
على قيمة
غير فارغة
إذا اكتشف procmail
فيض مخزن
مؤقت. انظر
قسم BUGS
أدناه
للحصول على
تفاصيل
أخرى حول
العملية
عند حدوث
فيض.
- COMSAT
- إشعار Comsat(8)/biff(1)
مُفعل
مبدئيًا،
ويمكن
إيقافه
بضبط هذا
المتغير
على `no'. بدلاً
من ذلك،
يمكن تخصيص
خدمة biff
بضبطها على
إما `service@'، أو
`@hostname'، أو `service@hostname'.
عندما لا
يُحدد،
فإنه يُضبط
مبدئيًا
على biff@localhost.
- DROPPRIVS
- إذا ضُبط
على `yes'،
فسيُسقط procmail
جميع
الصلاحيات
التي قد
يكون
امتلكها (suid
أو sgid). هذا
مفيد فقط
إذا كنت
تريد ضمان
تنفيذ
النصف
السفلي من
ملف /etc/procmailrc
نيابة عن
المستلم.
تعابير نمطية موسعة¶
الرموز
التالية
معروفة لكل
من egrep
الداخلي
الخاص بـ procmail و
egrep(1) القياسي
(انتبه إلى
أن بعض
تطبيقات egrep
تتضمن
امتدادات
أخرى غير
قياسية؛
وبشكل خاص،
عامل
التكرار {
غير مدعوم
بواسطة egrep
الخاص بـ procmail):
- ^
- بداية
السطر.
- $
- نهاية
السطر.
- .
- أي محرف
باستثناء
سطر جديد.
- a*
- أي تسلسل
لصفر أو
أكثر من a.
- a+
- أي تسلسل
لواحد أو
أكثر من a.
- a?
- إما صفر أو
واحد من a.
- [^-a-d]
- أي محرف
ليس إما
شرطة، أو a،
أو b، أو c، أو
d، أو سطرًا
جديدًا.
- de|abc
- إما
التسلسل `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 |