1. where can I find all variables like "imap.user" like in mentioned on page[2] 2. I have the impression that variables like "${from}" are all being set from scanning the whole email again seeing these "if matches" statements. Is that not super inefficient? I would assume that such variables would be set and made available upon the receipt of a message. 3. What is the point of this: if environment :matches "imap.user" "*" { set "username" "${1}"; } pipe :copy "sa-learn-ham.sh" [ "${username}" ]; Why can't I just use: pipe :copy "sa-learn-ham.sh" [ "imap.user" ]; [1] require [ "vnd.dovecot.pipe", "copy", "variables" ]; if header :matches "subject" "*" { set "subject" "${1}"; } if header :matches "from" "*" { set "from" "${1}"; } pipe :args [ "USER at DOMAIN.TLD", "${from}", "${subject}" ] :copy :try "jabber_notify.sh" ; from page https://wiki.dovecot.org/Pigeonhole/Sieve/Plugins/Pipe [2] if environment :matches "imap.user" "*" { set "username" "${1}"; } pipe :copy "sa-learn-spam.sh" [ "${username}" ]; https://doc.dovecot.org/configuration_manual/howto/antispam_with_sieve/#howto-antispam-with-imapsieve