Browse Source

Merge pull request #4794 from rspamd/vstakhov-multimap-addr-extraction

[Feature] Add extraction type for `from` maps
tags/3.8.2
Vsevolod Stakhov 4 months ago
parent
commit
abc813e069
No account linked to committer's email address
1 changed files with 70 additions and 10 deletions
  1. 70
    10
      src/plugins/lua/multimap.lua

+ 70
- 10
src/plugins/lua/multimap.lua View File

@@ -878,21 +878,81 @@ 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()
if task:has_from('smtp') then
local from = task:get_from('smtp')
match_addr(rule, from)
elseif task:has_from('mime') then
local extract_from = rule.extract_from or 'default'

if extract_from == 'mime' then
local from = task:get_from('mime')
match_addr(rule, from)
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
end,
helo = function()

Loading…
Cancel
Save