Mailman3 Queues Documentation
Hi Everyone,
I'm looking for a documentation for the explanation about the Queues in Mailman3. By the way, I'm new, I just got 5 shunt under Queues.
Mailman Core Version: GNU Mailman 3.3.10 (Tom Sawyer) Mailman Core API Version: 3.1 Mailman Core Python Version: 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0]
Queues archive 0 bad 0 bounces 0 command 0 digest 0 in 0 nntp 0 out 0 pipeline 0 retry 0 shunt 5 virgin 0
Thanks, Marin
On 2/18/26 12:03, msok--- via Mailman-users wrote:
Hi Everyone,
I'm looking for a documentation for the explanation about the Queues in Mailman3. By the way, I'm new, I just got 5 shunt under Queues.
The entries in the shunt queue are messages that threw an uncaught
exception in processing. The messages and their metadata can be examined
with the mailman qfile command. For each of these messages there will
be entries in mailman.log beginning with one saying
Uncaught runner exception: ...
followed by a traceback followed by a message saying
SHUNTING: file_id
where file_id is the name of the file in the shunt queue minus the .pck extension.
The exception and traceback will identify the exception and the issue
that caused it. If the issue is caused by the message itself and the
message is spam, you can just delete the file from the var/queue/shunt/
directory. If the issue is something else like, e.g., a configuration
problem or an unreadable template, you can fix the problem and then
reprocess the messages with the mailman unshunt command.
If you need help interpreting the exception and traceback, post the traceback here.
Most of the queues (all except bad and shunt) hold messages to be or being processed by the corresponding runner. For an overview of how Mailman works, see <https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/archit...> and <https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/8-mile...>. For some detail on runners see <https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/runners/doc...>
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
Thanks, Mark, you are saving my life here.
It's working now due to permission issued because I used root account to create mailing list in bash command.
by the way, my mailman3 installed on Debian 13 OS via Debian package. I didn't create mailman user. Now, it is running under list:list root@lacll-mailman:/var/lib/mailman3/queue/shunt# ps aux | grep mailman avahi 833 0.0 0.0 6248 4180 ? Ss 11:44 0:00 avahi-daemon: running [lacll-mailman.local] list 6408 0.0 0.6 107900 98648 ? Ss 13:04 0:01 mailman: master postgres 6422 0.0 0.1 220648 18936 ? Ss 13:04 0:00 postgres: 17/main: mailman3 mailman3 ::1(41028) idle list 6423 0.0 0.6 110916 102300 ? S 13:04 0:01 mailman: runner [archive] list 6424 0.0 0.6 110680 102120 ? S 13:04 0:01 mailman: runner [bounces] list 6425 0.0 0.6 107924 99380 ? S 13:04 0:01 mailman: runner [command] list 6426 0.0 0.6 111980 102572 ? S 13:04 0:01 mailman: runner [in] list 6427 0.0 0.6 183724 102648 ? Sl 13:04 0:01 mailman: runner [lmtp] list 6428 0.0 0.6 112052 103040 ? S 13:04 0:01 mailman: runner [out] list 6429 0.0 0.6 111928 103396 ? S 13:04 0:01 mailman: runner [pipeline] list 6430 0.0 0.6 118076 107588 ? S 13:04 0:01 gunicorn: master [mailman: runner [rest]] list 6431 0.0 0.6 107856 98940 ? S 13:04 0:01 mailman: runner [retry] list 6432 0.0 0.6 110560 102108 ? S 13:04 0:01 mailman: runner [task] list 6433 0.0 0.6 110824 102244 ? S 13:04 0:01 mailman: runner [virgin] list 6434 0.0 0.6 111980 102776 ? S 13:04 0:01 mailman: runner [digest]
If I would like to change to other user, where should I change it. Greatly appreciate if you can guide me on this as well.
Thanks, Marin
On 2/19/26 14:18, msok--- via Mailman-users wrote:
Thanks, Mark, you are saving my life here.
It's working now due to permission issued because I used root account to create mailing list in bash command.
Never run the mailman command as root or any other than the Mailman
user, list in your case.
by the way, my mailman3 installed on Debian 13 OS via Debian package. I didn't create mailman user. Now, it is running under list:list
That is the Debian way. Don't try to change it unless you want to rip out the Debian packages and reinstall following <https://docs.mailman3.org/en/latest/install/virtualenv.html>.
-- Mark Sapiro <mark@msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan
Quick guide to Queues:
Mailman uses the traditional "store and forward" approach to data handling. Each process accepts a message (either via LMTP or in its queue), and it remains in the queue until successfully processed. This guarantees that if something goes wrong, the message data will not be lost.
Queues are directories under Mailman's $var/queue directory. Objects in queues are files containing a pair of Python objects (email.Message and a metadata dict) in the standard Python serialization format "pickle". The "mailman qfile <file>" program prints them in a readable format.
archive briefly stored, usually immediately picked up by an plugin provided by an archive application (HyperKitty is the usual) bad messages that Mailman parsed and couldn't figure out what to do with them (approximately permanent failures) messages in this queue will never be automatically processed, they must be handled by the site admin (usually deleted) bounces messages that fit one of the bounce formats known to Mailman, the subscription's bounce data is updated and the message deleted command messages to the administrative addresses, treated as commands to the Mailman application such as subscribe digest message to be added to the next edition of a list's digest in messages accepted from the MTA via LMTP are stored here nntp messages to processed via a newsgroup out posts being delivered to subscribers, these will remain until all addresses are either delivered or have been rejected by Mailman's outgoing SMTP gateway pipeline (some internal function, I'll document it later) retry (some internal function, I'll document it later) shunt messages that cause an uncaught Python exception, often this can be retried with "mailman unshunt" and delivery may succeed ("exception" means we can't really say what might have happened, sometimes it's a permanent failure, sometimes an admin could edit the message and delivery would succeed, fairly often there is a configuration or other problem that once resolved allows delivery via unshunt virgin messages to users, the queue file remains until successful delivery or permanent failure
Most queues should be empty "most of the time". The 'bad' and 'shunt' queues contain files that will not be automatically retried. Administrator action is required to deliver these files (including the "unshunt" command), otherwise they'll stay there forever. The 'out' queue may back up under heavy loads because of connection and throughput overhead in the SMTP protocol. It is often useful to configure multiple "slices" of the 'out' queue so that large messages or slow remotes don't block the whole queue. Possibly the MTA may not be running. When the 'nntp' and 'archive' queues back up, that almost always indicates that a companion application (the news gateway or the archiver application) is down.
Steve
-- GNU Mailman consultant (installation, migration, customization) Sirius Open Source https://www.siriusopensource.com/ Software systems consulting in Europe, North America, and Japan
participants (3)
-
Mark Sapiro -
msok@lalawlibrary.org -
Stephen J. Turnbull