Mailman processes incoming messages through a pipeline of handlers which each do parts of the message processing. The default pipeline for all lists is defined in Defaults.py as the GLOBAL_PIPELINE list. It is possible to specify a different pipeline for a specific list by giving that list a 'pipeline' attribute. See 4.67. How do I implement a custom handler in Mailman? for information on doing this.
For purposes of this question, we note that within GLOBAL_PIPELINE we have the following handlers in this order:
'Moderate' process member moderation and non member actions 'Hold' process miscellaneous holds including max_message_size 'MimeDel' process content filtering 'Scrubber' scrub non text/plain parts to the archive if scrub_nondigest
If we just want to apply content filtering before checking max_message size (and the other miscellaneous holds) we can move MimeDel before Hold by putting the following in mm_cfg.py
GLOBAL_PIPELINE.remove('MimeDel') GLOBAL_PIPELINE.insert(GLOBAL_PIPELINE.index('Hold'), 'MimeDel')
If we also want to scrub non text/plain parts before checking the miscellaneous holds, we can move Hold after Scrubber by putting the following in mm_cfg.py
GLOBAL_PIPELINE.remove('Hold') GLOBAL_PIPELINE.insert(GLOBAL_PIPELINE.index('Scrubber') + 1, 'Hold')
Note that Scrubber must never come before MimeDel or parts that might have been removed by content filtering will instead be scrubbed to the archive if scrub_nondigest is Yes.
Also note that moving Scrubber before Hold will allow attachments of any size to be scrubbed to the archive before applying max_message_size. Whether or not this is desirable is an individual decision.