1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
|
Mailman - The GNU Mailing List Management System
Copyright (C) 1998 by the Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Background
==========
This is Mailman, a mailing list management system written mostly in
Python. Mailman was originally developed by John Viega. Subsequent
development (through version 1.0b3) was by Ken Manheimer. Currently,
Mailman development is a group effort, led by John Viega, Ken
Manheimer, Barry Warsaw, and Scott Cotton, with contributions from
many - see the address of the mailman-developers list page, below.
See the Mailman home site for current status, including new releases
and known problems: http://www.list.org .
To join the Mailman user's mailing list (recommended) - and to see an
example of a Mailman list interface in action - visit:
http://www.python.org/mailman/listinfo/mailman-users
To track, and/or participate in, the mailman development crowd:
http://www.python.org/mailman/listinfo/mailman-developers
See file NEWS for info on changes since v. 0.9
Features:
o Most standard mailing list features, including:
moderation, mail based commands, digests, etc...
o An extensive Web interface, customizable on a per-list basis.
o Web based list administration interface for *all* admin-type tasks
o Automatic Web based hypermail-style archives (using pipermail or
other external archiver), including provisions for private archives
o Integrated mail list to newsgroup gatewaying
o Integrated newsgroup to mail list gatewaying (polling-based... if you
have access to the nntp server, you should be able to easily do
non-polling based news->mail list gatewaying; email viega@list.org,
I'd like to help get that going and come up
with instructions)
o Smart bounce detection and correction
o Integrated fast bulk mailing
o Smart spam protection
o Extensible logging
o Multiple list owners and moderators are possible
o Optional MIME-compliant digests
o Nice about which machine you subscribed from if you're from the
right domain
Here is a list of sites mirroring the Mailman ftp site
ftp://chimera.acm.jhu.edu/pub/mailman (thanks Corbett Klempay)
Using Mailman
=============
Requirements:
The default mail delivery mechanism uses a direct SMTP connection to
whatever mail transport agent you have running on port 25. You can
thus use Mailman with any such MTA, however the script bin/newlist
still generates sendmail style aliases (this will be fixed). You
can also configure Mailman to use your MTA directly.
You will need root access on the machine running Mailman in order to
create a new account and group (see the INSTALL file for details).
You will also need write access to your Web server configuration and
MTA aliases file in order hook Mailman up to the Web and email.
Install:
Please see the file INSTALL for details on installing Mailman. In the
instructions that follow, all file paths are assumed to be relative to
the installation directory $prefix.
Adding a new list:
o Run the program bin/newlist
o Visit the list general admin page, and use the descriptions and
the "details" help feature to understand the configuration settings.
List managers, note that:
o Being a list administrator does not entail receiving the traffic -
you have to subscribe, as well.
o Relevant urls - the DEFAULT_URL plus:
- mailman/listinfo/listname for public view of list
- mailman/admin/listname for options
- mailman/admindb/listname for pending requests
- and generally, mailman/listinfo for the list of (public) lists
How to add a new user option
You'll need to do some of these things and not others.
1) Add a flag to mm_defaults.py, and mm_cfg.py.dist if it's
likely to require a custom value for each site.
2) Add an entry to mm_html GetStandardReplacements name
& mapping, to enable referring to the value from mailman html.
3) Add replacements lines to the cgi/options and cgi/listinfo
scripts, to hook the mailman html up with the option.
4) For user-specific options, make SetUserOption calls in
& cgi/handle_opts.
5) For user-specific options, add to 2 data structs at top of
& mm_mailcmd.
6) For user-specific options, add description to mm_mailcmd help
7) Update templates if the options have replacements
8) Use your option wherever appropriate...
Interactive python sessions with mailing lists
You can do substantial things with mailing lists from the
interpreter! Include the mailman homedir on your shell python
path, or manually insert it on sys.path from within python, and
import Mailman.MailList and Mailman.Utils from within the
interpreter. You can instantiate the mailing list of your choice,
e.g. for a list named postal:
>>> sys.path.insert(0, '/local/mailman')
>>> from Mailman import MailList, Utils
>>> l = MailList.MailList('postal', lock=0)
(Don't set lock=0 if you're going to be changing the state of the
list, eg adding or removing members, etc. However, be aware that
while you're locking it you'll be blocking any other processes that
are trying to obtain the lock - including handling of new postings to
the list, subscriptions, administrative changes, and so forth.)
Now you can examine various aspects of the list:
>>> l.members
['klm@python.org']
>>> l.digest_members
[]
>>> l.real_name
'Postal'
>>> l._internal_name
'postal'
dir(l) will present the components of the list. MailList.py has
the descriptions of many of them, though some are defined in other
modules.
If you want to save changes, 'l.Save()' will do it. It's a real
good idea to play with trial lists, first, before using this
method to do surgery on production lists!
When you do get comfortable with it, you use it and a utility
routine, Utils.map_maillists(), to do batched changes on all
your lists. It takes a function as its argument, and applies that
function to every one of the lists on your system. For instance,
to get the names of all the lists on your system which are
advertised:
>>> def advertised(lst):
... if lst.advertised: return lst.real_name
...
>>> advertised(l)
>>> filter(None, Utils.map_maillists(advertised))
['Mailman-Developers', 'Meta-sig', 'Python-Help', 'C++-SIG', 'Matrix-SIG',
'DB-SIG', 'DO-SIG', 'Doc-SIG', 'GUI-SIG', 'Image-SIG', 'Objc-SIG',
'Plot-SIG', 'Pythonmac-SIG', 'String-SIG', 'Thread-SIG', 'Grail', 'XML-SIG',
'JPython-Interest', 'Trove-Dev', 'Mailman-Users']
Beware that "list surgery" can be easily used to foul up your list
data structures - so be careful, and confident of what you're
done *before* any list .Save()'s are applied...
Local Variables:
mode: indented-text
indent-tabs-mode: nil
End:
|