Thank you, but actually I am testing them through browser just because the clients do not work anyway.
I am trying Bulwark Webmail and Sterna Mobile client.
Here is what happens with Bulwark:
It could “automagically” set all JMAP settings for Stalwart and successfully registered itself as a client at Stalwart. Now opening the webmail,
In the UI, it says:
SSO is enabled but the identity provider could not be reached. Check your OAuth configuration.
In the logs it says:
[OAuth] Discovery failed for https://mail.example.com: https://mail.example.com/.well-known/oauth-authorization-server returned non-public or invalid endpoint URL; https://mail.example.com/.well-known/openid-configuration returned non-public or invalid endpoint URL
[WARN ] 2026-07-20T07:49:45.880Z OAuth metadata discovery returned no usable endpoints {“discoveryUrl”:“https://mail.example.com”}
And here what happens with Sterna:
It gives a one-time code to enter in the Stalwart login page and redirects to Stalwart opening a browser. Then I enter the credentials along with this code Sterna created. Then Stalwart says login is successful and that I can return to the client; but when I get back to Sterna, it says OAuth is not working and that I should try again.
Right now, Sterna doesn’t even open the login page and it says:
Couldn’t connect: This server doesn’t support OAuth sign-in. Use e-mail and password instead.
Now I tried manually testing the endpoints with Postman. I created a client at Stalwart portal. And in Postman I selected OAuth 2.0 as authorization type, “openid profile email” as scope and received the tokens successfully. This process created this log entry on Stalwart side:
INFO Authentication successful (auth.success) listenerId = “https”, localPort = 443, remoteIp = xxx.xxx.xxx.xxx, remotePort = 32822, accountName = “[email protected]”, accountId = 1
Then I sent a POST request to https://mail.example.com/auth/profile with the Access Token that Postman automatically added. The result is very same with the other clients:
Header is HTTP 404 and body is:
{“type”:“about:blank”,“status”:404,“title”:“Not Found”,“detail”:“The requested resource does not exist on this server.”}
And this produces zero log on the server side for this behavior. No logs other than the auth-successful message when I first logged in.