2.4 Basic Architectural Overview

This section will outline the basic architecture of GNU Mailman, such as how messages are processed by the sytem. Without going into lots of detail, this information will help you understand how the configuration options control Mailman's functionality.

When mail enters the system from your mail server, it is dropped into one of several Mailman queues depending on the address the message was sent to. For example, if your system has a mailing list named mylist and your domain is example.com, people can post messages to your list by sending them to mylist@example.com. These messages will be dropped into the incoming queue, which is also colloquially called the moderate-and-munge queue. The incoming queue is where most of the approval process occurs, and it's also where the message is prepared for sending out to the list membership.

There are separate queues for the built-in archiver, the bounce processor, the email command processor, as well as the outgoing email and news queues. There's also a queue for messages generated by the Mailman system. Each of these queues typically has one queue runner (or ``qrunner'') that processes messages in the queue. The qrunners are idle when there are no messages to process.

Every message in the queues are represented by two files, a message file and a metadata file. Both of these files share the same base name, which is a combination of a unique hash and the Unix time that the message was received. The metadata file has a suffix of .db and the message file has a suffix of either .msg if stored in plain text, or .pck if stored in a more efficient internal representation1.

As a message moves through the incoming queue, it performs various checks on the message, such as whether it matches one of the moderation criteria, or contains disallowed MIME types. Once a message is approved for sending to the list membership, the message is prepared for sending by deleting, adding, or changing message headers, adding footers, etc. Messages in the incoming queue may also be stored for appending to digests.



Footnotes

... representation1
Specifically, a Python pickle