acl_smtp_data = acl_check_data ... acl_check_data: ... warn set acl_m0 = ${dlfunc{/usr/local/libexec/exim/exim-dlfunc.so}{rspamd}\ {127.0.0.1 11333}{defer_ok}} warn condition = ${if eq{$acl_m0}{}{yes}{no}} logwrite = RSPAMD check failed add_header = X-Rspamd-Info: RSPAMD check failed warn condition = ${if match{$acl_m0}{\N^rspamd dlfunc:\s*\N}{yes}{no}} logwrite = RSPAMD check defer: ${sg{$acl_m0}{\N^rspamd dlfunc:\s*\N}{}} add_header = X-Rspamd-Info: RSPAMD check deffered: ${sg{$acl_m0}{\N^rspamd dlfunc:\s*\N}{}} set acl_m0 = warn condition = ${if eq{$acl_m0}{}{no}{yes}} set acl_m1 = ${if match{$acl_m0}\ {\N^RSPAMD answer: RSPAMD/(\S+) 0 EX_OK\N}{$1}{}} logwrite = RSPAMD check: RSPAMD protocol version: ${if eq{$acl_m1}{}{not found}{$acl_m1}} add_header = X-Rspamd-Protocol-Version: ${if eq{$acl_m1}{}{not found}{$acl_m1}} warn condition = ${if eq{$acl_m0}{}{no}{yes}} set acl_m1 = ${if match{$acl_m0}\ {\N^RSPAMD answer: RSPAMD/(.+?\r\n)+Action: (.+?)\r\n\N}{$2}{}} set acl_m1 = ${if eq{$acl_m1}{}{unknown}{\ ${if eq{$acl_m1}{reject}{Spam}{\ ${if eq{$acl_m1}{soft reject}{Probably spam}{\ ${if eq{$acl_m1}{rewrite subject}{Probably spam}{\ ${if eq{$acl_m1}{add header}{Probably spam}{\ ${if eq{$acl_m1}{greylist}{Probably spam}{\ ${if eq{$acl_m1}{no action}{Ham}{unknown}}\ }}\ }}\ }}\ }}\ }}\ }} logwrite = RSPAMD check: RSPAMD status: $acl_m1 add_header = X-Rspamd-Status: $acl_m1 warn condition = ${if eq{$acl_m0}{}{no}{yes}} set acl_m1 = ${if match{$acl_m0}\ {\N^RSPAMD answer: RSPAMD/.+?\r\nMetric: \S+?; (\S+?); (-?\d+\.\d+ / \d+\.\d+ / \d+\.\d+)\N}{$2}{}} logwrite = RSPAMD check: RSPAMD scores: ${if eq{$acl_m1}{}{not found}{$acl_m1}} add_header = X-Rspamd-Score: $acl_m1 warn condition = ${if eq{$acl_m0}{}{no}{yes}} set acl_m1 = ${sg{$acl_m0}{\N(?s)^RSPAMD answer: RSPAMD/.+?\r\n((?:.*\r\n)+)Action: .+?\r\n((?:.*\r\n)+)\r\n$\N}\ {\$1\$2}} set acl_m1 = ${sg{$acl_m1}{\N\r\N}{}} logwrite = RSPAMD check: RSPAMD report: ${if eq{$acl_m1}{}{not found}{$acl_m1}} add_header = X-Rspamd-Report: ${sg{$acl_m1}{\N\n(.)\N}{\n\t\$1}}