aboutsummaryrefslogtreecommitdiffstats
path: root/mailrules.py
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-08-12 11:37:23 +0200
committerDanilo M. <danix@danix.xyz>2026-08-12 11:37:23 +0200
commit7ecd9056f7b0f8261b44f7865f45749fbceb5d39 (patch)
treeb21beb50455f37d905b78aa5e7cb77569eeae858 /mailrules.py
parent436efafb13079538f3ad5ab1b3df90e02311143c (diff)
downloadmailctl-7ecd9056f7b0f8261b44f7865f45749fbceb5d39.tar.gz
mailctl-7ecd9056f7b0f8261b44f7865f45749fbceb5d39.zip
feat(rules): post-new hook driven by the rule store
Applies each enabled rule scoped to tag:new in stage order, then consumes the marker. Two properties are deliberate and must survive any edit: A rules file that will not load leaves tag:new alone and exits non-zero. Clearing the marker while the rules did not run would permanently orphan that mail, silently, and the gap would surface months later. The marker is consumed only after every rule succeeded, so a failure part way through leaves it set and a re-run finishes the work. Removing `unread` or `inbox` is refused. maildir.synchronize_flags is true, so removing `unread` rewrites Maildir filenames and reaches the server on the next mbsync, and `inbox` is what keeps mail visible at all; neither belongs in an unattended job. A rule that asks is skipped rather than aborting the run, which would both cost the other rules their tagging and strand tag:new forever. The restriction is expected to be lifted once there is a way to confirm such a rule before it runs.
Diffstat (limited to 'mailrules.py')
0 files changed, 0 insertions, 0 deletions