From 16c13369420d9792c4ae2d3de45145da00067c43 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sat, 27 Jan 2024 09:21:00 +0000 Subject: [Minor] Allow the same logic for recipients --- src/plugins/lua/multimap.lua | 46 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/src/plugins/lua/multimap.lua b/src/plugins/lua/multimap.lua index 191a87273..600a09c4f 100644 --- a/src/plugins/lua/multimap.lua +++ b/src/plugins/lua/multimap.lua @@ -878,12 +878,42 @@ local function multimap_callback(task, rule) end end, rcpt = function() - if task:has_recipients('smtp') then - local rcpts = task:get_recipients('smtp') - match_addr(rule, rcpts) - elseif task:has_recipients('mime') then + local extract_from = rule.extract_from or 'default' + + if extract_from == 'mime' then local rcpts = task:get_recipients('mime') - match_addr(rule, rcpts) + if rcpts then + lua_util.debugm(N, task, 'checking mime rcpts against the map') + match_addr(rule, rcpts) + end + elseif extract_from == 'smtp' then + local rcpts = task:get_recipients('smtp') + if rcpts then + lua_util.debugm(N, task, 'checking smtp rcpts against the map') + match_addr(rule, rcpts) + end + elseif extract_from == 'both' then + local rcpts = task:get_recipients('smtp') + if rcpts then + lua_util.debugm(N, task, 'checking smtp rcpts against the map') + match_addr(rule, rcpts) + end + rcpts = task:get_recipients('mime') + if rcpts then + lua_util.debugm(N, task, 'checking mime rcpts against the map') + match_addr(rule, rcpts) + end + else + -- Default algorithm + if task:has_recipients('smtp') then + local rcpts = task:get_recipients('smtp') + lua_util.debugm(N, task, 'checking smtp rcpts against the map') + match_addr(rule, rcpts) + elseif task:has_recipients('mime') then + local rcpts = task:get_recipients('mime') + lua_util.debugm(N, task, 'checking mime rcpts against the map') + match_addr(rule, rcpts) + end end end, from = function() @@ -892,29 +922,35 @@ local function multimap_callback(task, rule) if extract_from == 'mime' then local from = task:get_from('mime') if from then + lua_util.debugm(N, task, 'checking mime from against the map') match_addr(rule, from) end elseif extract_from == 'smtp' then local from = task:get_from('smtp') if from then + lua_util.debugm(N, task, 'checking smtp from against the map') match_addr(rule, from) end elseif extract_from == 'both' then local from = task:get_from('smtp') if from then + lua_util.debugm(N, task, 'checking smtp from against the map') match_addr(rule, from) end from = task:get_from('mime') if from then + lua_util.debugm(N, task, 'checking mime from against the map') match_addr(rule, from) end else -- Default algorithm if task:has_from('smtp') then local from = task:get_from('smtp') + lua_util.debugm(N, task, 'checking smtp from against the map') match_addr(rule, from) elseif task:has_from('mime') then local from = task:get_from('mime') + lua_util.debugm(N, task, 'checking mime from against the map') match_addr(rule, from) end end -- cgit v1.2.3