Начиная с версии 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