Thanks for getting back to me!
I did:
- Upgrade to 0.16.7 (that is also a server restart I guess
)
- Check with CLI:
{"name":"DOMAIN","aliases":{},"isEnabled":true,"createdAt":"2026-05-11T08:02:46Z","description":"DOMAIN","logo":null,"certificateManagement":{"@type":"Manual"},"dkimManagement":{"@type":"Manual"},"dnsManagement":{"@type":"Manual"},"memberTenantId":null,"directoryId":null,"catchAllAddress":"mark@DOMAIN","subAddressing":{"@type":"Enabled"},"allowRelaying":false,"reportAddressUri":"mailto:postmaster","dnsZoneFile":"_443._tcp.autodiscover.DOMAIN. IN TLSA 3 1 1 REDACTED\n_443._tcp.autodiscover.DOMAIN. IN TLSA 2 1 1 REDACTED\n_443._tcp.mta-sts.DOMAIN. IN TLSA 3 1 1 REDACTED\n_443._tcp.mta-sts.DOMAIN. IN TLSA 2 1 1 REDACTED\n_443._tcp.autoconfig.DOMAIN. IN TLSA 3 1 1 REDACTED\n_443._tcp.autoconfig.DOMAIN. IN TLSA 2 1 1 REDACTED\n_443._tcp.ua-auto-config.DOMAIN. IN TLSA 3 1 1 REDACTED\n_443._tcp.ua-auto-config.DOMAIN. IN TLSA 2 1 1 REDACTED\n_25._tcp.mail.DOMAIN. IN TLSA 3 1 1 REDACTED\n_993._tcp.mail.DOMAIN. IN TLSA 3 1 1 REDACTED\n_465._tcp.mail.DOMAIN. IN TLSA 3 1 1 REDACTED\n_443._tcp.mail.DOMAIN. IN TLSA 3 1 1 REDACTED\n_25._tcp.mail.DOMAIN. IN TLSA 2 1 1 REDACTED\n_993._tcp.mail.DOMAIN. IN TLSA 2 1 1 REDACTED\n_465._tcp.mail.DOMAIN. IN TLSA 2 1 1 REDACTED\n_443._tcp.mail.DOMAIN. IN TLSA 2 1 1 REDACTED\nmail.DOMAIN. IN TXT \"v=spf1 a -all\"\nDOMAIN. IN TXT \"v=spf1 mx -all\"\nDOMAIN. IN MX 10 mail.DOMAIN.\n_dmarc.DOMAIN. IN TXT \"v=DMARC1; p=reject; rua=mailto:postmaster@DOMAIN\"\n_imaps._tcp.DOMAIN. IN SRV 0 1 993 mail.DOMAIN.\n_jmap._tcp.DOMAIN. IN SRV 0 1 443 mail.DOMAIN.\n_submissions._tcp.DOMAIN. IN SRV 0 1 465 mail.DOMAIN.\nmta-sts.DOMAIN. IN CNAME mail.DOMAIN.\n_mta-sts.DOMAIN. IN TXT \"v=STSv1; id=18290007539592222054\"\n_smtp._tls.DOMAIN. IN TXT \"v=TLSRPTv1; rua=mailto:postmaster@DOMAIN\"\nua-auto-config.DOMAIN. IN CNAME mail.DOMAIN.\n_ua-auto-config.DOMAIN. IN TXT \"v=UAAC1; a=sha256; d=LpIzGYOcvNR5hvOnn8GNsY7aCQQp+Z9bGaF2DUKKWm8=\"\nautoconfig.DOMAIN. IN CNAME mail.DOMAIN.\nautodiscover.DOMAIN. IN CNAME mail.DOMAIN.\n","id":"c"}
- Reloaded the caches (does not hurt)
- Removed the catch-all for testing (cli reported catchAllAddress:null)
- Tested with a new subaddress (mark+unbekannt@domain from another non-stalwart e-mail)
- Got a bound back from stalwart: “550 5.1.1 The email account that you tried to reach does not exist. Please try double-checking the recipient’s email address for typos or unnecessary spaces.”
So now I switched the log-level to TRACE and tried again. So much logs 
But I see that the + part is correctly stripped out when querying LDAP. I don’t want to share the 200KB of logs openly, but I can do privately if that helps. Here a few snips:
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z TRACE Expression evaluation result (eval.result) queueId = 310102126130888705, queueName = "local", from = "SENDER", to = ["mark+test1234@DOMAIN"], size = 6111, total = 1, id = "ReportSettings with id singleton", key = "outboundReportSubmitter", result = "String(Borrowed("mail.DOMAIN"))"
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z TRACE Expression evaluation result (eval.result) queueId = 310102126130888705, queueName = "local", from = "SENDER", to = ["mark+test1234@DOMAIN"], size = 6111, total = 1, id = "DsnReportSettings with id singleton", key = "fromAddress", result = "String(Owned("MAILER-DAEMON@DOMAIN"))"
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z TRACE Expression evaluation result (eval.result) queueId = 310102126130888705, queueName = "local", from = "SENDER", to = ["mark+test1234@DOMAIN"], size = 6111, total = 1, id = "DsnReportSettings with id singleton", key = "fromName", result = "String(Borrowed("Mail Delivery Subsystem"))"
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z INFO DSN permanent failure notification (delivery.dsn-perm-fail) queueId = 310102126130888705, queueName = "local", from = "SENDER", to = ["mark+test1234@DOMAIN"], size = 6111, total = 1, to = "mark+test1234@DOMAIN", hostname = "localhost", details = "Unexpected response for RCPT TO:<mark+test1234@DOMAIN>: Code: 550, Enhanced code: 5.5.0, Message: Mailbox not found.", total = 0
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z DEBUG Cache miss (store.cache-miss) key = "mark+test1234", domain = 2, collection = "email"
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z DEBUG Cache hit (store.cache-hit) key = 2, collection = "domainId"
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z DEBUG Cache hit (store.cache-hit) key = "DOMAIN", collection = "domainName"
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z TRACE Blob read operation (store.blob-read) key = base64:CY1qsM4YMIgkXrWIWx72SgPMQEW+tUTqsVRy+FEASpk=, elapsed = 0ms, size = 4243
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z INFO New delivery attempt for domain (delivery.domain-delivery-start) queueId = 310102126130888705, queueName = "local", from = "SENDER", to = ["mark+test1234@DOMAIN"], size = 6111, total = 1, domain = "DOMAIN"
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z TRACE Expression evaluation result (eval.result) queueId = 310102126130888705, queueName = "local", from = "SENDER", to = ["mark+test1234@DOMAIN"], size = 6111, total = 1, id = "MtaOutboundStrategy with id singleton", key = "route", result = "String(Borrowed("local"))"
1780148219593 2026-05-30T13:36:59.593Z 2026-05-30T13:36:59Z INFO Delivery attempt started (delivery.attempt-start) queueId = 310102126130888705, queueName = "local", from = "SENDER", to = ["mark+test1234@DOMAIN"], size = 6111, total = 1
1780148218505 2026-05-30T13:36:58.505Z 2026-05-30T13:36:58Z TRACE Raw SMTP input received (smtp.raw-input) listenerId = "submissions", localPort = 465, remoteIp = 130.185.0.94, remotePort = 9810, size = 18, contents = "EHLO [127.0.0.1]\r\n"
1780148218474 2026-05-30T13:36:58.474Z 2026-05-30T13:36:58Z TRACE Raw SMTP output sent (smtp.raw-output) listenerId = "submissions", localPort = 465, remoteIp = 130.185.0.94, remotePort = 9810, size = 50, contents = "220 mail.DOMAIN Stalwart ESMTP at your service\r\n"
1780148216574 2026-05-30T13:36:56.574Z 2026-05-30T13:36:56Z TRACE Raw SMTP output sent (smtp.raw-output) listenerId = "smtp", localPort = 25, remoteIp = 2607:f8b0:4864:20::1129, remotePort = 56812, size = 14, contents = "250 2.1.5 OK\r\n"
1780148216574 2026-05-30T13:36:56.574Z 2026-05-30T13:36:56Z INFO SMTP RCPT TO command (smtp.rcpt-to) listenerId = "smtp", localPort = 25, remoteIp = 2607:f8b0:4864:20::1129, remotePort = 56812, to = "mark+test1234@DOMAIN"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z TRACE Write batch operation (store.data-write) elapsed = 0ms, total = 2
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z TRACE Expression evaluation result (eval.result) listenerId = "smtp", localPort = 25, remoteIp = 2607:f8b0:4864:20::1129, remotePort = 56812, id = "MtaInboundThrottle with id iqks1eqsabqb", key = "match", result = "Integer(1)"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = "info", domain = 5, collection = "email"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache hit (store.cache-hit) key = 5, collection = "domainId"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache hit (store.cache-hit) key = "OTHERDOMAIN", collection = "domainName"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = "webmaster", domain = 5, collection = "email"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache hit (store.cache-hit) key = 5, collection = "domainId"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache hit (store.cache-hit) key = "OTHERDOMAIN", collection = "domainName"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = "everything", domain = 5, collection = "email"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache hit (store.cache-hit) key = 5, collection = "domainId"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache hit (store.cache-hit) key = "OTHERDOMAIN", collection = "domainName"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = "mark", domain = 6, collection = "email"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = 6, collection = "domainId"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = "mark", domain = 4, collection = "email"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = 4, collection = "domainId"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = "mark", domain = 5, collection = "email"
1780148216573 2026-05-30T13:36:56.573Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = 5, collection = "domainId"
1780148216572 2026-05-30T13:36:56.572Z 2026-05-30T13:36:56Z DEBUG Cache miss (store.cache-miss) key = "mark", domain = 2, collection = "email"
1780148216572 2026-05-30T13:36:56.572Z 2026-05-30T13:36:56Z DEBUG Cache hit (store.cache-hit) key = 2, collection = "domainId"
1780148216572 2026-05-30T13:36:56.572Z 2026-05-30T13:36:56Z DEBUG Cache hit (store.cache-hit) key = "DOMAIN", collection = "domainName"
1780148213248 2026-05-30T13:36:53.248Z 2026-05-30T13:36:53Z TRACE LDAP query executed (store.ldap-query) details = "(&(objectClass=user)(|(mail=mark@DOMAIN)(mailAlias=mark@DOMAIN)(mailList=mark@DOMAIN))(memberOf=cn=Mail User,ou=groups,dc=ldap,dc=goauthentik,dc=io))", result = [["mailAlias", "mark@mOTHERDOMAIN, mark@OTHERDOMAIN, REDACTED"], ["memberOf", "..., cn=Mail User,ou=groups,dc=ldap,dc=goauthentik,dc=io, ..."], ["objectClass", "top, person, organizationalPerson, inetOrgPerson, user, posixAccount, goauthentik.io/ldap/user"], ["mail", "mark@DOMAIN"], "cn=mark,ou=users,dc=ldap,dc=goauthentik,dc=io"]
1780148211098 2026-05-30T13:36:51.098Z 2026-05-30T13:36:51Z DEBUG Cache miss (store.cache-miss) key = 2, collection = "domainId"
1780148211098 2026-05-30T13:36:51.098Z 2026-05-30T13:36:51Z TRACE Expression evaluation result (eval.result) listenerId = "smtp", localPort = 25, remoteIp = 2607:f8b0:4864:20::1129, remotePort = 56812, id = "MtaStageRcpt with id singleton", key = "rewrite", result = ""
1780148211098 2026-05-30T13:36:51.098Z 2026-05-30T13:36:51Z TRACE Expression evaluation result (eval.result) listenerId = "smtp", localPort = 25, remoteIp = 2607:f8b0:4864:20::1129, remotePort = 56812, id = "MtaStageRcpt with id singleton", key = "rewrite", result = "Integer(0)"
1780148211097 2026-05-30T13:36:51.097Z 2026-05-30T13:36:51Z TRACE Expression evaluation result (eval.result) listenerId = "smtp", localPort = 25, remoteIp = 2607:f8b0:4864:20::1129, remotePort = 56812, id = "MtaStageRcpt with id singleton", key = "script", result = ""
1780148211097 2026-05-30T13:36:51.097Z 2026-05-30T13:36:51Z TRACE Expression evaluation result (eval.result) listenerId = "smtp", localPort = 25, remoteIp = 2607:f8b0:4864:20::1129, remotePort = 56812, id = "MtaStageRcpt with id singleton", key = "script", result = "Integer(0)"
1780148211097 2026-05-30T13:36:51.097Z 2026-05-30T13:36:51Z TRACE Raw SMTP input received (smtp.raw-input) listenerId = "smtp", localPort = 25, remoteIp = 2607:f8b0:4864:20::1129, remotePort = 56812, size = 34, contents = "RCPT TO:<mark+test1234@DOMAIN>\r\n"
1780148211097 2026-05-30T13:36:51.097Z 2026-05-30T13:36:51Z TRACE Raw SMTP output sent (smtp.raw-output) listenerId = "smtp", localPort = 25, remoteIp = 2607:f8b0:4864:20::1129, remotePort = 56812, size = 14, contents = "250 2.1.0 OK\r\n"
Let me know if you need more. It doesn’t pin it down for me, but I am no expert.