tools/sieve-playground builds the vendored sieve-rs 0.7.3 (vnd.inbuxa.* names included) to WebAssembly, with a static page around it, for inbuxa Admin's Debug button on a Sieve script: until now that button sent the script to an outside site whose interpreter knows only upstream's extension names, so any script that requires vnd.inbuxa.* failed to compile there. Ported from the playground in the upstream sieve-rs repository's web/ directory (commit 549a2d57f7), which targets sieve-rs 1.x: - run.rs and handler.rs drive 0.7's event loop the way the server's delivery does, carrying on after a runtime error; llm_prompt compiles and answers false, as on a server without a model. - The expression functions are the server's own modules, included by path; tests fail if the list, ApplyString or the few functions copied from misc.rs/unicode.rs stop matching crates/common. - Built for wasm32-wasip1 rather than with wasm-bindgen: sieve-rs and mail-builder read the clock, which panics on wasm32-unknown-unknown. The page's worker answers the six WASI calls, giving the module the playground's current-time setting. shim/gethostname stands in for a crate with no WASI build. Nothing in vendor/ or crates/ changes. - The page carries no upstream names or links; storage keys and the samples are renamed to match. build.sh --admin <dir> stages the result into an inbuxa-admin checkout.
35 lines
990 B
Sieve
35 lines
990 B
Sieve
# Sort mailing lists into folders
|
|
#
|
|
# Uses "regex" to pull the list name out of the List-Id header and
|
|
# "variables" to build the folder name. Messages that mention a keyword
|
|
# in the body are flagged, and replies to your own posts are marked read.
|
|
|
|
require ["fileinto", "mailbox", "imap4flags", "variables", "regex", "body",
|
|
"subaddress", "envelope"];
|
|
|
|
if header :regex "List-Id" "<([a-z0-9-]+)\\.([a-z0-9.-]+)>" {
|
|
set :lower "list" "${1}";
|
|
set :lower "host" "${2}";
|
|
|
|
if body :text :contains ["release", "security advisory"] {
|
|
addflag "\\Flagged";
|
|
}
|
|
|
|
if header :contains "In-Reply-To" "@example.org>" {
|
|
addflag "\\Seen";
|
|
}
|
|
|
|
fileinto :create "Lists/${host}/${list}";
|
|
stop;
|
|
}
|
|
|
|
# Plus addressing: mail sent to [email protected] goes to "shopping".
|
|
if envelope :detail :matches "to" "*" {
|
|
if string :is "${1}" "" {
|
|
keep;
|
|
} else {
|
|
set :lower "folder" "${1}";
|
|
fileinto :create "${folder}";
|
|
}
|
|
}
|