dnl dnl Проверка поля Message-Id dnl dnl NO - не проводить проверку dnl EMPTY:WARN - вывода в лог файл предупреждения dnl при пустом Message-Id dnl EMPTY:REJECT - возврата клиенту кода 5xx dnl при пустом Message-Id dnl EMPTY:SUBMIT_GREYLIST=XX - занесение хоста в greylist на XX минут dnl при пустом Message-Id dnl EMPTY:GREYLIST=XX - синоним для EMPTY:SUBMIT_GREYLIST=XX dnl EMPTY:SUBMIT_MYSQL=XX - занесение хоста в базу MySQL на XX минут dnl при пустом Message-Id dnl (доступно в enterprise версии) dnl EMPTY:SUBMIT_SQLITE=XX - занесение хоста в базу SQLite на XX минут dnl при пустом Message-Id dnl (доступно в enterprise версии) dnl EMPTY:SUBMIT_RBL=XX - занесение хоста в RBL на XX минут dnl при пустом Message-Id dnl (доступно в enterprise версии) dnl OWN:WARN - вывода в лог файл предупреждения, dnl если Message-Id содержит $qualify_domain dnl или message_id_header_domain dnl OWN:REJECT - возврата клиенту кода 5xx, dnl если Message-Id содержит $qualify_domain dnl или message_id_header_domain dnl OWN:SUBMIT_GREYLIST=XX - занесение хоста в greylist на XX минут dnl если Message-Id содержит $qualify_domain dnl или message_id_header_domain dnl OWN:GREYLIST=XX - синоним для OWN:SUBMIT_GREYLIST=XX dnl OWN:SUBMIT_MYSQL=XX - занесение хоста в базу MySQL на XX минут dnl если Message-Id содержит $qualify_domain dnl или message_id_header_domain dnl (доступно в enterprise версии) dnl OWN:SUBMIT_SQLITE=XX - занесение хоста в базу SQLite на XX минут dnl если Message-Id содержит $qualify_domain dnl или message_id_header_domain dnl (доступно в enterprise версии) dnl OWN:SUBMIT_RBL=XX - занесение хоста в RBL на XX минут dnl если Message-Id содержит $qualify_domain dnl или message_id_header_domain dnl (доступно в enterprise версии) dnl LOCAL:WARN - вывода в лог файл предупреждения, dnl если Message-Id содержит локальный домен dnl LOCAL:REJECT - возврата клиенту кода 5xx, dnl если Message-Id содержит локальный домен dnl LOCAL:SUBMIT_GREYLIST=XX - занесение хоста в greylist на XX минут dnl если Message-Id содержит локальный домен dnl LOCAL:GREYLIST=XX - синоним для LOCAL:SUBMIT_GREYLIST=XX dnl LOCAL:SUBMIT_MYSQL=XX - занесение хоста в базу MySQL на XX минут dnl если Message-Id содержит локальный домен dnl (доступно в enterprise версии) dnl LOCAL:SUBMIT_SQLITE=XX - занесение хоста в базу SQLite на XX минут dnl если Message-Id содержит локальный домен dnl (доступно в enterprise версии) dnl LOCAL:SUBMIT_RBL=XX - занесение хоста в RBL на XX минут dnl если Message-Id содержит локальный домен dnl (доступно в enterprise версии) dnl define(`confCHECK_MESSAGE_ID', `WARN')dnl dnl dnl время жизни записи в сером списке, RBL и базе MySQL может отсутствовать dnl dnl значения SUBMIT_GREYLIST, SUBMIT_MYSQL, SUBMIT_SQLITE и SUBMIT_RBL могут использоваться dnl одновременно с WARN или REJECT, резделяя их точкой с запятой: dnl EMPTY:WARN;SUBMIT_GREYLIST=10080 dnl dnl несколько значений могут быть указаны через пробел dnl define(`confCHECK_MESSAGE_ID', `EMPTY:REJECT OWN:REJECT LOCAL:WARN')dnl dnl dnl значение `WARN' приравнивается к dnl `EMPTY:WARN OWN:WARN LOCAL:WARN' dnl значение `REJECT' приравнивается к dnl `EMPTY:REJECT OWN:REJECT LOCAL:REJECT' dnl dnl конвертация старых значений WARN и REJECT в новые эквиваленты ifelse(confCHECK_MESSAGE_ID, `WARN', ` define(`confCHECK_MESSAGE_ID', `EMPTY:WARN OWN:WARN LOCAL:WARN') ') ifelse(confCHECK_MESSAGE_ID, `REJECT', ` define(`confCHECK_MESSAGE_ID', `EMPTY:REJECT OWN:REJECT LOCAL:REJECT') ') dnl замена всех двоеточий на знаки равно define(`_confCHECK_MESSAGE_ID_TMP', `translit(confCHECK_MESSAGE_ID, `:', `=')')dnl define(`confCHECK_MESSAGE_ID', _confCHECK_MESSAGE_ID_TMP)dnl dnl dnl обработка раздела `EMPTY' dnl define(`_ACTION_', `EXTRACT_NAMED(`EMPTY', confCHECK_MESSAGE_ID)')dnl dnl получение срока жизни записи в кеше серого списка define(`_GREYLIST_PERIOD_', `EXTRACT_NAMED(`SUBMIT_GREYLIST', translit(_ACTION_, `;', ` '))')dnl ifelse(_GREYLIST_PERIOD_, `', `dnl define(`_GREYLIST_PERIOD_', `EXTRACT_NAMED(`GREYLIST', translit(_ACTION_, `;', ` '))')dnl ')dnl dnl присвоение значения по умолчанию сроку жизни записи в кеше серого списка define(`_GREYLIST_PERIOD_TMP', `ifelse(_GREYLIST_PERIOD_`X', `X', `0', _GREYLIST_PERIOD_)')dnl define(`_GREYLIST_PERIOD_', _GREYLIST_PERIOD_TMP)dnl dnl получение срока жизни записи в RBL define(`_RBL_PERIOD_', `EXTRACT_NAMED(`SUBMIT_RBL', translit(_ACTION_, `;', ` '))')dnl dnl присвоение значения по умолчанию сроку жизни записи в RBL define(`_RBL_PERIOD_TMP', `ifelse(_RBL_PERIOD_`X', `X', `0', _RBL_PERIOD_)')dnl define(`_RBL_PERIOD_', _RBL_PERIOD_TMP)dnl dnl получение срока жизни записи в MySQL define(`_MYSQL_PERIOD_', `EXTRACT_NAMED(`SUBMIT_MYSQL', translit(_ACTION_, `;', ` '))')dnl dnl присвоение значения по умолчанию сроку жизни записи в MySQL define(`_MYSQL_PERIOD_TMP', `ifelse(_MYSQL_PERIOD_`X', `X', `0', _MYSQL_PERIOD_)')dnl define(`_MYSQL_PERIOD_', _MYSQL_PERIOD_TMP)dnl dnl получение срока жизни записи в SQLite define(`_SQLITE_PERIOD_', `EXTRACT_NAMED(`SUBMIT_SQLITE', translit(_ACTION_, `;', ` '))')dnl dnl присвоение значения по умолчанию сроку жизни записи в SQLite define(`_SQLITE_PERIOD_TMP', `ifelse(_SQLITE_PERIOD_`X', `X', `0', _SQLITE_PERIOD_)')dnl define(`_SQLITE_PERIOD_', _SQLITE_PERIOD_TMP)dnl define(`_WARN_', `NO')dnl ifelse_strstr(_ACTION_, `GREYLIST', `define(`_WARN_', `YES')')dnl ifelse_strstr(_ACTION_, `SUBMIT', `define(`_WARN_', `YES')')dnl warn set acl_m0 = ${if or{\ {eq{${extract{submitted}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{relay_from_hosts}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{authenticated}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{abuse_or_postmaster}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_relays}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_senders}{$acl_m_wl_flag_msg}}}{1}}\ {eq{${extract{white_list_compat}{$acl_m_wl_flag_msg}}}{1}}\ }{skip}{}} ifelse_strstr(_ACTION_, `REJECT', `dnl # если поле Message-Id пустое deny condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if or{\ {eq{$h_Message-Id:}{}}\ {eq{$h_Message-Id:}{<>}}\ }{yes}{no}} message = Message-Id header field is empty (${message_id}) logwrite = original recipients: $recipients ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl ifelse_strstr(_ACTION_, `GREYLIST', `dnl acl = acl_greylist_relays _GREYLIST_PERIOD_ "Message-Id header field was empty in previous message" ') dnl ifelse_strstr(_ACTION_, `GREYLIST', `') ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') ifelse_strstr(_ACTION_, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit', `message-id', `empty', `', `0')') ifelse_strstr(_ACTION_, `SUBMIT_SQLITE', `ENTERPRISE(`sqlite', `submit', `message-id', `empty', `', `0')') dnl ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `update', `mx.org.ua', `message-id.rbl.mx.org.ua', `empty', `', `_RBL_PERIOD_')') ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `submit', `message-id', `empty', `', `_RBL_PERIOD_')') ', ` ifelse_strstr(_ACTION_, `WARN', `dnl # если поле Message-Id пустое warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if or{\ {eq{$h_Message-Id:}{}}\ {eq{$h_Message-Id:}{<>}}\ }{yes}{no}} log_message = Message-Id header field is empty add_header = X-Warn-Message-Id: Message-Id header field is empty ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl ifelse_strstr(_ACTION_, `GREYLIST', `dnl acl = acl_greylist_relays _GREYLIST_PERIOD_ "Message-Id header field was empty in previous message" ') dnl ifelse_strstr(_ACTION_, `GREYLIST', `') ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') ifelse_strstr(_ACTION_, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit', `message-id', `empty', `', `0')') ifelse_strstr(_ACTION_, `SUBMIT_SQLITE', `ENTERPRISE(`sqlite', `submit', `message-id', `empty', `', `0')') dnl ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `update', `mx.org.ua', `message-id.rbl.mx.org.ua', `empty', `', `_RBL_PERIOD_')') ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `submit', `message-id', `empty', `', `_RBL_PERIOD_')') ', ` ifelse_strstr(_WARN_, `YES', `dnl # если поле Message-Id пустое warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if or{\ {eq{$h_Message-Id:}{}}\ {eq{$h_Message-Id:}{<>}}\ }{yes}{no}} ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl ifelse_strstr(_ACTION_, `GREYLIST', `dnl acl = acl_greylist_relays _GREYLIST_PERIOD_ "Message-Id header field was empty in previous message" ') dnl ifelse_strstr(_ACTION_, `GREYLIST', `') ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') ifelse_strstr(_ACTION_, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit', `message-id', `empty', `', `0')') ifelse_strstr(_ACTION_, `SUBMIT_SQLITE', `ENTERPRISE(`mysql', `submit', `message-id', `empty', `', `0')') dnl ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `update', `mx.org.ua', `message-id.rbl.mx.org.ua', `empty', `', `_RBL_PERIOD_')') ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `submit', `message-id', `empty', `', `_RBL_PERIOD_')') ') dnl ifelse_strstr(_WARN_, `YES', `') ') dnl ifelse_strstr(_ACTION_, `WARN', `') ') dnl ifelse_strstr(_ACTION_, `REJECT', `') dnl dnl обработка раздела `OWN' dnl define(`_ACTION_', `EXTRACT_NAMED(`OWN', confCHECK_MESSAGE_ID)')dnl dnl получение срока жизни записи в кеше серого списка define(`_GREYLIST_PERIOD_', `EXTRACT_NAMED(`SUBMIT_GREYLIST', translit(_ACTION_, `;', ` '))')dnl ifelse(_GREYLIST_PERIOD_, `', `dnl define(`_GREYLIST_PERIOD_', `EXTRACT_NAMED(`GREYLIST', translit(_ACTION_, `;', ` '))')dnl ')dnl dnl присвоение значения по умолчанию сроку жизни записи в кеше серого списка define(`_GREYLIST_PERIOD_TMP', `ifelse(_GREYLIST_PERIOD_`X', `X', `0', _GREYLIST_PERIOD_)')dnl define(`_GREYLIST_PERIOD_', _GREYLIST_PERIOD_TMP)dnl dnl получение срока жизни записи в RBL define(`_RBL_PERIOD_', `EXTRACT_NAMED(`SUBMIT_RBL', translit(_ACTION_, `;', ` '))')dnl dnl присвоение значения по умолчанию сроку жизни записи в RBL define(`_RBL_PERIOD_TMP', `ifelse(_RBL_PERIOD_`X', `X', `0', _RBL_PERIOD_)')dnl define(`_RBL_PERIOD_', _RBL_PERIOD_TMP)dnl dnl получение срока жизни записи в MySQL define(`_MYSQL_PERIOD_', `EXTRACT_NAMED(`SUBMIT_MYSQL', translit(_ACTION_, `;', ` '))')dnl dnl присвоение значения по умолчанию сроку жизни записи в MySQL define(`_MYSQL_PERIOD_TMP', `ifelse(_MYSQL_PERIOD_`X', `X', `0', _MYSQL_PERIOD_)')dnl define(`_MYSQL_PERIOD_', _MYSQL_PERIOD_TMP)dnl dnl получение срока жизни записи в SQLite define(`_SQLITE_PERIOD_', `EXTRACT_NAMED(`SUBMIT_SQLITE', translit(_ACTION_, `;', ` '))')dnl dnl присвоение значения по умолчанию сроку жизни записи в SQLite define(`_SQLITE_PERIOD_TMP', `ifelse(_SQLITE_PERIOD_`X', `X', `0', _SQLITE_PERIOD_)')dnl define(`_SQLITE_PERIOD_', _SQLITE_PERIOD_TMP)dnl define(`_WARN_', `NO')dnl ifelse_strstr(_ACTION_, `GREYLIST', `define(`_WARN_', `YES')')dnl ifelse_strstr(_ACTION_, `SUBMIT', `define(`_WARN_', `YES')')dnl # если поле Message-Id использован локальный домен warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} set acl_m1 = set acl_m_msgid_domain = ${domain:${address:$h_Message-Id:}} # если домен из Message-Id совпадает с $qualify_domain, $primary_hostname или confMESSAGE_ID_HEADER_DOMAIN condition = ${if or{\ {eq{$acl_m_msgid_domain}{$qualify_domain}}\ {eq{$acl_m_msgid_domain}{$primary_hostname}}\ ifdef(`confMESSAGE_ID_HEADER_DOMAIN', `ifelse(len(X`'confMESSAGE_ID_HEADER_DOMAIN), `1', `', `dnl {eq{$acl_m_msgid_domain}{confMESSAGE_ID_HEADER_DOMAIN}}')')\ }{yes}{no}} # исключения писем для списков рассылки от наших локальных отправителей set acl_m_from_domain = ${domain:${address:$h_From:}} condition = ${if eq{$h_List-Id:}{}{yes}{\ ${if or{\ {eq{$acl_m_from_domain}{$qualify_domain}}\ {eq{$acl_m_from_domain}{$primary_hostname}}\ {match_domain{$acl_m_from_domain}{+local_domains}}\ }{no}{yes}}\ }} set acl_m1 = own ifelse_strstr(_ACTION_, `REJECT', `dnl dnl # если поле Message-Id использован локальный домен deny condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if eq{$acl_m1}{own}{yes}{no}} log_message = Message-Id header field contains local domain ($h_Message-Id:) message = Message-Id header field contains local domain (${message_id}) logwrite = original recipients: $recipients ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl ifelse_strstr(_ACTION_, `GREYLIST', `dnl acl = acl_greylist_relays _GREYLIST_PERIOD_ "Message-Id header field in previous message contained local domain (${message_id})" ') dnl ifelse_strstr(_ACTION_, `GREYLIST', `') ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') ifelse_strstr(_ACTION_, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit', `message-id', `own', `$h_Message-Id:', `0')') ifelse_strstr(_ACTION_, `SUBMIT_SQLITE', `ENTERPRISE(`sqlite', `submit', `message-id', `own', `$h_Message-Id:', `0')') dnl ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `update', `mx.org.ua', `message-id.rbl.mx.org.ua', `own', `$h_Message-Id:', `_RBL_PERIOD_')') ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `submit', `message-id', `own', `$h_Message-Id:', `_RBL_PERIOD_')') ', ` ifelse_strstr(_ACTION_, `WARN', `dnl dnl # если в поле Message-Id использован локальный домен warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if eq{$acl_m1}{own}{yes}{no}} log_message = Message-Id header field contains local domain ($h_Message-Id:) add_header = X-Warn-Message-Id: Message-Id contains local domain ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl ifelse_strstr(_ACTION_, `GREYLIST', `dnl acl = acl_greylist_relays _GREYLIST_PERIOD_ "Message-Id header field in previous message contained local domain (${message_id})" ') dnl ifelse_strstr(_ACTION_, `GREYLIST', `') ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') ifelse_strstr(_ACTION_, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit', `message-id', `own', `$h_Message-Id:', `0')') ifelse_strstr(_ACTION_, `SUBMIT_SQLITE', `ENTERPRISE(`sqlite', `submit', `message-id', `own', `$h_Message-Id:', `0')') dnl ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `update', `mx.org.ua', `message-id.rbl.mx.org.ua', `own', `$h_Message-Id:', `_RBL_PERIOD_')') ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `submit', `message-id', `own', `$h_Message-Id:', `_RBL_PERIOD_')') ', ` ifelse_strstr(_WARN_, `YES', `dnl dnl # если в поле Message-Id использован локальный домен warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if eq{$acl_m1}{own}{yes}{no}} ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl ifelse_strstr(_ACTION_, `GREYLIST', `dnl acl = acl_greylist_relays _GREYLIST_PERIOD_ "Message-Id header field was empty in previous message" ') dnl ifelse_strstr(_ACTION_, `GREYLIST', `') ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') ifelse_strstr(_ACTION_, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit', `message-id', `own', `$h_Message-Id:', `0')') ifelse_strstr(_ACTION_, `SUBMIT_SQLITE', `ENTERPRISE(`sqlite', `submit', `message-id', `own', `$h_Message-Id:', `0')') dnl ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `update', `mx.org.ua', `message-id.rbl.mx.org.ua', `own', `$h_Message-Id:', `_RBL_PERIOD_')') ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `submit', `message-id', `own', `$h_Message-Id:', `_RBL_PERIOD_')') ') dnl ifelse_strstr(_WARN_, `YES', `') ') dnl ifelse_strstr(_ACTION_, `WARN', `') ') dnl ifelse_strstr(_ACTION_, `REJECT', `') dnl dnl обработка раздела `LOCAL' dnl define(`_ACTION_', `EXTRACT_NAMED(`LOCAL', confCHECK_MESSAGE_ID)')dnl dnl получение срока жизни записи в кеше серого списка define(`_GREYLIST_PERIOD_', `EXTRACT_NAMED(`SUBMIT_GREYLIST', translit(_ACTION_, `;', ` '))')dnl ifelse(_GREYLIST_PERIOD_, `', `dnl define(`_GREYLIST_PERIOD_', `EXTRACT_NAMED(`GREYLIST', translit(_ACTION_, `;', ` '))')dnl ')dnl dnl присвоение значения по умолчанию сроку жизни записи в кеше серого списка define(`_GREYLIST_PERIOD_TMP', `ifelse(_GREYLIST_PERIOD_`X', `X', `0', _GREYLIST_PERIOD_)')dnl define(`_GREYLIST_PERIOD_', _GREYLIST_PERIOD_TMP)dnl dnl получение срока жизни записи в RBL define(`_RBL_PERIOD_', `EXTRACT_NAMED(`SUBMIT_RBL', translit(_ACTION_, `;', ` '))')dnl dnl присвоение значения по умолчанию сроку жизни записи в RBL define(`_RBL_PERIOD_TMP', `ifelse(_RBL_PERIOD_`X', `X', `0', _RBL_PERIOD_)')dnl define(`_RBL_PERIOD_', _RBL_PERIOD_TMP)dnl dnl получение срока жизни записи в MySQL define(`_MYSQL_PERIOD_', `EXTRACT_NAMED(`SUBMIT_MYSQL', translit(_ACTION_, `;', ` '))')dnl dnl присвоение значения по умолчанию сроку жизни записи в MySQL define(`_MYSQL_PERIOD_TMP', `ifelse(_MYSQL_PERIOD_`X', `X', `0', _MYSQL_PERIOD_)')dnl define(`_MYSQL_PERIOD_', _MYSQL_PERIOD_TMP)dnl dnl получение срока жизни записи в SQLite define(`_SQLITE_PERIOD_', `EXTRACT_NAMED(`SUBMIT_SQLITE', translit(_ACTION_, `;', ` '))')dnl dnl присвоение значения по умолчанию сроку жизни записи в SQLite define(`_SQLITE_PERIOD_TMP', `ifelse(_SQLITE_PERIOD_`X', `X', `0', _SQLITE_PERIOD_)')dnl define(`_SQLITE_PERIOD_', _SQLITE_PERIOD_TMP)dnl define(`_WARN_', `NO')dnl ifelse_strstr(_ACTION_, `GREYLIST', `define(`_WARN_', `YES')')dnl ifelse_strstr(_ACTION_, `SUBMIT', `define(`_WARN_', `YES')')dnl # если поле Message-Id использован локальный домен из адреса получателя warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} set acl_m1 = condition = ${if forany{${sg{$recipients}{, }{:}}}{eq{${domain:$item}}{$acl_m_msgid_domain}}{yes}{no}} condition = ${if or{\ {eq{$acl_m_msgid_domain}{$qualify_domain}}\ {eq{$acl_m_msgid_domain}{$primary_hostname}}\ {match_domain{$acl_m_msgid_domain}{+local_domains}}\ }{yes}{no}} # исключения писем для списков рассылки от наших локальных отправителей set acl_m_from_domain = ${domain:${address:$h_From:}} condition = ${if eq{$h_List-Id:}{}{yes}{\ ${if or{\ {eq{$acl_m_from_domain}{$qualify_domain}}\ {eq{$acl_m_from_domain}{$primary_hostname}}\ {match_domain{$acl_m_from_domain}{+local_domains}}\ }{no}{yes}}\ }} set acl_m1 = local ifelse_strstr(_ACTION_, `REJECT', `dnl dnl # если поле Message-Id использован локальный домен из адреса получателя deny condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if eq{$acl_m1}{local}{yes}{no}} log_message = Message-Id header field contains local domain ($h_Message-Id:) message = Message-Id header field contains local domain (${message_id}) logwrite = original recipients: $recipients ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl ifelse_strstr(_ACTION_, `GREYLIST', `dnl acl = acl_greylist_relays _GREYLIST_PERIOD_ "Message-Id header field in previous message contained local domain (${message_id})" ') dnl ifelse_strstr(_ACTION_, `GREYLIST', `') ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') ifelse_strstr(_ACTION_, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit', `message-id', `local', `$h_Message-Id:', `0')') ifelse_strstr(_ACTION_, `SUBMIT_SQLITE', `ENTERPRISE(`sqlite', `submit', `message-id', `local', `$h_Message-Id:', `0')') dnl ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `update', `mx.org.ua', `message-id.rbl.mx.org.ua', `local', `${message_id}', `_RBL_PERIOD_')') ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `submit', `message-id', `local', `$h_Message-Id:', `_RBL_PERIOD_')') ', ` ifelse_strstr(_ACTION_, `WARN', `dnl dnl # если поле Message-Id использован локальный домен из адреса получателя warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if eq{$acl_m1}{local}{yes}{no}} log_message = Message-Id header field contains local domain ($h_Message-Id:) add_header = X-Warn-Message-Id: Message-Id contains local domain ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl ifelse_strstr(_ACTION_, `GREYLIST', `dnl acl = acl_greylist_relays _GREYLIST_PERIOD_ "Message-Id header field in previous message contained local domain (${message_id})" ') dnl ifelse_strstr(_ACTION_, `GREYLIST', `') ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') ifelse_strstr(_ACTION_, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit', `message-id', `local', `$h_Message-Id:', `0')') ifelse_strstr(_ACTION_, `SUBMIT_SQLITE', `ENTERPRISE(`sqlite', `submit', `message-id', `local', `$h_Message-Id:', `0')') dnl ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `update', `mx.org.ua', `message-id.rbl.mx.org.ua', `local', `${message_id}', `_RBL_PERIOD_')') ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `submit', `message-id', `local', `$h_Message-Id:', `_RBL_PERIOD_')') ', ` ifelse_strstr(_WARN_, `YES', `dnl dnl # если поле Message-Id использован локальный домен из адреса получателя warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if eq{$acl_m1}{local}{yes}{no}} ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `dnl', `dnl ifelse_strstr(_ACTION_, `GREYLIST', `dnl acl = acl_greylist_relays _GREYLIST_PERIOD_ "Message-Id header field in previous message contained local domain (${message_id})" ') dnl ifelse_strstr(_ACTION_, `GREYLIST', `') ')') dnl ifdef(`confGREYLIST', `ifelse(confGREYLIST, `NO', `', `')') ifelse_strstr(_ACTION_, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit', `message-id', `local', `$h_Message-Id:', `0')') ifelse_strstr(_ACTION_, `SUBMIT_SQLLITE', `ENTERPRISE(`sqlite', `submit', `message-id', `local', `$h_Message-Id:', `0')') dnl ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `update', `mx.org.ua', `message-id.rbl.mx.org.ua', `local', `$h_Message-Id:', `_RBL_PERIOD_')') ifelse_strstr(_ACTION_, `SUBMIT_RBL', `ENTERPRISE(`rbl', `submit', `message-id', `local', `$h_Message-Id:', `_RBL_PERIOD_')') ') dnl ifelse_strstr(_WARN_, `YES', `') ') dnl ifelse_strstr(_ACTION_, `WARN', `') ') dnl ifelse_strstr(_ACTION_, `REJECT', `')