Looks like attachments don't work here.  I've appended to the text.

###

Hello,

Attached are three files in a tar archive:

debug-grep.log: Dovecot debug log filtered for specific SMTP user.
debug-mail.log: Same events filtered from mail.log.
postconf.txt

The separate authentication events are using differing methods in Thunderbird but appear to all be using sasl_method=PLAIN.  Note that there were some changes to doveconf since my original post.  But authentication succeeded in these tests every time.  Is it even trying encrypted passwords?  Makes me wonder if it is falling back to PLAIN where other clients just fail on encrypted passwords.

Regards,
David Koski
[email protected]

On 5/13/26 10:34 PM, Aki Tuomi wrote:
On 14/05/2026 02:11 EEST David Koski via dovecot <[email protected]> wrote:

Hello,

I just put a new Postfix with Dovecot 2.4 server on line migrating the
email from Dovecot 2.3.  I have discovered a number of clients (all
copiers so far) that no longer authenticate SMTP.  Mechanisms configured:

auth_mechanisms = plain login gssapi cram-md5 digest-md5

I found that if I disable all encrypted password methods (some copiers
list them separately with a checkbox) and leave only plain/login on the
client side, then it succeeds.  But sometimes it is not necessary.  It's
almost as if it only tries once and gives up if it fails.  I'm not sure
how it is actually supposed to work.  But it worked with Dovecot 2.3.  I
did test one account with an encrypted password like "{CRAM-MD5}6e3..."
successfully.  But other accounts failed.  It almost looks like the
encryption method must be specified on the client side to match the
server before it will work consistently.  I know that password
encryption is unnecessary with STARTTLS but I have to live with it now.
I have noticed that Thunderbird configured with encryption silently
falls back to plain/login so I didn't notice a problem.

Regards,
David Koski
[email protected]
Hi!

Can you send doveconf and logs with `log_debug=category=auth` please?

Aki


May 21 13:37:32 auth([email protected],1.2.3.4,sasl:plain): Debug: sql: Performing passdb lookup May 21 13:37:32 auth-worker([email protected],1.2.3.4)<272356>: request [57]: Debug: sql: Performing passdb lookup May 21 13:37:32 auth-worker([email protected],1.2.3.4)<272356>: request [57]: Debug: sql: query: CALL password_query('[email protected]', '<super.secret>') May 21 13:37:32 auth-worker(272356): Debug: mysql(/var/run/mysqld/mysqld.sock): Finished query 'CALL password_query('[email protected]', '<super.secret>')' in 1 msecs May 21 13:37:32 auth-worker([email protected],1.2.3.4)<272356>: request [57]: Debug: sql: Finished passdb lookup May 21 13:37:32 auth([email protected],1.2.3.4,sasl:plain): Debug: sql: Finished passdb lookup May 21 13:37:32 auth([email protected],1.2.3.4,sasl:plain): Debug: Auth request finished

May 21 13:37:32 auth: Debug: conn unix:auth (pid=272474,uid=121) [236]: client passdb out: OK    1    [email protected] May 21 13:38:39 auth([email protected],1.2.3.4,sasl:plain): Debug: sql: Performing passdb lookup May 21 13:38:39 auth-worker([email protected],1.2.3.4)<272356>: request [72]: Debug: sql: Performing passdb lookup May 21 13:38:39 auth-worker([email protected],1.2.3.4)<272356>: request [72]: Debug: sql: query: CALL password_query('[email protected]', '<super.secret>') May 21 13:38:39 auth-worker(272356): Debug: mysql(/var/run/mysqld/mysqld.sock): Finished query 'CALL password_query('[email protected]', '<super.secret>')' in 1 msecs May 21 13:38:39 auth-worker([email protected],1.2.3.4)<272356>: request [72]: Debug: sql: Finished passdb lookup May 21 13:38:39 auth([email protected],1.2.3.4,sasl:plain): Debug: sql: Finished passdb lookup May 21 13:38:39 auth([email protected],1.2.3.4,sasl:plain): Debug: Auth request finished May 21 13:38:39 auth: Debug: conn unix:auth (pid=272474,uid=121) [236]: client passdb out: OK    2    [email protected]

May 21 13:43:02 auth([email protected],1.2.3.4,sasl:plain): Debug: sql: Performing passdb lookup May 21 13:43:02 auth-worker([email protected],1.2.3.4)<272356>: request [122]: Debug: sql: Performing passdb lookup May 21 13:43:02 auth-worker([email protected],1.2.3.4)<272356>: request [122]: Debug: sql: query: CALL password_query('[email protected]', '<super.secret>') May 21 13:43:02 auth-worker(272356): Debug: mysql(/var/run/mysqld/mysqld.sock): Finished query 'CALL password_query('[email protected]', '<super.secret>')' in 1 msecs May 21 13:43:02 auth-worker([email protected],1.2.3.4)<272356>: request [122]: Debug: sql: Finished passdb lookup May 21 13:43:02 auth([email protected],1.2.3.4,sasl:plain): Debug: sql: Finished passdb lookup May 21 13:43:02 auth([email protected],1.2.3.4,sasl:plain): Debug: Auth request finished May 21 13:43:02 auth: Debug: conn unix:auth (pid=272670,uid=121) [263]: client passdb out: OK    2    [email protected]

May 21 13:44:33 auth([email protected],1.2.3.4,sasl:plain): Debug: sql: Performing passdb lookup May 21 13:44:33 auth-worker([email protected],1.2.3.4)<272356>: request [142]: Debug: sql: Performing passdb lookup May 21 13:44:33 auth-worker([email protected],1.2.3.4)<272356>: request [142]: Debug: sql: query: CALL password_query('[email protected]', '<super.secret>') May 21 13:44:33 auth-worker(272356): Debug: mysql(/var/run/mysqld/mysqld.sock): Finished query 'CALL password_query('[email protected]', '<super.secret>')' in 1 msecs May 21 13:44:33 auth-worker([email protected],1.2.3.4)<272356>: request [142]: Debug: sql: Finished passdb lookup May 21 13:44:33 auth([email protected],1.2.3.4,sasl:plain): Debug: sql: Finished passdb lookup May 21 13:44:33 auth([email protected],1.2.3.4,sasl:plain): Debug: Auth request finished May 21 13:44:33 auth: Debug: conn unix:auth (pid=272670,uid=121) [263]: client passdb out: OK    4    [email protected]


2026-05-21T13:37:32.531697-07:00 B914839 postfix/submission/smtpd[272474]: 81C5C60429: client=unknown[1.2.3.4], sasl_method=PLAIN, [email protected] 2026-05-21T13:38:39.842635-07:00 B914839 postfix/submission/smtpd[272474]: CDAEC60429: client=unknown[1.2.3.4], sasl_method=PLAIN, [email protected] 2026-05-21T13:43:02.410975-07:00 B914839 postfix/submission/smtpd[272670]: 644C360429: client=unknown[1.2.3.4], sasl_method=PLAIN, [email protected] 2026-05-21T13:44:33.790632-07:00 B914839 postfix/submission/smtpd[272670]: C0FB860429: client=unknown[1.2.3.4], sasl_method=PLAIN, [email protected]


# 2.4.1-4 (7d8c0e5759): /etc/dovecot/dovecot.conf
# Pigeonhole version 2.4.1-4 (0a86619f)
# OS: Linux 6.12.69+deb13-amd64 x86_64 Debian 13.5
# Hostname: B914839.online-server.cloud
# 4 default setting changes since version 2.4.0
dovecot_config_version = 2.4.0
auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = plain login gssapi cram-md5 digest-md5
debug_log_path = /var/log/dovecot/debug.log
default_vsz_limit = 512M
dovecot_storage_version = 2.4.0
fts_autoindex = yes
fts_autoindex_max_recent_msgs = 999
fts_search_add_missing = yes
info_log_path = /var/log/dovecot/info.log
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
log_debug = category=auth
log_path = /var/log/dovecot/dovecot.log
mail_driver = maildir
mail_plugins {
  quota = yes
}
mailbox_directory_name_legacy = no
protocols {
  imap = yes
  lmtp = yes
  sieve = yes
}
quota_exceeded_message = User %{user} has exceeded the storage volume. / User %{user} has exhausted allowed storage space.
sieve_plugins {
  sieve_imapsieve = yes
  sieve_extprograms = yes
}
sql_driver = mysql
ssl = required
namespace inbox {
  inbox = yes
  prefix =
  separator = .
  type = private
  mailbox Drafts {
    auto = subscribe
    special_use = "\\Drafts"
  }
  mailbox Outbox {
    special_use = "\\Drafts"
  }
  mailbox Junk {
    auto = subscribe
    special_use = "\\Junk"
  }
  mailbox "Junk Email" {
    auto = no
    special_use = "\\Junk"
  }
  mailbox "Junk E-mail" {
    auto = no
    special_use = "\\Junk"
  }
  mailbox Trash {
    auto = subscribe
    special_use = "\\Trash"
  }
  mailbox "Deleted Items" {
    auto = no
    special_use = "\\Trash"
  }
  mailbox Spam {
    auto = no
    special_use = "\\Junk"
  }
  mailbox Archives {
    auto = no
    special_use = "\\Archive"
  }
  mailbox Sent {
    auto = subscribe
    special_use = "\\Sent"
  }
  mailbox "Sent Items" {
    auto = no
    special_use = "\\Sent"
  }
  mailbox "Sent Messages" {
    auto = no
    special_use = "\\Sent"
  }
}
service imap-login {
  inet_listener imap {
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
  }
  inet_listener pop3s {
  }
}
service submission-login {
  inet_listener submission {
  }
  inet_listener submissions {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
}
service imap {
}
service pop3 {
}
service submission {
}
service auth {
  unix_listener auth-userdb {
    group = postfix
  }
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
}
service auth-worker {
}
service dict {
  unix_listener dict {
  }
}
ssl_server {
  cert_file = /etc/letsencrypt/live/mail.sutinen.com/fullchain.pem
  key_file = /etc/letsencrypt/live/mail.sutinen.com/privkey.pem
}
protocol lda {
  mail_plugins {
    sieve = yes
    quota = yes
  }
}
protocol imap {
  mail_plugins {
    imap_sieve = yes
  }
}
protocol lmtp {
  mail_plugins {
    quota = yes
    sieve = yes
    notify = yes
    push_notification = yes
  }
  postmaster_address = [email protected]
}
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
  inet_listener sieve_deprecated {
    port = 2000
  }
}
service managesieve {
}
sieve_script personal {
  active_path = /var/vmail/sieve/%{user | domain }/%{user | username }/active-script.sieve
  driver = file
  path = /var/vmail/sieve/%{user | domain }/%{user | username }/scripts
  type = personal
}
sieve_script spam-global {
  path = /var/vmail/sieve/global/spam-global.sieve
  type = before
}
mailbox Spam {
  sieve_script spam {
    cause = copy
    path = /var/vmail/sieve/global/learn-spam.sieve
    type = before
  }
}
imapsieve_from Spam {
  sieve_script ham {
    cause = copy
    path = /var/vmail/sieve/global/learn-ham.sieve
    type = before
  }
}
mysql /var/run/mysqld/mysqld.sock {
  dbname = vmail
  password = # hidden, use -P to show it
  user = vmail
}
passdb sql {
  driver = sql
  query = CALL password_query('%{user}', '%{password}')
}
userdb sql {
  driver = sql
  query = CALL user_query_dovecot('%{user | username}', '%{user | domain}')
}

_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to