dnl dnl использование mailertable для выбора транспорта и маршрута для доставки сообщений dnl NO - не использовать mailertable для выбора транспорта и маршрута для доставки сообщений dnl TEXT - использовать отсылку по mailertable в виде текстового файла dnl DBM - использовать отсылку по mailertable в виде DBM файла dnl MYSQL - использовать отсылку по mailertable в виде таблицы в базе данных MYSQL dnl define(`confMAILERTABLE', `NO')dnl dnl dnl использование mailertable для выбора транспорта и маршрута для проверки существования почтовых адресов dnl NO - не использовать mailertable для проверки существования почтовых адресов dnl YES - использовать mailertable для проверки существования почтовых адресов dnl define(`confMAILERTABLE_CALLOUTTABLE', `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_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_CALLOUTTABLE_SQLITE', `SELECT transport, route FROM callouttable WHERE domain="${quote_sqlite:$domain}"')dnl dnl dnl маршруты почты прописываются в CONFDIR/mailertable в виде: dnl domain.tld : smtp : host1 : host2 : host3 dnl domain.tld : lmtp NNN : host dnl domain.tld : local : local_mailbox dnl domain.tld : virt : mailbox@virtual_domain dnl domain.tld : uucp-dom : uucp_dom dnl domain.tld|callout : smtp : host1 : host2 : host3 dnl dnl где local - доставка почты домена в локальный mailbox dnl virt - доставка почты домена в mailbox в виртуальном домене dnl uucp-dom - доставка почты домена в uucp mailbox dnl lmtp NNN - доставка почты домена по lmtp по маршруту с использованием порта NNN dnl smtp - доставка почты домена по smtp по маршруту dnl при этом можно вместо имени хоста применить конструкцию mx(domain) dnl при этом в начале configure должен быть подключен файл exim.pl с функцией sortmx: dnl dnl sub sortmx() { dnl if(not defined(@_)) { dnl return(undef); dnl } else { dnl my($mxs) = shift; dnl my(%mx_list, $mx, $prec, $line); dnl foreach $mx (split(/\n/m, $mxs)) { dnl ($prec, $line) = split(/\s+/, $mx); dnl $prec += 20000; dnl $mx_list{$prec} = $line; dnl } dnl if (%mx_list) { dnl my($res); dnl foreach (sort(keys(%mx_list))) { dnl $res .= ':' if ($res); dnl $res .= $mx_list{$_}; dnl } dnl return($res); dnl } else { dnl return('not found'); dnl } dnl } dnl } dnl ifelse(SECTION, `MAIN', `dnl dnl ifdef(`confPERL',`',` dnl errprint(`*** ERROR: confPERL variable required dnl ')') dnl ifdef(`confPERL',`',`') ifelse(confMAILERTABLE, `TEXT', `dnl LOOKUP_MAILERTABLE_TEXT = \ ${lookup{$local_part@$domain}wildlsearch{CONFDIR/mailertable}{$value}{\ ${lookup{$domain}wildlsearch{CONFDIR/mailertable}}\ }} ') 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}}\ }} ') 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{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{confSQLITE confMAILERTABLE_SQLITE}}}}}\ {\N^(?i)\s*virt\s*$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') endpass ') ifelse(SECTION, `ROUTERS', `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{confSQLITE confMAILERTABLE_SQLITE}}}}}\ {\N^(?i)\s*virt\s*$\N}\ {yes}{no}} data = ${extract{route}{${lookup sqlite{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{confSQLITE confMAILERTABLE_SQLITE}}}}}\ {\N^(?i)\s*local\s*$\N}\ {yes}{no}} user = ${extract{route}{${lookup sqlite{confSQLITE confMAILERTABLE_SQLITE}}}} require_files = /home/\ ${extract{route}{${lookup sqlite{confSQLITE confMAILERTABLE_SQLITE}}}}\ /.forward file = /home/\ ${extract{route}{${lookup sqlite{confSQLITE confMAILERTABLE_SQLITE}}}}\ /.forward ') dnl ifelse(confMAILERTABLE, `SQLITE', `') # no_verify no_expn check_ancestor file_transport = address_file pipe_transport = address_pipe reply_transport = 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{confSQLITE confMAILERTABLE_SQLITE}}}}}\ {\N^(?i)\s*local\s*$\N}\ {yes}{no}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') # no_verify ') # роутинг почты по lmtp mailertable_lmtp: driver = accept transport = remote_lmtp_mailertable domains = ! +local_domains ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*lmtp\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*(\S+)\s*(\d+)?\s*:\s*(\S.+)$\N}\ {condition=yes transport=$1 route="$3" port=$2}{condition=no}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*lmtp\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*(\S+)\s*(\d+)?\s*:\s*(\S.+)$\N}\ {condition=yes transport=$1 route="$3" port=$2}{condition=no}} ') 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}\ {condition=yes ${lc:$value}}{condition=no}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${lookup sqlite{confSQLITE confMAILERTABLE_SQLITE}\ {${if eq{${extract{transport}{${lc:$value}}}}{lmtp}{yes}{no}}}{no}} address_data = ${lookup sqlite{confSQLITE confMAILERTABLE_SQLITE}\ {condition=yes ${lc:$value}}{condition=no}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') # роутинг почты по smtp mailertable_smtp: driver = manualroute transport = remote_smtp_mailertable ifelse_strstr(confDSN, `SMTP', `dnl dsn_process ') dnl domains = ! +local_domains ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_TEXT\ }{\N^(?i)\s*smtp\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_TEXT\ }}{\N^(?i)\s*(\S+)\s*(\d+)?\s*:\s*(\S.+)$\N}\ {condition=yes transport=$1 route="$3" port=$2}{condition=no}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match{\ LOOKUP_MAILERTABLE_DBM\ }{\N^(?i)\s*smtp\N}{yes}{no}} address_data = ${if match{${lc:\ LOOKUP_MAILERTABLE_DBM\ }}{\N^(?i)\s*(\S+)\s*(\d+)?\s*:\s*(\S.+)$\N}\ {condition=yes transport=$1 route="$3" port=$2}{condition=no}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${lookup mysql{confMAILERTABLE_MYSQL}\ {${if eq{${extract{transport}{${lc:$value}}}}{smtp}{yes}{no}}}{no}} address_data = ${lookup mysql{confMAILERTABLE_MYSQL}\ {condition=yes ${lc:$value}}{condition=no}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${lookup sqlite{confSQLITE confMAILERTABLE_SQLITE}\ {${if eq{${extract{transport}{${lc:$value}}}}{smtp}{yes}{no}}}{no}} address_data = ${lookup sqlite{confSQLITE confMAILERTABLE_SQLITE}\ {condition=yes ${lc:$value}}{condition=no}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') ifdef(`confPERL', ` route_data = ${sg{${sg\ {${extract{route}{$address_data}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${perl{sortmx}{${lookup dnsdb{mx=$1}}}}\N}\ }}{\N\s\N}{}} ', ` route_data = ${sg{${sg\ {${extract{route}{$address_data}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${lookup dnsdb{mx=$1}}\N}\ }}{\N\s\N}{}} ')dnl ifdef(`confPERL', `') no_verify self = send ifelse_strstr(confMAILERTABLE_CALLOUTTABLE, `YES', ` # использование mailertable для выбора транспорта и маршрута для проверки существования почтовых адресов callout_smtp_another_port: driver = manualroute transport = remote_smtp_callout domains = ! +local_domains ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match\ {${lookup{$domain|callout}wildlsearch{CONFDIR/mailertable}}}\ {\N^(?i)\s*smtp\s*(\d+)\s*:\s*(\S.+)$\N}\ {yes}{no}} ifdef(`confPERL', ` route_data = ${sg{\ ${if match\ {${sg\ {${lookup{$domain|callout}wildlsearch{CONFDIR/mailertable}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${perl{sortmx}{${lookup dnsdb{mx=$1}}}}\N}\ }}\ {\N^(?i)\s*smtp\s*(\d+)\s*:\s*(\S.+)$\N}\ {$2}{}}\ }{\N\s\N}{}} ', ` route_data = ${sg{\ ${if match\ {${sg\ {${lookup{$domain|callout}wildlsearch{CONFDIR/mailertable}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${lookup dnsdb{mx=$1}}\N}\ }}\ {\N^(?i)\s*smtp\s*(\d+)\s*:\s*(\S.+)$\N}\ {$2}{}}\ }{\N\s\N}{}} ')dnl ifdef(`confPERL', `') ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match\ {${lookup{$domain|callout}dbm{CONFDIR/mailertable.db}}}\ {\N^(?i)\s*smtp\s*(\d+)\s*:\s*(\S.+)$\N}\ {yes}{no}} ifdef(`confPERL', ` route_data = ${sg{\ ${if match\ {${sg\ {${lookup{$domain|callout}dbm{CONFDIR/mailertable.db}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${perl{sortmx}{${lookup dnsdb{mx=$1}}}}\N}\ }}\ {\N^(?i)\s*smtp\s*(\d+)\s*:\s*(\S.+)$\N}\ {$2}{}}\ }{\N\s\N}{}} ', ` route_data = ${sg{\ ${if match\ {${sg\ {${lookup{$domain|callout}dbm{CONFDIR/mailertable.db}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${lookup dnsdb{mx=$1}}\N}\ }}\ {\N^(?i)\s*smtp\s*(\d+)\s*:\s*(\S.+)$\N}\ {$2}{}}\ }{\N\s\N}{}} ')dnl ifdef(`confPERL', `') ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${if match\ {${extract{transport}{${lookup mysql{confMAILERTABLE_CALLOUTTABLE_MYSQL}}}}}\ {\N^(?i)\s*smtp\s*$\N}\ {yes}{no}} route_data = ${sg{\ ${extract{route}{${lookup mysql{confMAILERTABLE_CALLOUTTABLE_MYSQL}}}}\ }{\N\s\N}{}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${if match\ {${extract{transport}{${lookup sqlite{confSQLITE confMAILERTABLE_CALLOUTTABLE_SQLITE}}}}}\ {\N^(?i)\s*smtp\s*$\N}\ {yes}{no}} route_data = ${sg{\ ${extract{route}{${lookup sqlite{confSQLITE confMAILERTABLE_CALLOUTTABLE_SQLITE}}}}\ }{\N\s\N}{}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') verify_only # использование mailertable для выбора транспорта и маршрута для проверки существования почтовых адресов callout_smtp: driver = manualroute transport = remote_smtp domains = ! +local_domains ifelse(confMAILERTABLE, `TEXT', `dnl condition = ${if match\ {${lookup{$domain|callout}wildlsearch{CONFDIR/mailertable}}}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {yes}{no}} ifdef(`confPERL', ` route_data = ${sg{\ ${if match\ {${sg\ {${lookup{$domain|callout}wildlsearch{CONFDIR/mailertable}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${perl{sortmx}{${lookup dnsdb{mx=$1}}}}\N}\ }}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {$1}{}}\ }{\N\s\N}{}} ', ` route_data = ${sg{\ ${if match\ {${sg\ {${lookup{$domain|callout}wildlsearch{CONFDIR/mailertable}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${lookup dnsdb{mx=$1}}\N}\ }}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {$1}{}}\ }{\N\s\N}{}} ')dnl ifdef(`confPERL', `') ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl condition = ${if match\ {${lookup{$domain|callout}dbm{CONFDIR/mailertable.db}}}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {yes}{no}} ifdef(`confPERL', ` route_data = ${sg{\ ${if match\ {${sg\ {${lookup{$domain|callout}dbm{CONFDIR/mailertable.db}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${perl{sortmx}{${lookup dnsdb{mx=$1}}}}\N}\ }}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {$1}{}}\ }{\N\s\N}{}} ', ` route_data = ${sg{\ ${if match\ {${sg\ {${lookup{$domain|callout}dbm{CONFDIR/mailertable.db}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${lookup dnsdb{mx=$1}}\N}\ }}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {$1}{}}\ }{\N\s\N}{}} ')dnl ifdef(`confPERL', `') ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl condition = ${if match\ {${extract{transport}{${lookup mysql{confMAILERTABLE_CALLOUTTABLE_MYSQL}}}}}\ {\N^(?i)\s*smtp\s*$\N}\ {yes}{no}} ifdef(`confPERL', ` route_data = ${sg{\ ${if match\ {${sg{${extract{route}{${lookup mysql{confMAILERTABLE_CALLOUTTABLE_MYSQL}}}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${perl{sortmx}{${lookup dnsdb{mx=$1}}}}\N}\ }}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {$1}{}}\ }{\N\s\N}{}} ', ` route_data = ${sg{\ ${if match\ {${sg{${extract{route}{${lookup mysql{confMAILERTABLE_CALLOUTTABLE_MYSQL}}}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${lookup dnsdb{mx=$1}}\N}\ }}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {$1}{}}\ }{\N\s\N}{}} ')dnl ifdef(`confPERL', `') ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl condition = ${if match\ {${extract{transport}{${lookup sqlite{confSQLITE confMAILERTABLE_CALLOUTTABLE_SQLITE}}}}}\ {\N^(?i)\s*smtp\s*$\N}\ {yes}{no}} ifdef(`confPERL', ` route_data = ${sg{\ ${if match\ {${sg{${extract{route}{${lookup sqlite{confSQLITE confMAILERTABLE_CALLOUTTABLE_SQLITE}}}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${perl{sortmx}{${lookup dnsdb{mx=$1}}}}\N}\ }}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {$1}{}}\ }{\N\s\N}{}} ', ` route_data = ${sg{\ ${if match\ {${sg{${extract{route}{${lookup sqlite{confSQLITE confMAILERTABLE_CALLOUTTABLE_SQLITE}}}}}\ {\N(?i)mx\(([^:]+?)\)\N}\ {\N${lookup dnsdb{mx=$1}}\N}\ }}\ {\N^(?i)\s*smtp\s*:\s*(\S.+)$\N}\ {$1}{}}\ }{\N\s\N}{}} ')dnl ifdef(`confPERL', `') ') dnl ifelse(confMAILERTABLE, `SQLITE', `') verify_only ') dnl ifelse_strstr(confMAILERTABLE_CALLOUTTABLE, `YES', `') ') dnl ifelse(SECTION, `ROUTERS', `') ifelse(SECTION, `TRANSPORTS', `dnl remote_lmtp_mailertable: driver = smtp protocol = lmtp rcpt_include_affixes = yes transport_filter = /usr/bin/tr -d \\000 envelope_to_add hosts = ${extract{route}{$address_data}} port = ${if eq{${extract{port}{$address_data}}}{}{lmtp}{${extract{port}{$address_data}}}} allow_localhost ifdef(`confSMTP_AUTH_CLIENT', `ifelse(confSMTP_AUTH_CLIENT, `NO', `dnl', `dnl hosts_try_auth = +hosts_try_auth ')') ifdef(`confSTARTTLS_SKIP_USING', `ifelse(confSTARTTLS_SKIP_USING, `NO', `dnl', `dnl hosts_avoid_tls = +skip_tls_using ')') dnl remote_smtp_mailertable: driver = smtp ifdef(`confSMTP_AUTH_CLIENT', `ifelse(confSMTP_AUTH_CLIENT, `NO', `dnl', `dnl hosts_try_auth = +hosts_try_auth ')') ifdef(`confSTARTTLS_SKIP_USING', `ifelse(confSTARTTLS_SKIP_USING, `NO', `dnl', `dnl hosts_avoid_tls = +skip_tls_using ')') dnl port = ${if eq{${extract{port}{$address_data}}}{}{smtp}{${extract{port}{$address_data}}}} sinclude(confSITE_DIR`/configure.smtp_transport_options')dnl allow_localhost ifelse_strstr(confMAILERTABLE_CALLOUTTABLE, `YES', ` remote_smtp_callout: driver = smtp ifdef(`confSMTP_AUTH_CLIENT', `ifelse(confSMTP_AUTH_CLIENT, `NO', `dnl', `dnl hosts_try_auth = +hosts_try_auth ')') ifdef(`confSTARTTLS_SKIP_USING', `ifelse(confSTARTTLS_SKIP_USING, `NO', `dnl', `dnl hosts_avoid_tls = +skip_tls_using ')') dnl ifelse(confMAILERTABLE, `TEXT', `dnl port = ${if match\ {${lookup{$domain|callout}wildlsearch{CONFDIR/mailertable}}}\ {\N^(?i)\s*smtp\s*(\d+)\s*:\s*(\S.+)$\N}\ {$1}{smtp}} ') dnl ifelse(confMAILERTABLE, `TEXT', `') ifelse(confMAILERTABLE, `DBM', `dnl port = ${if match\ {${lookup{$domain|callout}dbm{CONFDIR/mailertable.db}}}\ {\N^(?i)\s*smtp\s*(\d+)\s*:\s*(\S.+)$\N}\ {$1}{smtp}} ') dnl ifelse(confMAILERTABLE, `DBM', `') ifelse(confMAILERTABLE, `MYSQL', `dnl port = ${extract{port}{${lookup mysql{confMAILERTABLE_CALLOUTTABLE_MYSQL}}}} ') dnl ifelse(confMAILERTABLE, `MYSQL', `') ifelse(confMAILERTABLE, `SQLITE', `dnl port = ${extract{port}{${lookup sqlite{confSQLITE confMAILERTABLE_CALLOUTTABLE_SQLITE}}}} ') dnl ifelse(confMAILERTABLE, `SQLITE', `') allow_localhost ') dnl ifelse_strstr(confMAILERTABLE_CALLOUTTABLE, `YES', `') 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{confSQLITE confMAILERTABLE_SQLITE}}}\ }}\ {\N^(?i)\s*local\s*$\N}\ {yes}{no}} user = ${extract{route}\ {${lookup sqlite{confSQLITE confMAILERTABLE_SQLITE}}}\ } file = /var/mail/${extract{route}\ {${lookup sqlite{confSQLITE confMAILERTABLE_SQLITE}}}\ } ') dnl ifelse(confMAILERTABLE, `SQLITE', `') mode = 0660 no_mode_fail_narrower ifelse_strstr(confDSN, `LOCAL', `dnl # DSN support for local recipients shadow_transport = DSN_local shadow_condition = ${if and{\ {!eq{${extract{Return_Receipt_To}{$acl_m19}}}{}}\ {match{${extract{rcpt}{$acl_m19}}}{, ${original_local_part}@${original_domain},}}\ }{yes}{no}} ') dnl ') dnl ifelse_strstr(confDELIVERY_TO, `MBOX', `') ') dnl ifelse(SECTION, `TRANSPORTS', `')