From ce98e6d0ffeb884f609354fc36e5d505aa795e4a Mon Sep 17 00:00:00 2001 From: mdecimus Date: Sun, 27 Jul 2025 10:39:50 +0200 Subject: [PATCH] Sieve fileinto should override spam filter (closes #1917) --- crates/email/src/sieve/ingest.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/email/src/sieve/ingest.rs b/crates/email/src/sieve/ingest.rs index 93c3d7f3..25aeaabb 100644 --- a/crates/email/src/sieve/ingest.rs +++ b/crates/email/src/sieve/ingest.rs @@ -35,6 +35,7 @@ use utils::config::utils::ParseValue; struct SieveMessage<'x> { pub raw_message: Cow<'x, [u8]>, pub file_into: Vec, + pub did_file_into: bool, pub flags: Vec, } @@ -138,6 +139,7 @@ impl SieveScriptIngest for Server { raw_message: raw_message.into(), file_into: Vec::new(), flags: Vec::new(), + did_file_into: false, }]; let mut ingested_message = IngestedEmail { id: Id::default(), @@ -358,6 +360,7 @@ impl SieveScriptIngest for Server { if !message.file_into.contains(&target_id) { message.file_into.push(target_id); } + message.did_file_into = true; do_deliver = true; } else { trc::event!( @@ -453,6 +456,7 @@ impl SieveScriptIngest for Server { raw_message: message.into(), file_into: Vec::new(), flags: Vec::new(), + did_file_into: false, }); input = true.into(); } @@ -516,7 +520,8 @@ impl SieveScriptIngest for Server { deliver_to: envelope_to, is_sender_authenticated: envelope_from_authenticated, }, - spam_classify: access_token.has_permission(Permission::SpamFilterClassify), + spam_classify: access_token.has_permission(Permission::SpamFilterClassify) + && !sieve_message.did_file_into, spam_train: can_spam_train, session_id, })