Sieve scripts not triggered on IMAP inbound messages using IMAPC
Good morning.
I am using Dovecot as an IMAP proxy -- using IMAPC -- and the system is working great. Thank you for contributing such great software to the community!
I'm using Dovcot 2.3.5 and Pigeonhole 0.5.5.
My server is located behind a content-filtering firewall that will mark incoming messages by adding "[SPAM]" to the subject line. I'm trying to use Sieve to identify those messages and move them into the Spam folder. I have a basic Sieve script that looks like this:
require ["fileinto"];
if anyof (header :contains "Subject" "[SPAM]",
header :contains "X-Spam-Flag" "Yes")
{
fileinto "Spam";
stop;
}
I can see in the logs that Sieve is loaded, and also the imapsieve_plugin
Debug: sieve: Pigeonhole version 0.5.5 (2483b085) initializing
Debug: sieve: Sieve imapsieve plugin for Pigeonhole version 0.5.5 (2483b085) loaded
Sieve detects outbound messages (from the log: Debug: imapsieve: mailbox INBOX.Sent: APPEND event) but nothing registers for inbound, and my spam_rule is never triggered. Any suggestions?
Here is the output from "Dovecot -n":
# 2.3.5 (513208660): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.5 (2483b085)
# OS: Linux 3.10.0-957.5.1.el7.x86_64 x86_64 CentOS Linux release 7.6.1810 (Core) xfs
# Hostname: <redacted>
auth_master_user_separator = *
auth_mechanisms = PLAIN LOGIN
auth_verbose_passwords = plain
deliver_log_format = from=%{from}, envelope_sender=%{from_envelope}, subject=%{subject}, msgid=%m, size=%{size}, %$
dict {
acl = pgsql:/etc/dovecot/dovecot-share-folder.conf
quotadict = pgsql:/etc/dovecot/dovecot-used-quota.conf
}
first_valid_uid = 2000
imapc_features = fetch-bodystructure fetch-headers
imapc_host = <redacted>
imapc_port = 993
imapc_ssl = imaps
imapc_ssl_verify = no
last_valid_uid = 2000
listen = * [::]
mail_debug = yes
mail_gid = 2000
mail_home = /var/mail/imapc/home/%d/%n
mail_location = imapc:/var/mail/imapc/%d/%n
mail_plugins = mailbox_alias mail_log notify
mail_uid = 2000
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapsieve vnd.dovecot.imapsieve
namespace inbox {
inbox = yes
list = yes
location =
prefix =
separator = .
type = private
}
passdb {
args = host=<redacted>
default_fields = userdb_imapc_user=%u userdb_imapc_password=#hidden_use-P_to_show#
driver = imap
}
passdb {
args = /etc/dovecot/dovecot-master-users
driver = passwd-file
master = yes
}
plugin {
imapsieve_default = /var/vmail/sieve/global/spam_rule.sieve
mail_log_events = delete undelete expunge mailbox_delete mailbox_rename
mail_log_fields = uid box msgid size from subject
mailbox_alias_new = Sent Messages
mailbox_alias_new2 = Sent Items
mailbox_alias_old = Sent
mailbox_alias_old2 = Sent
sieve_global_dir = /var/vmail/sieve/global/
sieve_max_redirects = 30
sieve_plugins = sieve_imapsieve
sieve_trace_debug = yes
sieve_trace_dir = /var/log/dovecot
sieve_trace_level = matching
}
protocols = imap sieve
service auth {
unix_listener /var/spool/postfix/private/dovecot-auth {
group = postfix
mode = 0666
user = postfix
}
unix_listener auth-master {
group = vmail
mode = 0666
user = vmail
}
unix_listener auth-userdb {
group = vmail
mode = 0660
user = vmail
}
}
service dict {
unix_listener dict {
group = vmail
mode = 0660
user = vmail
}
}
service imap-login {
process_limit = 500
service_count = 1
}
service lmtp {
executable = lmtp -L
inet_listener lmtp {
address = 127.0.0.1
port = 24
}
process_min_avail = 5
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
user = vmail
}
service managesieve-login {
inet_listener sieve {
address = 127.0.0.1
port = 4190
}
}
ssl = required
ssl_cert =
ssl_cipher_list = ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+ 3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5
ssl_client_ca_file = /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
ssl_prefer_server_ciphers = yes
syslog_facility = local5
userdb {
driver = prefetch
}
protocol imap {
imap_client_workarounds = tb-extra-mailbox-sep
mail_max_userip_connections = 30
mail_plugins = mailbox_alias mail_log notify imap_sieve
}
protocol sieve {
info_log_path = /var/log/dovecot/sieve-info.log
log_path = /var/log/dovecot/sieve-err.log
managesieve_implementation_string = Dovecot Pigeonhole
managesieve_max_line_length = 65536
}
Op 08/03/2019 om 15:12 schreef Fred via dovecot:
Good morning.
I am using Dovecot as an IMAP proxy -- using IMAPC -- and the system is working great. Thank you for contributing such great software to the community!
I’m using Dovcot 2.3.5 and Pigeonhole 0.5.5.
My server is located behind a content-filtering firewall that will mark incoming messages by adding “[SPAM]” to the subject line. I’m trying to use Sieve to identify those messages and move them into the Spam folder. I have a basic Sieve script that looks like this:
require ["fileinto"];
if anyof (header :contains "Subject" "[SPAM]",
header :contains "X-Spam-Flag" "Yes")
{
fileinto "Spam";
stop;
}
I can see in the logs that Sieve is loaded, and also the imapsieve_plugin
Debug: sieve: Pigeonhole version 0.5.5 (2483b085) initializing
Debug: sieve: Sieve imapsieve plugin for Pigeonhole version 0.5.5 (2483b085) loaded
Sieve detects outbound messages (from the log: Debug: imapsieve: mailbox INBOX.Sent: APPEND event) but nothing registers for inbound, and my spam_rule is never triggered. Any suggestions?
https://wiki.dovecot.org/Pigeonhole/Sieve/Troubleshooting
Here is the output from “Dovecot -n”:
# 2.3.5 (513208660): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.5 (2483b085)
# OS: Linux 3.10.0-957.5.1.el7.x86_64 x86_64 CentOS Linux release 7.6.1810 (Core) xfs
# Hostname: <redacted>
auth_master_user_separator = *
auth_mechanisms = PLAIN LOGIN
auth_verbose_passwords = plain
deliver_log_format = from=%{from}, envelope_sender=%{from_envelope}, subject=%{subject}, msgid=%m, size=%{size}, %$
dict {
acl = pgsql:/etc/dovecot/dovecot-share-folder.conf
quotadict = pgsql:/etc/dovecot/dovecot-used-quota.conf
}
first_valid_uid = 2000
imapc_features = fetch-bodystructure fetch-headers
imapc_host = <redacted>
imapc_port = 993
imapc_ssl = imaps
imapc_ssl_verify = no
last_valid_uid = 2000
listen = * [::]
mail_debug = yes
mail_gid = 2000
mail_home = /var/mail/imapc/home/%d/%n
mail_location = imapc:/var/mail/imapc/%d/%n
mail_plugins = mailbox_alias mail_log notify
mail_uid = 2000
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapsieve vnd.dovecot.imapsieve
namespace inbox {
inbox = yes
list = yes
location =
prefix =
separator = .
type = private
}
passdb {
args = host=<redacted>
default_fields = userdb_imapc_user=%u userdb_imapc_password=#hidden_use-P_to_show#
driver = imap
}
passdb {
args = /etc/dovecot/dovecot-master-users
driver = passwd-file
master = yes
}
plugin {
imapsieve_default = /var/vmail/sieve/global/spam_rule.sieve
mail_log_events = delete undelete expunge mailbox_delete mailbox_rename
mail_log_fields = uid box msgid size from subject
mailbox_alias_new = Sent Messages
mailbox_alias_new2 = Sent Items
mailbox_alias_old = Sent
mailbox_alias_old2 = Sent
sieve_global_dir = /var/vmail/sieve/global/
sieve_max_redirects = 30
sieve_plugins = sieve_imapsieve
sieve_trace_debug = yes
sieve_trace_dir = /var/log/dovecot
sieve_trace_level = matching
}
protocols = imap sieve
service auth {
unix_listener /var/spool/postfix/private/dovecot-auth {
group = postfix
mode = 0666
user = postfix
}
unix_listener auth-master {
group = vmail
mode = 0666
user = vmail
}
unix_listener auth-userdb {
group = vmail
mode = 0660
user = vmail
}
}
service dict {
unix_listener dict {
group = vmail
mode = 0660
user = vmail
}
}
service imap-login {
process_limit = 500
service_count = 1
}
service lmtp {
executable = lmtp -L
inet_listener lmtp {
address = 127.0.0.1
port = 24
}
process_min_avail = 5
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
user = vmail
}
service managesieve-login {
inet_listener sieve {
address = 127.0.0.1
port = 4190
}
}
ssl = required
ssl_cert =
ssl_cipher_list = ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5
ssl_client_ca_file = /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
ssl_prefer_server_ciphers = yes
syslog_facility = local5
userdb {
driver = prefetch
}
protocol imap {
imap_client_workarounds = tb-extra-mailbox-sep
mail_max_userip_connections = 30
mail_plugins = mailbox_alias mail_log notify imap_sieve
}
protocol sieve {
info_log_path = /var/log/dovecot/sieve-info.log
log_path = /var/log/dovecot/sieve-err.log
managesieve_implementation_string = Dovecot Pigeonhole
managesieve_max_line_length = 65536
}
Stephan--
Thank you for the troubleshooting link. I've already been through that and every other HowTo I could find. The likely underlying problem is that I'm not using an LDA -- I'm simply using this as a proxy using IMAPC.
I can define static rules in dovecot.conf and they get triggered (e.g., when moving a message between folders), similar to this:
imapsieve_mailbox1_name = *
imapsieve_mailbox1_causes = COPY APPEND FLAG
imapsieve_mailbox1_before =
file:/var/vmail/sieve/global/spam_rule.sieve
This will trigger on an existing message, such as if I manually move a message from the inbox into trash, or mark the message as read. What I want to have happen is for this rule (or something similar) to trigger when a message is initially received into the inbox.
Op 08/03/2019 om 15:12 schreef Fred via dovecot:
Good morning.
I am using Dovecot as an IMAP proxy -- using IMAPC -- and the system is working great. Thank you for contributing such great software to the community!
Im using Dovcot 2.3.5 and Pigeonhole 0.5.5.
My server is located behind a content-filtering firewall that will mark incoming messages by adding [SPAM] to the subject line. Im trying to use Sieve to identify those messages and move them into the Spam folder. I have a basic Sieve script that looks like this:
require ["fileinto"];
if anyof (header :contains "Subject" "[SPAM]",
header :contains "X-Spam-Flag" "Yes")
{
fileinto "Spam";
stop;
}
I can see in the logs that Sieve is loaded, and also the imapsieve_plugin
Debug: sieve: Pigeonhole version 0.5.5 (2483b085) initializing
Debug: sieve: Sieve imapsieve plugin for Pigeonhole version 0.5.5 (2483b085) loaded
Sieve detects outbound messages (from the log: Debug: imapsieve: mailbox INBOX.Sent: APPEND event) but nothing registers for inbound, and my spam_rule is never triggered. Any suggestions?
https://wiki.dovecot.org/Pigeonhole/Sieve/Troubleshooting
Here is the output from Dovecot -n:
# 2.3.5 (513208660): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.5 (2483b085)
# OS: Linux 3.10.0-957.5.1.el7.x86_64 x86_64 CentOS Linux release 7.6.1810 (Core) xfs
# Hostname: <redacted>
auth_master_user_separator = *
auth_mechanisms = PLAIN LOGIN
auth_verbose_passwords = plain
deliver_log_format = from=%{from}, envelope_sender=%{from_envelope}, subject=%{subject}, msgid=%m, size=%{size}, %$
dict {
acl = pgsql:/etc/dovecot/dovecot-share-folder.conf
quotadict = pgsql:/etc/dovecot/dovecot-used-quota.conf
}
first_valid_uid = 2000
imapc_features = fetch-bodystructure fetch-headers
imapc_host = <redacted>
imapc_port = 993
imapc_ssl = imaps
imapc_ssl_verify = no
last_valid_uid = 2000
listen = * [::]
mail_debug = yes
mail_gid = 2000
mail_home = /var/mail/imapc/home/%d/%n
mail_location = imapc:/var/mail/imapc/%d/%n
mail_plugins = mailbox_alias mail_log notify
mail_uid = 2000
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapsieve vnd.dovecot.imapsieve
namespace inbox {
inbox = yes
list = yes
location =
prefix =
separator = .
type = private
}
passdb {
args = host=<redacted>
default_fields = userdb_imapc_user=%u userdb_imapc_password=#hidden_use-P_to_show#
driver = imap
}
passdb {
args = /etc/dovecot/dovecot-master-users
driver = passwd-file
master = yes
}
plugin {
imapsieve_default = /var/vmail/sieve/global/spam_rule.sieve
mail_log_events = delete undelete expunge mailbox_delete mailbox_rename
mail_log_fields = uid box msgid size from subject
mailbox_alias_new = Sent Messages
mailbox_alias_new2 = Sent Items
mailbox_alias_old = Sent
mailbox_alias_old2 = Sent
sieve_global_dir = /var/vmail/sieve/global/
sieve_max_redirects = 30
sieve_plugins = sieve_imapsieve
sieve_trace_debug = yes
sieve_trace_dir = /var/log/dovecot
sieve_trace_level = matching
}
protocols = imap sieve
service auth {
unix_listener /var/spool/postfix/private/dovecot-auth {
group = postfix
mode = 0666
user = postfix
}
unix_listener auth-master {
group = vmail
mode = 0666
user = vmail
}
unix_listener auth-userdb {
group = vmail
mode = 0660
user = vmail
}
}
service dict {
unix_listener dict {
group = vmail
mode = 0660
user = vmail
}
}
service imap-login {
process_limit = 500
service_count = 1
}
service lmtp {
executable = lmtp -L
inet_listener lmtp {
address = 127.0.0.1
port = 24
}
process_min_avail = 5
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
user = vmail
}
service managesieve-login {
inet_listener sieve {
address = 127.0.0.1
port = 4190
}
}
ssl = required
ssl_cert =
ssl_cipher_list = ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3D ECDH+ES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5
ssl_client_ca_file = /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
ssl_prefer_server_ciphers = yes
syslog_facility = local5
userdb {
driver = prefetch
}
protocol imap {
imap_client_workarounds = tb-extra-mailbox-sep
mail_max_userip_connections = 30
mail_plugins = mailbox_alias mail_log notify imap_sieve
}
protocol sieve {
info_log_path = /var/log/dovecot/sieve-info.log
log_path = /var/log/dovecot/sieve-err.log
managesieve_implementation_string = Dovecot Pigeonhole
managesieve_max_line_length = 65536
}
participants (2)
-
Fred
-
Stephan Bosch