Your question
I am using listmonk connected to Stalwart Mail Server via SMTP on port 465 (submissions listener) for outbound campaigns.
When listmonk sends a batch of emails using a persistent SMTP connection, the campaign gets paused after hitting error threshold because Stalwart rejects messages with the following error:
452 4.4.5 Maximum number of messages per session exceeded.
In Stalwart’s logs, I see the following entry:
INFO Too many messages (smtp.too-many-messages) listenerId = “submissions”, localPort = 465, remoteIp = 10.0.6.1, remotePort = 36644, limit = 10
It is clear that Stalwart defaults to allowing only 10 messages per SMTP session on the submissions listener.
My questions:
Where exactly in the Stalwart Web Admin UI can I configure/increase this limit (or remove it for authenticated users)? Under Settings → Listeners → submissions → Inbound SMTP Sessions, I only see options for Timeout, Bytes Limit, and Duration, but no explicit field for message count.
If this needs to be configured in config.toml, what is the exact configuration syntax and key path to increase limit = 10 (for example, to 1000 or unlimited)?
Environment details:
MTA: Stalwart Mail Server
Client: listmonk v5.0.0
Listener: submissions (port 465, implicit TLS)
Any guidance or configuration snippet would be greatly appreciated. Thank you!
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on
Now I have enough. This is configured as maxMessages on the MtaStageData object, an expression that can reference authenticated_as/listener.
Answer: The per-session message cap you’re hitting is the maxMessages field on the MtaStageData singleton (default 10), not something shown under the Listener’s “Inbound SMTP Sessions” panel — those Timeout/Bytes/Duration fields are separate settings. In the WebUI it’s under Settings › MTA › Session › DATA Stage.
maxMessages is an expression (not a fixed number), so you can raise it generally or condition it on authentication/listener. For example, to allow 1000 messages per session on the submissions listener (or for any authenticated session):
{
"maxMessages": {
"match": {"0": {"if": "listener == 'submissions'", "then": "1000"}},
"else": "10"
}
}
or, keyed off authentication instead of listener:
{
"maxMessages": {
"match": {"0": {"if": "!is_empty(authenticated_as)", "then": "1000"}},
"else": "10"
}
}
Apply this by editing the maxMessages field of the DATA-stage settings in the WebUI (Settings → MTA → Session → DATA Stage), or via the JMAP API / stalwart-cli if you manage config that way — it’s stored as a JSON object, not config.toml key/value pairs. There’s no “unlimited” literal; just set it to a very large number if you want effectively no cap.
Docs: DATA stage | Stalwart and field reference MtaStageData | Stalwart
This is an automated reply from the Stalwart Help Bot. Other community members may follow up if this answer is incomplete or wrong.
It isn’t on the listener. It’s maxMessages under Settings › MTA › Session › DATA Stage, and it’s an expression, so you can raise it only for authenticated sessions:
{"maxMessages":{"match":{"0":{"if":"!is_empty(authenticated_as)","then":"1000"}},"else":"10"}}
There’s no “unlimited”; 0 would block every message, so use a large number instead (DATA stage | Stalwart).
Once that’s in, listmonk may hit the next default: the “Sender IP throttle” inbound throttle allows 5 messages per second per remote IP, and it applies to 10.0.6.1 like any other client. If campaigns start pausing on rate errors, add a condition to that throttle that skips authenticated sessions or that IP (MtaInboundThrottle | Stalwart).