Skip to end of metadata
Go to start of metadata

3.5. What is an Umbrella list - and why doesn't it do what I want?

An Umbrella List is a list of other lists.

For example, you have the following lists running in Mailman:


You can create an Umbrella List called, "Threesomes" and instead of people, it will contain the above list names. When you send email to Threesomes, the message goes to each of the individual lists...


When mailman sends out a monthly password reminder, it sends an email to every person in its lists. If it did that for the Umbrella List "Threesomes", then it would treat "ThreeBlindMice" as an ordinary user. Mailman would send an email to "ThreeBlindMice" that contained the password for subscribing or unsubscribing it to the list "ThreeSomes". Everyone on the "ThreeBlindMice" list would receive that message with the password. Now that is fine in the case of Minnie and Mighty, but Mickey has been known to do a few silly things in his time...

You can keep Mickey from getting the password by telling Mailman to send this type of information to "ThreeBlindMice-owner" instead of to "ThreeBlindMice".

By making "Threesomes" into an Umbrella List, you can tell Mailman to add "-owner" to any notices, confirmations and passwords that it sends out to list members.

I would like to see Umbrella Lists do more than just that. IMO, they should only send one message out to each actual user, regardless of how many lists that user is on. Currently, if a message is sent to an Umbrella list and a user is on multiple sub-lists under that Umbrella list, then they will receive multiple copies of the message - one for each of the sub-lists that they are on. In the example above, would receive two messages everytime someone sent an email to "Threesomes".

The work-around for this is to setup a script that builds a Mega-list out of other lists on your server.

  # Create and sync the mailling list
  # The list includes everyone on a Pasus project mailling list.
  # All the Pasus mailing lists start with the word: pasus
  # create an empty file
  echo " " >/tmp/pasus_list
  # dump out all lists names that contain the word pasus, but
  #   be sure to not include the "_all" list, since that is the list
  #   that we are recreating with this script
  LISTS="`~mailman/bin/list_lists |grep -i pasus | \
    grep -vi _all| awk '{ print $1 }'`"
  for i in "$LISTS"
     # dump all the user emails out to a file for all the pasus lists
     ~mailman/bin/list_members $i >>/tmp/pasus_list
  # this sorts the list and removes duplicate entries
  cat /tmp/pasus_list |sort -u >/tmp/pasus_all_list
  ### the above step is really unnecessary as "sync_members" already
  ### does this automatically - still I like a clean orderly list...
  # feed the list of all pasus users into the "_all" list
  # Note: welcome messages are turned off for this list.
  ~mailman/bin/sync_members -f /tmp/pasus_all_list pasus_all >/dev/null
  # Take only pictures, leave only foot prints...
  rm /tmp/pasus_list
  rm /tmp/pasus_all_list
  # Have cron run this script hourly and the Pasus_all list will be
  # updated automatically every hour.

Thanks to Mark Merlins, Jon Carnes, and Shane Beasley for the above work around.

Note this workaround does not take into account per-member options, especially digest and plain delivery options, and the nomail option. A comprehensive script that does it all can be found at

Errata: I just had our sysadmin setup this script for us and he said that to make it actually work he had to remove the quotes from

	for i in "$LISTS"

on line 15. Bill Leuze, systems(at)

Also, the preceding lines

  LISTS="`~mailman/bin/list_lists |grep -i pasus | \
    grep -vi _all| awk '{ print $1 }'`"

can be simplified to

  LISTS=`~mailman/bin/list_lists --bare | grep -i pasus | grep -vi _all`

With Mailman 2.1.10 or later, you can use the "sibling lists" feature as a better umbrella list as long as you are not concerned about digest members.

Using the above example, create the list "Threesomes" with no members, and in Threesomes' Non-digest options -> regular_include_lists put

Then, a post to "Threesomes" will be sent to the regular (nondigest) members of the above three lists without duplication. Note however, that through Mailman 2.1.13 bounce processing won't work in this case for messages sent to the Threesomes list, but starting in 2.1.14, it will.


Sibling lists in general don't work well or at all in cPanel Mailman, but this special case will work if you use the cPanel internal list names, e.g.

Umbrella replacement caveat

regular_include_lists as a replacement for umbrella lists in general is limited to one level of inclusion. I.e., if lista's regular_include_lists contains listb@... which in turn contains listc@... in its regular_include_lists, a post to lista will be sent to the regular members of lista and additionally, the regular members of listb without duplication, and it will be included in the next digest sent to digest members of lista. It will not be included in a listb digest and it will not be sent to any members of listc unless they are also members of lista or regular members of listb.


In this configuration, all posts delivered to members of any of the lists actually come from the Threesomes list. Thus, the List-Unsubscribe: header will not reference the list(s) of which the recipient is actually a member. Also, any msg_header and/or msg_footer added to posts and possibly containing unsubscribe information will be from the Threesomes list, not the included lists.

This is one of many Frequently Asked Questions.

  • None