Начиная с версии 4.88 acl demime признан устаревшим и больше недоступен:
JH/02 The obsolete acl condition “demime” is removed (finally, after ten
years of being deprecated). The replacements are the ACLs
acl_smtp_mime and acl_not_smtp_mime
Ниже совет с сайта forum.lissyara.su как правильно сделать замену acl’y
acl_smtp_mime = acl_check_mime ... acl_check_mime: accept hosts = : # --- accept messages for abuse / postmaster accept condition = $acl_m_pm deny decode = default condition = ${if >{$mime_anomaly_level}{1}} message = This message contains a MIME error ($mime_anomaly_text) # --- Check MIME boundary delimiter according RFC2046 deny condition = ${if match{$mime_boundary}{\N( |\t)$\N}} message = MIME boundary delimiter ends with whitespace deny condition = ${if >{${strlen:$mime_boundary}}{70}} message = Too long MIME boundary delimiter accept authenticated = * warn !hosts = +relay_from_hosts condition = ${if >{$mime_anomaly_level}{0}} set acl_c0 = ${eval:$acl_c0+20} set acl_c1 = DEMIME(20) found MIME error ($mime_anomaly_text); $acl_c1 accept
Если хочется по расширениям, то где-то после decode = default можно типа такого написать:
deny condition = ${if match{${lc:$mime_filename}}{\N(\.com|\.vbs|\.bat|\.pif|\.scr|\.exe)$\N}} message = Forbidden file type in attachment found