For the sake of simplicity and in the intent to be useful for others, here where I get with my config (using Sieve, FTS Xapian, LMTP, and mySQL user/passdb

Any corrections ?

-----

dovecot_config_version = 2.4.0
dovecot_storage_version = 2.4.0

base_dir = /run/dovecot
state_dir = /var/lib/dovecot
default_login_user = dovecot

listen = * ::

verbose_proctitle = yes

mail_gid = mail
mail_uid = mailusers
mail_driver = mdbox
mail_path = /data/mails/%{user | domain }/%{user | username }

mail_plugins = fts fts_xapian
# mail_debug = yes
# mail_cache_max_size = 128M

ssl_cert = </etc/letsencrypt/live/gjnet/fullchain.pem
ssl_key = </etc/letsencrypt/live/gjnet/privkey.pem
ssl_dh = </etc/mail/dovecot/dh.pem

mdbox_rotate_size = 64M

default_vsz_limit = 0

sendmail_path = /usr/sbin/sendmail

sql_driver = mysql

mysql localhost {
  user = services
  password = MYPASSWORD
  dbname = services
}

plugin {
        plugin = fts_xapian managesieve sieve

        fts = xapian
        fts_xapian = verbose=0

        fts_autoindex = yes
        fts_enforced = yes
        fts_autoindex_exclude = \Trash
        fts_autoindex_exclude2 = \Drafts

#       fts_decoder = decode2text

sieve = file:/data/mails/%{user | domain }/%{user | username }/sieve/;active=/data/mails/%d/%n/sieve/default.sieve
        sieve_after = file:/data/mails/sieve/after.sieve
        sieve_default = file:/data/mails/sieve/before.sieve
        sieve_before = file:/data/mails/sieve/before.sieve
        sieve_global = file:/data/mails/sieve/
}

namespace inbox {
        inbox = yes

        mailbox Trash {
                auto = subscribe
                special_use = \Trash
        }

        mailbox Drafts {
                auto = subscribe
                special_use = \Drafts
        }

        mailbox Sent {
                auto = subscribe
                special_use = \Sent
        }

        mailbox Spam {
                auto = subscribe
                special_use = \Junk
        }
}

userdb sql {
query = SELECT 1 from users where user like '%{user | username}' and domain like '%{user | domain}' and active=1 iterate_query = SELECT user AS username, domain FROM users where active=1
}

passdb sql {
query = SELECT concat(user, '@', domain) AS user, password from users where user like '%{user | username}' and domain='%{user | domain}' and active=1
}

service auth {
        unix_listener auth-userdb {
                mode = 0600
                user = mailusers
        }
}

protocols = imap pop3 sieve lmtp

service imap-login {
        chroot =  login
        service_count = 0
        process_min_avail = 8
}

service indexer-worker {
        vsz_limit = 8G
        process_limit = 0
}

protocol imap {
        imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
        imap_max_line_length = 655360
        mail_max_userip_connections = 256
#       mail_plugins = $mail_plugins imap_zlib
}

service pop3-login {
        chroot = login
        service_count = 0
}

protocol pop3 {
        mail_max_userip_connections = 256
        pop3_enable_last = yes
        pop3_lock_session = no
        pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
        pop3_reuse_xuidl = yes
}

service lmtp {

        inet_listener lmtp {
                address = 127.0.0.1
                port = 24
        }

        unix_listener lmtp {
                mode = 0666
        }
}

service managesieve-login {
        chroot = login

        inet_listener sieve {
                port = 4190
        }

        inet_listener sieveold {
                port = 2000
        }

        service_count = 0
}

protocol sieve {
        managesieve_implementation_string = dovecot
        managesieve_logout_format = bytes ( in=%i : out=%o )
        mail_max_userip_connections = 256
        managesieve_max_line_length = 65536
}

protocol lmtp {
        mail_plugins = $mail_plugins sieve
}

protocol lda {
        auth_socket_path = /run/dovecot/auth-userdb
        hostname = mx.grosjo.net
        mail_plugins = $mail_plugins sieve
        postmaster_address = ad...@grosjo.net
        lda_mailbox_autocreate = yes
        lda_mailbox_autosubscribe = yes
}

service stats {

    unix_listener stats-writer {
        mode = 0660
        user = mailusers
    }
}

#service decode2text {
#   executable = script /usr/libexec/dovecot/decode2text.sh
#   user = dovecot
#   unix_listener decode2text {
#     mode = 0666
#   }
#}

-----

Thank you !

On 2025-02-16 17:02, Joan Moreau via dovecot wrote:

Yes, that is helpful indeed.

Swimming in the pacific ocean here....

Related item : I have "iterate_query" to convert from the old setup to the new config as well. What to do with that ?

Thank you

On 2025-02-16 16:49, Timo Sirainen via dovecot wrote:

On 16. Feb 2025, at 10.37, Joan Moreau via dovecot <dovecot@dovecot.org> wrote:

@Timo : You would just put a page with in 2 columns, left , the old default conf, right, the new default conf, that would be a million times helpful This is done for some settings, but for others there is no exact 1:1 mapping even possible because the configuration is entirely different. Docs could be of course improved a lot, and we're slowly improving improving them, but we've a lot of other work to do as well..

Anyway, Aki did a one-time conversion of the old example-config to v2.4: https://github.com/dovecot/tools/blob/main/dovecot-2.4.0-example-config.tar.gz - I guess this could be also linked to in the upgrading docs.

_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org
 _______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org

Reply via email to