dnl dnl Доставка в виртуальные maildir'ы в /var/vmail/$domain dnl dnl локальная доставка (список) dnl MBOX - доставка в mailbox'ы в /var/mail dnl с MBOX можно указывать через пробел: dnl FILTERS - использование .forward в качестве фильтров dnl PROCMAIL - использование .procmailrc в качестве фильтров dnl MDIR_USER - доставка в maildir'ы в $home/Maildir (еще не работает) dnl с MDIR_USER можно указывать через пробел: dnl FILTERS - использование .forward в качестве фильтров dnl PROCMAIL - использование .procmailrc в качестве фильтров dnl MDIR_VIRTUAL - доставка в виртуальные maildir'ы в /var/vmail/$domain dnl с MDIR_USER и MDIR_VIRTUAL можно указывать через пробел: dnl FILTERS - использование .forward в качестве фильтров dnl PROCMAIL - использование .procmailrc в качестве фильтров dnl PIPE - использование внешнего LDA dnl define(`confDELIVERY_TO', `MDIR_VIRTUAL FILTERS')dnl dnl dnl dnl при наличии MDIR_VIRTUAL в confDELIVERY_TO: dnl dnl корневой каталог Maildir'ов виртуальных доменов dnl define(`confVIRT_MDIR_ROOT', `/var/vmail')dnl dnl dnl пользователь, от имени которого доставляется почта в virtual maildir'ы dnl define(`confVIRT_MDIR_USER', `mailnull')dnl dnl группа, от имени которой доставляется почта в virtual maildir'ы dnl define(`confVIRT_MDIR_GROUP', `mail')dnl dnl dnl место хранение списка пользователей dnl SINGLE_FILE - хранение списка пользователей в файле типа passwd dnl DOMAINS_FILES - хранение списка пользователей в отдельных файлах для каждого домена dnl MYSQL - хранение списка пользователей в БД MySQL dnl PGSQL - хранение списка пользователей в БД PgSQL dnl SQLITE - хранение списка пользователей в БД SQLite dnl define(`confVIRT_MDIR_USERLIST', `DOMAINS_FILES')dnl dnl dnl путь к файлу типа passwd (если confVIRT_MDIR_USERLIST содержит SINGLE_FILE) dnl define(`confVIRT_MDIR_USERLIST_SINGLE', `/usr/local/etc/passwd.imap')dnl dnl dnl путь к отдельным файлам для каждого домена (если confVIRT_MDIR_USERLIST содержит DOMAINS_FILES) dnl определяется как confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/passwd dnl dnl синтаксис SQL запроса к MySQL (если confVIRT_MDIR_USERLIST=MYSQL) dnl define(`confVIRT_MDIR_MYSQL', `SELECT id, maildir as home, maildir as maildir FROM passwd WHERE id="${quote_mysql:$local_part@$domain}"')dnl dnl define(`confVIRT_MDIR_MYSQL', `SELECT userid FROM dbmail_users WHERE userid="${quote_mysql:$local_part@$domain}"')dnl dnl define(`confVIRT_MDIR_MYSQL2', `SELECT alias FROM dbmail_aliases WHERE alias="${quote_mysql:$local_part@$domain}" OR alias="${quote_mysql:@$domain}"')dnl dnl dnl синтаксис SQL запроса к PgSQL (если confVIRT_MDIR_USERLIST=PGSQL) dnl changequote(<<, >>) dnl define(<>, <>)dnl dnl changequote dnl dnl синтаксис SQL запроса к SQLite (если confVIRT_MDIR_USERLIST=SQLITE) dnl define(`confVIRT_MDIR_SQLITE', `SELECT id, maildir as home, maildir as maildir FROM passwd WHERE id="${quote_sqlite:$local_part@$domain}"')dnl dnl define(`confVIRT_MDIR_SQLITE', `SELECT userid as id FROM dbmail_users WHERE userid="${quote_mysql:$local_part@$domain}"')dnl dnl define(`confVIRT_MDIR_SQLITE2', `SELECT alias FROM dbmail_aliases WHERE alias="${quote_mysql:$local_part@$domain}" OR alias="${quote_mysql:@$domain}"')dnl dnl dnl синтаксис LDAP запроса (если confVIRT_MDIR_USERLIST=LDAP) и преобразование результата выполнения запроса dnl confVIRT_MDIR_LDAP в путь к maildir получателя: dnl пример 1: dnl define(`confVIRT_MDIR_LDAP', `user="cn=Manager,dc=domain,dc=tld" pass=xxxxxxxx ldap://127.0.0.1/cn=Users,dc=domain,dc=tld?uid?sub?(uid=$local_part@$domain)')dnl dnl define(`confVIRT_MDIR_PATH_LDAP', `/var/vmail/$domain/$local_part/')dnl dnl пример 2: dnl define(`confVIRT_MDIR_LDAP', `user="cn=Manager,dc=domain,dc=tld" pass=xxxxxxxx ldap://127.0.0.1/cn=Users,dc=domain,dc=tld?uid,homeDirectory?sub?(uid=$local_part@$domain)')dnl dnl define(`confVIRT_MDIR_PATH_LDAP', `/var/vmail/${extract{homeDirectory}{$address_data}}')dnl dnl пример 3 (AD): dnl define(`confVIRT_MDIR_LDAP', `user="user@domain.tld" pass=xxxxxxxx ldap://192.168.0.1/cn=Users,dc=domain,dc=tld?sAMAccountName?sub?(sAMAccountName=$local_part)')dnl dnl define(`confVIRT_MDIR_PATH_LDAP', `/var/vmail/AD/$address_data/')dnl dnl dnl права на maildir'ы и файлы с письмами dnl define(`confVIRT_MDIR_DIR_MODE', `0750')dnl dnl define(`confVIRT_MDIR_FILE_MODE', `0640')dnl dnl dnl место хранения алиасов: dnl SINGLE_FILE - хранение алиасов в текстовом файле virt_aliases dnl SINGLE_DBM - хранение алиасов в DBM файле virt_aliases.db dnl DOMAINS_FILES - хранение алиасов в отдельных текстовых файлах для каждого домена dnl DOMAINS_DBM - хранение алиасов в отдельных DBM файлах для каждого домена dnl MYSQL - хранение алиасов в БД MySQL (только при confVIRT_MDIR_USERLIST==MYSQL) dnl SQLITE - хранение алиасов в БД SQLite (только при confVIRT_MDIR_USERLIST==SQLITE) dnl define(`confVIRT_MDIR_ALIASES', `DOMAINS_DBM')dnl dnl dnl define(`confVIRT_MDIR_ALIASES_SINGLE', `CONFDIR/virt_aliases')dnl dnl define(`confVIRT_MDIR_MYSQL_ALIAS', `SELECT address FROM aliases WHERE alias="${quote_mysql:$local_part@$domain}"')dnl dnl define(`confVIRT_MDIR_SQLITE_ALIAS', `SELECT address FROM aliases WHERE alias="${quote_sqlite:$local_part@$domain}"')dnl dnl define(`confVIRT_MDIR_LDAP_ALIAS', `user="ldapuser@ad.domain.tld" pass=xxxxxxxxxxx \ dnl ldap://dc.ad.domain.tld/dc=ad,dc=domain,dc=tld?sAMAccountName?sub?\ dnl (&\ dnl (memberOf=CN=Mail Users,OU=Mail,DC=ad,DC=domain,DC=tld)\ dnl (memberOf=CN=alias_${local_part},OU=Mail,DC=ad,DC=domain,DC=tld)\ dnl )')dnl dnl define(`confVIRT_MDIR_LDAP_ALIAS2', `user="ldapuser@ad.domain.tld" pass=xxxxxxxxxxx \ dnl ldap://dc.ad.domain.tld/dc=ad,dc=domain,dc=tld?sAMAccountName?sub?\ dnl (&\ dnl (objectClass=user)\ dnl (sAMAccountName=$local_part)\ dnl (memberOf=CN=Mail Users,OU=Mail,DC=ad,DC=domain,DC=tld)\ dnl )')dnl dnl dnl путь к отдельным файлам для каждого домена (если confVIRT_MDIR_ALIASES содержит DOMAINS_FILES или DOMAINS_DBM) dnl определяется как confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/aliases или dnl confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/aliases.db соответственно dnl dnl использование квоты dnl NO - не использовать проверку квоты dnl TRANSPORT_MAILDIRSIZE - проверять квоту на этапе доставки с использованием файла maildirsize dnl TRANSPORT - проверять квоту на этапе доставки, каждый раз расчитывая размер maildir'а пользователя dnl VERIFY_RCPT_MAILDIRSIZE_DEFER - проверять квоту на этапе RCPT TO с использованием файла maildirsize; dnl в случае превышения квоты возвращать defer dnl VERIFY_RCPT_MAILDIRSIZE_REJECT - проверять квоту на этапе RCPT TO с использованием файла maildirsize; dnl в случае превышения квоты возвращать reject/deny dnl define(`confVIRT_MDIR_QUOTA', `NO')dnl dnl define(`confVIRT_MDIR_QUOTA_DIR_REGEX', `^(?:cur|new|\.(?!Trash).*)$')dnl dnl dnl вычисление размера квоты: dnl define(`confVIRT_MDIR_QUOTA_SIZE', `0')dnl dnl define(`confVIRT_MDIR_QUOTA_SIZE', `100M')dnl dnl define(`confVIRT_MDIR_QUOTA_SIZE', `${if eq{$domain}{some.domain}{20M}{300M}}')dnl dnl define(`confVIRT_MDIR_QUOTA_SIZE', `${lookup mysql{SELECT quota FROM users WHERE user="${quote_mysql:$local_part@$domain}"}{$value}fail}')dnl dnl define(`confVIRT_MDIR_QUOTA_SIZE', `${lookup mysql{SELECT quota FROM users WHERE user="${quote_mysql:$local_part@$domain}"}{$value}{0}}')dnl dnl при TRANSPORT_MAILDIRSIZE и TRANSPORT нулевой размер квоты означает отсутствие квоты dnl временно: при VERIFY_RCPT_MAILDIRSIZE_DEFER и VERIFY_RCPT_MAILDIRSIZE_REJECT нулевой размер квоты означает превышение квоты dnl dnl при наличии MDIR_USER и PIPE в confDELIVERY_TO: dnl dnl командная строка для запуска LDA: dnl define(`confVIRT_MDIR_PIPE', `/usr/local/libexec/dovecot/deliver -d $local_part@$domain')dnl dnl define(`confVIRT_MDIR_PIPE', `/usr/local/sbin/dbmail-smtp -d $local_part@$domain')dnl dnl dnl LDA будет запущен от имени пользователя, указанного в confVIRT_MDIR_USER, и от имени группы, указанной в confVIRT_MDIR_GROUP dnl dnl ############################## routers ############################## dnl # ifelse(SECTION, `ROUTERS', `dnl ifdef(`confVIRT_MDIR_PATH',`',`define(`confVIRT_MDIR_PATH', confVIRT_MDIR_ROOT`/${domain}/${local_part}')') # delivery to virtual maildirs DELIVERY(`virtual_aliases')dnl DELIVERY(`backup_incoming')dnl ifelse_strstr(confVIRT_MDIR_USERLIST, `DOMAINS_FILES', `dnl virtual_domains_perdomain: driver = accept domains = +local_domains ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') require_files = confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/passwd local_parts = lsearch;confVIRT_MDIR_DOMAIN_SETTINGS/${domain}/passwd ifdef(`confHEADERS_REMOVE_VIRTUAL_DOMAINS', ` headers_remove = confHEADERS_REMOVE_VIRTUAL_DOMAINS ') transport = delivery_to_virt_domain log_as_local = false ')dnl ifelse_strstr(confVIRT_MDIR_USERLIST, `DOMAINS_FILES', `') ifelse_strstr(confVIRT_MDIR_USERLIST, `SINGLE_FILE', `dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `dnl virtual_domains_check_quota: driver = redirect domains = +local_domains ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') group = confVIRT_MDIR_GROUP user = confVIRT_MDIR_USER condition = \ # ${lookup {${local_part}@${domain}}lsearch{confVIRT_MDIR_USERLIST_SINGLE}{\ ${if exists{confVIRT_MDIR_PATH/maildirsize}{\ ${if >=\ {${eval:\ ${sg{${sg{${readfile{confVIRT_MDIR_PATH/maildirsize}{\n}}}{\N^.+?\n\N}{}}}{\N(?s)\s+-?\d+\n\N}{+}}\ ${if <{$message_size}{1}{10k}{$message_size}}\ }}\ {confVIRT_MDIR_QUOTA_SIZE}\ {yes}{no}}\ }{no}}\ # }{yes}} verify_only allow_fail ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE_DEFER', `dnl allow_defer data = ${lookup {${local_part}@${domain}}lsearch{confVIRT_MDIR_USERLIST_SINGLE}{:defer:Over quota}{:fail:${local_part}@${domain}User ${local_part}@${domain} is unknown}} ', ` data = ${lookup {${local_part}@${domain}}lsearch{confVIRT_MDIR_USERLIST_SINGLE}{:fail:Over quota}{:fail:User ${local_part}@${domain} is unknown}} ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE_DEFER', `') ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `') virtual_domains: driver = accept domains = +local_domains ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') condition = ${lookup {${local_part}@${domain}}lsearch{confVIRT_MDIR_USERLIST_SINGLE}{yes}{no}} ifdef(`confHEADERS_REMOVE_VIRTUAL_DOMAINS', ` headers_remove = confHEADERS_REMOVE_VIRTUAL_DOMAINS ') transport = delivery_to_virt_domain log_as_local = false ') dnl ifelse_strstr(confVIRT_MDIR_USERLIST, `SINGLE_FILE', `') ifelse_strstr(confVIRT_MDIR_USERLIST, `CYRUS-IMAPD', `dnl virtual_domains_cyrus_imapd: driver = accept domains = +local_domains transport = delivery_to_virt_domain ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') user = confVIRT_MDIR_USER group = confVIRT_MDIR_GROUP require_files = confVIRT_MDIR_CYRUS_MBPATH_PATH condition = ${run {confVIRT_MDIR_CYRUS_MBPATH_PATH -q -s user.${lc:$local_part@$domain}}{yes}{no}} ') dnl ifelse_strstr(confVIRT_MDIR_USERLIST, `CYRUS-IMAPD', `') ifelse_strstr(confVIRT_MDIR_USERLIST, `MYSQL', `dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `dnl virtual_domains_mysql_check_quota: driver = redirect domains = +local_domains ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') group = confVIRT_MDIR_GROUP user = confVIRT_MDIR_USER condition = \ # ${lookup mysql{confVIRT_MDIR_MYSQL}{ ${if exists{${extract{maildir}{${lookup mysql{confVIRT_MDIR_MYSQL}}}}/maildirsize}{\ ${if >=\ {${eval:\ ${sg{${sg{${readfile{${extract{maildir}{${lookup mysql{confVIRT_MDIR_MYSQL}}}}/maildirsize}{\n}}}{\N^.+?\n\N}{}}}{\N(?s)\s+-?\d+\n\N}{+}}\ ${if <{$message_size}{1}{10k}{$message_size}}\ }}\ {confVIRT_MDIR_QUOTA_SIZE}\ {yes}{no}}\ }{no}}\ # }{yes}} verify_only allow_fail ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE_DEFER', `dnl allow_defer data = ${lookup mysql{confVIRT_MDIR_MYSQL}{:defer:Over quota}{:fail:User ${local_part}@${domain} is unknown}} ', ` data = ${lookup mysql{confVIRT_MDIR_MYSQL}{:fail:Over quota}{:fail:User ${local_part}@${domain} is unknown}} ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE_DEFER', `') ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `') virtual_domains_mysql: driver = accept domains = +local_domains ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') address_data = ${lookup mysql{ \ confVIRT_MDIR_MYSQL \ }{$value}ifdef(`confVIRT_MDIR_MYSQL2', `ifelse(`X'confVIRT_MDIR_MYSQL2, `X', `fail', `{${lookup mysql{ \ confVIRT_MDIR_MYSQL2 \ }{$value}fail}}')',`fail')} ifdef(`confHEADERS_REMOVE_VIRTUAL_DOMAINS', ` headers_remove = confHEADERS_REMOVE_VIRTUAL_DOMAINS ') transport = delivery_to_virt_domain log_as_local = false ') dnl ifelse_strstr(confVIRT_MDIR_USERLIST, `MYSQL', `') ifelse_strstr(confVIRT_MDIR_USERLIST, `PGSQL', `dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `dnl virtual_domains_pgsql_check_quota: driver = redirect domains = +local_domains ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') group = confVIRT_MDIR_GROUP user = confVIRT_MDIR_USER condition = \ # ${lookup pgsql{confVIRT_MDIR_PGSQL}{ ${if exists{${extract{maildir}{${lookup pgsql{confVIRT_MDIR_PGSQL}}}}/maildirsize}{\ ${if >=\ {${eval:\ ${sg{${sg{${readfile{${extract{maildir}{${lookup pgsql{confVIRT_MDIR_PGSQL}}}}/maildirsize}{\n}}}{\N^.+?\n\N}{}}}{\N(?s)\s+-?\d+\n\N}{+}}\ ${if <{$message_size}{1}{10k}{$message_size}}\ }}\ {confVIRT_MDIR_QUOTA_SIZE}\ {yes}{no}}\ }{no}}\ # }{yes}} verify_only allow_fail ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE_DEFER', `dnl allow_defer data = ${lookup pgsql{confVIRT_MDIR_PGSQL}{:defer:Over quota}{:fail:User ${local_part}@${domain} is unknown}} ', ` data = ${lookup pgsql{confVIRT_MDIR_PGSQL}{:fail:Over quota}{:fail:User ${local_part}@${domain} is unknown}} ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE_DEFER', `') ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `') virtual_domains_pgsql: driver = accept domains = +local_domains ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') address_data = ${lookup pgsql{ \ confVIRT_MDIR_PGSQL \ }{$value}ifdef(`confVIRT_MDIR_PGSQL2', `ifelse(`X'confVIRT_MDIR_PGSQL2, `X', `fail', `{${lookup pgsql{ \ confVIRT_MDIR_PGSQL2 \ }{$value}fail}}')',`fail')} ifdef(`confHEADERS_REMOVE_VIRTUAL_DOMAINS', ` headers_remove = confHEADERS_REMOVE_VIRTUAL_DOMAINS ') transport = delivery_to_virt_domain log_as_local = false ') dnl ifelse_strstr(confVIRT_MDIR_USERLIST, `PGSQL', `') ifelse_strstr(confVIRT_MDIR_USERLIST, `SQLITE', `dnl virtual_domains_sqlite: driver = accept domains = +local_domains ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') address_data = ${lookup sqlite{confSQLITE \ confVIRT_MDIR_SQLITE \ }{$value}ifdef(`confVIRT_MDIR_SQLITE2', `ifelse(`X'confVIRT_MDIR_SQLITE2, `X', `fail', `{${lookup sqlite{confSQLITE \ confVIRT_MDIR_SQLITE2 \ }{$value}fail}}')',`fail')} ifdef(`confHEADERS_REMOVE_VIRTUAL_DOMAINS', ` headers_remove = confHEADERS_REMOVE_VIRTUAL_DOMAINS ') transport = delivery_to_virt_domain log_as_local = false ') dnl ifelse_strstr(confVIRT_MDIR_USERLIST, `SQLITE', `') ifelse_strstr(confVIRT_MDIR_USERLIST, `LDAP', `dnl virtual_domains_ldap: driver = accept domains = +local_domains ifdef(`confLOCAL_PART_SUFFIX', `ifelse(confLOCAL_PART_SUFFIX, `NO', `dnl', `dnl local_part_suffix = confLOCAL_PART_SUFFIX local_part_suffix_optional ')') address_data = ${lookup ldap{\ confVIRT_MDIR_LDAP\ }{$value}fail} ifdef(`confHEADERS_REMOVE_VIRTUAL_DOMAINS', ` headers_remove = confHEADERS_REMOVE_VIRTUAL_DOMAINS ') transport = delivery_to_virt_domain log_as_local = false ') dnl ifelse_strstr(confVIRT_MDIR_USERLIST, `LDAP', `') ')dnl ifelse(SECTION, `ROUTERS', `') dnl # dnl ############################## routers ############################## dnl ############################## transports ############################## dnl # ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', ` define(`_FOLDER_', `${if eq{$acl_m_quarantined}{yes}{/confCONTENT_SCANNING_PERSONAL_QUARANTINE_FOLDER}{}}') ', ` define(`_FOLDER_', `') ') dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `') ifelse(SECTION, `TRANSPORTS', `dnl DELIVERY(`backup_maildir_delivery')dnl ifelse_strstr(confDELIVERY_TO, `PIPE', ` delivery_to_virt_domain: driver = ifelse_strstr(confDELIVERY_TO, `PIPE-LMTP', `lmtp', `pipe') command = confVIRT_MDIR_PIPE user = confVIRT_MDIR_USER group = confVIRT_MDIR_GROUP delivery_date_add envelope_to_add return_path_add ifelse_strstr(confDELIVERY_TO, `PIPE-LMTP', `', ` return_fail_output # log_output log_fail_output message_prefix = message_suffix = ') dnl ifelse_strstr(confDELIVERY_TO, `PIPE-LMTP', `', `') 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 ifelse_strstr(confDSN, `LOCAL', `') ifdef(`confMAIL_BACKUP', `ifelse_strstr(confMAIL_BACKUP, `ROUTER_REDIRECT', ` headers_remove = ${if eq{$local_part@$domain}{confMAIL_BACKUP_ADDR}{}{X-Recipients}} ')') ', ` delivery_to_virt_domain: ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', ` debug_print = "T: delivery_to_virt_domain; delivery to confVIRT_MDIR_PATH`'_FOLDER_" ') dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `') driver = appendfile ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `MYSQL', `dnl directory = ${extract{maildir}{$address_data}}`'_FOLDER_ ', `dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `PGSQL', `dnl directory = ${extract{maildir}{$address_data}}`'_FOLDER_ ', `dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `SQLITE', `dnl directory = ${extract{maildir}{$address_data}}`'_FOLDER_ ', `dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `LDAP', `dnl directory = ifdef(`confVIRT_MDIR_PATH_LDAP', confVIRT_MDIR_PATH_LDAP, `${extract{maildir}{$address_data}}')`'_FOLDER_ ', `dnl directory = confVIRT_MDIR_PATH`'_FOLDER_ ')') dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `LDAP', `')') ')') dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `SQLITE', `')') ')') dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `PGSQL', `')') ')') dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `MYSQL', `')') delivery_date_add envelope_to_add return_path_add group = confVIRT_MDIR_GROUP user = confVIRT_MDIR_USER maildir_format = true create_directory = true directory_mode = confVIRT_MDIR_DIR_MODE mode = confVIRT_MDIR_FILE_MODE 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 ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `dnl maildir_use_size_file ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `') ifelse_strstr(confVIRT_MDIR_QUOTA, `TRANSPORT', `dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `TRANSPORT_MAILDIRSIZE', `dnl maildir_use_size_file ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `TRANSPORT_MAILDIRSIZE', `') maildir_quota_directory_regex = confVIRT_MDIR_QUOTA_DIR_REGEX quota = confVIRT_MDIR_QUOTA_SIZE ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `TRANSPORT', `') delivery_to_virt_domain_by_filter: driver = appendfile ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `MYSQL', `dnl directory = ${extract{maildir}{$address_data}}/$address_file ', `dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `PGSQL', `dnl directory = ${extract{maildir}{$address_data}}/$address_file ', `dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `SQLITE', `dnl directory = ${extract{maildir}{$address_data}}/$address_file ', `dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `LDAP', `dnl directory = ifdef(`confVIRT_MDIR_PATH_LDAP', confVIRT_MDIR_PATH_LDAP, `${extract{maildir}{$address_data}}')/$address_file ', `dnl directory = confVIRT_MDIR_PATH/$address_file ')') dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `LDAP', `')') ')') dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `SQLITE', `')') ')') dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `PGSQL', `')') ')') dnl ifdef(`confVIRT_MDIR_USERLIST', `ifelse(confVIRT_MDIR_USERLIST, `MYSQL', `')') delivery_date_add envelope_to_add return_path_add group = confVIRT_MDIR_GROUP user = confVIRT_MDIR_USER maildir_format = true create_directory = true directory_mode = confVIRT_MDIR_DIR_MODE mode = confVIRT_MDIR_FILE_MODE ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `dnl maildir_use_size_file ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `VERIFY_RCPT_MAILDIRSIZE', `') ifelse_strstr(confVIRT_MDIR_QUOTA, `TRANSPORT', `dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `TRANSPORT_MAILDIRSIZE', `dnl maildir_use_size_file ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `TRANSPORT_MAILDIRSIZE', `') maildir_quota_directory_regex = confVIRT_MDIR_QUOTA_DIR_REGEX quota = confVIRT_MDIR_QUOTA_SIZE ')dnl ifelse_strstr(confVIRT_MDIR_QUOTA, `TRANSPORT', `') ')dnl ifelse_strstr(confDELIVERY_TO, `PIPE', `') ')dnl ifelse(SECTION, `TRANSPORTS', `') dnl # dnl ############################## transports ##############################