GENERIC(5) File Formats Manual GENERIC(5)

generic - قالب جدول generic در Postfix

postmap /etc/postfix/generic
postmap -q "string" /etc/postfix/generic
postmap -q - /etc/postfix/generic <inputfile


جدول اختیاری generic(5) نگاشت آدرسی را مشخص می‌کند که هنگام تحویل نامه اعمال می‌شود. این برعکس نگاشت canonical(5) است که هنگام دریافت نامه اعمال می‌گردد.

به‌طور معمول، جدول generic(5) در سیستمی استفاده می‌شود که نام دامنهٔ معتبر اینترنتی ندارد و در عوض از چیزی مانند localdomain.local استفاده می‌کند. سپس جدول generic(5) توسط کلاینت smtp(8) برای تبدیل آدرس‌های ایمیل محلی به آدرس‌های ایمیل اینترنتی معتبر در زمان ارسال نامه از طریق اینترنت استفاده می‌شود. بخش «مثال‌ها» را در انتهای این سند مشاهده کنید.

نگاشت generic(5) هم بر آدرس‌های سرآیند (header) پیام (یعنی آدرس‌هایی که درون پیام‌ها ظاهر می‌شوند) و هم بر آدرس‌های پاکت (envelope) پیام (به عنوان مثال، آدرس‌هایی که در دستورات پروتکل SMTP استفاده می‌شوند) تأثیر می‌گذارد.

معمولاً جدول generic(5) به عنوان یک فایل متنی مشخص می‌شود که به عنوان ورودی به دستور postmap(1) داده می‌شود تا یک فایل نمایه‌سازی‌شده (indexed) برای جستجوی سریع ایجاد کند.

برای بازسازی فایل نمایه‌سازی‌شده با نوع پیش‌فرض پس از تغییر فایل متنی، دستور «postmap /etc/postfix/generic» را اجرا کنید، یا «postmap type:/etc/postfix/generic» را برای مشخص کردن صریح یک نوع خاص اجرا نمایید.

نوع پیش‌فرض فایل نمایه‌سازی‌شده با پارامتر default_database_type پیکربندی می‌شود. بسته به پلتفرم، این مقدار ممکن است یکی از lmdb:، cdb:، hash: یا dbm: (بدون ':' پایانی) باشد.

هنگامی که جدول از طریق روش‌های دیگر مانند NIS، LDAP یا SQL ارائه می‌شود، همان جستجوها مشابه فایل‌های نمایه‌سازی‌شده معمولی انجام می‌گیرد. مدیریت چنین پایگاه‌های داده‌ای خارج از حیطهٔ Postfix است.

به عنوان جایگزین، جدول می‌تواند به عنوان یک نگاشت عبارت منظم (regular-expression) ارائه شود که در آن الگوها به عنوان عبارات منظم داده می‌شوند، یا جستجوها می‌توانند به یک سرور مبتنی بر TCP هدایت شوند. در این موارد، جستجوها به روشی کمی متفاوت انجام می‌شوند که در ادامه تحت عنوان «جداول عبارت منظم» یا «جداول مبتنی بر TCP» توضیح داده شده است.

رشتهٔ جستجو قبل از جستجو در پایگاه‌داده به حروف کوچک تبدیل می‌شود. از نسخهٔ Postfix 2.3 به بعد، رشتهٔ جستجو برای انواع پایگاه‌داده مانند regexp: یا pcre: که فیلدهای جستجوی آن‌ها می‌توانند با هر دو حالت حروف بزرگ و کوچک مطابقت داشته باشند، به حروف کوچک تبدیل نمی‌شود.

قالب ورودی برای دستور postmap(1) به شرح زیر است:

هنگامی که pattern با یک آدرس ایمیل مطابقت داشته باشد، آن را با result مربوطه جایگزین می‌کند.
خطوط خالی و توضیحات
خطوط خالی و خطوطی که فقط شامل فاصله‌اند نادیده گرفته می‌شوند، همان‌طور که خطوطی که اولین نویسهٔ غیرفاصله‌ای آن‌ها `#' است نادیده گرفته می‌شوند.
متن چندخطی
یک خط منطقی با متنی غیر از نویسهٔ فاصله شروع می‌شود. خطی که با نویسهٔ فاصله شروع شود، ادامهٔ خط منطقی قبلی در نظر گرفته می‌شود.

در جستجوها از فایل‌های نمایه‌سازی‌شده مانند DB یا DBM، یا از جداول شبکه‌ای مانند NIS، LDAP یا SQL، هر پرسمان user@domain دنباله‌ای از الگوهای پرسمان را طبق شرح زیر تولید می‌کند.

هر الگوی پرسمان قبل از امتحان الگوی بعدی به هر جدول جستجوی مشخص‌شده ارسال می‌شود، تا زمانی که یک تطابق پیدا شود.

جایگزینی user@domain با address. این حالت بالاترین اولویت را دارد.
جایگزینی user@site با address زمانی که site برابر با $myorigin باشد، زمانی که site در $mydestination فهرست شده باشد، یا زمانی که در $inet_interfaces یا $proxy_interfaces فهرست شده باشد.
@domain address
جایگزینی سایر آدرس‌ها در domain با address. این حالت کمترین اولویت را دارد.

نتیجهٔ جستجو مشمول بازنویسی آدرس می‌شود:

  • هنگامی که نتیجه به شکل @otherdomain باشد، نتیجه تبدیل به همان user در otherdomain می‌شود.
  • هنگامی که "append_at_myorigin=yes" باشد، مقدار "@$myorigin" به آدرس‌های فاقد "@domain" اضافه می‌شود.
  • هنگامی که "append_dot_mydomain=yes" باشد، مقدار ".$mydomain" به آدرس‌های فاقد ".domain" اضافه می‌شود.

هنگامی که بخش محلی (localpart) یک آدرس ایمیل حاوی جداکنندهٔ اختیاری گیرنده باشد (مانند user+foo@domain)، ترتیب جستجو به این صورت درمی‌آید: user+foo@domain، user@domain، user+foo، user و @domain.

پارامتر propagate_unmatched_extensions کنترل می‌کند که آیا یک پسوند آدرس تطبیق‌نیافته (+foo) به نتیجهٔ جستجوی جدول منتقل شود یا خیر.

این بخش نحوهٔ تغییر جستجوهای جدول را هنگامی که جدول به شکل عبارات منظم ارائه شده است، شرح می‌دهد. برای توضیح نحوهٔ نگارش جدول جستجوی عبارت منظم، به regexp_table(5) یا pcre_table(5) مراجعه کنید.

هر الگو یک عبارت منظم است که بر روی کل آدرس مورد جستجو اعمال می‌شود. بنابراین، آدرس‌های ایمیل user@domain به بخش‌های تشکیل‌دهندهٔ user و @domain شکسته نمی‌شوند، و همچنین user+foo به user و foo تقسیم نمی‌گردد.

الگوها به همان ترتیبی که در جدول مشخص شده‌اند اعمال می‌شوند، تا زمانی که الگویی منطبق با رشتهٔ جستجو پیدا شود.

نتایج مانند جستجوهای فایل‌های نمایه‌سازی‌شده است، با این ویژگی اضافه که زیررشته‌های داخل پرانتز از الگو می‌توانند به عنوان $1، $2 و غیره جایگذاری شوند.

این بخش نحوهٔ تغییر جستجوهای جدول را هنگامی که جستجوها به یک سرور مبتنی بر TCP هدایت می‌شوند شرح می‌دهد. برای توصیف پروتکل جستجوی کلاینت/سرور TCP، به tcp_table(5) مراجعه کنید. این قابلیت در Postfix 2.5 و بالاتر موجود است.

هر عملیات جستجو یک‌بار از کل آدرس استفاده می‌کند. بنابراین، آدرس‌های ایمیل user@domain به بخش‌های تشکیل‌دهندهٔ user و @domain شکسته نمی‌شوند، و همچنین user+foo به user و foo تقسیم نمی‌گردد.

نتایج همانند جستجوهای فایل‌های نمایه‌سازی‌شده است.

در ادامه یک نگاشت generic با یک فایل نمایه‌سازی‌شده نمایش داده شده است. هنگامی که نامه از طریق SMTP به یک میزبان راه‌دور ارسال می‌شود، این پیکربندی his@localdomain.local را با آدرس ایمیل ISP او جایگزین می‌کند، her@localdomain.local را با آدرس ایمیل ISP او جایگزین می‌کند، و سایر آدرس‌های محلی را با حساب ISP او، با پسوند آدرس +local جایگزین می‌نماید (این مثال فرض می‌کند که ISP از پسوندهای آدرس با فرمت "+" پشتیبانی می‌کند).

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic
/etc/postfix/generic:
    his@localdomain.local   hisaccount@hisisp.example
    her@localdomain.local   heraccount@herisp.example
    @localdomain.local      hisaccount+local@hisisp.example
هر زمان که جدول تغییر کرد، دستور «postmap /etc/postfix/generic» را اجرا کنید. به جای hash، برخی سیستم‌ها از فایل‌های پایگاه‌دادهٔ dbm استفاده می‌کنند. برای اطلاع از اینکه سیستم شما از چه جداولی پشتیبانی می‌کند، از دستور «postconf -m» استفاده کنید.


قالب جدول قراردادهای نقل‌قول (quoting) را درک نمی‌کند.

پارامترهای زیر در main.cf به‌ویژه مرتبط هستند. متن زیر تنها یک خلاصه از پارامترها را ارائه می‌دهد. برای جزئیات بیشتر شامل مثال‌ها به postconf(5) مراجعه کنید.

جداول جستجوی اختیاری که بازنویسی آدرس را در کلاینت Postfix SMTP انجام می‌دهند، معمولاً برای تبدیل یک آدرس معتبر محلی به یک آدرس معتبر جهانی هنگام ارسال نامه از طریق اینترنت.
مشخص می‌کند کدام جداول جستجوی آدرس، پسوند آدرس را از کلید جستجو به نتیجهٔ جستجو کپی می‌کنند.

سایر پارامترهای مهم:

آدرس‌های رابط شبکهٔ محلی که این سیستم پستی روی آن‌ها نامه دریافت می‌کند.
آدرس‌های رابط شبکهٔ راه‌دور که این سیستم پستی از طریق یک پروکسی یا واحد ترجمهٔ آدرس شبکه (NAT) روی آن‌ها نامه دریافت می‌کند.
فهرست دامنه‌هایی که از طریق انتقال تحویل نامهٔ $local_transport تحویل داده می‌شوند.
نام دامنه‌ای که به نظر می‌رسد نامه‌های ارسال‌شدهٔ محلی از آنجا می‌آیند، و نامه‌های محلی ارسال‌شده به آن تحویل داده می‌شوند.
فعال‌سازی رفتار ویژه برای مدخل‌های owner-listname در فایل aliases(5)، و عدم تفکیک بخش‌های محلی آدرس owner-listname و listname-request هنگامی که recipient_delimiter روی "-" تنظیم شده باشد.

postmap(1)، مدیر جدول جستجوی Postfix
postconf(5)، پارامترهای پیکربندی
smtp(8)، کلاینت Postfix SMTP

برای یافتن این اطلاعات از «postconf readme_directory» یا «postconf html_directory» استفاده کنید.

ADDRESS_REWRITING_README، راهنمای بازنویسی آدرس
DATABASE_README، نمای کلی جدول جستجوی Postfix
STANDARD_CONFIGURATION_README، مثال‌های پیکربندی

مجوز Secure Mailer باید به همراه این نرم‌افزار توزیع شود.


قابلیت genericstable در MTA مربوط به Sendmail وجود دارد.

این قابلیت در Postfix نسخهٔ 2.2 و بالاتر در دسترس است.

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