| PIPE(8) | System Manager's Manual | PIPE(8) |
نام (NAME)
pipe - تحویل ایمیل به دستور خارجی در Postfix
خلاصه دستور (SYNOPSIS)
pipe [generic Postfix daemon options] command_attributes...
توضیحات (DESCRIPTION)
دیمن pipe(8) درخواستهای دریافتی از مدیر صف Postfix را پردازش میکند تا پیامها را به دستورات خارجی تحویل دهد. انتظار میرود این برنامه از طریق مدیر فرآیند master(8) اجرا شود.
ویژگیهای پیام از قبیل آدرس فرستنده، آدرس گیرنده و نام میزبان گام بعدی (next-hop) را میتوان به صورت ماکروهای خط فرمان مشخص کرد که پیش از اجرای دستور خارجی بسط مییابند.
دیمن pipe(8) فایلهای صف را بهروزرسانی کرده و گیرندگان را به عنوان پایانیافته علامتگذاری میکند، یا به مدیر صف اطلاع میدهد که تحویل باید در زمان دیگری دوباره امتحان شود. گزارشهای وضعیت تحویل بر حسب مورد به دیمنهای bounce(8)، defer(8) یا trace(8) ارسال میشوند.
تحویل تکگیرنده (SINGLE-RECIPIENT DELIVERY)
برخی از مقصدها نمیتوانند بیش از یک گیرنده را در هر درخواست تحویل پردازش کنند. دستگاههای پیجر یا فکس نمونههایی از این موارد هستند. علاوه بر این، هنگام افزودن سرآیند پیام Delivered-To: یا X-Original-To: به ابتدای پیام، تحویل چندگیرندهای نامطلوب است.
برای جلوگیری از ارسال چند گیرنده در هر درخواست تحویل توسط Postfix، عبارت زیر را مشخص کنید:
transport_destination_recipient_limit = 1
در فایل main.cf مربوط به Postfix، که در آن transport نام موجود در ستون اول ورودی master.cf در Postfix برای ترابری تحویل مبتنی بر pipe است.
نحو ویژگیهای دستور (COMMAND ATTRIBUTE SYNTAX)
ویژگیهای دستور خارجی در فایل master.cf در انتهای تعریف یک سرویس مشخص میشوند. نحو به شرح زیر است:
- chroot=pathname (اختیاری)
- تغییر
دایرکتوری
ریشه (root) و
دایرکتوری
کاری
فرآیند به
دایرکتوری
نامبردهشده.
این عمل پیش
از جابجایی
به مجوزهای
مشخصشده
با ویژگی
user، و پیش از
اجرای
دستورالعمل
اختیاری
directory=pathname رخ
میدهد. در
صورت بروز
خطا، تحویل
به تعویق
میافتد.
این ویژگی در Postfix 2.3 و نسخههای پس از آن در دسترس است.
- directory=pathname (اختیاری)
- تغییر به
دایرکتوری
نامبردهشده
پیش از
اجرای
دستور
خارجی. این
دایرکتوری
باید برای
کاربر
مشخصشده
با ویژگی user
قابل
دسترسی
باشد (زیر
را ببینید).
دایرکتوری
کاری
پیشفرض
$queue_directory است. در
صورت بروز
خطا، تحویل
به تعویق
میافتد.
این ویژگی در Postfix 2.2 و نسخههای پس از آن در دسترس است.
- eol=string (اختیاری، پیشفرض: \n)
- جداکننده رکوردهای خروجی. معمولاً از \r\n یا \n استفاده میشود. توالیهای گریز متداول به سبک زبان C با علامت اسلش وارو (backslash) شناسایی میشوند: \a \b \f \n \r \t \v \ddd (حداکثر تا سه رقم هشتهشتی) و \\.
- flags=BDFORXhqu.> (اختیاری)
- پرچمهای اختیاری پردازش پیام. بهطور پیشفرض، پیام بدون تغییر کپی میشود.
- B
- افزودن یک خط خالی در انتهای هر پیام. این عمل برای برخی از عاملهای کاربر ایمیل (MUA) که خطوط "From " را تنها در صورتی که پیش از آنها خط خالی باشد شناسایی میکنند، الزامی است.
- D
- افزودن
سرآیند
پیام "Delivered-To:
recipient" با
آدرس
گیرنده
پاکت به
ابتدای
پیام. توجه:
برای
کارکرد این
گزینه،
transport_destination_recipient_limit
باید برابر
۱ باشد
(برای
جزئیات،
بخش تحویل
تکگیرنده
را در بالا
ببینید).
پرچم D همچنین تشخیص حلقه را اعمال میکند (Postfix 2.5 و بالاتر): اگر پیامی از قبل حاوی یک سرآیند Delivered-To: با همان آدرس گیرنده باشد، پیام به عنوان غیرقابلتحویل بازگردانده میشود. مقایسه آدرسها به حروف بزرگ و کوچک حساس نیست.
این ویژگی در Postfix 2.0 و نسخههای پس از آن در دسترس است.
- F
- افزودن سرآیند پاکت "From sender time_stamp" به ابتدای محتوای پیام. این مورد برای نمونه توسط نرمافزارهای UUCP انتظار میرود.
- O
- افزودن
سرآیند
پیام "X-Original-To:
recipient" با
آدرس
گیرنده
همانطور
که به Postfix داده
شده به
ابتدای
پیام. توجه:
برای
کارکرد این
گزینه،
transport_destination_recipient_limit
باید برابر
۱ باشد
(برای
جزئیات،
بخش تحویل
تکگیرنده
را در بالا
ببینید).
این ویژگی در Postfix 2.0 و نسخههای پس از آن در دسترس است.
- R
- افزودن سرآیند پیام Return-Path: با آدرس فرستنده پاکت به ابتدای پیام.
- X
- نشان
میدهد که
دستور
خارجی
تحویل
نهایی را
انجام
میدهد. این
پرچم بر
وضعیت
گزارششده
در
پیامهای DSN
(اعلان
وضعیت
تحویل)
مربوط به
موفقیت اثر
میگذارد،
و آن را از
"relayed"
(رلهشده)
به "delivered"
(تحویل
دادهشده)
تغییر
میدهد.
این ویژگی در Postfix 2.5 و نسخههای پس از آن در دسترس است.
- h
- تبدیل بخش دامنه در آدرس خط فرمان $original_recipient و $recipient (متن سمت راست راستترین نویسه @) به حروف کوچک؛ و تبدیل کل اطلاعات میزبان یا دامنه خط فرمان $domain و $nexthop به حروف کوچک. این مورد برای تحویل از طریق UUCP توصیه میشود.
- q
- قرار دادن
فاصلهها و
سایر
نویسههای
خاص در
نقلقول در
بخش محلی (localpart)
آدرسهای
خط فرمان
$sender، $original_recipient و
$recipient (متن سمت
چپ
راستترین
نویسه @)،
مطابق با
نسخه شفاف ۸
بیتی RFC 822. این
مورد برای
تحویل از
طریق UUCP یا BSMTP
توصیه
میشود.
نتیجه با تجزیه آدرس گیرندگان خط فرمان توسط دستور ارسال ایمیل sendmail(1) در Postfix سازگار است.
پرچم q تنها بر کل آدرسها اثر میگذارد، نه اطلاعات ناقص آدرس حاصل از ماکروهای خط فرمان $user، $extension یا $mailbox.
- u
- تبدیل بخش محلی آدرس خط فرمان $original_recipient و $recipient (متن سمت چپ راستترین نویسه @) به حروف کوچک. این مورد برای تحویل از طریق UUCP توصیه میشود.
- .
- افزودن "." به ابتدای خطوطی که با "." شروع میشوند. این مورد برای نمونه توسط نرمافزارهای BSMTP مورد نیاز است.
- >
- افزودن ">" به ابتدای خطوطی که با "From " شروع میشوند. این مورد برای نمونه توسط نرمافزارهای UUCP انتظار میرود.
- null_sender=replacement (پیشفرض: MAILER-DAEMON)
- جایگزین
کردن آدرس
فرستنده
پوچ (null) (که
معمولاً
برای
اعلانهای
وضعیت
تحویل
استفاده
میشود) با
متن
مشخصشده
هنگام بسط
ماکروی خط
فرمان $sender، و
هنگام
تولید
سرآیند
پیام From_ یا Return-Path:.
اگر متن جایگزین فرستنده پوچ یک رشته غیرخالی باشد، تحت تأثیر پرچم q برای نقلقول آدرس در آرگومانهای خط فرمان قرار میگیرد.
متن جایگزین فرستنده پوچ میتواند خالی باشد؛ این حالت برای فیلترهای محتوایی که ایمیل را مجدداً به Postfix بازمیگردانند توصیه میشود. آدرس فرستنده خالی تحت تأثیر پرچم q برای نقلقول آدرس در آرگومانهای خط فرمان قرار نمیگیرد.
هشدار: یک آدرس فرستنده پوچ به سادگی توسط نرمافزارهای ابتدایی دچار خطای تجزیه میشود. به عنوان مثال، هنگامی که دیمن pipe(8) دستوری مانند زیر را اجرا میکند:
نادرست: command -f$sender -- $recipient
- دستور
مقدار
گزینه -f را
زمانی که
آدرس
فرستنده یک
رشته پوچ
باشد به
اشتباه
تجزیه
خواهد کرد.
برای تجزیه
صحیح، $sender را
به عنوان یک
آرگومان
مستقل مشخص
کنید:
درست: command -f $sender -- $recipient
- نکته: اطراف command، $sender یا $recipient علامت نقلقول قرار ندهید.
- این ویژگی در Postfix 2.3 و نسخههای پس از آن در دسترس است.
- size=size_limit (اختیاری)
- پیامهایی که از این حد اندازه (به بایت) فراتر میروند تحویل داده نشوند؛ در عوض به فرستنده بازگردانده شوند.
- user=username (الزامی)
- user=username:groupname
- اجرای دستور خارجی با شناسه کاربر و شناسه گروه مشخصشده با username. این نرمافزار از اجرای دستورات با دسترسیهای root، یا با دسترسیهای مالک سیستم پستی خودداری میکند. اگر groupname مشخص شود، شناسه گروه متناظر به جای شناسه گروه username استفاده میشود.
- argv=command... (الزامی)
- دستوری که
باید اجرا
شود. این
ویژگی باید
به عنوان
آخرین
ویژگی
دستور مشخص
شود. دستور
مستقیماً
اجرا
میشود،
یعنی بدون
تفسیر
نویسههای
متا توسط
مفسر
دستورات
شِل.
در اطراف آرگومانهای دستوری که حاوی فاصله هستند، آرگومانهایی که با "{" شروع میشوند، یا آرگومانهایی که باید یک رشته خالی باشند، "{" و "}" قرار دهید (در Postfix 3.0 و بالاتر). نویسههای خارجی "{" و "}" به همراه هرگونه فاصله ابتدایی یا انتهایی در متن باقیمانده حذف خواهند شد.
در بردار آرگومانهای دستور، ماکروهای زیر شناسایی شده و با اطلاعات متناظر از درخواست تحویل مدیر صف Postfix جایگزین میشوند.
علاوه بر قالب ${name}، قالبهای $name و قالب منسوخشده $(name) نیز شناسایی میشوند. در جایی که یک $ تکی مد نظر است، $$ را مشخص کنید.
- ${client_address}
- این ماکرو
به آدرس
شبکه
کلاینت راه
دور بسط
مییابد.
این ویژگی در Postfix 2.2 و نسخههای پس از آن در دسترس است.
- ${client_helo}
- این ماکرو
به پارامتر
دستور HELO
کلاینت راه
دور بسط
مییابد.
این ویژگی در Postfix 2.2 و نسخههای پس از آن در دسترس است.
- ${client_hostname}
- این ماکرو
به نام
میزبان
کلاینت راه
دور بسط
مییابد.
این ویژگی در Postfix 2.2 و نسخههای پس از آن در دسترس است.
- ${client_port}
- این ماکرو
به شماره
درگاه TCP
کلاینت راه
دور بسط
مییابد.
این ویژگی در Postfix 2.5 و نسخههای پس از آن در دسترس است.
- ${client_protocol}
- این ماکرو
به پروتکل
کلاینت راه
دور بسط
مییابد.
این ویژگی در Postfix 2.2 و نسخههای پس از آن در دسترس است.
- ${domain}
- این ماکرو
به بخش
دامنه آدرس
گیرنده بسط
مییابد. به
عنوان
مثال، در
آدرس user+foo@domain
دامنه
برابر domain
است.
این اطلاعات توسط پرچم h برای تبدیل حروف کوچک و بزرگ تغییر مییابد.
این ویژگی در Postfix 2.5 و نسخههای پس از آن در دسترس است.
- ${envid}
- این ماکرو
در صورت
موجود بودن
به شناسه
پاکت طبق RFC 3461،
و در غیر
این صورت به
یک رشته
خالی بسط
مییابد.
این ویژگی در Postfix 3.9 و نسخههای پس از آن در دسترس است.
- ${extension}
- این ماکرو
به بخش
پسوند آدرس
گیرنده بسط
مییابد. به
عنوان
مثال، در
آدرس user+foo@domain
پسوند
برابر foo
است.
یک آرگومان خط فرمان که حاوی ${extension} باشد به همان تعداد گیرندگان به آرگومانهای خط فرمان بسط مییابد.
این اطلاعات توسط پرچم u برای تبدیل حروف کوچک و بزرگ تغییر مییابد.
- ${mailbox}
- این ماکرو
به کل بخش
محلی یک
آدرس
گیرنده بسط
مییابد. به
عنوان
مثال، در
آدرس user+foo@domain
صندوق پستی
برابر user+foo
است.
یک آرگومان خط فرمان که حاوی ${mailbox} باشد به همان تعداد گیرندگان به آرگومانهای خط فرمان بسط مییابد.
این اطلاعات توسط پرچم u برای تبدیل حروف کوچک و بزرگ تغییر مییابد.
- ${nexthop}
- این ماکرو
به نام
میزبان گام
بعدی (next-hop) بسط
مییابد.
این اطلاعات توسط پرچم h برای تبدیل حروف کوچک و بزرگ تغییر مییابد.
- ${original_recipient}
- این ماکرو
به آدرس
کامل
گیرنده پیش
از هرگونه
بازنویسی
آدرس یا
ایجاد نام
مستعار بسط
مییابد.
یک آرگومان خط فرمان که حاوی ${original_recipient} باشد به همان تعداد گیرندگان به آرگومانهای خط فرمان بسط مییابد.
این اطلاعات توسط پرچمهای hqu برای نقلقول و تبدیل حروف کوچک و بزرگ تغییر مییابد.
این ویژگی در Postfix 2.5 و نسخههای پس از آن در دسترس است.
- ${queue_id}
- این ماکرو
به شناسه صف
بسط
مییابد.
این ویژگی در Postfix 2.11 و نسخههای پس از آن در دسترس است.
- ${recipient}
- این ماکرو
به آدرس
کامل
گیرنده بسط
مییابد.
یک آرگومان خط فرمان که حاوی ${recipient} باشد به همان تعداد گیرندگان به آرگومانهای خط فرمان بسط مییابد.
این اطلاعات توسط پرچمهای hqu برای نقلقول و تبدیل حروف کوچک و بزرگ تغییر مییابد.
- ${sasl_method}
- این ماکرو
به نام
سازوکار
احراز هویت
SASL در دستور AUTH
در زمان
دریافت
پیام توسط
سرور Postfix SMTP بسط
مییابد.
این ویژگی در Postfix 2.2 و نسخههای پس از آن در دسترس است.
- ${sasl_sender}
- این ماکرو
به نام
فرستنده SASL
(یعنی
ارسالکننده
اصلی طبق RFC 4954)
در دستور MAIL FROM
در زمان
دریافت
پیام توسط
سرور Postfix SMTP بسط
مییابد.
این ویژگی در Postfix 2.2 و نسخههای پس از آن در دسترس است.
- ${sasl_username}
- این ماکرو
به نام
کاربری SASL در
دستور AUTH در
زمان
دریافت
پیام توسط
سرور Postfix SMTP بسط
مییابد.
این ویژگی در Postfix 2.2 و نسخههای پس از آن در دسترس است.
- ${sender}
- این ماکرو
به آدرس
فرستنده
پاکت بسط
مییابد.
بهطور
پیشفرض،
آدرس
فرستنده
پوچ به MAILER-DAEMON
بسط
مییابد؛
این مقدار
را میتوان
همانطور
که در بالا
شرح داده شد
با ویژگی
null_sender تغییر
داد.
این اطلاعات توسط پرچم q برای نقلقول تغییر مییابد.
- ${size}
- این ماکرو به برآورد Postfix از اندازه پیام بسط مییابد، که تقریبی از اندازه پیام در هنگام تحویل است.
- ${user}
- این ماکرو
به بخش نام
کاربری
آدرس
گیرنده بسط
مییابد. به
عنوان
مثال، در
آدرس user+foo@domain
بخش نام
کاربری
برابر user
است.
یک آرگومان خط فرمان که حاوی ${user} باشد به همان تعداد گیرندگان به آرگومانهای خط فرمان بسط مییابد.
این اطلاعات توسط پرچم u برای تبدیل حروف کوچک و بزرگ تغییر مییابد.
استانداردها (STANDARDS)
RFC 3463 (کدهای وضعیت پیشرفته)
عیبیابی (DIAGNOSTICS)
انتظار میرود کدهای وضعیت خروج دستور از قراردادهای تعریفشده در <sysexits.h> پیروی کنند. وضعیت خروج 0 به معنی اتمام موفقیتآمیز و عادی است.
در صورت وجود وضعیت خروج غیرصفر، مقدار محدودی از خروجی دستور در لاگ ثبت شده و در اعلان وضعیت تحویل گزارش میشود. هنگامی که خروجی با یک کد وضعیت پیشرفته 4.X.X یا 5.X.X آغاز شود، این کد وضعیت بر وضعیت خروج غیرصفر اولویت پیدا میکند (نسخه 2.3 و بالاتر Postfix).
پس از تحویل موفقیتآمیز (وضعیت خروج صفر)، مقدار محدودی از خروجی دستور در لاگ ثبت شده و در اعلانهای وضعیت تحویل "موفق" گزارش میشود (Postfix 3.0 و بالاتر). این خروجی دستور از نظر وجود کد وضعیت پیشرفته بررسی نمیشود.
مشکلات و تراکنشها در syslogd(8) یا postlogd(8) ثبت میشوند. فایلهای پیام آسیبدیده به گونهای علامتگذاری میشوند تا مدیر صف بتواند آنها را برای بررسی بیشتر به صف corrupt منتقل کند.
امنیت (SECURITY)
این برنامه نیازمند دو نقش مجزا است: ۱) دسترسی به سازوکارهای اختصاصی صف و ارتباط بینفرایندی (IPC) در Postfix، و ۲) اجرای دستورات خارجی در قالب کاربر مشخصشده. بنابراین، این برنامه از نظر امنیتی حساس است.
پارامترهای پیکربندی (CONFIGURATION PARAMETERS)
تغییرات در main.cf بهطور خودکار اعمال میشوند زیرا فرآیندهای pipe(8) تنها برای مدت زمان محدودی اجرا میگردند. برای تسریع در اعمال تغییرات، از دستور "postfix reload" استفاده کنید.
متن زیر تنها خلاصه پارامترها را ارائه میدهد. برای جزئیات بیشتر شامل مثالها به postconf(5) مراجعه کنید.
کنترلهای منابع و نرخ (RESOURCE AND RATE CONTROLS)
در متن زیر، transport فیلد اول در یک ورودی master.cf است.
- transport_time_limit ($command_time_limit)
- یک بازنویسی اختصاصی ترابری برای مقدار پارامتر command_time_limit، که در آن transport نام ترابری تحویل پیام در master.cf است.
پیادهسازیشده در دیمن qmgr(8):
- transport_destination_concurrency_limit ($default_destination_concurrency_limit)
- یک بازنویسی اختصاصی ترابری برای مقدار پارامتر default_destination_concurrency_limit، که در آن transport نام ترابری تحویل پیام در master.cf است.
- transport_destination_recipient_limit ($default_destination_recipient_limit)
- یک بازنویسی اختصاصی ترابری برای مقدار پارامتر default_destination_recipient_limit، که در آن transport نام ترابری تحویل پیام در master.cf است.
کنترلهای متفرقه (MISCELLANEOUS CONTROLS)
- config_directory (see 'postconf -d' output)
- مکان پیشفرض فایلهای پیکربندی main.cf و master.cf در Postfix.
- daemon_timeout (18000s)
- حداکثر مدت زمانی که یک فرآیند دیمن Postfix مجاز است برای رسیدگی به یک درخواست صرف کند، پیش از آنکه توسط تایمر نگهبان داخلی (watchdog) متوقف شود.
- delay_logging_resolution_limit (2)
- حداکثر تعداد ارقام پس از ممیز اعشار هنگام ثبت مقادیر تأخیر در لاگ.
- export_environment (see 'postconf -d' output)
- فهرست متغیرهای محیطی که یک فرآیند Postfix به فرآیندهای غیر Postfix صادر خواهد کرد.
- ipc_timeout (3600s)
- محدودیت زمانی برای ارسال یا دریافت اطلاعات از طریق کانال ارتباطی داخلی.
- mail_owner (postfix)
- حساب کاربری سیستم UNIX که مالک صف Postfix و اکثر فرآیندهای دیمن Postfix است.
- max_idle (100s)
- حداکثر مدت زمانی که یک فرآیند دیمن بیکار Postfix در انتظار یک اتصال ورودی منتظر میماند، پیش از آنکه به صورت داوطلبانه متوقف شود.
- max_use (100)
- حداکثر تعداد اتصالات ورودی که یک فرآیند دیمن Postfix پیش از توقف داوطلبانه به آنها سرویس میدهد.
- process_id (read-only)
- شناسه فرآیند (PID) یک دستور یا فرآیند دیمن Postfix.
- process_name (read-only)
- نام فرآیند یک دستور یا فرآیند دیمن Postfix.
- queue_directory (see 'postconf -d' output)
- مکان دایرکتوری سطح بالای صف Postfix.
- recipient_delimiter (empty)
- مجموعه نویسههایی که میتوانند بخش محلی (localpart) یک آدرس ایمیل، نام کاربری یا نام فایل forward. را از پسوند آن جدا کنند.
- syslog_facility (mail)
- تسهیلات لاگگیری سیستم (syslog facility) برای ثبت وقایع Postfix.
- syslog_name (see 'postconf -d' output)
- پیشوندی که به نام فرآیند در رکوردهای syslog اضافه میشود، به طوری که مثلاً "smtpd" به "prefix/smtpd" تبدیل میشود.
در دسترس از نسخه 3.0 و بالاتر Postfix:
- pipe_delivery_status_filter ($default_delivery_status_filter)
- فیلتر اختیاری برای عامل تحویل pipe(8) به منظور تغییر کد وضعیت تحویل یا متن توضیحی تحویلهای موفق یا ناموفق.
در دسترس از نسخه 3.3 و بالاتر Postfix:
- enable_original_recipient (yes)
- فعالسازی پشتیبانی از آدرس گیرنده اصلی پس از بازنویسی آدرس به یک آدرس دیگر (برای مثال با نام مستعار یا با نگاشت متعارف).
- service_name (read-only)
- نام سرویس master.cf برای یک فرآیند دیمن Postfix.
در دسترس از نسخه 3.5 و بالاتر Postfix:
- info_log_address_format (external)
- قالب آدرس ایمیلی که در ثبت وقایع غیردیباگ (info، warning و غیره) استفاده خواهد شد.
همچنین ببینید (SEE ALSO)
qmgr(8), queue manager bounce(8), delivery status reports postconf(5), configuration parameters master(5), generic daemon options master(8), process manager postlogd(8), Postfix logging syslogd(8), system logging
مجوز (LICENSE)
مجوز Secure Mailer باید همراه با این نرمافزار توزیع شود.
نویسندگان (AUTHOR(S))
Wietse Venema IBM T.J. Watson Research P.O. Box 704 Yorktown Heights, NY 10598, USA Wietse Venema Google, Inc. 111 8th Avenue New York, NY 10011, USA