Sieve fileinto should override spam filter (closes #1917)

This commit is contained in:
mdecimus 2025-07-27 10:39:50 +02:00
parent 9cc91d2787
commit ce98e6d0ff

View file

@ -35,6 +35,7 @@ use utils::config::utils::ParseValue;
struct SieveMessage<'x> { struct SieveMessage<'x> {
pub raw_message: Cow<'x, [u8]>, pub raw_message: Cow<'x, [u8]>,
pub file_into: Vec<u32>, pub file_into: Vec<u32>,
pub did_file_into: bool,
pub flags: Vec<Keyword>, pub flags: Vec<Keyword>,
} }
@ -138,6 +139,7 @@ impl SieveScriptIngest for Server {
raw_message: raw_message.into(), raw_message: raw_message.into(),
file_into: Vec::new(), file_into: Vec::new(),
flags: Vec::new(), flags: Vec::new(),
did_file_into: false,
}]; }];
let mut ingested_message = IngestedEmail { let mut ingested_message = IngestedEmail {
id: Id::default(), id: Id::default(),
@ -358,6 +360,7 @@ impl SieveScriptIngest for Server {
if !message.file_into.contains(&target_id) { if !message.file_into.contains(&target_id) {
message.file_into.push(target_id); message.file_into.push(target_id);
} }
message.did_file_into = true;
do_deliver = true; do_deliver = true;
} else { } else {
trc::event!( trc::event!(
@ -453,6 +456,7 @@ impl SieveScriptIngest for Server {
raw_message: message.into(), raw_message: message.into(),
file_into: Vec::new(), file_into: Vec::new(),
flags: Vec::new(), flags: Vec::new(),
did_file_into: false,
}); });
input = true.into(); input = true.into();
} }
@ -516,7 +520,8 @@ impl SieveScriptIngest for Server {
deliver_to: envelope_to, deliver_to: envelope_to,
is_sender_authenticated: envelope_from_authenticated, 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, spam_train: can_spam_train,
session_id, session_id,
}) })