3.69. How do I set up an umbrella list?

This is a companion to FAQ 3.5 What is an Umbrella list - and why doesn't it do what I want?. That FAQ explains how umbrella lists work and provides some information about alternative ways of doing the same thing.

This FAQ discusses some other issues with umbrella lists and tells you how to set up the umbrella list and its member lists so that a post from a member of one of the sublists to the umbrella list will be delivered to all the sublists without being held anywhere for moderator approval. Of course, if you don't want members of the sublists to be able to post to the umbrella, you would set up the umbrella differently than described here - perhaps with just a few authorized posters in accept_these_nonmembers.

Before getting to the setup details, let's look at what's different between umbrella and non-umbrella lists. There is only one difference. If U1@example.com is an umbrella list with members S1@example.com, S2@example.com and S3@example.net, password reminders from U1@example.com will be sent to S1-suffix@example.com, S2-suffix@example.com and S3-suffix@example.net instead of S1@example.com, S2@example.com and S3@example.net. -suffix is settable; the default is -owner.

The purpose of this is to prevent the U1 member passwords for S1, S2, and S3 from being sent to the S1, S2 and S3 lists themselves. However, this makes it difficult to have both lists and individuals as direct members of the same list. (see footnote)

There are three issues in setting up an umbrella list and its member lists. These are:

  • posts from a member of a sublist will be held for moderation by the umbrella list because the poster is not a member of the umbrella.
  • posts from the umbrella list will be held by a sublist because the original poster is not a member of the sublist.
  • posts from the umbrella list will be held for "implicit destination" by a sublist.

Taking these in reverse order, If a sublist's Privacy options...->Recipient filters->require_explicit_destination = Yes, then the posting address of the umbrella list needs to be in Privacy options...->Recipient filters->acceptable_aliases of the sublist.

The second issue is when a member of one sub-list posts to the umbrella, her post is held by the sublists of which she is not a member. There are a few ways to deal with this. if the mm_cfg.py option USE_ENVELOPE_SENDER is Yes or True, you can add the umbrella's -bounces address to accept_these_nonmembers of sublists. In any case, you can add the umbrella's -bounces address as a member with delivery disabled and password reminders off to the sublists.

The reason why adding the umbrella's -bounces address as a member always works, but adding it to accept_these_nonmembers only works if USE_ENVELOPE_SENDER is Yes or True, is that the -bounces address in in Sender: and not in From: and membership is always tested for both Sender: and From:, but *_these_nonmembers is only tested against either Sender: or From: depending on USE_ENVELOPE_SENDER.

Another way to deal with this is to use the @Listname syntax to add the other sublists to accept_these_nonmembers of each sublist.

You can also deal with this issue by making the umbrella list anonymous and then putting the umbrella posting address or the umbrella -bounces address (depending on USE_ENVELOPE_SENDER) in the sublists' accept_these_nonmembers. Of course, this is not satisfactory if you want to maintain the identity of posters to the umbrella list.

The first issue can be hardest to deal with. You don't want to open the umbrella list to posting from anyone because you have already arranged for any posts from the umbrella to pass through to the sublists. You want to add the sublists to accept_these_nonmembers of the umbrella, and in Mailman 2.1.10 and newer, you do exactly that using the @Listname syntax (For more information see the "Details for accept_these_nonmembers" link from the Privacy options... -> Sender filters page in the web list admin interface).

For cPanel Mailman the entry in accept_these_nonmembers uses the cPanel list name, i.e. an entry of the form @list_example.com.

For Mailman 2.1.9 and older, there is a patch at https://bugs.launchpad.net/mailman/+bug/558204 that implements this function. For Mailman 2.1.9 and older, in the absence of the patch, you have to do this outside of Mailman.

One way to do this would be the following shell script run sufficiently often by cron. This only works if all the lists are on the same machine.

 #!/bin/bash
 #
 # Set accept_these_nonmembers of list U1 to contain all the members
 # of lists S1, S2 and S3.
 #
 # paths may need adjusting for your installation.
 #
 temp1=`/bin/mktemp`
 temp2=`/bin/mktemp`
 /usr/local/mailman/bin/list_members S1 > $temp1
 /usr/local/mailman/bin/list_members S2 >> $temp1
 /usr/local/mailman/bin/list_members S3 >> $temp1
 /bin/sort -u $temp1 |\
 /bin/sed  -e '1,$s/.*/"&",/'  -e '1i accept_these_nonmembers = [' \
 -e '$a ]' > $temp2
 /usr/local/mailman/bin/config_list -i $temp2 U1
 rm $temp1 $temp2

You can have a list with both individual and list members. You do not set it as an umbrella list and you turn off password reminders for the members that are lists. This is not a secure solution though, because someone can always request a reminder for a member list via the web interface. See http://mail.python.org/pipermail/mailman-users/2007-February/055687.html for more detail.


Comments

Mark Sapiro

This comment is from https://mail.python.org/pipermail/mailman-users/2018-June/083453.html

If you want an umbrella list to post anonymous announcements to several sublists at once, always getting the appropriate footer from each list, and not allowing sublist members to post, follow this procedure:

1. Create the umbrella list and set it up as anonymous (General Options > anonymous_list) and as umbrella (General Options > umbrella_list).

2. Add the sublists' posting addresses as members of the umbrella list.

3. Either add the addresses of people allowed to post to the umbrella as umbrella members, or authorize them to post as nonmembers (Privacy > Sender filters > accept_these_nonmembers).

4. In every sublist, put the umbrella's posting address as accepted non-member (Privacy > Sender filters > accept_these_nonmembers).

5. In every sublist, put the umbrella's posting address as acceptable alias (Privacy > Recipient filters > acceptable_aliases). This last step is necessary only if require_explicit_destination is set to 'Yes'.

If you don't get the expected results, check the /var/log/mailman/vette log and the value of the USE_ENVELOPE_SENDER directive in mm_cfg.py or Defaults.py.