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 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 dnl место хранение списка пользователей dnl SINGLE_FILE - хранение списка пользователей в файле типа passwd dnl DOMAINS_FILES - хранение списка пользователей в отдельных файлах для каждого домена dnl MYSQL - хранение списка пользователей в БД MySQL dnl SQLITE - хранение списка пользователей в БД SQLite dnl define(`confVIRT_MDIR_USERLIST', `DOMAINS_FILES')dnl dnl define(`confVIRT_MDIR_USERLIST_SINGLE', `/usr/local/etc/passwd.imap')dnl dnl define(`confVIRT_MDIR_MYSQL', `SELECT id, maildir, home FROM passwd WHERE id="${quote_mysql:$local_part@$domain}"')dnl dnl define(`confVIRT_MDIR_SQLITE', `SELECT id, maildir, home FROM passwd WHERE id="${quote_sqlite:$local_part@$domain}"')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 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 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:User unknown}} ', ` data = ${lookup {${local_part}@${domain}}lsearch{confVIRT_MDIR_USERLIST_SINGLE}{:fail:Over quota}{:fail:User 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, `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 unknown}} ', ` data = ${lookup mysql{confVIRT_MDIR_MYSQL}{:fail:Over quota}{:fail:User 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}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, `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}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 match{$acl_m4}{X-Spam-Action: quarantined}{/confCONTENT_SCANNING_PERSONAL_QUARANTINE_FOLDER}{}}') ', ` define(`_FOLDER_', `') ') dnl ifelse_strstr(confCONTENT_SCANNING_QUARANTINE, `PERSONAL', `') ifelse(SECTION, `TRANSPORTS', `dnl 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, `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_ ')') ')') ')') 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, `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, `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 ')') ')') ')') 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, `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(SECTION, `TRANSPORTS', `') dnl # dnl ############################## transports ##############################