dnl dnl использование mailertable для выбора транспорта и маршрута для доставки сообщений dnl NO - не использовать mailertable для выбора транспорта и маршрута для доставки сообщений dnl TEXT - использовать отсылку по mailertable в виде текстового файла dnl DBM - использовать отсылку по mailertable в виде DBM файла dnl MYSQL - использовать отсылку по mailertable в виде таблицы в базе данных MYSQL dnl SQLITE - использовать mailertable в виде таблицы в БД SQLite dnl define(`confMAILERTABLE', `NO') dnl dnl dnl при указании TEXT или DBM в confMAILERTABLE маршруты доставки почты dnl прописываются в CONFDIR/mailertable в виде: dnl домен : тип_транспорта : маршрут_1 : маршрут_2 : ... : маршрут_N dnl dnl в качестве типов транспорта могут быть указаны: dnl local - доставка почты домена в локальный mailbox dnl virt - доставка почты домена в mailbox в виртуальном домене dnl uucp-dom - доставка почты домена в uucp mailbox dnl shadowsmtp - доставка копии письма по smtp по маршруту, при этом dnl обработка письма будет продолжена dnl smtp - доставка почты домена по smtp по маршруту dnl smtp6 - доставка почты домена по smtp по маршруту по IPv6 dnl smtp4 - доставка почты домена по smtp по маршруту по IPv4 dnl lmtp - доставка почты домена по lmtp по маршруту dnl lmtpunix - доставка почты домена по lmtp через UNIX domain socket dnl lmtplocal - доставка почты локального домена по lmtp по dnl маршруту, выполняется после раскрытия алиасов dnl lmtpunixlocal - доставка почты локального домена по lmtp через UNIX dnl domain socket, выполняется после раскрытия алиасов dnl dnl для shadowsmtp, smtp и lmtp транспортов: dnl - в качестве маршрута можно указывать списки имён хостов, IP адресов, dnl а также названия доменов с суффиксами /MX и /bestMX dnl - нестандартный номер порта (отличный от 25 в случае smtp и отличный от dnl 24 в случае lmtp) можно указывать через два символа ":". dnl - можно указывать отдельные маршруты для проверки существования адресов dnl в доменах путем указания суффикса \|callout после названия домена. dnl - можно указывать суффикс /avoid_tls при необходимости доставки по plain SMTP или plain LMTP dnl dnl в случае использования транспортов lmtpunix и lmtpunixlocal после dnl имени файла UNIX domain socket-а можно через символы ":" указать имя dnl пользователя и группу, от имени которых будет производится запись в dnl файл сокета. dnl dnl domain.tld : local : local_mailbox dnl domain.tld : virt : mailbox@virtual_domain dnl domain.tld : uucp-dom : local_uucp_user dnl domain.tld : smtp : host1::587 : host2 : domain2/MX dnl domain.tld\|callout : smtp : domain.tld/bestMX : another.domain.tld::2025/bestMX : host1::2025 : host2::2025 dnl domain.tld : lmtp : host1 : host2::2024 dnl domain.tld : lmtpunix : /var/lib/imap/socket/lmtp dnl domain.tld : lmtpunix : /var/lib/imap/socket/lmtp:cyrus:mail dnl rcpt@domain.tld : lmtplocal : 127.0.0.1::24/avoid_tls dnl dnl при описании ручных маршрутов можно использовать вычисляемые выражения dnl например, чтобы маршрут зависел от времени нахождения письма в очереди dnl или чтобы можно было в определённых пропорциях распределить нагрузку по несколько смартхостам dnl dnl письма, находящиеся в очереди меньше 4ч, отправляются по MX-ам. остальное - через хост fall.back dnl domain.tld : smtp : ${if <{$message_age}{14400}{domain.tld/MX}{fall.back}} dnl domain.tld : smtp : ${if <{$message_age}{14400}{domain.tld/MX}{fall.back}} dnl dnl письма, находящиеся в очереди меньше 4ч, с вероятностью 80% (4 из 5) отправляются по MX-ах домена получателя. остальные 20% (1 из 5) - через хост smart.host dnl письма, находящиеся в очереди больше 4ч, отправляются через хост fall.back dnl domain.tld : smtp : ${if <{$message_age}{14400}{${extract{${eval:${randint:5} + 1}}{:}{domain.tld/MX:domain.tld/MX:domain.tld/MX:domain.tld/MX:smart.host}}}{fall.back}} dnl domain.tld : smtp : ${if <{$message_age}{14400}{${extract{${eval:${randint:5} + 1}}{:}{domain.tld/MX:domain.tld/MX:domain.tld/MX:domain.tld/MX::smart.host}}}{fall.back}} dnl dnl письма, находящиеся в очереди меньше 4ч, с вероятностью 50% отправляются через хост smart.host, остальные по MX-ам домена получателя dnl письма, находящиеся в очереди больше 4ч, отправляются через хост fall.back dnl domain.tld : smtp : ${if <{$message_age}{14400}{${if <{${eval:${randint:100}}}{50}{smart.host}{domain.tld/MX}}}{fall.back}} dnl domain.tld : smtp : ${if <{$message_age}{14400}{${if <{${eval:${randint:100}}}{50}{smart.host}{domain.tld/MX}}}{fall.back}} dnl dnl c вероятностью 20% (20 из 100) письма отправляются через хост smart.host, остальные 80% - по MX-ам домена получателя dnl domain.tld : smtp : ${if <{${eval:${randint:100}}}{20}{smart.host}{domain.tld/MX}} dnl domain.tld : smtp : ${if <{${eval:${randint:100}}}{20}{smart.host}{domain.tld/MX}} dnl dnl c вероятностью 20% (20 из 100) письма отправляются через хост smart.host, с вероятностью 20% (20 из оставшихся 80) - через хост another.smart.host dnl остальные 60% отправляются по MX-ам домена получателя dnl domain.tld : smtp : ${if <{${eval:${randint:100}}}{20}{smart.host}{${if <{${eval:${randint:80}}}{20}{another.smart.host}{domain.tld/MX}}}} dnl domain.tld : smtp : ${if <{${eval:${randint:100}}}{20}{smart.host}{${if <{${eval:${randint:80}}}{20}{another.smart.host}{domain.tld/MX}}}} dnl dnl использование типа транпорта smtp6 dnl NO - не использовать тип транспорта smtp6 dnl YES - использовать тип транспорта smtp6 dnl define(`confMAILERTABLE_SMTP6', `NO')dnl dnl dnl использование типа транпорта smtp4 dnl NO - не использовать тип транспорта smtp4 dnl YES - использовать тип транспорта smtp4 dnl define(`confMAILERTABLE_SMTP4', `NO')dnl dnl dnl исключение локальных доменов из доставки по SMTP dnl NO - не исключать локальные домены из доставки по SMTP dnl YES - исключать локальные домены из доставки по SMTP dnl define(`confMAILERTABLE_SMTP_SKIP_LOCALDOMAINS', `YES')dnl dnl dnl исключение локальных доменов из доставки по LMTP dnl NO - не исключать локальные домены из доставки по LMTP dnl YES - исключать локальные домены из доставки по LMTP dnl define(`confMAILERTABLE_LMTP_SKIP_LOCALDOMAINS', `NO')dnl dnl dnl исключение локальных доменов из доставки по lmtp через UNIX domain socket dnl NO - не исключать локальные домены из доставки по lmtp через UNIX domain socket dnl YES - исключать локальные домены из доставки по lmtp через UNIX domain socket dnl define(`confMAILERTABLE_LMTPUNIX_SKIP_LOCALDOMAINS', `NO')dnl dnl dnl запрос к БД MySQL на получение транспорта и маршрута для доставки сообщений dnl define(`confMAILERTABLE_MYSQL', `SELECT transport, route FROM mailertable WHERE domain="${quote_mysql:$domain}"') dnl dnl запрос к БД MySQL на получение транспорта и маршрута для доставки копией сообщений dnl define(`confMAILERTABLE_SHADOW_MYSQL', `SELECT transport, route FROM mailertableshadow WHERE domain="${quote_mysql:$domain}"')dnl dnl запрос к БД MySQL на получение транспорта и маршрута для проверки существования почтовых адресов dnl define(`confMAILERTABLE_CALLOUTTABLE_MYSQL', `SELECT transport, route FROM callouttable WHERE domain="${quote_mysql:$domain}"') dnl dnl dnl запрос к БД SQLite на получение транспорта и маршрута для доставки сообщений dnl define(`confMAILERTABLE_SQLITE', `SELECT transport, route FROM mailertable WHERE domain="${quote_sqlite:$domain}"') dnl dnl запрос к БД SQLite на получение транспорта и маршрута для доставки копий сообщений dnl define(`confMAILERTABLE_SHADOW_SQLITE', `SELECT transport, route FROM mailertableshadow WHERE domain="${quote_sqlite:$domain}"')dnl dnl запрос к БД SQLite на получение транспорта и маршрута для проверки существования почтовых адресов dnl define(`confMAILERTABLE_CALLOUTTABLE_SQLITE', `SELECT transport, route FROM callouttable WHERE domain="${quote_sqlite:$domain}"') dnl dnl dnl использование доставки копий писем по SMTP dnl NO - не использовать доставку копий писем по SMTP dnl YES - использовать доставку копий писем по SMTP dnl define(`confMAILERTABLE_SHADOWSMTP', `NO')dnl dnl dnl использование транспортов lmtp и lmtpunix dnl NO - не использовать транспорты lmtp и lmtpunix в mailertable dnl YES - использовать транспорты lmtp и lmtpunix в mailertable dnl define(`confMAILERTABLE_LMTP', `NO') dnl dnl dnl номер LMTP порта по умолчанию dnl define(`confLMTP_DEFAULT_PORT', `lmtp') dnl dnl dnl использование ручных маршрутов с учётом адреса отправителя (пока доступны только для значения TEXT в confMAILERTABLE): dnl NO - не использовать ручные маршруты с учётом адреса отправителя dnl YES - использовать ручные маршруты с учётом адреса отправителя dnl define(`confMAILERTABLE_PER_SENDER', `NO')dnl dnl dnl маршруты с учётом адреса отправителя задаются с указанием адресов отправителя и получателя в виде полных значений, wildcard или регулярных выражений dnl sender@domain.local<@>recipient@domain.tld : smtp : host1::587 : host2 : domain2/MX dnl \N^sender@domain\.local<@>.+@domain\.tld$\N : smtp : host1::587 : host2 : domain2/MX dnl dnl использование ручных маршрутов на основании основной MX записи домена получателя, только для smtp (пока доступны только для значения TEXT в confMAILERTABLE): dnl NO - не использовать ручные маршруты на основании основной MX записи домена получателя dnl YES - использовать ручные маршруты на основании основной MX записи домена получателя dnl define(`confMAILERTABLE_DOMAIN_BEST_MX', `NO')dnl dnl dnl маршруты на основании основной MX записи домена получателя задаются с указанием суффикса bestMX dnl aspmx.l.google.com\|bestMX : smtp : host1 : host2 dnl aspmx.l.google.com\|bestMX\|callout : smtp : host1 : host2 dnl dnl в случае использования и confMAILERTABLE_PER_SENDER и confMAILERTABLE_DOMAIN_BEST_MX можно указывать маршруты на основании комбинации адреса отправителя и основной MX записи домена получателя dnl sender@domain.tld<@>aspmx.l.google.com\|bestMX : smtp : host1 : host2 dnl sender@domain.tld<@>aspmx.l.google.com\|bestMX\|callout : smtp : host1 : host2 dnl dnl использование ручных маршрутов на основании страны основной MX записи домена получателя, только для smtp (пока доступны только для значения TEXT в confMAILERTABLE): dnl NO - не использовать ручные маршруты на основании страны основной MX записи домена получателя dnl YES - использовать ручные маршруты на основании страны основной MX записи домена получателя dnl define(`confMAILERTABLE_DOMAIN_BEST_MX_COUNTRY', `NO')dnl dnl dnl маршруты на основании основной MX записи домена получателя задаются с указанием суффикса bestMXcountry dnl KZ\|bestMXcountry : smtp : host1 : host2 dnl KZ\|bestMXcountry\|callout : smtp : host1 : host2 dnl dnl в случае использования и confMAILERTABLE_PER_SENDER и confMAILERTABLE_DOMAIN_BEST_MXCOUNTRY можно указывать маршруты на основании комбинации адреса отправителя и страны основной MX записи домена получателя dnl sender@domain.tld<@>KZ\|bestMXcountry : smtp : host1 : host2 dnl sender@domain.tld<@>KZ\|bestMXcountry\|callout : smtp : host1 : host2 dnl ifelse(SECTION, `MAIN', `dnl dnl ifdef(`confPERL',`',` dnl errprint(`*** ERROR: confPERL variable required dnl ')') dnl ifdef(`confPERL',`',`') ifelse(confMAILERTABLE, `TEXT', `dnl ifdef(`confMAILERTABLE_PER_SENDER',`',`define(``confMAILERTABLE_PER_SENDER'',`NO')')dnl ifelse(len(X`'confMAILERTABLE_PER_SENDER), `1', `define(`confMAILERTABLE_PER_SENDER', `NO')')dnl LOOKUP_MAILERTABLE_TEXT = \ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl ${lookup{\ $sender_address<@>$local_part@$domain\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ${lookup{\ $local_part@$domain\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ${lookup{\ $domain\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX, `NO', `dnl', `dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl ${lookup{\ $sender_address<@>${acl{acl_domain_bestMX}{$domain}}\|bestMX\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ${lookup{\ ${acl{acl_domain_bestMX}{$domain}}\|bestMX\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX, `NO', `', `') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX_COUNTRY, `NO', `dnl', `dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl ${lookup{\ $sender_address<@>${acl{acl_hostname2country}{${acl{acl_domain_bestMX}{$domain}}}}\|bestMXcountry\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ${lookup{\ ${acl{acl_hostname2country}{${acl{acl_domain_bestMX}{$domain}}}}\|bestMXcountry\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX_COUNTRY, `NO', `', `') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX_COUNTRY, `NO', `dnl', `dnl }}\ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl }}\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX_COUNTRY, `NO', `', `') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX, `NO', `dnl', `dnl }}\ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl }}\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX, `NO', `', `') dnl }}\ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl }}\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') }} LOOKUP_CALLOUTTABLE_TEXT = \ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl ${lookup{\ $sender_address<@>$local_part@$domain\|callout\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ${lookup{\ $local_part@$domain\|callout\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ${lookup{\ $domain\|callout\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX, `NO', `dnl', `dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl ${lookup{\ $sender_address<@>${acl{acl_domain_bestMX}{$domain}}\|bestMX\|callout\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ${lookup{\ ${acl{acl_domain_bestMX}{$domain}}\|bestMX\|callout\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX, `NO', `', `') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX_COUNTRY, `NO', `dnl', `dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl ${lookup{\ $sender_address<@>${acl{acl_hostname2country}{${acl{acl_domain_bestMX}{$domain}}}}\|bestMXcountry\|callout\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ${lookup{\ ${acl{acl_hostname2country}{${acl{acl_domain_bestMX}{$domain}}}}\|bestMXcountry\|callout\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX_COUNTRY, `NO', `', `') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX_COUNTRY, `NO', `dnl', `dnl }}\ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl }}\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX_COUNTRY, `NO', `', `') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX, `NO', `dnl', `dnl }}\ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl }}\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ') dnl ifelse(confMAILERTABLE_DOMAIN_BEST_MX, `NO', `', `') dnl }}\ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl }}\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') }} LOOKUP_MAILERTABLE_SHADOW_TEXT = \ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl ${lookup{\ $sender_address<@>$local_part@$domain\|shadow\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') ${lookup{\ $local_part@$domain\|shadow\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ ${lookup{\ $domain\|shadow\ }wildlsearch{CONFDIR/mailertable}{${if match{$value}{\N.+(lookup |[\{\}])\N}{${expand:$value}}{$value}}}{\ }}\ ifelse(confMAILERTABLE_PER_SENDER, `NO', `dnl', `dnl }}\ ') dnl ifelse(confMAILERTABLE_PER_SENDER, `NO', `', `') }} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl LOOKUP_MAILERTABLE_DBM = \ ${lookup{$local_part@$domain}dbm{CONFDIR/mailertable.db}{$value}{\ ${lookup{$domain}dbm{CONFDIR/mailertable.db}}\ }} LOOKUP_MAILERTABLE_SHADOW_DBM = \ ${lookup{$local_part@$domain\|shadow}dbm{CONFDIR/mailertable.db}{$value}{\ ${lookup{$domain\|shadow}dbm{CONFDIR/mailertable.db}}\ }} LOOKUP_CALLOUTTABLE_DBM = \ ${lookup{$domain\|callout}dbm{CONFDIR/mailertable.db}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ') dnl ifelse(SECTION, `MAIN', `') ifelse(SECTION, `ACL_CHECK_RCPT', `dnl # Проверка существования получателей из shared pop доменов deny condition = ${if eq{$acl_m_skip_verify_recipient}{yes}{no}{yes}} ifelse(confMAILERTABLE, `TEXT', `dnl set acl_m0 = ${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*virt\s*:\s*(\S+)\s*(:.*)?$\N}\ {Address $1, expanded from $local_part$domain, is unrouteable}\ {skip}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl set acl_m0 = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*virt\s*:\s*(\S+)\s*(:.*)?$\N}\ {Address $1, expanded from $local_part$domain, is unrouteable}\ {skip}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl set acl_m0 = ${if match\ {${extract{transport}{${lookup mysql{confMAILERTABLE_MYSQL}}}}}\ {\N^(?i)\s*virt\s*$\N}\ {Address $1, expanded from $local_part$domain, is unrouteable}\ {skip}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl set acl_m0 = ${if match\ {${extract{transport}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}}}\ {\N^(?i)\s*virt\s*$\N}\ {Address $1, expanded from $local_part$domain, is unrouteable}\ {skip}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') condition = ${if eq{$acl_m0}{skip}{no}{yes}} message = $acl_m0 log_message = $acl_m0 ! verify = recipient ') dnl dnl ifelse(SECTION, `ACL_CHECK_RCPT_BOTTOM', `dnl # Прием почты для получателей из shared pop доменов ifelse(confMAILERTABLE, `TEXT', `dnl accept condition = ${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*virt\s*:\s*(\S+)\s*(:.*)?$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl accept condition = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*virt\s*:\s*(\S+)\s*(:.*)?$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl accept condition = ${if match\ {${extract{transport}{${lookup mysql{confMAILERTABLE_MYSQL}}}}}\ {\N^(?i)\s*virt\s*$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl accept condition = ${if match\ {${extract{transport}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}}}\ {\N^(?i)\s*virt\s*$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') set acl_m_recipients_accepted = ${if eq{$acl_m_recipients_accepted}{}{}{$acl_m_recipients_accepted, }}$local_part@$domain endpass ') ifelse(SECTION, `ROUTERS_LOCAL', `dnl ifdef(`confMAILERTABLE_LMTP', `ifelse(confMAILERTABLE_LMTP, `NO', `dnl', `dnl # маршрутизация почты локальных доменов по lmtp mailertable_lmtp_local: driver = manualroute transport = remote_lmtp domains = +local_domains ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*lmtplocal\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*lmtplocal\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*lmtplocal\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*lmtplocal\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${lookup mysql{confMAILERTABLE_MYSQL}\ {${if eq{${extract{transport}{${lc:$value}}}}{lmtplocal}{yes}{no}}}{no}} address_data = ${lookup mysql{confMAILERTABLE_MYSQL}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}\ {${if eq{${extract{transport}{${lc:$value}}}}{lmtplocal}{yes}{no}}}{no}} address_data = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') route_data = ${sg{\ ${sg{${sg\ {$address_data}\ {\N(?i)([^:\s]+?)\/bestMX\N}\ {\ \N\ ${acl{acl_domain_bestMX}{$1}}\ \N\ }\ }}{\N\s\N}{}}\ }{\N\/\S+$\N}{}} no_verify self = send # доставка почты локальных доменов по lmtp через UNIX domain socket mailertable_lmtpunix_local: driver = accept transport = lmtpunix domains = +local_domains ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*lmtpunixlocal\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*lmtpunixlocal\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*lmtpunixlocal\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*lmtpunixlocal\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${lookup mysql{confMAILERTABLE_MYSQL}\ {${if eq{${extract{transport}{${lc:$value}}}}{lmtpunixlocal}{yes}{no}}}{no}} address_data = ${lookup mysql{confMAILERTABLE_MYSQL}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}\ {${if eq{${extract{transport}{${lc:$value}}}}{lmtpunixlocal}{yes}{no}}}{no}} address_data = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') user = ${extract{2}{:}{$address_data}{$value}{confVIRT_MDIR_USER}} group = ${extract{3}{:}{$address_data}{$value}{confVIRT_MDIR_GROUP}} no_verify ')') dnl ifdef(`confMAILERTABLE_LMTP', `ifelse(confMAILERTABLE_LMTP, `NO', `dnl', `')') ') dnl ifelse(SECTION, `ROUTERS_LOCAL', `') ifelse(SECTION, `ROUTERS', `dnl ifdef(`confMAILERTABLE_SHADOWSMTP', `ifelse(confMAILERTABLE_SHADOWSMTP, `NO', `dnl', `dnl # маршрутизация копий писем по smtp по ручному маршруту mailertable_shadowsmtp: driver = manualroute # transport = remote_smtp transport = confREMOTE_SMTP_TRANSPORT ifdef(`confMAILERTABLE_SMTP_SKIP_LOCALDOMAINS', `ifelse(confMAILERTABLE_SMTP_SKIP_LOCALDOMAINS, `YES', `dnl domains = ! +local_domains ')') dnl ifdef(`confMAILERTABLE_SMTP_SKIP_LOCALDOMAINS', `ifelse(confMAILERTABLE_SMTP_SKIP_LOCALDOMAINS, `YES', `')') ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_SHADOW_TEXT\ }}{\N^(?i)\s*shadowsmtp\s*:\s*(\S.+)$\N}{ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `${if IS_NOT_QUARANTINED{yes}{no}}',`yes')}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_SHADOW_TEXT\ }}{\N^(?i)\s*shadowsmtp\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_SHADOW_DBM\ }}{\N^(?i)\s*shadowsmtp\s*:\s*(\S.+)$\N}{ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `${if IS_NOT_QUARANTINED{yes}{no}}',`yes')}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_SHADOW_DBM\ }}{\N^(?i)\s*shadowsmtp\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${lookup mysql{confMAILERTABLE_SHADOW_MYSQL}\ {${if eq{${extract{transport}{${lc:$value}}}}{shadowsmtp}{ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `${if IS_NOT_QUARANTINED{yes}{no}}',`yes')}{no}}}{no}} address_data = ${lookup mysql{confMAILERTABLE_SHADOW_MYSQL}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SHADOW_SQLITE}\ {${if eq{${extract{transport}{${lc:$value}}}}{shadowsmtp}{ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `${if IS_NOT_QUARANTINED{yes}{no}}',`yes')}{no}}}{no}} address_data = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SHADOW_SQLITE}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') route_data = ${sg{\ ${sg{${sg\ {$address_data}\ {\N(?i)([^:\s]+?)\/bestMX\N}\ {\ \N\ ${acl{acl_domain_bestMX}{$1}}\ \N\ }\ }}{\N\s\N}{}}\ }{\N\/\S+$\N}{}} no_verify self = send unseen ')') dnl ifdef(`confMAILERTABLE_SHADOWSMTP', `ifelse(confMAILERTABLE_SHADOWSMTP, `NO', `dnl', `')') ifelse_strstr(confDELIVERY_TO, `MDIR_VIRTUAL', `dnl # доставка почты домена в single maildir mailertable_virt: driver = redirect ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*virt\s*:\s*(\S+)\s*(:.*)?$\N}\ {yes}{no}} data = ${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*virt\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}} ')dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*virt\s*:\s*(\S+)\s*(:.*)?$\N}\ {yes}{no}} data = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*virt\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}} ')dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${if match{${extract{transport}{${lookup mysql{confMAILERTABLE_MYSQL}}}}}\ {\N^(?i)\s*virt\s*$\N}\ {yes}{no}} data = ${extract{route}{${lookup mysql{confMAILERTABLE_MYSQL}}}} ')dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${if match{${extract{transport}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}}}\ {\N^(?i)\s*virt\s*$\N}\ {yes}{no}} data = ${extract{route}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}} ')dnl ifelse(confMAILERTABLE, `SQLITE', `') # no_verify ') ifelse_strstr(confDELIVERY_TO, `MBOX', `dnl # обработка .forward при доставке почты домена в mailbox mailertable_local_forward: driver = redirect ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {${if exists{/home/$1/.forward}{yes}{no}}}{no}} user = ${if match}\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}} file = /home/${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}}\ /.forward ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {${if exists{/home/$1/.forward}{yes}{no}}}{no}} user = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}} file = /home/${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}}\ /.forward ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${if match\ {${extract{transport}{${lookup mysql{confMAILERTABLE_MYSQL}}}}}\ {\N^(?i)\s*local\s*$\N}\ {yes}{no}} user = ${extract{route}{${lookup mysql{confMAILERTABLE_MYSQL}}}} require_files = /home/\ ${extract{route}{${lookup mysql{confMAILERTABLE_MYSQL}}}}\ /.forward file = /home/\ ${extract{route}{${lookup mysql{confMAILERTABLE_MYSQL}}}}\ /.forward ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${if match\ {${extract{transport}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}}}\ {\N^(?i)\s*local\s*$\N}\ {yes}{no}} user = ${extract{route}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}} require_files = /home/\ ${extract{route}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}}\ /.forward file = /home/\ ${extract{route}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}}\ /.forward ') dnl ifelse(confMAILERTABLE, `SQLITE', `') # no_verify no_expn check_ancestor file_transport = address_file pipe_transport = address_pipe reply_transport = 1 # address_reply ifelse_strstr(confDELIVERY_TO, `FILTERS', `dnl allow_filter ') # доставка почты домена в mailbox mailertable_local: driver = accept transport = mailertable_local_transport ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*local\s*:\s*\S+$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*local\s*:\s*\S+$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${if match\ {${extract{transport}{${lookup mysql{confMAILERTABLE_MYSQL}}}}}\ {\N^(?i)\s*local\s*$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${if match\ {${extract{transport}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}}}\ {\N^(?i)\s*local\s*$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') # no_verify ') ifdef(`confMAILERTABLE_LMTP', `ifelse(confMAILERTABLE_LMTP, `NO', `dnl', `dnl # доставка почты по lmtp через UNIX domain socket mailertable_lmtpunix: driver = accept transport = lmtpunix ifdef(`confMAILERTABLE_LMTPUNIX_SKIP_LOCALDOMAINS', `ifelse(confMAILERTABLE_LMTPUNIX_SKIP_LOCALDOMAINS, `NO', `dnl', `dnl domains = ! +local_domains ')') dnl ifdef(`confMAILERTABLE_LMTPUNIX_SKIP_LOCALDOMAINS', `ifelse(confMAILERTABLE_LMTPUNIX_SKIP_LOCALDOMAINS, `NO', `', `')') ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*lmtpunix\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*lmtpunix\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*lmtpunix\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*lmtpunix\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${lookup mysql{confMAILERTABLE_MYSQL}\ {${if eq{${extract{transport}{${lc:$value}}}}{lmtpunix}{yes}{no}}}{no}} address_data = ${lookup mysql{confMAILERTABLE_MYSQL}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}\ {${if eq{${extract{transport}{${lc:$value}}}}{lmtpunix}{yes}{no}}}{no}} address_data = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') user = ${extract{2}{:}{$address_data}{$value}{confVIRT_MDIR_USER}} group = ${extract{3}{:}{$address_data}{$value}{confVIRT_MDIR_GROUP}} no_verify # маршрутизация почты по lmtp по ручному маршруту mailertable_lmtp: driver = manualroute transport = remote_lmtp ifdef(`confMAILERTABLE_LMTP_SKIP_LOCALDOMAINS', `ifelse(confMAILERTABLE_LMTP_SKIP_LOCALDOMAINS, `NO', `dnl', `dnl domains = ! +local_domains ')') dnl ifdef(`confMAILERTABLE_LMTP_SKIP_LOCALDOMAINS', `ifelse(confMAILERTABLE_LMTP_SKIP_LOCALDOMAINS, `NO', `', `')') ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*lmtp\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*lmtp\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*lmtp\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*lmtp\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${lookup mysql{confMAILERTABLE_MYSQL}\ {${if eq{${extract{transport}{${lc:$value}}}}{lmtp}{yes}{no}}}{no}} address_data = ${lookup mysql{confMAILERTABLE_MYSQL}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}\ {${if eq{${extract{transport}{${lc:$value}}}}{lmtp}{yes}{no}}}{no}} address_data = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') route_data = ${sg{\ ${sg{${sg\ {$address_data}\ {\N(?i)([^:\s]+?)\/bestMX\N}\ {\ \N\ ${acl{acl_domain_bestMX}{$1}}\ \N\ }\ }}{\N\s\N}{}}\ }{\N\/\S+$\N}{}} no_verify self = send # использование таблицы ручных маршрутов для выбора транспорта и маршрута для проверки существования адресов получателей mailertable_lmtp_callout: driver = manualroute transport = remote_lmtp ifdef(`confMAILERTABLE_LMTP_SKIP_LOCALDOMAINS', `ifelse(confMAILERTABLE_LMTP_SKIP_LOCALDOMAINS, `NO', `dnl', `dnl domains = ! +local_domains ')') dnl ifdef(`confMAILERTABLE_LMTP_SKIP_LOCALDOMAINS', `ifelse(confMAILERTABLE_LMTP_SKIP_LOCALDOMAINS, `NO', `', `')') ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{${lc:\ LOOKUP_CALLOUTTABLE_TEXT\ }}{\N^(?i)\s*lmtp\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*lmtp\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{${lc:\ LOOKUP_CALLOUTTABLE_DBM\ }}{\N^(?i)\s*lmtp\s*:\s*(\S.+)$\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*lmtp\s*:\s*(\S.+)$\N}{$1}{}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${if match\ {${extract{transport}{${lookup mysql{confMAILERTABLE_CALLOUTTABLE_MYSQL}}}}}\ {\N^(?i)\s*lmtp\s*$\N}\ {yes}{no}} address_data = ${lookup mysql{confMAILERTABLE_CALLOUTTABLE_MYSQL}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${if match\ {${extract{transport}{${lookup sqlite,file=confSQLITE{confMAILERTABLE_CALLOUTTABLE_SQLITE}}}}}\ {\N^(?i)\s*lmtp\s*$\N}\ {yes}{no}} address_data = ${lookup sqlite,file=confSQLITE{confMAILERTABLE_CALLOUTTABLE_SQLITE}\ {${extract{route}{${lc:$value}}}}{}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') route_data = ${sg{\ ${sg{${sg\ {$address_data}\ {\N(?i)([^:\s]+?)\/bestMX\N}\ {\ \N\ ${acl{acl_domain_bestMX}{$1}}\ \N\ }\ }}{\N\s\N}{}}\ }{\N\/\S+$\N}{}} verify_only self = send ')') dnl ifdef(`confMAILERTABLE_LMTP', `ifelse(confMAILERTABLE_LMTP, `NO', `dnl', `')') ifdef(`confMAILERTABLE_SMTP6', `ifelse(confMAILERTABLE_SMTP6, `NO', `dnl', `dnl ifelse_strstr(confIPv6, `YES', `dnl DELIVERY(`mailertable-smtp', `6', `0.0.0.0/0') ') dnl ifelse_strstr(confIPv6, `YES', `') ')') dnl ifdef(`confMAILERTABLE_SMTP6', `ifelse(confMAILERTABLE_SMTP6, `NO', `', `')') ifdef(`confMAILERTABLE_SMTP4', `ifelse(confMAILERTABLE_SMTP4, `NO', `dnl', `dnl DELIVERY(`mailertable-smtp', `4', `<; 0.0.0.0 ; 0000::0000/0') ')') dnl ifdef(`confMAILERTABLE_SMTP4', `ifelse(confMAILERTABLE_SMTP4, `NO', `', `')') DELIVERY(`mailertable-smtp') ') dnl ifelse(SECTION, `ROUTERS', `') ifelse(SECTION, `TRANSPORTS', `dnl ifdef(`confMAILERTABLE_LMTP', `ifelse(confMAILERTABLE_LMTP, `NO', `dnl', `dnl lmtpunix: driver = lmtp socket = ${extract{1}{:}{$address_data}} transport_filter = /usr/bin/tr -d \\000 # batch_max = 20 ifelse_strstr(confMAIL_BACKUP, `ROUTER_REDIRECT', `dnl headers_remove = ${if eq{$local_part@$domain}{confMAIL_BACKUP_ADDR}{}{X-Recipients}} ') dnl ifelse_strstr(confMAIL_BACKUP, `ROUTER_REDIRECT', `') remote_lmtp: driver = smtp protocol = lmtp rcpt_include_affixes = yes transport_filter = /usr/bin/tr -d \\000 port = confLMTP_DEFAULT_PORT ifdef(`confSMTP_AUTH_CLIENT', `ifelse(confSMTP_AUTH_CLIENT, `NO', `dnl', `dnl hosts_try_auth = +hosts_try_auth ')') dnl dnl ifdef(`confSTARTTLS_SKIP_USING', `ifelse(confSTARTTLS_SKIP_USING, `NO', `', `dnl dnl hosts_avoid_tls = +skip_tls_using dnl ')') dnl hosts_avoid_tls = ${if match{$address_data}{\N\/avoid_tls\N}{*}{ifdef(`confSTARTTLS_SKIP_USING', `ifelse(confSTARTTLS_SKIP_USING, `NO', `', `+skip_tls_using')')}} envelope_to_add return_path_add allow_localhost ifelse_strstr(confMAIL_BACKUP, `ROUTER_REDIRECT', `dnl headers_remove = ${if eq{$local_part@$domain}{confMAIL_BACKUP_ADDR}{}{X-Recipients}} ') dnl ifelse_strstr(confMAIL_BACKUP, `ROUTER_REDIRECT', `') ')') dnl ifdef(`confMAILERTABLE_LMTP', `ifelse(confMAILERTABLE_LMTP, `NO', `dnl', `')') ifelse_strstr(confDELIVERY_TO, `MBOX', `dnl # доставка почты домена в mailbox mailertable_local_transport: driver = appendfile delivery_date_add envelope_to_add return_path_add group = mail ifelse(confMAILERTABLE, `TEXT', `dnl user = ${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}} file = /var/mail/${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl user = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}} file = /var/mail/${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*local\s*:\s*(\S+)\s*(:.*)?$\N}\ {$1}{}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${if match\ {${extract{transport}\ {${lookup mysql{confMAILERTABLE_MYSQL}}}\ }}\ {\N^(?i)\s*local\s*$\N}\ {yes}{no}} user = ${extract{route}\ {${lookup mysql{confMAILERTABLE_MYSQL}}}\ } file = /var/mail/${extract{route}\ {${lookup mysql{confMAILERTABLE_MYSQL}}}\ } ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${if match\ {${extract{transport}\ {${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}\ }}\ {\N^(?i)\s*local\s*$\N}\ {yes}{no}} user = ${extract{route}\ {${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}\ } file = /var/mail/${extract{route}\ {${lookup sqlite,file=confSQLITE{confMAILERTABLE_SQLITE}}}\ } ') dnl ifelse(confMAILERTABLE, `SQLITE', `') mode = 0660 no_mode_fail_narrower ifelse_strstr(confMAIL_BACKUP, `ROUTER_REDIRECT', `dnl headers_remove = ${if eq{$local_part@$domain}{confMAIL_BACKUP_ADDR}{}{X-Recipients}} ') dnl ifelse_strstr(confMAIL_BACKUP, `ROUTER_REDIRECT', `') ') dnl ifelse_strstr(confDELIVERY_TO, `MBOX', `') ') dnl ifelse(SECTION, `TRANSPORTS', `')