Hey gang, A while back someone requested a way to get the listing of nomail list members. I recently needed not only that, but also the ability to sort out digest mime users, and digest plain text users. Below is a replacement list_members program (that goes in $prefix/bin) that adds four new commands with which to accomplish this:
-x = exclude nomail members -n = list only nomail members -m = list digest mime members -l = list plain text digest members This script was modified from the 2.0.6 Mailman code - NOT tested with 2.1!!! Enjoy! Bob ========cut here============= #! /usr/bin/env python # # Copyright (C) 1998,1999,2000 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. """List all the members of a mailing list. Usage: %(program)s [-o file] [-r] [-d] [-p] [-h] listname Where: -o file or --output file Write output to specified file instead of standard out. -r or --regular Print just the regular (non-digest) members. -d or --digest Print just the digest members. -x or --exclude Exclude all nomail members from list -n or --nomail Print only the nomail members -l or --plain Print only plain text digest members -m or --mime Print only mime digest members -p or --preserve Output member addresses case preserved the way they were added to the list. Otherwise, addresses are printed in all lowercase. -h or --help Print this help message and exit. listname is the name of the mailing list to use. Note that if neither -r or -d is supplied, both regular members are printed first, followed by digest members, but no indication is given as to address status. """ import sys import string import getopt import paths from Mailman import MailList from Mailman import Errors from Mailman import Defaults from Mailman import mm_cfg program = sys.argv[0] rmem = {} dmem = {} def usage(status, msg=''): print __doc__ % globals() if msg: print msg sys.exit(status) def main(): try: opts, args = getopt.getopt( sys.argv[1:], 'dprnmxlo:h', ['digest', 'regular', 'preserve', 'nomail', 'mime', 'xclude', 'plain', 'output=', 'help']) except getopt.error, msg: usage(1, msg) if len(args) <> 1: usage(1) listname = string.lower(args[0]) outfile = None regular = None digest = None preserve = None nomail = None mimef = None xclude = None plaint = None for opt, arg in opts: if opt in ('-h', '--help'): usage(0) elif opt in ('-o', '--output'): outfile = arg elif opt in ('-r', '--regular'): regular = 1 elif opt in ('-d', '--digest'): digest = 1 elif opt in ('-p', '--preserve'): preserve = 1 elif opt in ('-n', '--nomail'): nomail = 1 elif opt in ('-m', '--mime'): mimef = 1 elif opt in ('-x', '--exclude-nomail'): xclude = 1 elif opt in ('-l', '--plain'): plaint = 1 if plaint: digest = 1 if mimef: digest = 1 if regular is None and digest is None: regular = digest = 1 if xclude is None and nomail is None: xclude = nomail = 1 if mimef is None and plaint is None: mimef = plaint = 1 if outfile: try: fp = open(outfile, 'w') except IOError: print 'Could not open file for writing:', outfile sys.exit(1) else: fp = sys.stdout try: mlist = MailList.MailList(listname, lock=0) except Errors.MMListError, e: print 'No such list "%s"\n%s' % (listname, e) sys.exit(1) # filters for recipient calculation def delivery_enabled_p(x, s=mlist, v=mm_cfg.DisableDelivery): return not s.GetUserOption(x, v) def delivery_disabled_p(x, s=mlist, v=mm_cfg.DisableDelivery): return s.GetUserOption(x, v) def likes_mime_p(x, s=mlist, v=mm_cfg.DisableMime): return not s.GetUserOption(x, v) def hates_mime_p(x, s=mlist, v=mm_cfg.DisableMime): return s.GetUserOption(x, v) if preserve: for addr in mlist.GetDeliveryMembers(): rmem[addr] = addr for addr in mlist.GetDigestDeliveryMembers(): dmem[addr] = addr else: for addr in mlist.GetMembers(): rmem[addr] = addr for addr in mlist.GetDigestMembers(): dmem[addr] = addr rmembers = filter(delivery_enabled_p, rmem.keys()) rnomembers = filter(delivery_disabled_p, rmem.keys()) dmem2 = filter(delivery_enabled_p, dmem.keys()) dmembers = filter(hates_mime_p, dmem2) dmime = filter(likes_mime_p, dmem2) dmem2 = filter(delivery_disabled_p, dmem.keys()) dnomembers = filter(hates_mime_p, dmem2) dnomime = filter(likes_mime_p, dmem2) stdout = sys.stdout try: sys.stdout = fp if regular: if xclude: for addr in rmembers: print addr if nomail: for addr in rnomembers: print addr if digest: if xclude: if plaint: for addr in dmembers: print addr if mimef: for addr in dmime: print addr if nomail: if plaint: for addr in dnomembers: print addr if mimef: for addr in dnomime: print addr finally: sys.stdout = stdout if __name__ == '__main__': main() ------------------------------------------------------ Mailman-Users maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/mailman-users