Adding members

The mailman addmembers command allows a site administrator to add members to a mailing list.

>>> from mailman.testing.documentation import cli
>>> command = cli('mailman.commands.cli_addmembers.addmembers')

Usage

Here is the complete usage for the command.

>>> command('mailman addmembers --help')
Usage: addmembers [OPTIONS] FILENAME LISTSPEC

  Add all member addresses in FILENAME with delivery mode as specified with
  -d/--delivery.  FILENAME can be '-' to indicate standard input. Blank lines
  and lines that start with a '#' are ignored.

Options:
  -d, --delivery [regular|mime|plain|summary|disabled]
                                  Set the added members delivery mode to
                                  'regular', 'mime', 'plain', 'summary' or
                                  'disabled'.  I.e., one of regular, three modes
                                  of digest or no delivery.  If not given, the
                                  default is regular.  Ignored for invited
                                  members.

  -i, --invite                    Send the added members an invitation rather
                                  than immediately adding them.

  -w, --welcome-msg / -W, --no-welcome-msg
                                  Override the list's setting for
                                  send_welcome_message.

  --help                          Show this message and exit.

Examples

You can add members to a mailing list from the command line. To do so, you need a file containing email addresses and optional display names that can be parsed by email.utils.parseaddr().

>>> from tempfile import NamedTemporaryFile
>>> filename = cleanups.enter_context(NamedTemporaryFile()).name
>>> from mailman.app.lifecycle import create_list
>>> bee = create_list('bee@example.com')
>>> with open(filename, 'w', encoding='utf-8') as fp:
...     print("""\
... aperson@example.com
... Bart Person <bperson@example.com>
... cperson@example.com (Cate Person)
... """, file=fp)

>>> command('mailman addmembers ' + filename + ' bee.example.com')

>>> from mailman.testing.documentation import dump_list
>>> from operator import attrgetter
>>> dump_list(bee.members.addresses, key=attrgetter('email'))
aperson@example.com
Bart Person <bperson@example.com>
Cate Person <cperson@example.com>

You can also specify - as the filename, in which case the addresses are taken from standard input.

>>> stdin = """\
... dperson@example.com
... Elly Person <eperson@example.com>
... fperson@example.com (Fred Person)
... """
>>> command('mailman addmembers - bee.example.com', input=stdin)

>>> dump_list(bee.members.addresses, key=attrgetter('email'))
aperson@example.com
Bart Person <bperson@example.com>
Cate Person <cperson@example.com>
dperson@example.com
Elly Person <eperson@example.com>
Fred Person <fperson@example.com>

Blank lines and lines that begin with ‘#’ are ignored.

>>> with open(filename, 'w', encoding='utf-8') as fp:
...     print("""\
... gperson@example.com
... # hperson@example.com
...
... iperson@example.com
... """, file=fp)

>>> command('mailman addmembers ' + filename + ' bee.example.com')

>>> dump_list(bee.members.addresses, key=attrgetter('email'))
aperson@example.com
Bart Person <bperson@example.com>
Cate Person <cperson@example.com>
dperson@example.com
Elly Person <eperson@example.com>
Fred Person <fperson@example.com>
gperson@example.com
iperson@example.com

Addresses which are already subscribed are ignored, although a warning is printed.

>>> with open(filename, 'w', encoding='utf-8') as fp:
...     print("""\
... gperson@example.com
... aperson@example.com
... jperson@example.com
... """, file=fp)

>>> command('mailman addmembers ' + filename + ' bee.example.com')
Already subscribed (skipping): gperson@example.com
Already subscribed (skipping): aperson@example.com

>>> dump_list(bee.members.addresses, key=attrgetter('email'))
aperson@example.com
Bart Person <bperson@example.com>
Cate Person <cperson@example.com>
dperson@example.com
Elly Person <eperson@example.com>
Fred Person <fperson@example.com>
gperson@example.com
iperson@example.com
jperson@example.com