On 2026-01-26 03:41, Stephan Bosch wrote:
Hi,
I cannot reproduce any of this so far:
Maybe try again with log_debug=category=imap or category=sieve
And provide all config (
dovecot -n) and the Sieve scripts involved.Regards,
Stephan
Hi,
thanks for your reply. I changed log_debug and am waiting for the next Panic.
Config and sieve scripts below.
doveconf -n
2.4.2-2+debian13 (0962ed2104): /etc/dovecot/dovecot.conf
Pigeonhole version 2.4.2-2+debian13 (767418c3)
OS: Linux 6.12.0-sec-svcs.kvm x86_64 Debian 13.3 ext4
Hostname: uschi.sec-svcs.eu
dovecot_config_version = 2.4.2 acl_driver = vfile auth_mechanisms = plain default_vsz_limit = 2048M deliver_log_format = msgid=%{msgid}, size=%{size}, from=%{from}, subject=%{subject}, envelope from=%{from_envelope}, envelope to=%{to_envelope}, delivery time=%{delivery_time}ms, lmtp session time=%{session_time}ms, status=%{message}, storage_id=%{storage_id} dovecot_storage_version = 2.4.2 first_valid_gid = 5000 first_valid_uid = 5000 fts_autoindex = yes fts_autoindex_max_recent_msgs = 999 fts_search_add_missing = yes imap_client_workarounds { tb-extra-mailbox-sep = yes tb-lsub-flags = yes } imap_logout_format = in=%{input} out=%{output} appended=%{appended} deleted=%{deleted} expunged=%{expunged} autoexpunged=%{autoexpunged} trashed=%{trashed} hdr_count=%{fetch_hdr_count} hdr_bytes=%{fetch_hdr_bytes} body_count=%{fetch_body_count} body_bytes=%{fetch_body_bytes} last_valid_gid = 5000 last_valid_uid = 5000 lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes lmtp_user_concurrency_limit = unlimited log_debug = category=imap or category=sieve mail_access_groups = vmail mail_always_cache_fields = date.save mail_attachment_detection_options = add-flags "content-type=!application/signature" mail_driver = maildir mail_gid = vmail mail_path = /srv/mail/%{user | lower}/Maildir mail_plugins { notify = yes mail_log = yes fts = yes fts_solr = yes virtual = yes acl = yes quota = yes quota_clone = yes } mail_server_admin = mailto:postmaster@sec-svcs.eu mail_server_comment = sec-svcs.eu mail hosting mail_uid = vmail postmaster_address = postmaster@sec-svcs.eu protocols = imap pop3 lmtp sieve quota_status_nouser = DUNNO quota_status_overquota = 552 5.2.2 Mailbox is full quota_status_success = DUNNO sieve_extensions { fileinto = yes reject = yes envelope = yes encoded-character = yes vacation = yes subaddress = yes comparator-i;ascii-numeric = yes relational = yes regex = yes imap4flags = yes copy = yes include = yes body = yes variables = yes enotify = yes environment = yes mailbox = yes date = yes index = yes ihave = yes duplicate = yes mime = yes foreverypart = yes extracttext = yes vnd.dovecot.debug = yes editheader = yes } sieve_global_extensions { vnd.dovecot.pipe = yes vnd.dovecot.environment = yes } sieve_pipe_bin_dir = /srv/sieve/imapsieve sieve_plugins { sieve_imapsieve = yes sieve_extprograms = yes } sql_driver = mysql ssl = required syslog_facility = local5 verbose_proctitle = yes mysql 10.1.1.50 { dbname = mailadmin password = # hidden, use -P to show it user = mailuser } passdb sql { default_password_scheme = SHA512-CRYPT query = SELECT username AS user, password AS password, homedir AS userdb_home, maildir AS userdb_mail_path, CONCAT('*:bytes=', quota) AS userdb_quota_storage_size, uid AS userdb_uid, gid AS userdb_gid FROM mailbox WHERE username = '%{user | lower}' AND active = '1' AND ( access_restriction = 'ALL' OR LOCATE( '%{protocol | upper}', access_restriction ) > 0 ) } userdb sql { iterate_query = SELECT username AS user FROM mailbox query = SELECT homedir AS home, maildir AS mail_path, CONCAT('*:bytes=', quota) AS quota_storage_size, uid, gid FROM mailbox WHERE username = '%{user | lower}' } namespace inbox { inbox = yes separator = / subscriptions = yes type = private quota_storage_grace = 100M mailbox Drafts { auto = subscribe special_use = "\\Drafts" } mailbox Spam { auto = subscribe autoexpunge = 15d special_use = "\\Junk" } mailbox Trash { auto = subscribe special_use = "\\Trash" quota_storage_extra = 1024M } mailbox Sent { auto = subscribe special_use = "\\Sent" quota_storage_extra = 1024M } mailbox Archives { auto = subscribe special_use = "\\Archive" } mailbox virtual/All { special_use = "\\All" } } namespace virtual { mail_path = /srv/mail/%{user | lower}/virtual hidden = no inbox = no list = children prefix = virtual/ separator = / subscriptions = yes type = private } namespace others { mail_driver = maildir mail_index_private_path = ~/Maildir/shared/%{owner_user} mail_path = %{owner_home}/Maildir list = children prefix = shared/$user/ separator = / subscriptions = no type = shared } protocol !indexer-worker { mail_vsize_bg_after_count = 0 } maildir { copy_with_hardlinks = yes } service imap-login { process_min_avail = 4 restart_request_count = unlimited inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { port = 110 } inet_listener pop3s { port = 995 ssl = yes } } service submission-login { inet_listener submission { } inet_listener submissions { } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0666 user = postfix } } service imap { } service pop3 { } service submission { } service auth { unix_listener auth-userdb { } unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0666 user = postfix } inet_listener karl_auth { port = 12987 listen = 10.1.1.10 } } service auth-worker { user = doveauth } service dict { unix_listener dict { group = vmail mode = 0660 } } service quota-status { client_limit = 1 executable = quota-status -p postfix inet_listener quota-pf { port = 11134 } } ssl_server { alt_cert_file = /srv/le/imap.sec-svcs.eu_domain_ca_chain.ec.crt alt_key_file = /srv/le/imap.sec-svcs.eu.ec.key cert_file = /srv/le/imap.sec-svcs.eu_domain_ca_chain.crt dh_file = /etc/dovecot/dh.pem key_file = /srv/le/imap.sec-svcs.eu.key } protocol lda { mail_plugins { sieve = yes quota = yes fts = yes fts_solr = yes } } protocol imap { mail_plugins { imap_sieve = yes imap_acl = yes imap_filter_sieve = yes } } protocol lmtp { mail_plugins { sieve = yes quota = yes fts = yes fts_solr = yes } } service managesieve-login { inet_listener sieve { port = 4190 } } service managesieve { } dict_server { dict quota { driver = sql sql_driver = mysql mysql 10.1.1.50 { dbname = mailserver password = # hidden, use -P to show it user = mailadmin } dict_map priv/quota/storage { sql_table = quota username_field = username dict_map_value_field bytes { type = uint } } dict_map priv/quota/messages { sql_table = quota username_field = username dict_map_value_field messages { type = uint } } } dict acl { driver = sql sql_driver = mysql mysql 10.1.1.50 { dbname = mailserver password = # hidden, use -P to show it user = mailadmin } dict_map "shared/shared-boxes/user/$to/$from" { sql_table = user_shares dict_map_value_field dummy { } dict_map_key_field from_user { value = $from } dict_map_key_field to_user { value = $to } } dict_map "shared/shared-boxes/anyone/$from" { sql_table = anyone_shares dict_map_value_field dummy { } dict_map_key_field from_user { value = $from } } } } acl_sharing_map { dict proxy { name = acl } } quota "User quota" { driver = count storage_size = 20480M quota_warning warn-95 { quota_storage_percentage = 95 execute quota-warning { args = 95 %{user} } } quota_warning warn-80 { quota_storage_percentage = 80 execute quota-warning { args = 80 %{user} } } } service quota-warning { executable = script /usr/local/bin/quota-warning.sh user = dovecot unix_listener quota-warning { user = dovecot } } quota_clone { dict proxy { name = quota } } sieve_script personal { active_path = /srv/sieve/%{user | lower}/.dovecot.sieve driver = file path = /srv/sieve/%{user | lower} } mailbox Spam { sieve_script report-spam { cause = copy append path = /srv/sieve/imapsieve/report-spam.sieve type = before } } imapsieve_from Spam { sieve_script report-ham { cause = copy append path = /srv/sieve/imapsieve/report-ham.sieve type = before } } sieve_script before { path = /srv/sieve/before type = before }
These two are for rspamd and work for my user when using roundcube and thunderbird on android..
- report-spam.sieve: require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.user" "*" { set "username" "${1}"; }
pipe :copy "learn-spam.sh" [ "${username}" ];
- report-ham.sieve: require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.mailbox" "*" { set "mailbox" "${1}"; }
if string "${mailbox}" "Trash" { stop; }
if environment :matches "imap.user" "*" { set "username" "${1}"; }
pipe :copy "learn-ham.sh";
- I disabled this one during the time I posted the initial message. For completeness: #mailbox Trash {
sieve_script flag-seen {
type = before
cause = copy append
path = /srv/sieve/imapsieve/setflag-seen.sieve
}
#}
- setflag-seen.sieve:
set flag "\\seen"
require ["imap4flags"]; setflag "\\seen";
-- Christian Kivalo