]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Add extraction type for `from` maps
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 27 Jan 2024 09:05:40 +0000 (09:05 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 27 Jan 2024 09:05:40 +0000 (09:05 +0000)
Attribute name: `extract_from`. Possible values:

* `default` - try smtp, if not exists try mime
* `mime` - check mime only
* `smtp` - check smtp only
* `both` - try to match both

src/plugins/lua/multimap.lua

index 53b273227bc1dc4826fa9b77797f5fad823cd766..191a87273304dac3d6ee8fe339ae5595d6ff69a1 100644 (file)
@@ -887,12 +887,36 @@ local function multimap_callback(task, rule)
       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
+          match_addr(rule, from)
+        end
+      elseif extract_from == 'smtp' then
+        local from = task:get_from('smtp')
+        if from then
+          match_addr(rule, from)
+        end
+      elseif extract_from == 'both' then
+        local from = task:get_from('smtp')
+        if from then
+          match_addr(rule, from)
+        end
+        from = task:get_from('mime')
+        if from then
+          match_addr(rule, from)
+        end
+      else
+        -- Default algorithm
+        if task:has_from('smtp') then
+          local from = task:get_from('smtp')
+          match_addr(rule, from)
+        elseif task:has_from('mime') then
+          local from = task:get_from('mime')
+          match_addr(rule, from)
+        end
       end
     end,
     helo = function()