diff options
| author | bwarsaw | 2007-01-14 04:34:29 +0000 |
|---|---|---|
| committer | bwarsaw | 2007-01-14 04:34:29 +0000 |
| commit | 1e63bc4a3b6d9197e66f57e11f4b6733a3b324dd (patch) | |
| tree | e8e31b53257551017bb475c29a5d8881f513b43b /docs | |
| parent | 1e993812a5c1dded1fbc7dbb0e6d6be48b17b02f (diff) | |
| download | mailman-1e63bc4a3b6d9197e66f57e11f4b6733a3b324dd.tar.gz mailman-1e63bc4a3b6d9197e66f57e11f4b6733a3b324dd.tar.zst mailman-1e63bc4a3b6d9197e66f57e11f4b6733a3b324dd.zip | |
Diffstat (limited to 'docs')
31 files changed, 12536 insertions, 0 deletions
diff --git a/docs/ACKNOWLEDGMENTS.txt b/docs/ACKNOWLEDGMENTS.txt new file mode 100644 index 000000000..44e7d5c67 --- /dev/null +++ b/docs/ACKNOWLEDGMENTS.txt @@ -0,0 +1,251 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 1998-2007 by the Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +The following folks are or have been core developers of Mailman (in reverse +alphabetical order): + + Barry Warsaw, Mailman's yappy guard dog + Thomas Wouters, Mailman's Dutch treat + John Viega, Mailman's inventor + Mark Sapiro, Mailman's compulsive responder + Harald Meland, Norse Mailman + Ken Manheimer, Mailman's savior + Tokio Kikuchi, Mailman's weatherman + Scott Cotton, Cookie-Monster + +They can be contacted directly via mailman-cabal@python.org. + +Here is the list of other contributors who have donated large bits of +code, and have assigned copyright for contributions to the FSF: + + Juan Carlos Rey Anaya + Richard Barrett + Stephan Berndts + Norbert Bollow + Ben Gertzfield + Victoriano Giralt + Mads Kiilerich + The Dragon De Monsyne + Les Niles + Terri Oda + Simone Piunno + +Thanks also go to the following people for their important contributions in +other aspects of the Mailman project: + + Brad Knowles + JC Dill + +Thanks also to Dragon for his winning Mailman logo contribution, and +to Terri Oda for the neat shortcut icon and the member documentation. + +Control.com sponsored development of several Mailman 2.1 features, +including topics filters, external membership sources, and initial +virtual mailing list support. My thanks especially to Dan Pierson and +Ken Crater from Control.com. + +Here is the list of other people who have contributed useful ideas, +suggestions, bug fixes, testing, etc., or who have been very helpful +in answering questions on mailman-users. + + David Abrahams + William Ahern + Terry Allen + Jose Paulo Moitinho de Almeida + Sven Anderson + Matthias Andree + Anton Antonov + Mike Avery + Stonewall Ballard + Moreno Baricevic + Jeff Berliner + Stuart Bishop + David Blomquist + Bojan + Søren Bondrup + Grant Bowman + Alessio Bragadini + J. D. Bronson + Stan Bubrouski + Daniel Buchmann + Ben Burnett + Ted Cabeen + Mentor Cana + John Carnes + Julio A. Cartaya + Claudio Cattazzo + Donn Cave + David Champion + Hye-Shik Chang + Eric D. Christensen + Tom G. Christensen + Paul Cox + Stefaniu Criste + Robert Daeley + Ned Dawes + Emilio Delgado + John Dennis + Stefan Divjak + Maximillian Dornseif + Fred Drake + Maxim Dzumanenko + Rob Ellis + Kerem Erkan + Fil + Patrick Finnerty + Bob Fleck + Erik Forsberg + Darrell Fuhriman + Robert Garrigós + Carson Gaspar + Pascal GEORGE + Vadim Getmanshchuk + David Gibbs + Dmitri I GOULIAEV + Terry Grace + Federico Grau + Pekka Haavisto + David Habben + Stig Hackvan + Jeff Hahn + Terry Hardie + Paul Hebble + Tollef Fog Heen + Peer Heinlein + James Henstridge + Walter Hop + Bert Hubert + Henny Huisman + Jeremy Hylton + Ikeda Soji + Rostyk Ivantsiv + Ron Jarrell + Matthias Juchem + Tamito KAJIYAMA + Nino Katic + Ashley M. Kirchner + Matthias Klose + Harald Koch + Eddie Kohler + Chris Kolar + Uros Kositer + Andrew Kuchling + Ricardo Kustner + L'homme Moderne + Sylvain Langlade + Ed Lau + J C Lawrence + Greg Lindahl + Christopher P. Lindsey + Martin von Loewis + Dario Lopez-Kästen + Tanner Lovelace + Jay Luker + Gergely Madarasz + Luca Maranzano + John A. Martin + Michael Mclay + Michael Meltzer + Marc MERLIN + Nigel Metheringham + Dan Mick + Garey Mills + Michael Fischer v. Mollard + David Martínez Moreno + Jonas Muerer + Erik Myllymaki + Balazs Nagy + Dale Newfield + Hrvoje Niksic + Les Niles + Mike Noyes + David B. O'Donnell + Timothy O'Malley + Andrew Martynov + Jason R. Mastaler + Michael Meltzer + Martin Mokrejs + Dirk Mueller + "office" + Dan Ohnesorg + Gerald Oskoboiny + Eva Österlind + Toni Panadès + Jon Parise + Chris Pepper + Tim Peters + Joe Peterson + Piarres Beobide Egaña + PieterB + Rodolfo Pilas + Skye Poier + Martin Pool + Don Porter + Francesco Potortì + Bob Puff + Michael Ranner + John Read + Sean Reifschneider + Christian Reis + Ademar de Souza Reis, Jr. + Bernhard Reiter + Stephan Richter + Tristan Roddis + Heiko Rommel + Luigi Rosa + Guido van Rossum + Nicholas Russo + Chris Ryan + Cabel Sasser + Bartosz Sawicki + Kai Schaetzl + Karoly Segesdi + SHIGENO Kazutaka + Gleydson Mazioli da Silva + Pasi Sjöholm + Chris Snell + Mikhail Sobolev + Greg Stein + Dale Stimson + Students of HIT <mailman-cn@mail.cs.hit.edu.cn> + Szabolcs Szigeti + Vizi Szilard + David T-G + Owen Taylor + Danny Terweij + Jim Tittsler + Todd (Freedom Lover) + Roger Tsang + Chuq Von Rospach + Jens Vagelpohl + Valia V. Vaneeva + Anti Veeranna + Todd Vierling + Bill Wagner + Greg Ward + Mark Weaver + Kathleen Webb + Florian Weimer + Ousmane Wilane + Dan Wilder + Seb Wills + Dai Xiaoguang + Ping Yeh + YASUDA Yukihiro + Michael Yount + Blair Zajac + Mikhail Zabaluev + Noam Zeilberger + Daniel Zeiss + Todd Zullinger + +And everyone else on mailman-developers@python.org and +mailman-users@python.org! Thank you, all. + + + +Local Variables: +mode: indented-text +indent-tabs-mode: nil +End: diff --git a/docs/FAQ.txt b/docs/FAQ.txt new file mode 100644 index 000000000..f064ac72c --- /dev/null +++ b/docs/FAQ.txt @@ -0,0 +1,389 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 1998-2005 by the Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Note: We're migrating the FAQ to an on-line interactive system called + "FAQ Wizard". To see the Mailman FAQ Wizard in action, go to + http://www.python.org/cgi-bin/faqw-mm.py + +FREQUENTLY ASKED QUESTIONS + +Q. How do you spell this program? + +A. You spell it "Mailman", with a leading capital "M" and a lowercase + second "m". It is incorrect to spell it "MailMan" (i.e. you should + not use StudlyCaps). + +Q. I'm getting really terrible performance for outgoing messages. It + seems that if the MTA has trouble resolving DNS for any recipients, + qrunner just gets really slow clearing the queue. Any ideas? + +A. What's likely happening is that your MTA is doing DNS resolution on + recipients for messages delivered locally (i.e. from Mailman to + your MTA via SMTPDirect.py). This is a Bad Thing. You need to + turn off synchronous DNS resolution for messages originating from + the local host. + + In Exim, the value to edit is receiver_verify_hosts. See + README.EXIM for details. Other MTAs have (of course) different + parameters and defaults that control this. First check the README + file for your MTA and then consult your MTA's own documentation. + +Q. My list members are complaining about Mailman's List-* headers! + What can I do about this? + +A. These headers are described in RFC 2369 and are added by Mailman + for the long-term benefit of end-users. While discouraged, the + list admin can disable these via the General Options page. See + also README.USERAGENT for more information. + +Q. Can I put the user's address in the footer that Mailman adds to + each message? + +A. Yes, in Mailman 2.1. The site admin needs to enable personalization by + setting the following variable in the mm_cfg.py file: + + OWNERS_CAN_ENABLE_PERSONALIZATION = Yes + + Once this is done, list admins can enable personalization for regular + delivery members (digest deliveries can't be personalized currently). A + personalized list can include the user's address in the footer. + +Q. My users hate HTML in their email and for security reasons, I want + to strip out all MIME attachments. How can I do this? + +A. Mailman 2.1 has this feature built-in. See the Content Filtering + Options page in the admin interface. + +Q. What if I get "document contains no data" from the web server, or + mail isn't getting delivered, or I see "Premature end of script + headers" or "Mailman CGI error!!!" + +A. The most likely cause of this is that the GID that is compiled into + the C wrappers does not match the GID that your Web server invokes + CGI scripts with. Note that a similar error could occur if your + mail system invokes filter programs under a GID that does not match + the one compiled into the C mail wrapper. + + To fix this you will need to re-configure Mailman using the + --with-cgi-gid and --with-mail-gid options. See the INSTALL file + for details. + + These errors are logged to syslog and they do not show up in the + Mailman log files. Problems with the CGI wrapper do get reported + in the web browser though (unless STEALTH_MODE is enabled), and + include the expected GID, so that should help a lot. + + You may want to have syslog running and configured to log the + mail.error log class somewhere; on Solaris systems, the line + + mail.debug /var/log/syslog + + causes the messages to go to them in /var/log/syslog, for example. + (The distributed syslog.conf forwards the message to the loghost, + when present. See the syslog man page for more details.) + + If your system is set like this, and you get a failure trying to + visit the mailman/listinfo web page, and it's due to a UID or GID + mismatch, then you should get an entry at the end of + /var/log/syslog identifying the expected and received values. + + If you are not getting any log messages in syslog, or in Mailman's + own log files, but messages are still not being delivered, then it + is likely that qrunner is not running (qrunner is the process that + handles all mail in the system). In Mailman 2.0, qrunner was + invoked from cron so make sure your crontab entries for the + `mailman' user have been installed. In Mailman 2.1, qrunner is + started with the bin/mailmanctl script, which can be invoked + manually, or merged with your OS's init scripts. + +Q. What should I check periodically? + +A. Many of the scripts have their standard error logged to + $prefix/logs/error, and some of the modules write caught errors + there, as well, so you should check there at least occasionally to + look for bugs in the code and problems in your setup. + + You may want to periodically check the other log files in the logs/ + directory, perhaps occasionally rotating them with something like + the Linux logrotate script. + +Q. I can't access the public archives. Why? + +A. If you are using Apache, you must make sure that FollowSymLinks is + enabled for the path to the public archives. Note that the actual + archives always reside in the private tree, and only when archives + are public, is the symlink followed. See this archive message for + more details: + + http://mail.python.org/pipermail/mailman-users/1998-November/000150.html + +Q. Still having problems? Running QMail? + +A. Make sure that you are using "preline" before calling the "mailman" + wrapper: + + |preline /home/mailman/mail/mailman post listname + + "preline" adds a Unix-style "From " header which the archiver requires. + You can fix the archive mbox files by adding: + + From somebody Mon Oct 9 12:27:34 MDT 2000 + + before every message and re-running the archive command + "bin/arch listname". The archives should now exist. See README.QMAIL + for more information. + +Q. Still having problems? Running on GNU/Linux? + +A. See the README.LINUX file. + +Q. I want to get rid of some messages in my archive. How do I do + this? + +A. David Rocher posts the following recipe: + + * remove $prefix/archives/private/<listname> + * edit $prefix/archives/private/<listname>.mbox/<listname>.mbox [optional] + * run $prefix/bin/arch <listname> + +Q. How secure are the authentication mechanisms used in Mailman's web + interface? + +A. If your Mailman installation run on an SSL-enabled web server + (i.e. you access the Mailman web pages with "https://..." URLs), + you should be as safe as SSL itself is. + + However, most Mailman installation run under standard, + encryption-unaware servers. There's nothing wrong with that for + most applications, but a sufficiently determined cracker *could* + get unauthorized access by: + + * Packet sniffing: The password used to do the initial + authentication for any non-public Mailman page is sent as clear + text over the net. If you consider this to be a big problem, you + really should use an SSL-enabled server. + + * Stealing a valid cookie: After successful password + authentication, Mailman sends a "cookie" back to the user's + browser. This cookie will be used for "automatic" authentication + when browsing further within the list's protected pages. Mailman + employs "session cookies" which are set until you quit your + browser or explicitly log out. + + Gaining access to the user's cookie (e.g. by being able to read + the user's browser cookie database, or by means of packet + sniffing, or maybe even by some broken browser offering all it's + cookies to any and all sites the user accesses), and at the same + time being able to fulfill the other criteria for using the + cookie could result in unauthorized access. + + Note that this problem is more easily exploited when users browse + the web via proxies -- in that case, the cookie would be valid + for any connections made through that proxy, and not just for + connections made from the particular machine the user happens to + be accessing the proxy from. + + * Getting access to the user's terminal: This is really just + another kind of cookie stealing. The short cookie expiration + time is supposed to help defeat this problem. It can be + considered the price to pay for the convenience of not having to + type the password in every time. + +Q. I want to backup my lists. What do I need to save? + +A. See this FAQ wizard entry: + http://www.python.org/cgi-bin/faqw-mm.py?req=show&file=faq04.006.htp + +Q. How do I rename a list? + +A. Renaming a list is currently a bit of a pain to do completely + correctly, especially if you want to make sure that the old list + contacts are automatically forwarded to the new list. This ought + to be easier. :( + + The biggest problem you have is how to stop mail and web traffic to + your list during the transition, and what to do about any mail + undelivered to the old list after the move. I don't think there + are any foolproof steps, but here's how you can reduce the risk: + + - Temporarily disable qrunner. To do this, you need to edit the + user `mailman's crontab entry. Execute the following command, + commenting out the qrunner line when you're dropped into your + editor. Then save the file and quit the editor. + + % crontab -u mailman -e + + - Turn off your mail server. This is mostly harmless since remote + MTAs will just keep retrying until you turn it back on, and it's + not going to be off for very long. + + - Next turn off your web server if possible. This of course means + your entire site will be off-line while you make the switch and + this may not be acceptable to you. The next best suggestion is + to set up your permanent redirects now for the list you're + moving. This means that anybody looking for the list under its + old name will be redirected to the new name, but they'll get + errors until you've completed the move. + + Let's say the old name is "oldname" and the new name is + "newname". Here are some Apache directives that will do the + trick, though YMMV: + + RedirectMatch permanent /mailman/(.*)/oldname(.*) http://www.dom.ain/mailman/$1/newname$2 + RedirectMatch permanent /pipermail/oldname(.*) http://www.dom.ain/pipermail/newname$1 + + Add these to your httpd.conf file and restart Apache. + + - Now cd to the directory where you've installed Mailman. Let's + say it's /usr/local/mailman: + + % cd /usr/local/mailman + + and cd to the `lists' subdirectory: + + % cd lists + + You should now see the directory `oldname'. Move this to + `newname': + + % mv oldname newname + + - Now cd to the private archives directory: + + % cd ../archives/private + + You will need to move the oldname's .mbox directory, and the + .mbox file within that directory. Don't worry about the public + archives; the next few steps will take care of them without + requiring you to fiddle around in the file system: + + % mv oldname.mbox newname.mbox + % mv newname.mbox/oldname.mbox newname.mbox/newname.mbox + + - You now need to run the `bin/move_list' script to update some of + the internal archiver paths. IMPORTANT: Skip this step if you + are using Mailman 2.1! + + % cd ../.. + % bin/move_list newname + + - You should now regenerate the public archives: + + % bin/arch newname + + - You'll likely need to change some of your list's configuration + options, especially if you want to accept postings addressed to + the old list on the new list. Visit the admin interface for your + new list: + + o Go to the General options + + o Change the "real_name" option to reflect the new list's name, + e.g. "Newname" + + o Change the subject prefix to reflect the new list's name, + e.g. "[Newname] " (yes, that's a trailing space character). + + o Optionally, update other configuration fields like info, + description, or welcome_msg. YMMV. + + o Save your changes + + o Go to the Privacy options + + o Add the old list's address to acceptable_aliases. + E.g. "oldname@dom.ain". This way, (after the /etc/aliases + changes described below) messages posted to the old list will + not be held by the new list for "implicit destination" + approval. + + o Save your changes + + - Now you want to update your /etc/aliases file to include the + aliases for the new list, and forwards for the old list to the + new list. Note that these instructions are for Sendmail style + alias files, adjust to the specifics of how your MTA is set up. + + o Find the lines defining the aliases for your old list's name + + o Copy and paste them just below the originals. + + o Change all the references of "oldname" to "newname" in the + pasted stanza. + + o Now change the targets of the original aliases to forward to + the new aliases. When you're done, you will end up with + /etc/aliases entries like the following (YMMV): + + XXX This needs updating for MM2.1! + + # Forward the oldname list to the newname list + oldname: newname@dom.ain + oldname-request: newname-request@dom.ain + oldname-admin: newname-admin@dom.ain + oldname-owner: newname-owner@dom.ain + + newname: "|/usr/local/mailman/mail/mailman post newname" + newname-admin: "|/usr/local/mailman/mail/mailman mailowner newname" + newname-request: "|/usr/local/mailman/mail/mailman mailcmd newname" + newname-owner: newname-admin + + o Run newaliases + + - Before you restart everything, you want to make one last check. + You're looking for files in the qfiles/ directory that may have + been addressed to the old list but weren't delivered before you + renamed the list. Do something like the following: + + % cd /usr/local/mailman/qfiles + % grep oldname *.msg + + If you get no hits, skip to the next step, you've got nothing to + worry about. + + If you did get hits, then things get complicated. I warn you + that the rest of this step is untested. :( + + For each of the .msg files that were destined for the old list, + you need to change the corresponding .db file. Unfortunately + there's no easy way to do this. Anyway... + + Save the following Python code in a file called 'hackdb.py': + + -------------------------hackdb.py + import sys + import marshal + fp = open(sys.argv[1]) + d = marshal.load(fp) + fp.close() + d['listname'] = sys.argv[2] + fp = open(sys.argv[1], 'w') + marshal.dump(d, fp) + fp.close() + ------------------------- + + And then for each file that matched your grep above, do the + following: + + % python hackdb.py reallylonghexfilenamematch1.db newname + + - It's now safe to turn your MTA back on. + + - Turn your qrunner back on by running + + % crontab -u mailman -e + + again and this time uncommenting the qrunner line. Save the file + and quit your editor. + + - Rejoice, you're done. Send $100,000 in shiny new pennies to the + Mailman cabal as your downpayment toward making this easier for + the next list you have to rename. :) + + + +Local Variables: +mode: text +indent-tabs-mode: nil +End: diff --git a/docs/IPC7/README b/docs/IPC7/README new file mode 100644 index 000000000..835ff71a2 --- /dev/null +++ b/docs/IPC7/README @@ -0,0 +1,8 @@ +The file ipc7.doc contains the MS Word version of the Mailman paper +presented by Ken Manheimer at the 7th International Python Conference, +held in Houston TX, November 10-13, 1998. + +The file ipc7.ppt contains the MS PowerPoint slides Ken used in his +presentation. + +[ipc7.doc.gz and ipc7.ppt.gz are compressed with GNU gzip] diff --git a/docs/IPC7/ipc7.doc.gz b/docs/IPC7/ipc7.doc.gz Binary files differnew file mode 100755 index 000000000..e13bb4aac --- /dev/null +++ b/docs/IPC7/ipc7.doc.gz diff --git a/docs/IPC7/ipc7.ppt.gz b/docs/IPC7/ipc7.ppt.gz Binary files differnew file mode 100755 index 000000000..7fe2cd14b --- /dev/null +++ b/docs/IPC7/ipc7.ppt.gz diff --git a/docs/LISA-98/README b/docs/LISA-98/README new file mode 100644 index 000000000..9809cf055 --- /dev/null +++ b/docs/LISA-98/README @@ -0,0 +1,13 @@ +The file published.ps is (nearly) the PostScript of the paper +published in Usenix LISA 98, Dec 6-11 1998, Boston MA. John Viega +presented this paper on Dec 11, 1998. + +I say "nearly" because there was one minor typo in this file that was +corrected in the final published version. Footnote 3 (page 312) +should read: + + This file may in fact reside in other locations, depending on the + system. For example, on many Solaris machines this file is + located in /etc/mail/aliases. + +[published.ps.gz is compressed with GNU gzip] diff --git a/docs/LISA-98/published.ps.gz b/docs/LISA-98/published.ps.gz Binary files differnew file mode 100644 index 000000000..4ab84dfea --- /dev/null +++ b/docs/LISA-98/published.ps.gz diff --git a/docs/NEWS.txt b/docs/NEWS.txt new file mode 100644 index 000000000..7be8955c9 --- /dev/null +++ b/docs/NEWS.txt @@ -0,0 +1,2764 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 1998-2007 by the Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Here is a history of user visible changes to Mailman. + +2.2 alpha 1 (XX-XXX-200X) + + Configuration + + - Mailman can now be configured via a 'mailman.cfg' file which lives in + $VAR_PREFIX/etc. This can be used to separate the configuration from + the source directory. Alternative configuration files can be specified + via -C/--config for most command line scripts. The format of + mailman.cfg is identical to that for mm_cfg.py; IOW, they are both + Python files. mm_cfg.py is still supported for backward compatibility, + but settings in etc/mailman.cfg take precedence. You do not need to + import Defaults.py in etc/mailman.cfg. You should still consult + Defaults.py for the list of site configuration variables available to + you. + + See the etc/mailman.cfg.sample file. + + - PUBLIC_ARCHIVE_URL now takes $-string substitutions instead of %-string + substitutions. See documentation in Defaults.py.in for details. + + Architecture + + - Mailman's web interface is now WSGI compliant. WSGI is a Python + standard (PEP 333) allowing web applications to be (more) easily + integrated with any number of existing Python web application + frameworks. For more information see: + + http://www.wsgi.org/wsgi + http://www.python.org/dev/peps/pep-0333/ + + Mailman can still be run as a traditional CGI program of course. + + - Mailman now provides an LMTP server for more efficient integration with + supporting mail servers (e.g. Postfix, Sendmail). The Local Mail + Transport Protocol is defined in RFC 2033: + + http://www.faqs.org/rfcs/rfc2033.html + + - Virtual domains are now fully supported in that mailing lists of the + same name can exist in more than one domain. This is accomplished by + renaming the lists/ and archives/ subdirectories after the list's + posting address. For example, data for list foo in example.com and list + foo in example.org will be stored in lists/foo@example.com and + lists/foo@example.org. + + For Postfix or manual MTA users, you will need to regenerate your mail + aliases. Use bin/genaliases. + + VIRTUAL_HOST_OVERVIEW has been removed, effectively Mailman now operates + as if it were always enabled. If your site has more than one domain, + you must configure all domains by using add_domain() in your + etc/mailman.cfg flie (see below -- add_virtual() has been removed). If + you have only one domain, and Mailman's configure script correctly + guesses that domain, you do not need to do anything. + + - If you had customizations based on Site.py, you will need to + re-implement them. Site.py has been removed. + + - The site list is no more. You can remove your 'mailman' site list + unless you want to retain it for other purposes, but it is no longer + used (or required) by Mailman. You should set NO_REPLY_ADDRESS to an + address that throws away replies, and you should set SITE_OWNER_ADDRESS + to an email address that reaches the person ultimately responsible for + the Mailman installation. The MAILMAN_SITE_LIST variable has been + removed. + + Internationalization Big Changes + + - Now the languages should be selected during the 'configure' run. + + - Translators should work only on messages/<lang>/LC_MESSAGES/mailman.po. + Templates files are generated from mailman.po during the make process. + + New Features + + - Confirmed member change of address is logged in the 'subscribe' log, + and if admin_notify_mchanges is true, a notice is sent to the list + owner using a new adminaddrchgack.txt template. + + - There is a new list attribute 'subscribe_auto_approval' which is a list + of email addresses and regular expressions matching email addresses + whose subscriptions are exempt from admin approval. RFE 403066. + + Command line scripts + + - Most scripts have grown a -C/--config flag to allow you to specify a + different configuration file. Without this, the default etc/mailman.cfg + file will be used. + + - the -V/--virtual-host-overview switch in list_lists has been removed, + while -d/--domain and -f/--full have been added. + + - newlist and rmlist take fully-qualified list names now (i.e. the list's + posting address), but also accept short names, in which case the default + domain is used. newlist's -u/--urlhost and -e/--emailhost switches have + been removed. The domain that the list is being added to must already + exist. + + Bug fixes and other patches + + - The processing of Topics regular expressions has changed. Previously the + Topics regexp was compiled in verbose mode but not documented as such + which caused some confusion. Also, the documentation indicated that topic + keywords could be entered one per line, but these entries were not handled + properly. Topics regexps are now compiled in non-verbose mode and multi- + line entries are 'ored'. Existing Topics regexps will be converted when + the list is updated so they will continue to work. + + - The List-Help, List-Subscribe, and List-Unsubscribe headers were + incorrectly suppressed in messages that Mailman sends directly to + users. + +2.1.9 (xx-xxx-xxxx) + + Security + + - A malicious user could visit a specially crafted URI and inject an + apparent log message into Mailman's error log which might induce an + unsuspecting administrator to visit a phishing site. This has been + blocked. Thanks to Moritz Naumann for its discovery. + + Internationalization + + - New languages: Arabic, Vietnamese. + + Bug fixes and other patches + + - Fixed Decorate.py so that characters in message header/footer which + are not in the character set of the list's language are ignored rather + than causing shunted messages (1507248). + + - Switchboard.py - Closed very tiny holes at the upper ends of queue + slices that could result in unprocessable queue entries. Improved FIFO + processing when two queue entries have the same timestamp. + +2.1.8 (15-Apr-2006) + + Security + + - A cross-site scripting hole in the private archive script of 2.1.7 + has been closed. Thanks to Moritz Naumann for its discovery. + + Bug fixes and other patches + + - Bouncers support added: 'unknown user', Microsoft SMTPSVC, Prodigy.net + and several others. + + - Updated email library to 2.5.7 which will encode payload into qp/base64 + upon setting. This enabled backing out the scrubber related patches + including 'X-Mailman-Scrubbed' header in 2.1.7. + + - Fix SpamDetect.py potential hold/reject loop problem. + + - A warning message from email package to the stderr can cause error + in Logging because stderr may be detached from the process during + the qrunner run. We chose not to output errors to stderr but to + the logs/error if the process is running under mailmanctl subprocess. + + - DKIM header cleansing was separated from Cleanse.py and added to + -owner messages too. + + - Fixes: Lose Topics when go directly to topics URL (1194419). + UnicodeError running bin/arch (1395683). edithtml.py missing import + (1400128). Bad escape in cleanarch. Wrong timezone in list archive + index pages (1433673). bin/arch fails with TypeError (1430236). + Subscription fails with some Language combinations (1435722). + Postfix delayed notification not recognized (863989). 2.1.7 (VERP) + mistakes delay notice for bounce (1421285). show_qfiles: 'str' + object has no attribute 'as_string' (1444447). Utils.get_domain() + wrong if VIRTUAL_HOST_OVERVIEW off (1275856). + + Miscellaneous + + - Brad Knowles' mailman daily status report script updated to 0.0.16. + +2.1.7 (31-Dec-2005) + + Security + + - The fix for CAN-2005-0202 has been enhanced to issue an appropriate + message instead of just quietly dropping ./ and ../ from URLs. + + - A note on CVE-2005-3573: Although the RFC2231 bug example in the CVE has + been solved in Mailman 2.1.6, there may be more cases where + ToDigest.send_digests() can block regular delivery. We put the + send_digests() calling part in a try/except clause and leave a message + in the error log if something happened in send_digests(). Daily call of + cron/senddigests will provide more detail to the site administrator. + + - List administrators can no longer change the user's option/subscription + globally. Site admin can change these only if + mm_cfg.ALLOW_SITE_ADMIN_COOKIES is set to Yes. + + - <script> tags are HTML-escaped in the edithtml CGI script. + + - Since the probe message for disabled users may reach unintended + recipients, the password is excluded from sendProbe() and probe.txt. + Note that the default value of VERP_PROBE has been set to `No' from + 2.1.6., thus this change doesn't affect the default behavior. + + New Features + + - Always remove DomainKey (and similar) headers from messages sent to the + list. (1287546) + + - List owners can control the content filter behavior when collapsing + multipart/alternative parts to its first subpart. This allows the + option of letting the HTML part pass through after other content + filtering is done. + + Internationalization + + - New language: Interlingua. + + Bug fixes and other patches + + - Defaults.py.in: SCRUBBER_DONT_USE_ATTACHMENT_FILENAME is set to True for + safer operation. + + - Fixed the bug where Scrubber.py munges quoted-printable by introducing + the 'X-Mailman-Scrubbed' header which marks that the payload is + scrubber-munged. The flag is referenced in ToDigest.py, ToArchive.py, + Decorate.py and Archiver. A similar problem in ToDigest.py where the + plain digest is generated is also fixed. + + - Fixed Syslog.py to write quopri encoded messages when it fail to write + 8-bit characters. + + - Fixed MTA/Postfix.py to check aliases group permission in check_perms + and fixed mailman-install document on this matter (1378270). + + - Fixed private.py to go to the original URL after authorization + (1080943). + + - Fixed bounce log score messages to be more consistent. + + - Fixed bin/remove_members to accept no arguments when both --fromall and + --file= options are specified. + + - Changed cgi-bin and mail wrapper "group not found" error message to be + more descriptive of the actual problem. + + - The list's ban_list now applies to address changes, admin mass + subscribes and invites, and to confirmations/approvals of address + changes, subscriptions and invitations. + + - quoted-printable and base64 encoded parts are decoded before passing to + HTML_TO_PLAIN_TEXT_COMMAND (1367783). + + - Approve: header is removed from posts, and treated the same as the + Approved: header. (1355707) + + - Fixed the removal of the line following Approve[d]: line in body of + post. (1318883) + + - The Approve[d]: <password> header is removed from all text/* parts in + addition the initial text/plain part. It must still be the first + non-blank line in the first text/plain part or it won't be found or + removed at all. (1181161) + + - Posts are now logged in post log file with the true sender, not + listname-bounces. (1287921) + + - Correctly initialize and remember the list's default_member_moderation + attribute in the web list creation page. (1263213) + + - PEP263 charset is added to the config_list output. (1343100) + + - Fixed header_filter_rules getting lost if accessed directly and + authentication was needed by login page. (1230865) + + - Obscure email when the poster doesn't set full name in 'From:' header. + + - Preambles and epilogues are taken into account when calculating message + sizes for holding purposes. (Mark Sapiro) + + - Logging/Logger.py unicode transform option. (1235567) + + - bin/update crashes with bogus files. (949117) + + - Bugs and patches: 1212066/1301983 (Date header in create/remove notice) + +2.1.6 (30-May-2005) + + Security + + - Critical security patch for path traversal vulnerability in private + archive script (CAN-2005-0202). + + - Added the ability for Mailman generated passwords (both member and list + admin) to be more cryptographically secure. See new configuration + variables USER_FRIENDLY_PASSWORDS, MEMBER_PASSWORD_LENGTH, and + ADMIN_PASSWORD_LENGTH. Also added a new bin/withlist script called + reset_pw.py which can be used to reset all member passwords. Passwords + generated by Mailman are now 8 characters by default for members, and 10 + characters for list administrators. + + - A potential cross-site scripting hole in the driver script has been + closed. Thanks to Florian Weimer for its discovery. Also, turn + STEALTH_MODE on by default. + + Internationalization + + - Chinese languages are now supported. They have been moved from 'big5' + and 'gb' to 'zh_TW' and 'zh_CN' respectively for compliance to the IANA + spec. Note, however, that the character sets were changed from 'Big5' + or 'GB2312' to 'UTF-8' to cope with the insufficient codecs support in + Python 2.3 and earlier. You may have to install Chinese capable codecs + (like CJKCodecs) separately to handle the incoming messages which are in + local charsets, or upgrade your Python to 2.4 or newer. + + Behavior or defaults changes + + - VERP_PROBES is disabled by default. + + - bin/withlist can be run without a list name, but only if -i is given. + Also, withlist puts the directory it's found in at the end of sys.path, + making it easier to run withlist scripts that live in $prefix/bin. + + - bin/newlist grew two new options: -u/--urlhost and -e/--emailhost which + lets the user provide the web and email hostnames for the new mailing + list. This is a better way to specify the domain for the list, rather + than the old 'mylist@hostname' syntax (which is still supported for + backward compatibility, but deprecated). + + Compatibility + + - Python 2.4 compatibility issue: time.strftime() became strict about the + 'day of year' range. (1078482) + + New Features + + - New feature: automatic discards of held messages. List owners can now + set how many days to hold the messages in the moderator request queue. + cron/checkdb will automatically discard old messages. See the + max_days_to_hold variable in the General Options and + DEFAULT_MAX_DAYS_TO_HOLD in Defaults.py. This defaults to 0 + (i.e. disabled). (790494) + + - New feature: subject_prefix can be configured to include a sequence + number which is taken from the post_id variable. Also, the prefix is + always put at the start of the subject, i.e. "[list-name] Re: original + subject", if mm_cfg.OLD_STYLE_PREFIXING is set No. The default style + is "Re: [list-name]" if numbering is not set, for backward compatibility. + If the list owner is using numbering feature by "%d" directive, the new + style, "[list-name 123] Re:", is always used. + + - List owners can now cusomize the non-member rejection notice from + admin/<listname>/privacy/sender page. (1107169) + + - Allow editing of the welcome message from the admin page (1085501). + + - List owners can now use Scrubber to get the attachments scrubbed (held + in the web archive), if the site admin permits it in mm_cfg.py. New + variables introduced are SCRUBBER_DONT_USE_ATTACHMENT_FILENAME and + SCRUBBER_USE_ATTACHMENT_FILENAME_EXTENSION in Defaults.py for scrubber + behavior. (904850) + + Documentation + + - Most of the installation instructions have been moved to a latex + document. See admin/www/mailman-install/index.html for details. + + Bug fixes and other patches + + - Mail-to-news gateway now strips subject prefix off from a response + by a mail user if news_prefix_subject_too is not set. + + - Date and Message-Id headers are added for digests. (1116952) + + - Improved mail address sanity check. (1030228) + + - SpamDetect.py now checks attachment header. (1026977) + + - Filter attachments by filename extensions. (1027882) + + - Bugs and patches: 955381 (older Python compatibility), 1020102/1013079/ + 1020013 (fix spam filter removed), 665569 (newer Postfix bounce + detection), 970383 (moderator -1 admin requests pending), 873035 + (subject handling in -request mail), 799166/946554 (makefile + compatibility), 872068 (add header/footer via unicode), 1032434 + (KNOWN_SPAMMERS check for multi-header), 1025372 (empty Cc:), 789015 + (fix pipermail URL), 948152 (Out of date link on Docs), 1099138 + (Scrubber.py breaks on None part), 1099840/1099840 (deprecated % + insertion), 880073/933762 (List-ID RFC compliance), 1090439 (passwd + reminder shunted), 1112349 (case insensitivity in acceptable_aliases), + 1117618 (Don't Cc for personalized anonymous list), 1190404 (wrong + permission after editing html) + +2.1.5 (15-May-2004) + + - The admindb page has a checkbox that allows you to discard all held + messages that are marked Defer. On heavy lists with lots of spam holds, + this makes clearing them much faster. + + - The qrunner system has changed to use only one file per message. + However the configuration variable METADATA_FORMAT has been removed, and + support for SAVE_MSGS_AS_PICKLES has been changed. The latter no longer + writes messages as plain text. Instead, they are stored as pickles of + plain strings, using the text pickle format. This still makes them + non-binary files readable and editable by humans. + + bin/dumpdb also works differently. It will print out the entire pickle + file (with more verbosity) and if used with 'python -i', it binds msg to + a list of all objects found in the pickle file. + + Removed from Defaults.py: PENDINGDB_LOCK_TIMEOUT, + PENDINGDB_LOCK_ATTEMPTS, METAFMT_MARSHAL, METAFMT_BSDDB_NATIVE, + METAFMT_ASCII, METADATA_FORMAT + + - The bounce processor has been redesigned so that now when an address's + bounce score reaches the threshold, that address will be sent a probe + message. Only if the probe bounces will the address be disabled. The + score is reset to zero when the probe is sent. Also, bounce events are + now kept in an event file instead of in memory. This should help + contain the bloat of the BounceRunner. + + New supporting variables in Defaults.py: VERP_PROBE_FORMAT, + VERP_PROBE_REGEXP + + REGISTER_BOUNCES_EVERY is promoted to a Defaults.py variable. + + - The pending database has been changed from a global pickle file, to a + unique pickle file per mailing list. + + - The 'request' database file has changed from a marshal, to the more + secure pickle format. + + - Disallow multiple password retrievals. + + - SF patch #810675 which adds a "Discard all messages marked Defer" button + for faster admindb maintenance. + + - The email package is updated to version 2.5.5. + + - New language: Turkish. + + - Bugs and patches: 869644, 869647 (NotAMemberError for old cookie data), + 878087 (bug in Slovenian catalog), 899263 (ignore duplicate pending + ids), 810675 (discard all defers button) + +2.1.4 (31-Dec-2003) + + - Close some cross-site scripting vulnerabilities in the admin pages + (CAN-2003-0965). + + - New languages: Catalan, Croatian, Romanian, Slovenian. + + - New mm_cfg.py/Defaults.py variable PUBLIC_MBOX which allows the site + administrator to disable public access to all the raw list mbox files + (this is not a per-list configuration). + + - Expanded header filter rules under Privacy -> Spam Filters. Now you can + specify regular expression matches against any header, with specific + actions tied to those matches. + + - Rework the SMTP error handling in SMTPDirect.py to avoid scoring bounces + for all recipients when a permanent error code is returned by the mail + server (e.g. because of content restrictions). + + - Promoted SYNC_AFTER_WRITE to a Default.py/mm_cfg.py variable and + make it control syncing on the config.pck file. Also, we always flush + and sync message files. + + - Reduce archive bloat by not storing the HTML body of Article objects in + the Pipermail database. A new script bin/rb-archfix was added to clean + up older archives. + + - Proper RFC quoting for List-ID descriptions. + + - PKGDIR can be passed to the make command in order to specify a different + directory to unpack the distutils packages in misc. (SF bug 784700). + + - Improved logging of the origin of subscription requests. + + - Bugs and patches: 832748 (unsubscribe_policy ignored for unsub button on + member login page), 846681 (bounce disabled cookie was always out of + date), 835870 (check VIRTUAL_HOST_OVERVIEW on through the web list + creation), 835036 (global address change when the new address is already + a member of one of the lists), 833384 (incorrect admin password on a + hold message confirmation attachment would discard the message), 835012 + (fix permission on empty archive index), 816410 (confirmation page + consistency), 834486 (catch empty charsets in the scrubber), 777444 (set + the process's supplemental groups if possible), 860135 (ignore + DiscardMessage exceptions during digest scrubbing), 828811 (reduce + process size for list and admin overviews), 864674/864676 (problems + accessing private archives and rosters with admin password), 865661 + (Tokio Kikuchi's i18n patches), 862906 (unicode prefix leak in admindb), + 841445 (setting new_member_options via config_list), n/a (fixed email + command 'set delivery') + +2.1.3 (28-Sep-2003) + + Performance, Reliability, Security + + - Closed a cross-site scripting exploit in the create cgi script. + + - Improvements in the performance of the bounce processor. + Now, instead of processing each bounce immediately (which + can cause severe lock contention), bounce events are queued. + Every 15 minutes by default, the queued bounce events are + processed en masse, on a list-per-list basis, so that each + list only needs to be locked once. + + - When some or all of a message's recipients have temporary + delivery failures, the message is moved to a "retry" queue. + This queue wakes up occasionally and moves the file back to + the outgoing queue for attempted redelivery. This should + fix most observed OutgoingRunner 100% cpu consumption, + especially for bounces to local recipients when using the + Postfix MTA. + + - Optional support for fsync()'ing qfile data after writing. + Under some catastrophic system failures (e.g. power lose), + it would be possible to lose messages because the data + wasn't sync'd to disk. By setting SYNC_AFTER_WRITE to True + in Mailman/Queue/Switchboard.py, you can force Mailman to + fsync() queue files after flushing them. The benefits are + debatable for most operating environments, and you must + ensure that your Python has the os.fsync() function defined + before enabling this feature (it isn't, even on all + Unix-like operating systems). + + Internationalization + + - New languages Ukrainian, Serbian, Danish, Euskara/Basque. + + - Fixes to template lookup. Lists with local overriding + templates would find the wrong template. + + - .mo files (for internationalization) are now generated at + build time instead of coming as part of the source + distribution. + + Documentation + + - A first draft of member documentation by Terri Oda. There + is also a Japanese translation of this manual by Ikeda Soji. + + Archiver / Pipermail + + - In the configuration variables PUBLIC_EXTERNAL_ARCHIVER, and + PRIVATE_EXTERNAL_ARCHIVER, %(hostname)s has been added to + the list of allowable substitution variables. + + - The timezone is now taken into account when figuring the + posting date for an article. + + Scripts / Cron + + - Fixes to cron/disabled for NotAMemberError crashes. + + - New script bin/show_qfiles which prints the contents of .pck + message files. New script bin/discard which can be used to + mass discard held messages. + + - Fixes to cron/mailpasswds to account for old password-less + subscriptions. + + - bin/list_members has grown two new options: --invalid/-i + prints only the addresses in the member database that are + invalid (which could have snuck in via old releases); + --unicode/-u prints addresses which are stored as Unicode + objects instead of as normal strings. + + Miscellaneous + + - Fixes to problems in some configurations where Python wouldn't + be able to find its standard library. + + - Fixes to the digest which could cause MIME-losing missing + newlines when parts are scrubbed via the content filters. + + - In the News/Mail gateway admin page, the configuration variable + nntp_host can now be a name:port pair. + + - When messages are pulled from NNTP, the member moderation checks + are short-circuited. + + - email 2.5.4 is included. This fixes an RFC 2231 bug, among + possibly others. + + - Fixed some extra spaces that could appear in the List-ID header. + + - Fixes to ensure that invalid email addresses can't be invited. + + - WEB_LINK_COLOR in Defaults.py/mm_cfg.py should now work. + + - Fixes so that shunted message file names actually match + those logged in log/errors. + + - An improved pending action cookie generation algorithm has + been added. + + - Fixes to the DSN bounce detector. + + - The usual additional u/i, internationalization, unicode, and + other miscellaneous fixes. + +2.1.2 (22-Apr-2003) + + - New languages Portuguese (Portugal) and Polish. + + - Many convenient constants have been added to the Defaults.py + module to (hopefully) make it more readable. + + - Email addresses which contain 8-bit characters in them are now + rejected and won't be subscribed. This is not the same as 8-bit + characters in the realname, which is still allowed. + + - The X-Originating-Email header is removed for anonymous lists. + Hotmail apparently adds this header. + + - When running make to build Mailman, you can specify $DESTDIR to + the install target to specify an alternative location for + installation, without influencing the paths stored in + e.g. Defaults.py. This is useful to package managers. + + - New Defaults.py variable DELIVERY_RETRY_WAIT which controls how + long the outgoing qrunner will wait before it retries a + tempfailure delivery. + + - The semantics for the extend.py hook to MailList objects has + changed slightly. The hook is now called before attempting to + lock and load the database. + + - Mailman now uses the email package version 2.5.1 + + - bin/transcheck now checks for double-%'s + + - bin/genaliases grew a -q / --quiet flag + + - cron/checkdbs grew a -h / --help option. + + - The -c / --change-msg option has been removed from bin/add_members + + - bin/msgfmt.py has been added, taken from Python 2.3's Tools/i18n + directory. The various .mo files are now no longer distributed + with Mailman. They are generated at build time instead. + + - A new file misc/sitelist.cfg which can be used with + bin/config_list provides a small number of recommended settings + for your site list. Be sure to read it over before applying! + sitelist.cfg is installed into the data directory. + + - Many bug fixes, including these SourceForge bugs closed and + patches applied: 677668, 690448, 700538, 700537, 673294, 683906, + 671294, 522080, 521124, 534297, 699900, 697321, 695526, 703941, + 658261, 710678, 707608, 671303, 717096, 694912, 707624, 716755, + 661138, 716754, 716702, 667167, 725369, 726415 + + +2.1.1 (08-Feb-2003) + + Lots of bug fixes and language updates. Also: + + - Closed a cross-site scripting vulnerability in the user options page. + + - Restore the ability to control which headers show up in messages + included in plaintext and MIME digests. See the variables + PLAIN_DIGEST_KEEP_HEADERS and MIME_DIGEST_KEEP_HEADERS in + Defaults.py. + + - Messages included in the plaintext digests are now sent through + the scrubber to remove (and archive) attachments. Otherwise, + attachments would screw up plaintext digests. MIME digests + include the attachments inline. + +2.1 final (30-Dec-2002) + + Last minute bug fixes and language updates. + +2.1 rc 1 (24-Dec-2002) + + Bug fixes and language updates. Also, + + - Lithuanian support has been added. + + - bin/remove_members grew --nouserack and --noadminack switches + + - configure now honors --srcdir + +2.1 beta 6 (09-Dec-2002) + + Lots and lots of bug fixes, and translation updates. Also, + + - ARCHIVER_OBSCURES_EMAILADDRS is now set to true by default. + + - QRUNNER_SAVE_BAD_MESSAGES is now set to true by default. + + - Bounce messages which were recognized, but in which no member + addresses were found are no longer forwarded to the list + administrator. + + - bin/arch grew a --wipe option which first removes the entire old + archive before regenerating the new one. + + - bin/mailmanctl -u now prints a warning that permission problems + could appear, such as when trying to delete a list through the + web that has some archives in it. + + - bin/remove_members grew --nouserack/-n and -noadminack/-N options. + + - A new script bin/list_owners has been added for printing out + list owners and moderators. + + - Dates in the web version of archived messages are now relative + to the local timezone, and include the timezone names, when + available. + +2.1 beta 5 (19-Nov-2002) + + As is typical for a late beta release, this one includes the usual + bug fixes, tweaks, and massive new features (just kidding). + + IMPORTANT: If you are using Pipermail, and you have any archives + that were created or added to in 2.1b4, you will need to run + bin/b4b5-archfix, followed by bin/check_perms to fix some serious + performance problems. From you install directory, run + "bin/b4b5-archfix --help" for details. + + - The personalization options have been tweaked to provide more + control over mail header and decoration personalizations. In + 2.1b4, when personalization was enabled, the To and Cc headers + were always overwritten. But that's usually not appropriate for + anything but announce lists, so now these headers aren't changed + unless "Full personalization" is enabled. + + - You now need to go to the General category to enable emergency + moderation. + + - The order of the hold modules in the GLOBAL_PIPELINE has + changed, again. Now Moderate comes before Hold. + + - Estonian language support has been added. + + - All posted messages should now get decorated with headers and + footers in a MIME-safe way. Previously, some MIME type messages + didn't get decorated at all. + + - bin/arch grew a -q/--quiet option + + - bin/list_lists grew a -b/--bare option + +2.1 beta 4 (26-Oct-2002) + + The usual assortment of bug fixes and language updates, some u/i + tweaks, as well as the following: + + - Configuring / building / installing + o Tightened up some configure checks; it will now bark loudly + if you don't have the Python distutils package available + (some Linux distros only include distutils in their "devel" + packages). + + o Mailman's username/group security assertions are now done by + symbolic name instead of numeric id. This provides a level + of indirection that makes it much easier to move or package + Mailman. --with-mail-gid and --with-cgi-gid are retained, + but they control the group names used instead. + + - Command line scripts + o A new script, bin/transcheck that language teams can use to + check their .po files. + + o bin/list_members grew a --fullnames/-f option to print the + full names along with the addresses. + + o cron/senddigests grew --help/-h and --listname/-l options. + + o bin/fix_url.py grew some command line options to support moving + a list to a specific virtual domain. + + - Pipermail / archiving + o Reworked the directory layout for archive attachments to be + less susceptible to inode overload. Attachments are now + placed in + + archives/private/<listname>/attachments/<YYYYMMDD>/<msgidhash> + + o Internationalization support in the archiver has been improved. + + - Internationalization + o New languages: Swedish. + + - Mail handling + o Content filtering now has a pass_mime_type variable, which + is a whitelist of MIME types to allow in postings. See the + details of the variable in the Content Filtering category + for more information. + + o If a member has enabled their DontReceiveDuplicates option, + we'll also strip their addresses from the Cc headers in the + copy of the message sent to the list. This helps keep the + Cc lines from growing astronomically. + + o Bounce messages are now forwarded to the list administrators + both if they are unrecognized, and if no list member's + address could be extracted. + + o Content filtering now has a filter_action variable which + controls what happens when a message matches the content + filter rules. The default is still to discard the message. + + o When searching for an Approve/Approved header, the first + non-whitespace line of the body of the message is also + checked, if the body has a MIME type of text/plain. + + o If a list is personalized, and the list's posting address is + not included in a Reply-To header, the posting address is + copied into a Cc header, otherwise there was no (easy) way a + recipient could reply back to the list. + + o Added a MS Exchange bounce recognizer. + + o New configuration variable news_moderation which allows the + mail->news gateway to properly post to moderated newsgroups. + + o Messages sent to a list's owners now comes from the site + list to prevent mail loops when list owners or moderators + having bouncing addresses. + + - Miscellaneous + o mailanctl prevents runaway restarts by imposing a maximum + restart value (defaulting to 10) for restarting the + qrunners. If you hit this limit, do "mailmanctl stop" + followed by "mailmanctl start". + + o The Membership Management page's search feature now includes + searching on members real names. + + o The start of a manual for list administrators is given in + Python HOWTO format (LaTeX). It's in doc/mailman-admin.tex + but it still needs lots of fleshing out. + + o More protections against creating a list with an invalid name. + +2.1 beta 3 (09-Aug-2002) + + The usual assortment of bug fixes and language updates. + + - New languages: Dutch, Portuguese (Brazil) + + - New configure script options: --with-mailhost, --with-urlhost, + --without-permcheck. See ./configure --help for details. + + - The encoding of Subject: prefixes is controlled by a new list + option encode_ascii_prefixes. This is useful for languages with + character sets other than us-ascii. See the Languages admin + page for details. + + - A new list option news_prefix_subject_too controls whether + postings gated from mail to news should have the subject prefix + added to their Subject: header. + + - The algorithm for upgrading the moderation controls for a + Mailman 2.0.x list has changed. The change should be + transparent, but you'll want to double check the moderation + controls after upgrading from MM2.0.x. This should have no + effect for upgrades from a previous MM2.1 beta. + + See the UPGRADING file for details. + + - On the Mass Subscribe admin page, a text box has been added so + that the admin can add a custom message to be prepended to the + welcome/invite notification. + + - On the admindb page, a link is included to more easily reload + the page. + + - The Sendmail.py delivery module is sabotaged so that it can't be + used naively. You need to read the comments in the file and + edit the code to use this unsafe module. + + - When a member sends a `help' command to the request address, + the url to their options page is included in the response. + + - Autoresponses, -request command responses, and posting hold + notifications are inhibited for any message that has a + Precedence: {bulk|list|junk} header. This is to avoid mail + loops between email 'bots. If the original message has an + X-Ack: yes header, the response is sent. + + Responses are also limited to a maximum number per day, as + defined in the site variable MAX_AUTORESPONSES_PER_DAY. This is + another guard against 'bot loops, and it defaults to 10. + + - When a Reply-To: header is munged to include both the original + and the list address, the list address is always added last. + + - The cron/mailpasswds script has grown a -l/--listname option. + + - The cron/disabled script has grown options to send out + notifications for reasons other than bounce-disabled. It has + also grown a -f/--force option. See cron/disabled --help for + details. + + - The bin/dumpdb script has grown a -n/--noprint option. + + - An experimental new mechanism for processing incoming messages + has been added. If you can configure your MTA to do qmail-style + Maildir delivery, Mailman now has a MaildirRunner qrunner. This + may turn out to be much more efficient and scalable, but for + MM2.1, it will not be officially supported. See Defaults.py.in + and Mailman/Queue/MaildirRunner.py for details. + +2.1 beta 2 (05-May-2002) + + Lots of bug fixing, and the following new features and changes: + + - A "de-mime" content filter feature has been added. This + oft-requested feature allows you to specify MIME types that + Mailman should strip off of any messages before they're posted + to the list. You can also optionally convert text/html to + text/plain (by default, through lynx if it's available). + + - Changes to the way the RFC 2919 and 2369 headers (i.e. the + List-*: headers) are added: + o List-Id: is always added + o List-Post:, List-Help:, List-Subscribe:, + List-Unsubscribe:, and List-Archive: are only added to + posting messages. + o X-List-Administrivia: is only added to messages Mailman + creates and sends out of its own accord. + + Also, if the site administrator allows it, list owners can + suppress the addition of all the List-*: headers. List owners + can also separately suppress the List-Post: header for + announce-only lists. + + - A new framework for email commands has been added. This allows + you to easily add, delete, or change the email commands that + Mailman understands, on a per-site, per-list, or even per-user + basis. + + - Users can now change their digest delivery type from MIME to + plain text globally, for all lists they are subscribed to. + + - No language select pulldowns are shown if the list only supports + one language. + + - More mylist-admin eradication. + + - Several performance improvements in the bounce qrunner, one of + which is to make it run only once per minute instead of once per + second. + + - Korean language support as been added. + + - Gatewaying from news -> mail uses its connections to the nntpd + more efficiently. + + - In bin/add_members, -n/--non-digest-members-file command line + switch is deprecated in favor of -r/--regular-members-file. + + - bin/sync_members grew a -g/--goodbye-msg switch. + +2.1 beta 1 (16-Mar-2002) + + In addition to the usual bug fixes, performance improvements, and + GUI changes, here are the highlights: + + - MIME and other message handling + o More robustness against badly MIME encapsulated messages: if + a MessageParseError is raised during the initial parse, the + message can either be discarded or saved in qfiles/bad, + depending on the value of the new configuration variable + QRUNNER_SAVE_BAD_MESSAGES. + + o There is a new per-user option that can be used to avoid + receipt of extra copies, when a member of the list is also + explicitly CC'd. + + o Always add an RFC 2822 Date: header if missing, since not + all MTAs insert one automatically. + + o The Sender: and Errors-To: headers are no longer added to + outgoing messages. + + o Headers and footers are always added by concatenation, if + the message is not MIME and if the list's charset is a + superset of us-ascii. + + - List administration + o An `invitation' feature has been added. This is selectable + as a radio button on the mass subscribe page. When + selected, users are invited to join instead of immediately + joined, i.e. they get a confirmation message. + + o You can now enable and disable list owner notifications for + disabled-due-to-bouncing and removal-due-to-bouncing + actions. The site config variables + DEFAULT_BOUNCE_NOTIFY_OWNER_ON_DISABLE and + DEFAULT_BOUNCE_NOTIFY_OWNER_ON_REMOVAL control the default + behavior. + + o List owners can now decide whether they receive unrecognized + bounce messages or not (i.e. messages that the bounce + processor doesn't recognize). Site admins can set the + default value for this flag with the config variable + DEFAULT_BOUNCE_UNRECOGNIZED_GOES_TO_LIST_OWNER. + + o The admindb summary page gives the option of clearing the + moderation flag of members who are on quarantined. + + o The action to take when a moderated member posts to a list + is now configurable. The message can either be held, + rejected (bounced), or discarded. If the message is + rejected, a rejection notice string can be given. + + o In the General admin page, you can now set the default value + for five per-user flags: concealing the user's email + address, acknowledging posts sent by the user, copy + suppression, not-me-too selection, and the default digest + type. Site admins can set the default bit field with the + new DEFAULT_NEW_MEMBER_OPTIONS variable. + + o A new "Emergency brake" feature for turning on moderation of + all list postings. This is useful for when flamewars break + out, and the list needs a cooling off period. Messages + containing an Approved: header with the list owner password + are still allowed through, as are messages approved through + the admindb interface. + + o When a moderated message is approved for the list, add an + X-Mailman-Approved-At: header which contains the timestamp + of the approval action (changed from X-Moderated: with a + different format). + + o Lists can now be converted to using a less error prone + mechanism for variable substitution syntax in headers and + footers. Instead of %(var)s strings, you'd use $var + strings. You must use "bin/withlist -r convert" to enable + this. + + o When moderating held messages, the header text box and the + message excerpt text box are now both read-only. + + o You can't delete the site list through the web. + + o When creating new lists through the web, you have the option + of setting the "default member moderation" flag. + + - Security and privacy + o New feature: banned subscription addresses. Privacy + options/subscription rules now have an additional list box + which can contain addresses or regular expressions. + Subscription requests from any matching address are + automatically rejected. + + o Membership tests which compare message headers against list + rosters are now more robust. They now check, by default + these header in order: From:, unixfrom, Reply-To:, Sender:. + If any match, then the membership test succeeds. + + o ALLOW_SITE_ADMIN_COOKIES is a new configuration variable + which says whether to allow AuthSiteAdmin cookies or not. + Normally, when a list administrator logs into a list with + the site password, they are issued a cookie that only allows + them to do administration for this one list. By setting + ALLOW_SITE_ADMIN_COOKIES to 1, the user only needs to + authenticate to one list with the site password, and they + can administer any mailing list. + + I'm not sure this feature is wise, so the default value for + ALLOW_SITE_ADMIN_COOKIES is 0. + + o Marc MERLIN's new recipes for secure Linuxes have been + updated. + + o DEFAULT_PRIVATE_ROSTER now defaults to 1. + + o Passwords are no longer included in the confirmation pages. + + - Internationalization + o With the approval of Tamito KAJIYAMA, the Japanese codecs + for Python are now included automatically, so you don't need + to download and install these separate. It is installed in + a Mailman-specific place so it won't affect your larger + Python installation. + + o The configure script will produce a warning if the Chinese + codes are not installed. This is not a fatal error. + + o Russian templates and catalogs have been added. + + o Finnish templates and catalogs have been added. + + - Scripts and utilities + o New program bin/unshunt to safely move shunted messages back + into the appropriate processing queue. + + o New program bin/inject for sending a plaintext message into + the incoming queue from the command line. + + o New cron script cron/disabled for periodically culling the + disabled membership. + + o bin/list_members has grown some new command line switches + for filtering on different criteria (digest mode, disable + mode, etc.) + + o bin/remove_members has grown the --fromall switch. + + o You can now do a bin/rmlist -a to remove an archive even + after the list has been deleted. + + o bin/update removes the $prefix/Mailman/pythonlib directory. + + o bin/withlist grows a --all/-a flag so the --run/-r option + can be applied to all the mailing lists. Also, interactive + mode is now the default if -r isn't used. You don't need to + run this script as "python -i bin/withlist" anymore. + + o There is a new script contrib/majordomo2mailman.pl which + should ease the transition from Majordomo to Mailman. + + - MTA integration + o Postfix integration has been made much more robust, but now + you have to set POSTFIX_ALIAS_CMD and POSTFIX_MAP_CMD to + point to the postalias and postmap commands respectively. + + o VERP-ish delivery has been made much more efficient by + eliminating extra disk copies of messages for each recipient + of a VERP delivery. It has also been made more robust in + the face of failures during chunk delivery. This required a + rewrite of SMTPDirect.py and one casualty of that rewrite + was the experimental threaded delivery. It is no longer + supported (but /might/ be resurrected if there's enough + demand -- or a contributed patch :). + + o A new site config variable SMTP_MAX_SESSIONS_PER_CONNECTION + specifies how many consecutive SMTP sessions will be + conducted down the same socket connection. Some MTAs have a + limit on this. + + o Support for VERP-ing confirmation messages. These are less + error prone since the Subject: header doesn't need to be + retained, and they allow a more user friendly (and i18n'd) + Subject: header. VERP_CONFIRM_FORMAT, VERP_CONFIRM_REGEXP, + and VERP_CONFIRMATIONS control this feature (only supported + for invitation confirmations currently, but will be expanded + to the other confirmations). + + o Several new list-centric addresses have been added: + -subscribe and -unsubscribe are synonyms for -join and + -leave, respectively. Also -confirm has been added to + support VERP'd confirmations. + + - Archiver + o There's now a default page for the Pipermail archive link + for when no messages have yet been posted to the list. + + o Just the mere presence of an X-No-Archive: is enough to + inhibit archiving for this message; the value of the header + is now ignored. + + - Configuring, building, installing + o Mailman now has a new favicon, donated by Terry Oda. Not + all web pages are linked to the favicon yet though. + + o The add-on email package is now distributed and installed + automatically, so you don't need to do this. It is + installed in a Mailman-specific place so it won't affect + your larger Python installation. + + o The default value of VERP_REGEXP has changed. + + o New site configuration variables BADQUEUE_DIR and + QRUNNER_SAVE_BAD_MESSAGES which describe where to save + messages which are not properly MIME encoded. + + o configure should be more POSIX-ly conformant. + + o The Mailman/pythonlib directory has been removed, but a new + $prefix/pythonlib directory has been added. + + o Regression tests are now installed. + + o The second argument to add_virtual() calls in mm_cfg.py are + now optional. + + o DEFAULT_FIRST_STRIP_REPLY_TO now defaults to 0. + + o Site administrators can edit the Mailman/Site.py file to + customize some filesystem layout policies. + + +2.1 alpha 4 (31-Dec-2001) + + - The administrative requests database page (admindb) has been + redesigned for better usability when there are lots of held + postings. Changes include: + o A summary page which groups held messages by sender email + address. On this page you can dispose of all the sender's + messages in one action. You can also view the details of + all the sender's messages, or the details of a single + message. You can also add the sender to one of the list's + sender filters. + + o A details page where you can view all messages, just those + for a particular sender, or just a single held message. + This details page is laid out the same as the old admindb + page. + + o The instructions have been shorted on the summary and + details page, with links to more detailed explanations. + + - Bounce processing + o Mailman now keeps track of the reason a member's delivery + has been disabled: explicitly by the administrator, + explicitly by the user, by the system due to excessive + bounces, or for (legacy) unknown reasons. + + o A new bounce processing algorithm has been implemented (we + might actually understand this one ;). When an address + starts bouncing, the member gets a "bounce score". Hard + (fatal) bounces score 1.0, while soft (transient) bounces + score 0.5. + + List administrators can specify a bounce threshold above + which a member gets disabled. They can also specify a time + interval after which, if no bounces are received from the + member, the member's bounce score is considered stale and is + thrown away. + + o A new cron script, cron/disabled, periodically sends + notifications to members who are bounce disabled. After a + certain number of warnings the member is deleted from the + list. List administrators can control both the number of + notifications and the amount of time between notifications. + + Notifications include a confirmation cookie that the member + can use to re-enable their subscription, via email or web. + + o New configuration variables to support the bounce processing + are DEFAULT_BOUNCE_SCORE_THRESHOLD, + DEFAULT_BOUNCE_INFO_STALE_AFTER, + DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS, + DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS_INTERVAL. + + - Privacy and security + o Sender filters can now be regular expressions. If a line + starts with ^ it is taken as a (raw string) regular + expression, otherwise it is a literal email address. + + o Fixes in 2.0.8 ported forward: prevent cross-site scripting + exploits. + + - Mail delivery + o Aliases have all been changed so that there's more + consistency between the alias a message gets delivered to, + and the script & queue runner that handles the message. + + I've also renamed the mail wrapper script to `mailman' from + `wrapper' to avoid collisions with other MLM's. You /will/ + need to regenerate your alias files with bin/genaliases, and + you may need to update your smrsh (Sendmail) configs.a + + Bounces always go to listname-bounces now, since + administration has been separated from bounce processing. + listname-admin is obsolete. + + o VERP support! This greatly improves the accuracy of bounce + detection. Configuration variables which control this feature + include VERP_DELIVERY_INTERVAL, VERP_PERSONALIZED_DELIVERIES, + VERP_PASSWORD_REMINDERS, VERP_REGEXP, and VERP_FORMAT. The + latter two must be tuned to your MTA. + + o A new alias mailman-loop@dom.ain is added which directs all + output to the file $prefix/data/owner-bounces.mbox. This is + used when sending messages to the site list owners, as the + final fallback for bouncing messages. + + o New configuration variable POSTFIX_STYLE_VIRTUAL_DOMAINS + which should be set if you are using the Postfix MTA and + want Mailman to play nice with Postfix-style virtual + domains. + + - Miscellaneous + o Better interoperability with Python 2.2. + + o MailList objects now record the date (in seconds since + epoch) that they were created. This is in a hidden + attribute `created_at'. + + o bin/qrunner grows a -s/--subproc switch which is usually + used only when it's started from mailmanctl. + + o bin/newlist grows a -l/--language option so that the list's + preferred language can be set from the command line. + + o cron changes: admin reminders go out at 8am local time instead + of 10pm local time. + + - Pipermail archiver + o MIME attachments are scrubbed out into separate files which + can be viewed by following a link in the original article. + Article contains an indication of the size of the + attachment, its type, and other useful information. + + o New script bin/cleanarch which can be used to `clean' an + .mbox archive file by fixing unescaped embedded Unix From_ + lines. + + o New configuration variable ARCHIVE_SCRUBBER in + Defaults.py.in which names the module that Pipermail should + use to scrub articles of MIME attachments. + + o New configuration variable ARCHIVE_HTML_SANITIZER which + describes how the scrubber should handle text/html + attachments. + + o PUBLIC_ARCHIVE_URL has change its semantics. It is now an + absolute url, with the hostname and listname parts + interpolated into it on a per-list basis. + + o Pipermail should now provide the proper character set in the + Content-Type: header for archived articles. + + - Internationalization + o Czech translations by Dan Ohnesorg. + + o The Hungarian charset has be fixed to be iso-8859-2. + + o The member options login page now has a language selection + widget. + + - Building, configuration + o email-0.96 package is required (see the misc directory). + + o New recipes for integrating Mailman and Sendmail, + contributed by David Champion. + + +2.1 alpha 3 (22-Oct-2001) + + - Realname support + o Mailman now tracks a member's Real Name in addition to their + email address. + + o List members can now supply their Real Names when + subscribing via the web. Their Real Names are parsed from + any thru-email subscriptions. + + o Members can change their Real Names on their options page, + and admins can change members' Real Names on the membership + pages. Mass subscribing accepts "email@dom.ain (Real Name)" + and "Real Name <email@dom.ain>" entries, for both + in-text-box and file-upload mass subscriptions. + + - Filtering and Privacy + o Reply-To: munging has been enhanced to allow a wider range + of list policies. You can now pre-strip any Reply-To: + headers before adding list-specific ones (i.e. you can + override or extend existing Reply-To: headers). If + stripping, the old headers are no longer saved on + X-Reply-To: + + o New sender moderation rules. The old `posters', + `member_only_posting', `moderated' and `forbidden_posters' + options have been removed in favor of a new moderation + scheme. Each member has a personal moderation bit, and + non-member postings can be automatically accepted, held for + approval, rejected (bounced) or discarded. + + o When membership rosters are private, responses to + subscription (and other) requests are made more generic so + that these processes can't be covertly mined for hidden + addresses. If a subscription request comes in for a user + who is already subscribed, the user is notified of potential + membership mining. + + o When a held message is approved via the admindb page, an + X-Moderated: header is added to the message. + + o List admins can now set an unsubscribe policy which requires + them to approve of member unsubscriptions. + + - Web U/I + o All web confirmations now require a two-click procedure, + where the first click gives them a page that allows them to + confirm or cancel their subscription. It is bad form for an + email click (HTTP GET) to have side effects. + + o Lots of improvements for clarity. + + o The Privacy category has grown three subcategories. + + o The General options page as a number of subsection headers. + + o The Passwords and Languages categories are now on separate + admin pages. + + o The admin subcategories are now formated as two columns in + the top and bottom legends. + + o When creating a list through the web, you can now specify + the initial list of supported languages. + + o The U/I for unsubscribing a member on the admin's membership + page should be more intuitive now. + + o There is now a separate configuration option for whether the + goodbye_msg is sent when a member is unsubscribed. + + - Performance + o misc/mailman is a Unix init script, appropriate for + /etc/init.d, and containing chkconfig hooks for systems that + support it. + + o bin/mailmanctl has been rewritten; the `restart' command + actually works now. It now also accepts -s, -q, and -u + options. + + o bin/qrunner has been rewritten too; it can serve the role of + the old cron/qrunner script for those who want classic + cron-invoked mail delivery. + + o Internally, messages are now stored in the qfiles directory + primarily as pickles. List configuration databases are now + stored as pickles too (i.e. config.pck). bin/dumpdb knows + how to display both pickles and marshals. + + - Mail delivery + o If a user's message is held for approval, they are sent a + notification message containing a confirmation cookie. They + can use this confirmation cookie to cancel their own + postings (if they haven't already been approved). + + o When held messages are forwarded to an explicit address + using the admindb page, it is done so in a message/rfc822 + encapsulation. + + o When a message is first held for approval, the notification + sent to the list admin is a 3-part multipart/mixed. The + first part holds the notification message, the second part + hold the original message, and the third part hold a cookie + confirmation message, to which the admin can respond to + approve or discard the message via email. + + o In the mail->news gateway, you can define mail headers that + must be modified or deleted before the message can be posted + to the nntp server. + + o The list admin can send an immediate urgent message to the + entire list membership, bypassing digest delivery. This is + done by adding an Urgent: header with the list password. + Urgent messages with an invalid password are rejected. + + o Lists can now optionally personalize email messages, if the + site admin allows it. Personalized messages mean that the + To: header includes the recipient's address instead of the + list's address, and header and footer messages can contain + user-specific information. Note that only regular + deliveries can currently be personalized. + + o Message that come from Usenet but that have broken MIME + boundaries are ignored. + + o If the site administrator agrees, list owners have the + ability to disable RFC 2369 List-* headers. + + o There is now an API for an external process to post a + message to a list. This posting process can also specify an + explicit list of recipients, in effect turning the mailing + list into a "virtual list" with a fluid membership. See + Mailman/Post.py for details. + + - Building/testing/configuration + o mimelib is no longer required, but you must install the + email package (see the tarball in the misc directory). + + o An (as yet) incomplete test suite has been added. Don't try + running it in a production environment! + + o Better virtual host support by adding a mapping from the + host name given in cgi's HTTP_HOST/SERVER_NAME variable to + the email host used in list addresses. (E.g. www.python.org + maps to @python.org). + + o Specifying urls to external public archivers is more + flexible. + + o The filters/ subdirectory has been removed. + + o There is now a `site list' which is a mailing list that must + be created first, and from which all password reminders + appear to come from. It is recommended that this list be + called "mailman@your.site". + + o bin/move_list is no longer necessary (see the FAQ for + detailed instructions on renaming a list). + + o A new script bin/fix_url.py can be used with bin/withlist to + change a list's web_page_url configuration variable (since + it is no longer modifiable through the web). + + - Internationalization + o Support for German, Hungarian, Italian, Japanese, and + Norwegian have been added. + + - Miscellaneous + o Lots of new bounce detectors. Bounce detectors can now + discard temporary bounce messages by returning a special + Stop value. + + o bin/withlist now sports a -q/--quiet flag. + + o bin/add_members has a new -a/--admin-notify flag which can + be used to inhibit list owner notification for each + subscription. + + - Membership Adaptors + o Internally, mailing list memberships are accessed through a + MemberAdaptor interface. This would allow for integrating + membership databases with external sources (e.g. Zope or + LDAP), although the only MemberAdaptor currently implemented + is a "classic" adaptor which stores the membership + information on the MailList object. + + o There's a new pipeline handler module called FileRecips.py + which could be used to get all regular delivery mailing list + recipients from a Sendmail-style :include: file (see List + Extensibility bullet below). + + This work was sponsored by Control.com + + - List Extensibility + o A framework has been added which can be used to specialize + and extend specific mailing lists. If there is a file + called lists/<yourlist>/extend.py, it is execfile()'d after + the MailList object is instantiated. The file should + contain a function extend() which will be called with the + MailList instance. This function can do all sorts of deep + things, like modify the handler pipeline just for this list, + or even strip out particular admin GUI elements (see below). + + o All the admin page GUI elements are now separate + components. This provides greater flexibility for list + customization. Also, each GUI element will be given an + opportunity to handle admin CGI form data. + + This work was sponsored by Control.com + + - Topic Filters + o A new feature has been added called "Topic Filters". A list + administrator can create topics, which are essentially + regular expression matches against Subject: and Keyword: + headers (including such pseudo-headers if they appear in the + first few lines of the body of a message). + + List members can then `subscribe' to various topics, which + allows them to filter out any messages that don't match a + topic, or to filter out any message that does match a + topic. This can be useful for high volume lists where not + everyone will be interested in every message. + + This work was sponsored by Control.com + +2.1 alpha 2 (11-Jul-2001) + + - Building + o mimelib 0.4 is now required. Get it from + http://mimelib.sf.net. If you've installed an earlier + version of mimelib, you must upgrade. + + o /usr/local/mailman is now the default installation + directory. Use configure's --prefix switch to change it + back to the default (/home/mailman) or any other + installation directory of your choice. + + - Security + o Better definition of authentication domains. The following + roles have been defined: user, list-admin, list-moderator, + creator, site-admin. + + o There is now a separate role of "list moderator", which has + access to the pending requests (admindb) page, but not the + list configuration pages. + + o Subscription confirmations can now be performed via email or + via URL. When a subscription is received, a unique (sha) + confirm URL is generated in the confirmation message. + Simply visiting this URL completes the subscription process. + + o In a similar manner, removal requests (via web or email + command) no longer require the password. If the correct + password is given, the removal is performed immediately. If + no password is given, then a confirmation message is + generated. + + - Internationalization + o More I18N patches. The basic infrastructure should now be + working correctly. Spanish templates and catalogs are + included, and English, French, Hungarian, and Big5 templates + are included. + + o Cascading specializations and internationalization of + templates. Templates are now search for in the following + order: list-specific location, domain-specific location, + site-wide location, global defaults. Each search location + is further qualified by the language being displayed. This + means that you only need to change the templates that are + different from the global defaults. + + Templates renamed: admlogin.txt => admlogin.html + Templates added: private.html + + - Web UI + o Redesigned the user options page. It now sits behind an + authentication so user options cannot be viewed without the + proper password. The other advantage is that the user's + password need not be entered on the options page to + unsubscribe or change option values. The login screen also + provides for password mail-back, and unsubscription w/ + confirmation. + + Other new features accessible from the user options page + include: ability to change email address (with confirmation) + both per-list and globally for all list on virtual domain; + global membership password changing; global mail delivery + disable/enable; ability to suppress password reminders both + per-list and globally; logout button. + + [Note: the handle_opts cgi has gone away] + + o Color schemes for non-template based web pages can be defined + via mm_cfg. + + o Redesign of the membership management page. The page is now + split into three subcategories (Membership List, Mass + Subscription, and Mass Removal). The Membership List + subcategory now supports searching for member addresses by + regular expression, and if necessary, it groups member + addresses first alphabetically, and then by chunks. + + Mass Subscription and Mass Removal now support file upload, + with one address per line. + + o Hyperlinks from the logos in the footers have been removed. + The sponsors got too much "unsubscribe me!" spam from + desperate user of Mailman at other sites. + + o New buttons on the digest admin page to send a digest + immediately (if it's non-empty), to start a new digest + volume with the next digest, and to select the interval with + which to automatically start a new digest volume (yearly, + monthly, quarterly, weekly, daily). + + DEFAULT_DIGEST_VOLUME_FREQUENCY is a new configuration + variable, initially set to give a new digest volume monthly. + + o Through-the-web list creation and removal, using a separate + site-wide authentication role called the "list creator and + destroyer" or simply "list creator". If the configuration + variable OWNERS_CAN_DELETE_THEIR_OWN_LISTS is set to 1 (by + default, it's 0), then list admins can delete their own + lists. + + This feature requires an adaptor for the particular MTA + you're using. An adaptor for Postfix is included, as is a + dumb adaptor that just emails mailman@yoursite with the + necessary Sendmail style /etc/alias file changes. Some MTAs + like Exim can be configured to automatically recognize new + lists. The adaptor is selected via the MTA option in + mm_cfg.py + + - Email UI + o In email commands, "join" is a synonym for + "subscribe". "remove" and "leave" are synonyms for + "unsubscribe". New robot addresses are support to make + subscribing and unsubscribing much easier: + + mylist-join@mysite + mylist-leave@mysite + + o Confirmation messages have a shortened Subject: header, + containing just the word "confirm" and the confirmation + cookie. This should help for MUAs that like to wrap long + Subject: lines, messing up confirmation. + + o Mailman now recognizes an Urgent: header, which, if it + contains the list moderator or list administrator password, + forces the message to be delivered immediately to all + members (i.e. both regular and digest members). The message + is also placed in the digest. If the password is incorrect, + the message will be bounced back to the sender. + + - Performance + o Refinements to the new qrunner subsystem which preserves + FIFO order of messages. + + o The qrunner is no longer started from cron. It is started + by a Un*x init-style script called bin/mailmanctl (see + below). cron/qrunner has been removed. + + - Command line scripts + o bin/mailmanctl script added, which is used to start, stop, + and restart the qrunner daemon. + + o bin/qrunner script added which allows a single sub-qrunner + to run once through its processing loop. + + o bin/change_pw script added (eases mass changing of list + passwords). + + o bin/update grows a -f switch to force an update. + + o bin/newlang renamed to bin/addlang; bin/rmlang removed. + + o bin/mmsitepass has grown a -c option to set the list + creator's password. The site-wide `create' web page is + linked to from the admin overview page. + + o bin/newlist's -o option is removed. This script also grows + a way of spelling the creation of a list in a specific + virtual domain. + + o The `auto' script has been removed. + + o bin/dumpdb has grown -m/--marshal and -p/--pickle options. + + o bin/list_admins can be used to print the owners of a mailing list. + + o bin/genaliases regenerates from scratch the aliases and + aliases.db file for the Postfix MTA. + + - Archiver + o New archiver date clobbering option, which allows dates to + only be clobber if they are outrageously out-of-date + (default setting is 15 days on either side of received + timestamp). New configuration variables: + + ARCHIVER_CLOBBER_DATE_POLICY + ARCHIVER_ALLOWABLE_SANE_DATE_SKEW + + The archived copy of messages grows an X-List-Received-Date: + header indicating the time the message was received by + Mailman. + + o PRIVATE_ARCHIVE_URL configuration variable is removed (this + can be calculated on the fly, and removing it actually makes + site configuration easier). + + - Miscellaneous + o Several new README's have been added. + + o Most syslog entries for the qrunner have been redirected to + logs/error. + + o On SIGHUP, qrunner will re-open all its log files and + restart all child processes. See "bin/mailmanctl restart". + + - Patches and bug fixes + o SF patches and bug fixes applied: 420396, 424389, 227694, + 426002, 401372 (partial), 401452. + + o Fixes in 2.0.5 ported forward: + Fix a lock stagnation problem that can result when the + user hits the `stop' button on their browser during a + write operation that can take a long time (e.g. hitting + the membership management admin page). + + o Fixes in 2.0.4 ported forward: + Python 2.1 compatibility release. There were a few + questionable constructs and uses of deprecated modules + that caused annoying warnings when used with Python 2.1. + This release quiets those warnings. + + o Fixes in 2.0.3 ported forward: + Bug fix release. There was a small typo in 2.0.2 in + ListAdmin.py for approving an already subscribed member + (thanks Thomas!). Also, an update to the OpenWall + security workaround (contrib/securelinux_fix.py) was + included. Thanks to Marc Merlin. + +2.1 alpha 1 (04-Mar-2001) + + - Python 2.0 or newer required. Also required is `mimelib' a new + library for handling MIME documents. This will be bundled in + future releases, but for now, you must download and install it + (using Python's distutils) from + + http://barry.wooz.org/software/Code/mimelib-0.2.tar.gz + + You need mimelib 0.2 or better. + + - Redesigned qrunner subsystem. Now there are multiple message + queues, and considerable flexibility in file formats for + integration with external systems. The current crop of queues + include: + + archive -- for posting messages to an archiver + commands -- for incoming email commands and bounces + in -- for list-destined incoming email + news -- for messages outgoing to a nntp server + out -- for messages outgoing to a smtp server + shunt -- for messages that trigger unexpected exceptions in Mailman + virgin -- for messages that are generated by Mailman + + cron/qrunner is now a long running script that forks off + sub-runners for each of the above queues. qrunner still plays + nice with cron, but it is expected to be started by init at some + point in the future. Some support exists for parallel + processing of messages in the queues. + + - Support for internationalization support merged in. Original + work done by Juan Carlos Rey Anaya and Victoriano Giralt. I've + tested about 90% of the web side, 50% of the email, and 50% of + the command line / cron scripts. + + New scripts: bin/newlang, bin/rmlang + + - New delivery script `auto' for automatic integration with the + Postfix MTA. + + - A bunch of new bounce detectors. + + Changes ported from Mailman 2.0.2 and 2.0.1: + + - A fix for a potential privacy exploit where a clever list + administrator could gain access to user passwords. This doesn't + allow them to do much more harm to the user then they normally + could, but they still shouldn't have access to the passwords. + + - In the admindb page, don't complain when approving a + subscription of someone who's already on the list (SF bug + #222409 - Thomas Wouters). + + Also, quote for HTML the Subject: text printed for held + messages, otherwise messages with e.g. "Subject: </table>" could + royally screw page formatting. + + - Docstring fix bin/newlist to remove mention of "immediate" + argument (Thomas Wouters). + + - Fix for bin/update when PREFIX != VAR_PREFIX (SF bug #229794 -- + Thomas Wouters). + + - Bug fix release, namely fixes a buglet in bin/withlist affecting + the -l and -r flags; also a problem that can cause qrunner to + stop processing mail after disk-full events (SourceForge bug + 127199). + +2.0 final (21-Nov-2000) + + No changes from rc3. + +2.0 release candidate 3 (16-Nov-2000) + + - By popular demand, Reply-To: munging policy is now to always + override any Reply-To: header in the original message, if + reply_goes_to_list is set to "This list" or "Explicit Address" + + - bin/newlist given -q/--quiet flag instead of the <immediate> + positional argument + + - Hopefully last fix to DEFAULT_URL not ending in a slash + sensitivity + + - 2.0rc2 buglets fixed: + o newlist argument parsing + o updating with unlocked lists + o HyperArch.py traceback when there's no + Content-Transfer-Encoding: header + + - SourceForge bugs fixed: + 122358 (qmail-to-mailman.py listname case folding) + + - SourceForge patches applied: + 102373 (qmail-to-mailman.py listname case folding) + +2.0 release candidate 2 (10-Nov-2000) + + - Documentation updates: start at admin/www/index.html + + - bin/withlist accepts additional command line arguments when used + with the --run flag; bin/mmsitepass and bin/newlist accept + -h/--help flags + + - bin/newlist has a -o/--output flag to append /etc/aliases + suggestions to a specified file + + - SourceForge bugs fixed: + 116615 (README.BSD update), 117015 (duplicate messages on + moderated posts), 117548 (exception in HyperArch.py), 117682 + (typos), 121185 (vsnprintf signature), 121591 and 122017 + (bogus link after web unsubscribe), 121811 (`subscribe' in + Subject: doesn't get archived) + + - SourceForge patches applied: + 101812 (securelinux_fix.py contrib), 102097 (fix for bug + 117548), 102211 (additional args for withlist), 102268 (case + insensitive Content-Transfer-Encoding:) + +2.0 release candidate 1 (23-Oct-2000) + + - Bug fixes and security patches. + + - Better html rendition of articles in non us-ascii charsets + (Jeremy Hylton). See VERBATIM_ENCODING variable in + Defaults.py.in for customization. + +2.0 beta 6 (22-Sep-2000) + + - Building + o Tested with Python 1.5.2, Python 1.6, and Python 2.0 beta 1. + Conducted on RH Linux 6.1 only, but should work + cross-platform. + + o Configure now accepts --with-username, --with-groupname, + --with-var-prefix flags. See `configure --help' or the + INSTALL file for details. + + o Setting the CFLAGS environment variable before invoking + configure now works. + + o The icons are now copied into $prefix/icons at install time. + Patch by David Champion. + + - Standards + o Compliance with RFC 2369 (List-*: headers). Patch by + Darrell Fuhriman. List-ID: header is kept for historical + reasons. + + o Fixes by Jeremy Hylton to Pipermail in support of non-ASCII + charsets, based on the Content-Type: and encoded-words in + the original message. Mail headers are now decoded as per + RFC 2047. + + o Many more bounce formats are detected: Microsoft's SMTPSVC, + Compuserve, GroupWise, SMTP32, and the more generic + SimpleMatch (which catches lots of similar but slightly + different formats). + + - Defaults + o Email addresses can now be obscured in Pipermail archives by + setting mm_cfg.ARCHIVER_OBSCURES_EMAILADDRS to 1 (obscuring + is turned off by default). Patch provided by Chris Snell. + + o The default NNTP host can now be set by editing + mm_cfg.DEFAULT_NNTP_HOST. Patch by David Champion. + + o The default archiving mode (public/private) can now be set + by editing mm_cfg.DEFAULT_ARCHIVE. Patch by Ted Cabeen. + + - Web UI + o The variable details pages in the administrators interface + is now `live', i.e. there's a submit button on the details + page. + + o A link to the administrative interface is placed in the + footer of the general user pages (authentication still + required, of course!) + + o The user options change results page has a link back to the + user's main page. + + o In the admindb page (for dealing with held postings), the + default forward address is now listname-owner instead of + listname-admin. This avoids bounce detection on the + forwarded message. + + - Miscellaneous + o Fixed config.db corruption problem when disk-full errors are + encountered. + + o Command line scripts accept list names case-insensitively. + + o bin/remove_members takes a -a flag to remove all members of + a list in one fell swoop. + + o List admin passwords must be non-empty. + + o Mailman generated passwords are slightly more mnemonic, and + shouldn't have confusing character selections (i.e. `i' + only, but no `1' or `l'). + + o Crossposting to two gated mailing lists should be fixed. + + o Many other bug fixes and minor web UI improvements. + +2.0 beta 5 (01-Aug-2000) + + - Bug fix release. This includes a fix for a small security hole + which could be exploited to gain mailman group access by a local + user (not a mail or web user). + + - As part of the fix for the "cookie reauthorization" bug, only + session cookies are used now. This means that administrative + and private archive cookies expire only when the browser session + is quit, however an explicit "Logout" button has been added. + +2.0 beta 4 (06-Jul-2000) + + - Bug fix release. + +2.0 beta 3 (29-Jun-2000) + + - Delivery mechanism (qrunner) refined to support immediate + queuing, queuing directly from MTA, and queuing on any error + along the delivery pipeline. This means 1) that huge lists + can't time out the MTA's program delivery channel; 2) it is much + harder to completely lose messages; 3) eventually, qrunner will + be elaborated to meter delivery to the MTA so as not to swamp + it. The tradeoff is in more disk I/O since every message coming + into the system (and most that are generated by the system) live + on disk for some part of their journey through Mailman. + + For now, see the Default.py variables QRUNNER_PROCESS_LIFETIME + and QRUNNER_MAX_MESSAGES for primitive resource management. + + The API to the pipeline handler modules has changed. See + Mailman/Handlers/HandlerAPI.py for details. + + - Revamped admindb web page: held messages are split into headers + and bodies so they are easier to vette; admins can now also + preserve a held message (for spam evidence gathering) or forward + the message to a specified email address; disposition of held + messages can be deferred; held messages have a more context + meaningful default rejection message. + + - Change to the semantics for `acceptable_aliases' list + configuration variable, based on suggestions by Harald Meland. + + - New mm_cfg.py variables NNTP_USERNAME and NNTP_PASSWORD can be + set on a site-wide basis if connection to your nntpd requires + authentication. + + - The list attribute `num_spawns' has been removed. The mm_cfg.py + variables MAX_SPAWNS, and DEFAULT_NUM_SPAWNS removed too. + + - LIST_LOCK_LIFETIME cranked to 5 hours and LIST_LOCK_TIMEOUT + shortened to 10 seconds. QRUNNER_LOCK_LIFETIME cranked up to 10 + hours. This should decrease the changes for bogus and harmful + lock breaking. + + - Resent-to: is now one of the headers checked for explicit + destinations. + + - Tons more bounce formats are recognized. The API to the bounce + modules has changed. + + - A rewritten LockFile module which should fix most (hopefully all) + bugs in the locking machinery. Many improvements suggested by + Thomas Wouters and Harald Meland. + + - Experimental support (disabled by default) for delivering SMTP + chunks to the MTA via multiple threads. Your Python executable + must have been compiled with thread support enabled, and you + must set MAX_DELIVERY_THREADS in mm_cfg.py. Note that this may + not improve your overall system performance. + + - Some changes and additions to scripts: bin/find_member now + supports a -w/--owner flag to match regexps against mailing list + owners; bin/find_member now supports multiple regexps; + cron/gate_news command line option changes; new script + bin/dumbdb for debugging purposes; bin/clone_member can now also + remove the old address and change change the list owner + addresses. + + - The News/Mail gateway admin page has a button that lets you do + an explicit catchup of the newsgroup. + + - The CVS repository has been moved out to SourceForge. For more + information, see the project summary at + + http://sourceforge.net/project/?group_id=103 + + - Lots 'o bug fixes and some performance improvements. + +2.0 beta 2 (07-Apr-2000) + + - Rewritten gate_news cron script which should be more efficient + and avoid race and locking problems. Each list now maintains + its own watermark, and when you use the admin CGI script to turn + on gating from Usenet->mail, an automatic mass catch up is done + to avoid flooding the mailing list. cron/gate_news's command + line interface has also changed. See its docstring for + details. + + - A new cron script called qrunner has been added to retry message + deliveries that fail because of temporary smtpd problems. + + - New command line script called bin/list_lists which does exactly + that: lists all the mailing lists on the system (much like the + listinfo CGI does). + + - bin/withlist is now directly executable, however if you want to + use python -i, you must still explicitly invoke it. + bin/withlist also now cleans up after itself by unlocking any + locked lists. It does NOT save any dirty lists though - you + must do this explicitly. + + - $prefix permissions (and all subdirs) must now be 02775. + bin/check_perms has been updated to fix all the subdir + permissions. + + - "make update" (a.k.a. bin/update) is run automatically when you + do a "make install" + + - The CGI driver script now puts information about the Python + environment into the logs/error file (but not the diagnostic web + page). + + - Bug fixes and some performance improvements + +2.0 beta 1 (19-Mar-2000) + + - Python 1.5.2 (or newer) is now required. + + - A new bundled auto-responder has been added. You can now + configure an autoresponse text for each list's primary + addresses: + + listname@yourhost.com -- the general posting address + listname-request@... -- the automated "request bot" address + listname-admin@... -- the human administrator address + + - The standard UI now includes three logos at the bottom of the + page: Dragon's Mailman logo, the Python Powered logo, and the + GNU logo. All point to their respective home pages. + + - It is now possible to set the Reply-To: field on lists to an + arbitrary address. NOTE: Reply-To: munging is generally + considered harmful! However for some read-only lists, it is + useful to direct replies to a parallel discussion list. + + - There is a new message delivery architecture which uses a + pipeline processor for incoming and internally generated + messages. Mailman no longer contains a bundled bulk-mailer; + instead message delivery is handled completely by the MTA. Most + MTAs give a high enough priority to connections from the + localhost that mail will not be lost because of system load, but + this is not guaranteed (or handled) by Mailman currently. Be + careful also if your smtpd is on a different host than the + Mailman host. In practice, mail lossage has not be observed. + + For this reason cron/run_queue is no longer needed (see the + UPGRADING file for details). + + Also, you can choose whether you want direct smtp delivery, or + delivery via the command line to a sendmail-compatible daemon. + You can also easily add your own delivery module. See + Mailman/Defaults.py for details. + + - A similar pipeline architecture for the parsing of bounce + messages has been added. Most common bounce formats are now + handled, including Qmail, Postfix, and DSN. It is now much + easier to add new bounce detectors. + + - The approval pending architecture has also been revamped. + Subscription requests and message posts waiting for admin + approval are no longer kept in the config.db file, but in a + separate requests.db file instead. + + - Finally made consistent the use of Sender:/From:/From_ in the + matching of headers for such things as member-post-only. Now, + if USE_ENVELOPE_SENDER is true, Sender: will always be chosen + over From:, however the default has been changed to + USE_ENVELOPE_SENDER false so that From: is always chosen over + Sender:. In both cases, if no header is found, From_ (i.e. the + envelope sender is used). Note that the variable is now + misnamed! Most people want From: matching anyway and any are + easily spoofable. + + - New scripts bin/move_list, bin/config_list + + - cron/upvolumes_yearly, cron/upvolumes_monthly, cron/archive, + cron/run_queue all removed. Edit your crontab if you used these + scripts. Other scripts removed: contact_transport, deliver, + dumb_deliver. + + - Several web UI improvements, especially in the admin page. + + - Remove X-pmrqc: headers to prevent return reciepts for Pegasus + mail users. + + - Security patch when using external archivers. + + - Honor "X-Archive: No" header by not putting this message in the + archive. + + - Changes to the log file format. + + - The usual bug fixes. + +1.1 (05-Nov-1999) + + - All GIFs removed. See http://www.gnu.org/philosophy/gif.html + for the reason why. + + - Improvements to the Pipermail archiver which make things faster. + Primary change is that the .txt files are not gzipped on every + posted message. Instead, use the new cron script `nightly_gzip' + to gzip the .txt file in batches (this means that the .txt file + will lag behind the on-line archives a little). + + - From the C drivers programs, Python is invoked with the -S + option. This tells Python to avoid importing the site module, + which can improve start up time of the Python process + considerably. Note that the command line script invocation has + not been changed. + + - New configuration variables PUBLIC_EXTERNAL_ARCHIVER and + PRIVATE_EXTERNAL_ARCHIVER which can contain a shell command + string for os.popen(). This can be used to invoke an external + archiver instead of the bundled Pipermail archiver. See + Defaults.py for details. + + - new script `bin/find_member' which can be used to search for a + member by regular expression. + + - More child processes are reaped, which should eliminate most + occurrences of zombie processes. + + - A few small miscellaneous bug fixes (including PR#99, PR#107) + and improvements to the file locking algorithms. + +1.0 (30-Jul-1999) + + - Configure script now allows $PREFIX (by default /home/mailman) + to be permissions 02755. Also, configure now tests for + vsnprintf() + + - Workaround, taken from GNU screen, for systems missing + vsnprintf() + + - Return-Receipt-To: and Disposition-Notification-To: headers are + always removed from posted messages (they can be used to troll + for list membership). + + - Workaround for MSIE4.01 (and possibly other versions) bug in the + handling of cookies. + + - A small collection of other bug fixes. + +1.0rc3 (10-Jul-1999) + + - new script bin/check_perms which checks (and optionally fixes) + the permissions and group ownerships of the files in your + Mailman installation. + + - Removed a bottleneck in the archiving code that was causing + performance problems on highly loaded servers. + + - The code that saves a list's state and configuration database + has been made more robust. + + - Additional exception handlers have been added in several places + to alleviate problems with Mailman bombing out when it really + would be better to print/log a helpful message. + + - The "password" mail command will now mail back the sender's + subscription password when given with no arguments. + + - The embarrassing subject-prefixing bug present in rc2 has been + fixed. + + - A small (but nice :) collection of other squashed bugs. + +1.0rc2 (14-Jun-1999) + + - A security flaw in the CGI cookie mechanisms was discovered -- + the Mailman-issued cookies were easily spoofable, implying that + e.g. admin access to all Mailman lists via the web interface + could be compromised. This flaw has now been fixed. + + - Handling of SMTP errors has been improved. + + - Both "Mass Subscription" via web admin interface and + bin/add_members have been greatly sped up. + + - autoconf check for syslog has been revamped, and is now verified + to work on SCO OpenServer 5. If syslog can't be found, the C + wrappers will compile, but without any syslog calls. + + - Various other bug fixes. + +1.0rc1 (04-May-1999) + + - There is a new Mailman logo, contributed by The Dragon De + Monsyne. Please read the INSTALL file for information about + installing the logo in a place your Web server can find it. + + - USE_ENVELOPE_SENDER is now set to 0 by default. Turning this on + caused problems for too many users; lists restricted to + member-only posts were not matching the addresses correctly. + + - A revamped bin/withlist to be a little more useful. + + - A revamped cron/mailpasswds which groups users by virtual hosts. + + - The usual assortment of bug fixes. + +1.0b11 (03-Apr-1999) + + - Bug fixes and improvements for case preservation of subscribed + addresses. The DATA_FILE_VERSION has been bumped to 14. + + - New script bin/withlist, useful for interactive debugging. + +1.0b10 (26-Mar-1999) + + - New script bin/sync_members which can be used to synchronize a + list's membership against a flat (e.g. sendmail :include: style) + file. + + - bin/add_members and bin/remove_members now accept addresses on + the command line with `-' as the value for the -d and -n + options. + + - Added variable USE_ENVELOPE_SENDER to Defaults.py for site-wide + configuration of address matching scheme. With this variable + set to true, the envelope sender (e.g. Unix "From_" header) is + used to match addresses, otherwise the From: header is used. + Envelope sender matching seems not to work on many systems. + This variable is currently defaulted to 1, but may change to 0 + for the final release. + + - Reorganization of the membership management admin page. Also + member addresses are linked to their options page. Only the + `General' category has the admin password change form. + + - Major reorganization of email command handling and responses. + `notmetoo' is the preferred email command instead of `norcv', + although the latter is still accepted as an argument. If more + than 5 errors are found in the message, command processing is + halted. + + - User options page now shows the user their case-preserved + subscribed address as well. + + - The usual assortment of bug fixes. + +1.0b9 (01-Mar-1999) + + - New bin scripts: clone_member, list_members, add_members (a + consolidation of convertlist and populate_new_list which have + been removed). + + - Two new readmes have been added: README.LINUX and README.QMAIL + + - New configure option --with-cgi-ext which can be used if your + Web server requires extensions on CGI scripts. The extension + must include a dot (e.g. --with-cgi-ext=".cgi"). + + - Many bug fixes, including the setgid problem that was causing + mail to be lost on some versions of Linux. + +1.0b8 (14-Jan-1999) + + - Bug fixes and workarounds for certain Linuxes. + + - Illegal addresses are no longer allowed to be subscribed, from + any interface. + +1.0b7 (31-Dec-1998) + + - Many, many bug fixes. Some performance improvements for large + lists. Some improvements in the Web interfaces. Some security + improvements. Improved compatibility with Python 1.5. + + - bin/convert_list and bin/populate_new_list have been replaced + by bin/add_members. + + - Admins can now get notification on subscriptions and + unsubscriptions. Posts are now logged. + + - The username portion of email addresses are now case-preserved + for delivery purposes. All other address comparisions are + case-insensitive. + + - New default SMTP_MAX_RCPTS that limits the number of "RCPT TO" + SMTP commands that can be given for a single message. Most + MTAs have some hard limit. + + - "Precedence: bulk" header and "List-id:" header are now added + to all outgoing messages. The latter is not added if the + message already has a "List-id:" header. See RFC 2046 and + draft-chandhok-listid-02 for details. + + - The standard (as of Python 1.5.2) smtplib.py is now used. + + - The install process now compiles all the .py files in the + installation. + + - Versions of the Mailman papers given at IPC7 and LISA-98 are + now included. + +1.0b6 (07-Nov-1998) + + - Archiving is (finally) back in. + + - Administrivia filter added. + + - Mail queue mechanism revamped with better concurrency control. + + - For recipients that have estmp MTAs, set delivery notification + status so that only delivery failure notices are sent out, + inhibiting 4 hour and N day warning notices. + + - Now expire old unconfirmed subscription requests, rather than + keeping them forever. + + - Added proposed standard List-Id: header, and our own + X-MailmanVersion header. + + - Prevent havoc from attempts to subscribe a list to itself. (!) + + - Refine mail command processing to prevent loops. + + - Pending subscription DB redone with better locking and cleaner + interface. + + - posters functionality expanded. + + - Subscription policy more flexible, sensible, and + site-configurable. + + - Various and sundry bug fixes. + +1.0b5 (27-Jul-1998) + + - New file locking that should be portable and work w/ NFS. + + - Better use of packages. + + - Better error logging and reporting. + + - Less startup overhead. + + - Various and sundry bug fixes. + + +1.0b4 (03-Jun-1998) + + - A configure script for easy installation (Barry Warsaw) + + - The ability to install Mailman to locations other than + /home/mailman (Barry Warsaw) + + - Use cookies on the admin pages (also hides admin pages from + others) (Scott Cotton) + + - Subscription requests send a request for confirmation, which may + be done by simply replying to the message (Scott Cotton) + + - Facilities for gating mail to a newsgroup, and for gating a + newsgroup to a mailing list (John Viega) + + - Contact the SMTP port instead of calling sendmail (primarily for + portability) (John Viega) + + - Changed all links on web pages to relative links where appropriate. + (John Viega) + + - Use MD5 if crypt is not available (John Viega) + + - Lots of fixing up of bounce handling (Ken Manheimer) + + - General UI polishing (Ken Manheimer) + + - mm_html: Make it prominent when the user's delivery is disabled + on his option page. (Ken Manheimer) + + - mallist:DeleteMember() Delete the option setings if any. (Ken + Manheimer) + +1.0b3 (03-May-1998) + + - mm_message:Deliverer.DeliverToList() added missing newline + between the headers and message body. Without it, any sequence + of initial body lines that _looked_ like headers ("Sir: Please + excuse my impertinence, but") got treated like headers. + + - Fixed typo which broke subscription acknowledgement message + (thanks to janne sinkonen for pointing this out promptly after + release). (Anyone who applied my intermediate patch will + probably see this one trigger patch'es reversed-patch + detector...) + + - Fixed cgi-wrapper.c so it doesn't segfault when invoked with + improper uid or gid, and generally wrappers are cleaned up a + bit. + + - Prevented delivery-failure notices for misdirected subscribe- + confirmation requests from bouncing back to the -request addr, + and then being treated as failing requests. + + Implemented two measures. Set the reply-to for the + confirmation- request to the -request addr, and the sender to be + the list admin. This way, bounces go to list admin instead of + to -request addr. (Using the errors-to header wasn't + sufficient. Thanks, barry, for pointing out the use of sender + here.) Second, ignore any mailcommands coming from postmaster + or non-login system type accounts (mailer-daemon, daemon, + postoffice, etc.) + + - Reenabled admin setting of web_page_url - crucial for having + lists use alternate names of a host that occupies multiple + addresses. + + - Fixed and refined admin-options help mechanism. Top-level visit + to general-category (where the "general" isn't in the URL) was + broken. New help presentation shows the same row that shows on + the actual options page. + + - cron/crontab.in crontab template had wrong name for senddigests. + + - Default digest format setting, as distributed, is now non-MIME, + on urging of reasoned voices asserting that there are still + enough bad MIME implementations in the world to be a nuisance to + too many users if MIME is the default. Sigh. + + - MIME digests now preserve the structure of MIME postings, + keeping attachments as attachments, etc. They also are more + structured in general. + + - Added README instructions explaining how to determine the right + UID and GID settings for the wrapper executables, and improved + some of the explanations about exploratory interaction + w/mailman. + + - Removed the constraint that subscribers have their domain + included in a static list in the code. We might want to + eventually reincorporate the check for the sake of a warning + message, to give a heads up to the subscriber, but try delivery + anyway... + + - Added missing titles to error docs. + + - Improved several help details, including particularly explaining + better how real_name setting is used. + + - Strengthened admonition against setting reply_goes_to_list. + + - Added X-BeenThere header to postings for the sake of prevention + of external mail loops. + + - Improved handling of bounced messages to better recognize + members address, and prevent duplicate attempts to react (which + could cause superfluous notices to administrator). + + - Added __delitem__ method to mm_message.OutgoingMessage, to fix + the intermediate patch posted just before this one. + + - Using keyword substitution format for more message text (ie, + "substituting %(such)s into text" % {'such': "something"}) to + make the substitutions less fragile and, presumably, easier to + debug. + + - Removed hardwired (and failure-prone) /tmp file logging from + answer.majordomo_mail, and generally spiffed up following janne + sinkkonen's lead. + +1.0b2 (13-Apr-1998) +1.0b1 (09-Apr-1998) + + Web pages much more polished + - Better organized, text more finely crafted + - Easier, more refined layout + - List info and admin interface overviews, enumerate all public lists + (via, e.g., http://www.python.org/mailman/listinfo - sans the + specific list) + - Admin interface broken into sections, with help elaboration for + complicated configuration options + + Mailing List Archives + - Integrated with a newer, *much* improved, external pipermail - to be + found at http://starship.skyport.net/crew/amk/maintained/pipermail.html + - Private archives protected with mailing list members passwords, + cookie-fied. + + Spam prevention + - New spam prevention measures catch most if not all spam without + operator intervention or general constraints on who can post to + list: + require_explicit_destination option imposes hold of any postings + that do not have the list name in any of the to or cc header + destination addresses. This catches the vast majority of random + spam. + Other options (forbidden_posters, bounce_matching_headers) provide + for filtering of known transgressors. + - Option obscure_addresses (default on) causes mailing list subscriber + lists on the web to be slightly mangled so they're not directly + recognizable as email address by web spiders, which might be + seeking targets for spammers. + + Site configuration arrangement organized - in mailman/mailman/modules: + - When installing, create a mailman/modules/mm_cfg.py (if there's not + one already there), using mm_cfg.py.dist as a template. + mm_default.py contains the distributed defaults, including + descriptions of the values. mm_cfg.py does a 'from mm_defaults.py + import *' to get the distributed defaults. Include settings in + mm_cfg.py for any values in mm_defaults.py that need to be + customized for your site, after the 'from .. import *'. + See mm_cfg.py.dist for more details. + + Logging + - Major operations (subscription, admin approval, bounce, + digestification, cgi script failure tracebacks) logged in files + using a reliable mechanism + - Wrapper executables log authentication complaints via syslog + + Wrappers + - All cgi-script wrapper executables combined in a single source, + easier to configure. (Mail and aliases wrappers separate.) + + List structure version migration + - Provision for automatic update of list structures when moving to a + new version of the system. See modules/versions.py. + + Code cleaning + - Many more module docstrings, __version__ settings, more function + docstrings. + - Most unqualified exception catches have been replaced with more + finely targeted catches, to avoid concealing bugs. + - Lotsa long lines wrapped (pet peeve:). + + Random details (not complete, sorry): + - make archival frequency a list option + - Option for daily digest dispatch, in addition to size threshhold + - make sure users only get one periodic password notifcation message for + all the lists they're on (repaired 1.0b1.1 varying-case mistake) + - Fix rmlist sans-argument bug causing deletion of all lists! + - doubled generated random passwords to four letters + - Cleaned lots and lots of notices + - Lots and lots of html page cleanup, including table-of-contents, etc + - Admin options sections - don't do the "if so" if the ensuing list + is empty + - Prevent list subject-prefix cascade + - Sources under CVS + - Various spam filters - implicit-destination, header-field + - Adjusted permissions for group access + - Prevent redundant subscription from redundant vetted requests + - Instituted centralize, robustish logging + - Wrapper sources use syslog for logging (john viega) + - Sorting of users done on presentation, not in list. + - Edit options - give an error for non-existent users, not an options page. + - Bounce handling - offer 'disable' option, instead of remove, and + never remove without notifying admin + - Moved subscribers off of listinfo (and made private lists visible + modulo authentication) + - Parameterize default digest headers and footers and create some + - Put titles on cgi result pages that do not get titles (all?) + - Option for immediate admin notifcation via email of pending + requests, as well as periodic + - Admin options web-page help + - Enabled grouped and cascading lists despite implicit-name constraint + - Changed subscribers list so it has its own script (roster) + - Welcome pages: http://www.python.org/mailman/{admin,listinfo}/ + +0.95 (25-Jan-1997) + - Fixed a bug in sending out digests added when adding disable mime option. + - Added an option to not notify about bounced posts. + - Added hook for pre-posting filters. These could be used to + auto-strip signatures. I'm using the feature to auto-strip footers + that are auto-generated by mail received from another mailing list. + +0.94 (22-Jan-1997) + - Made admin password work ubiquitously in place of a user password. + - Added an interface for getting / setting user options. + - Added user option to disable mime digests (digested people only) + - Added user option to not receive your own posts (nondigested people only) + - Added user option to ack posts + - Added user option to disable list delivery to their box. + - Added web interface to user options + - Config number of sendmail spawns on a per-list basis + - Fixed extra space at beginning of each message in digests... + - Handled comma separated emails in bounce messages... + - Added a FindUser() function to MailList. Used it where appropriate. + - Added mail interface to setting list options. + - Added name links to the templates options page + - Added an option so people can hide their names from the subscription list. + - Added an answer_majordomo_mail script for people switching... + +0.93 (18/20-Jan-1997) + - When delivering to list, don't call sendmail directly. Write to a file, + and then run the new deliver script, which forks and exits in the parent + immediately to avoid hanging when delivering mail for large lists, so that + large lists don't spend a lot of time locked. + - GetSender() no longer assumes that you don't have an owner-xxx address. + - Fixed unsubscribing via mail. + - Made subscribe via mail generate a password if you don't supply one. + - Added an option to clobber the date in the archives to the date the list + resent the post, so that the archive doesn't get mail from people sending + bad dates clumped up at the beginning or end. + - Added automatic error message processing as an option. Currently + logging to /tmp/bounce.log + - Changed archive to take a list as an argument, (the old way was broken) + - Remove (ignore) spaces in email addresses + - Allow user passwords to be case insensitive. + - Removed the cleanup script since it was now redundant. + - Fixed archives if there were no archives. + - Added a Lock() call to Load() and Create(). This fixes the + problem of loading then locking. + - Removed all occurances of Lock() except for the ones in mailing + list since creating a list + now implicitly locks it. + - Quote single periods in message text. + - Made bounce system handle digest users fairly. + +0.92 (13/16-Jan-1997) + - Added Lock and Unlock methods to list to ensure each operation is atomic + - Added a cmd that rms all files of a mailing list (but not the aliases) + - Fixed subscribing an unknown user@localhost (confirm this) + - Changed the sender to list-admin@... to ensure we avoid mail loops. + - check to make sure there are msgs to archive before calling pipermail. + - started using this w/ real mailing lists. + - Added a cron script that scours the maillog for User/Host unknown errs + - Sort membership lists + - Always display digest_is_default option + - Don't slam the TO list unless you're sending a digest. + - When making digest summaries, if missing sender name, use their email. + - Hacked in some protection against crappy dates in pipermail.py + - Made it so archive/digest volumes can go up monthly for large large lists. + - Number digest messages + - Add headers/footers to each message in digest for braindead mailers + - I removed some forgotten debug statements that caused server errors + when a CGI script sent mail. + - Removed loose_matches flag, since everything used it. + - Fixed a problem in pipermail if there was no From line. + - In upvolume_ scripts, remove INDEX files as we leave a volume. + - Threw a couple of scripts in bin for generating archives from majordomo's + digest-archives. I wouldn't recommend them for the layman, though, they + were meant to do a job quickly, not to be usable. + +0.91 (23-Dec-1996) + - broke code into mixins for managability + - tag parsing instead of lots of gsubs + - tweaked pipermail (see comments on pipermail header) + - templates are now on a per-list basis as intended. + - request over web that your password be emailed to you. + - option so that web subscriptions require email confirmation. + - wrote a first pass at an admin interface to configurable variables. + - made digests mime-compliant. + - added a FakeFile class that simulates enough of a file object on a + string of text to fool rfc822.Message in non-seek mode. + - changed OutgoingMessage not to require its args in constructor. + - added an admin request DB interface. + - clearly separated the internal name from the real name. + - replaced lots of ugly, redundant code w/ nice code. + (added Get...Email() interfaces, GetScriptURL, etc...) + - Wrote a lot of pretty html formatting functions / classes. + - Fleshed out the newlist command a lot. It now mails the new list + admin, and auto-updates the aliases file. + - Made multiple owners acceptable. + - Non-advertised lists, closed lists, max header length, max msg length + - Allowed editing templates from list admin pages. + - You can get to your info page from the web even if the list is closed. + + +Local Variables: +mode: indented-text +indent-tabs-mode: nil +End: diff --git a/docs/STYLEGUIDE.txt b/docs/STYLEGUIDE.txt new file mode 100644 index 000000000..1cdca7c4e --- /dev/null +++ b/docs/STYLEGUIDE.txt @@ -0,0 +1,162 @@ +Python coding style guide for Mailman +Copyright (C) 2002-2004 Barry A. Warsaw +$Revision: 8143 $ + +NOTE: The canonical version of this style guide can be found at: + + http://barry.warsaw.us/software/STYLEGUIDE.txt + +This document contains a style guide for Python programming, as used in +Mailman. In general, Guido van Rossum's style guide should be taken as a +basis, as embodied in PEP 8: + + http://www.python.org/peps/pep-0008.html + +however, my (Barry Warsaw's) personal preferences differ from Guido's in a few +places. "When in Rome..." should apply meaning, when coding stuff for Python, +Guido's style should rule, however when coding for Mailman, I'd like to see my +preferences used instead. + +Remember rule #1, A Foolish Consistency is the Hobgoblin of Little Minds. +That said, here's a quick outline of where my preferences depart from Guido's: + +- Imports usually should be on separate lines. While it's sometimes + okay to say + + from types import StringType, ListType + + it's never okay to say + + import os, sys + + Put these on separate lines. + +- Imports are always put at the top of the file, just after any module + comments and docstrings, and before module globals and constants. + Imports should be grouped, with the order being: + + 1. standard library imports + 2. related major package imports (i.e. all email package imports next) + 3. application specific imports + + From-imports should follow non-from imports. Dotted imports should follow + non-dotted imports. Non-dotted imports should be grouped by increasing + length, while dotted imports should be grouped roughly alphabetically. + +- In general, there should be at most one class per module, if the module + contains class definitions. If it's a module of functions, that's fine, + group them as common sense dictates. A class-containing module can also + contain some helper functions, but it's best to keep these non-public + (i.e. use a single leading underscore). + + Always give the class and the module the same name, differing only by case + as PEP 8 recommends. E.g. + + from mailman.parser import Parser + +- When importing a class from a class-containing module, it's usually + okay to spell this + + from myclass import MyClass + from foo.bar.yourclass import YourClass + + If this spelling causes name clashes, then spell them + + import myclass + import foo.bar.yourclass + + and use "myclass.MyClass" + +- Right hanging comments are discouraged, in favor of preceding comments. + E.g. + + foo = blarzigop(bar) # if you don't blarzigop it, it'll shlorp + + should be written as + + # if you don't blarzigop it, it'll shlorp + foo = blarzigop(bar) + +- Major sections of code in a module should be separated by line feed + characters (e.g. ^L -- that's a single character control-L not two + characters). This helps with Emacs navigation. + + Always put a ^L before module-level functions, before class definitions, + before big blocks of constants which follow imports, and any place else that + would be convenient to jump to. Always put two blank lines before a ^L. + +- Put to blank lines between any module level function. Put only one blank + line between methods in a class. No blank lines between the class + definition and the first method in the class (although class docstrings + often go in this space). + +- Try to minimize the vertical whitespace in a class. If you're inclined to + separate stanzas of code for readability, consider putting a comment in + describing what the next stanza's purpose is. Don't put stupid or obvious + comments in just to avoid vertical whitespace though. + +- Unless internal quote characters would mess things up, the general rule is + that single quotes should be used for short strings, double quotes for + triple-quoted multi-line strings and docstrings. E.g. + + foo = 'a foo thing' + warn = "Don't mess things up" + notice = """Our three chief weapons are: + - surprise + - deception + - an almost fanatical devotion to the pope + """ + +- Write docstrings for all public modules, functions, classes, and methods. + Docstrings are not necessary and usually discouraged for non-public methods, + but you should have a comment that describes what the method does. This + comment should appear after the "def" line. + +- PEP 257 describes good docstrings conventions. Note that most importantly, + the """ that ends a multiline docstring should be on a line by itself, e.g.: + + """Return a foobang + + Optional plotz says to frobnicate the bizbaz first. + """ + +- For one liner docstrings, keep the closing """ on the same line -- + except for module docstrings! + +- <> is strongly preferred over != + +- fill-column for docstrings should be 78. + +- Always use string methods instead of string module functions. + +- For sequences, (strings, lists, tuples), use the fact that empty sequences + are false, so "if not seq" or "if seq" is preferable to "if len(seq)" or "if + not len(seq)". Always use True and False instead of 1 and 0 for boolean + values. + +- Always decide whether a class's methods and instance variables should be + public or non-public. In general, never make data variables public unless + you're implementing essentially a record. It's almost always preferable to + give a functional interface to your class instead (Python 2.2's descriptors + and properties make this much nicer). + + Also decide whether your attributes should be private or not. The + difference between private and non-public is that the former will never be + useful for a derived class, while the latter might be. Yes, you should + design your classes with inheritance in mind! + +- Single leading underscores are generally preferred for non-public + attributes. Use double leading underscores only in classes designed for + inheritance to ensure that truly private attributes will never name clash. + + Public attributes should have no leading or trailing underscores unless they + conflict with reserved words, in which case, a single trailing underscore is + preferable to a leading one, or a corrupted spelling, e.g. class_ rather + than klass. + + + +Local Variables: +mode: indented-text +indent-tabs-mode: nil +End: diff --git a/docs/gnu-COPYING-GPL b/docs/gnu-COPYING-GPL new file mode 100644 index 000000000..3912109b5 --- /dev/null +++ b/docs/gnu-COPYING-GPL @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/docs/howtos/mailman-admin.tex b/docs/howtos/mailman-admin.tex new file mode 100644 index 000000000..30f37762a --- /dev/null +++ b/docs/howtos/mailman-admin.tex @@ -0,0 +1,1410 @@ +\documentclass{howto} + +\title{GNU Mailman - List Administration Manual} + +% Increment the release number whenever significant changes are made. +% The author and/or editor can define 'significant' however they like. +\release{1.0} + +% At minimum, give your name and an email address. You can include a +% snail-mail address if you like. +\author{Barry A. Warsaw, Terri Oda} +%\authoraddress{barry@zope.com} +\authoraddress{terri (at) zone12.com} + +\date{\today} % XXX update before tagging release! +\release{2.1} % software release, not documentation +\setreleaseinfo{} % empty for final release +\setshortversion{2.1} % major.minor only for software + +\begin{document} +\maketitle + +% This makes the Abstract go on a separate page in the HTML version; +% if a copyright notice is used, it should go immediately after this. +% +\ifhtml +\chapter*{Front Matter\label{front}} +\fi + +% Copyright statement should go here, if needed. +% ... + +% The abstract should be a paragraph or two long, and describe the +% scope of the document. +\begin{abstract} +\noindent +This document describes the list administrator's interface for GNU +Mailman 2.1. It contains information a list owner would need to +configure their list, either through the web interface or through +email. It also covers the moderator's interface for approving held +messages and subscription notices, and the web interface for creating +new mailing lists. In general, it does not cover the command line +interface to Mailman, installing Mailman, or interacting with Mailman +from the point of view of the user. That information is covered in +other manuals. +\end{abstract} + +\tableofcontents + +\section{WARNING: This is incomplete} + +Warning: This documentation is not yet complete. It is known to be missing +sections and hasn't been proofread completely yet. However, I'm putting it +online anyhow because some questions have come up on the lists which are +answered in here. + +\section{Introduction to GNU Mailman} + +GNU Mailman is software that lets you manage electronic mailing lists. +It supports a wide range of mailing list types, such as general +discussion lists and announce-only lists. Mailman has extensive +features for controlling the privacy of your lists, distributing your +list as personalized postings or digests, gatewaying postings to and +from Usenet, and providing automatic bounce detection. Mailman +provides a built-in archiver, multiple natural languages, as well as +advanced content and topic filtering. + +Mailman provides several interfaces to its functionality. Most list +administrators will primarily use the web interface to customize their +lists. There is also a limited email command interface to the +administrative functions, as well as a command line interface if you +have shell access on the Mailman server. This document does not cover +the command line interface; see the GNU Mailman site administrator's +manual for more details. + +\subsection{A List's Email Addresses} + +Every mailing list has a set of email addresses that messages can be +sent to. There's always one address for posting messages to the list, +one address that bounces will be sent to, and addresses for processing +email commands. For example, for a mailing list called +\var{mylist@example.com}, you'd find these addresses: + +\begin{itemize} +\item mylist@example.com -- this is the email address people should + use for new postings to the list. + +\item mylist-join@example.com -- by sending a message to this address, + a new member can request subscription to the list. Both the + \mailheader{Subject} header and body of such a message are + ignored. Note that mylist-subscribe@example.com is an alias for + the -join address. + +\item mylist-leave@example.com -- by sending a message to this address, + a member can request unsubscription from the list. As with the + -join address, the \mailheader{Subject} header and body of the + message is ignored. Note that mylist-unsubscribe@example.com is + an alias for the -leave address. + +\item mylist-owner@example.com -- This address reaches the list owner + and list moderators directly. + +\item mylist-request@example.com -- This address reaches a mail robot + which processes email commands that can be used to set member + subscription options, as well as process other commands. + +\item mylist-bounces@example.com -- This address receives bounces from + members who's addresses have become either temporarily or + permanently inactive. The -bounces address is also a mail robot + that processes bounces and automatically disables or removes + members as configured in the bounce processing settings. Any + bounce messages that are either unrecognized, or do not seem to + contain member addresses, are forwarded to the list + administrators. + +\item mylist-confirm@example.com -- This address is another email + robot, which processes confirmation messages for subscription + and unsubscription requests. +\end{itemize} + +There's also an -admin address which also reaches the list +administrators, but this address only exists for compatibility with +older versions of Mailman. + +\subsection{Administrative Roles} + +There are two primary administrative roles for each mailing list, a +list owner and a list moderator. A list owner is allowed to change +various settings of the list, such as the privacy and archiving +policies, the content filtering settings, etc. The list owner is also +allowed to subscribe or invite members, unsubscribe members, and +change any member's subscription options. + +The list moderator on the other hand, is only allowed to approve or +reject postings and subscription requests. The list moderator can +also do things like clear a member's moderation flag, or add an +address to a list of approved non-member posters. + +Normally, the list owner and list moderator are the same person. In +fact, the list owner can always do all the tasks a list moderator can +do. Access to both the owner's configuration pages, and the +moderation pages are protected by the same password. However, if the +list owner wants to delegate posting and subscription approval +authority to other people, a separate list moderator password can be +set, giving moderators access to the approval pages, but not the +configuration pages. In this setup, list owners can still moderate +the list, of course. + +In the sections that follow, we'll often use the terms list owner and +list administrator interchangably, meaning both roles. When +necessary, we'll distinguish the list moderator explicitly. + +\subsection{A List's Web Pages} + +Every mailing list is also accessible by a number of web pages. Note +that the exact urls is configurable by the site administrator, so they +may be different than what's described below. We'll describe the most +common default configuration, but check with your site administrator +or hosting service for details. + +Mailman provides a set of web pages that list members use to get +information about the list, or manage their membership options. There +are also list archive pages, for browsing an online web-based archive +of the list traffic. These are described in more detail in the GNU +Mailman user's manual. + +Mailman also provides a set of pages for configuring an individual +list, as well as a set of pages for disposing of posting and +subscription requests. + +For a mailing list called \var{mylist} hosted at the domain +\var{lists.example.com}, you would typically access the administrative +pages by going to \code{http://lists.example.com/mailman/admin/mylist}. +The first time you visit this page, you will be presented with a login +page, asking for the list owner's password. When you enter the +password, Mailman will store a session cookie in your browser, so you +don't have to re-authenticate for every action you want to take. This +cookie is stored only until you exit your browser. + +To access the administrative requests page, you'd visit +\code{http://lists.example.com/mailman/admindb/mylist} (note the +\emph{admindb} url as opposed to the \emph{admin} url). Again, the +first time you visit this page, you'll be presented with a login page, +on which you can enter either the list moderator password or the list +owner password. Again, a session cookie is dropped in your browser. +Note also that if you've previously logged in as the list owner, you +do not need to re-login to access the administrative requests page. + +\subsection{Basic Architectural Overview} + +This section will outline the basic architecture of GNU Mailman, such +as how messages are processed by the sytem. Without going into lots +of detail, this information will help you understand how the +configuration options control Mailman's functionality. + +When mail enters the system from your mail server, it is dropped into +one of several Mailman \emph{queues} depending on the address the +message was sent to. For example, if your system has a mailing list +named \var{mylist} and your domain is \var{example.com}, people can +post messages to your list by sending them to +\var{mylist@example.com}. These messages will be dropped into the +\emph{incoming} queue, which is also colloquially called the +\emph{moderate-and-munge} queue. The incoming queue is where most of +the approval process occurs, and it's also where the message is +prepared for sending out to the list membership. + +There are separate queues for the built-in archiver, the bounce +processor, the email command processor, as well as the outgoing email +and news queues. There's also a queue for messages generated by the +Mailman system. Each of these queues typically has one \emph{queue +runner} (or ``qrunner'') that processes messages in the queue. The +qrunners are idle when there are no messages to process. + +Every message in the queues are represented by two files, a message +file and a metadata file. Both of these files share the same base +name, which is a combination of a unique hash and the Unix time that +the message was received. The metadata file has a suffix of +\file{.db} and the message file has a suffix of either \file{.msg} if +stored in plain text, or \file{.pck} if stored in a more efficient +internal representation\footnote{Specifically, a Python pickle}. + +As a message moves through the incoming queue, it performs various +checks on the message, such as whether it matches one of the +moderation criteria, or contains disallowed MIME types. Once a +message is approved for sending to the list membership, the message is +prepared for sending by deleting, adding, or changing message headers, +adding footers, etc. Messages in the incoming queue may also be +stored for appending to digests. + +\section{The List Configuration Pages} + +After logging into the list configuration pages, you'll see the +configuration options for the list, grouped in categories. All the +administrative pages have some common elements. In the upper section, +you'll see two columns labeled ``Configuration Categories''. Some +categories have sub-categories which are only visible when you click +on the category link. The first page you see after logging in will be +the ``General Options'' category. The specific option settings for +each category are described below. + +On the right side of the top section, you'll see a column labeled +``Other Administrative Activities''. Here you'll find some other +things you can do to your list, as well as convenient links to the +list information page and the list archives. Note the big ``Logout'' +link; use this if you're finished configuring your list and don't want +to leave the session cookie active in your browser. + +Below this common header, you'll find a list of this category's +configuration variables, arranged in two columns. In the left column +is a brief description of the option, which also contains a +``details'' link. For many of the variables, more details are +available describing the semantics of the various available settings, +or information on the interaction between this setting and other list +options. Clicking on the details link brings up a page which contains +only the information for that option, as well as a button for +submitting your setting, and a link back to the category page. + +On the right side of the two-column section, you'll see the variable's +current value. Some variables may present a limited set of values, +via radio button or check box arrays. Other variables may present +text entry boxes of one or multiple lines. Most variables control +settings for the operation of the list, but others perform immediate +actions (these are clearly labeled). + +At the bottom of the page, you'll find a ``Submit'' button and a +footer with some more useful links and a few logos. Hitting the +submit button commits your list settings, after they've been +validated. Any invalid values will be ignored and an error message +will be displayed at the top of the resulting page. The results page +will always be the category page that you submitted. + +\subsection{The General Options Category} + +The General Options category is where you can set a variety of +variables that affect basic behavior and public information. In the +descriptions that follow, the variable name is given first, along with +an overview and a description of what that variable controls. + +\subsubsection{General list personality} + +These variables, grouped under the general list personality section, +control some public information about the mailing list. + +\begin{description} +\item[real_name] + Every mailing list has both a \emph{posting name} and a \emph{real + name}. The posting name shows up in urls and in email addresses, + e.g. the \code{mylist} in \code{mylist@example.com}. The posting + name is always presented in lower case, with alphanumeric + characters and no spaces. The list's real name is used in some + public information and email responses, such as in the general + list overview. The real name can differ from the posting name by + case only. For example, if the posting name is \code{mylist}, the + real name can be \code{Posting}. + +\item[owner] + This variable contains a list of email addresses, one address per + line, of the list owners. These addresses are used whenever the + list owners need to be contacted, either by the system or by end + users. Often, these addresses are used in combination with the + \code{moderator} addresses (see below). + +\item[moderator] + This variable contains a list of email addresses, one address per + line, of the list moderators. These addresses are often used in + combination with the \code{owner} addresses. For example, when + you email \code{mylist-owner@example.com}, both the owner and + moderator addresses will receive a copy of the message. + +\item[description] + In the general list overview page, which shows you every available + mailing list, each list is displayed with a short description. + The contents of this variable is that description. Note that in + emails from the mailing list, this description is also used in the + comment section of the \mailheader{To} address. This text should + be relatively short and no longer than one line. + +\item[info] + This variable contains a longer description of the mailing list. + It is included at the top of the list's information page, and it + can contain HTML. However, blank lines will be automatically + converted into paragraph breaks. Preview your HTML though, + because unclosed or invalid HTML can prevent display of parts of + the list information page. + +\item[subject_prefix] + This is a string that will be prepended to the + \mailheader{Subject} header of any message posted to the list. + For example, if a message is posted to the list with a + \mailheader{Subject} like: + + \begin{verbatim} + Subject: This is a message + \end{verbatim} + + and the \code{subject_prefix} is \code{[My List] } (note the + trailing space!), then the message will be received like so: + + \begin{verbatim} + Subject: [My List] This is a message + \end{verbatim} + + If you leave \code{subject_prefix} empty, no prefix will be added + to the \mailheader{Subject}. Mailman is careful not to add a + prefix when the header already has one, as is the case in replies + for example. The prefix can also contain characters in the list's + preferred language. In this case, because of vagarities of the + email standards, you may or may not want to add a trailing space. + +\item[anonymous_list] + This variable allows you to turn on some simple anonymizing + features of Mailman. When you set this option to \emph{Yes}, + Mailman will remove or replace the \mailheader{From}, + \mailheader{Sender}, and \mailheader{Reply-To} fields of any + message posted to the list. + + Note that this option is simply an aid for anonymization, it + doesn't guarantee it. For example, a poster's identity could be + evident in their signature, or in other mail headers, or even in + the style of the content of the message. There's little Mailman + can do about this kind of identity leakage. +\end{description} + +\subsubsection{Reply-To header munging} + +This section controls what happens to the \mailheader{Reply-To} +headers of messages posted through your list. + +Beware! \mailheader{Reply-To} munging is considered a religious issue +and the policies you set here can ignite some of the most heated +off-topic flame wars on your mailing lists. We'll try to stay as +agnostic as possible, but our biases may still peak through. + +\mailheader{Reply-To} is a header that is commonly used to redirect +replies to messages. Exactly what happens when your uses reply to +such a message depends on the mail readers your users use, and what +functions they provide. Usually, there is both a ``reply to sender'' +button and a ``reply to all'' button. If people use these buttons +correctly, you will probably never need to munge +\mailheader{Reply-To}, so the default values should be fine. + +Since an informed decision is always best, here are links to two +articles that discuss the opposing viewpoints in great detail: + +\begin{itemize} + +\item \ulink{Reply-To Munging Considered + Harmful}{http://www.unicom.com/pw/reply-to-harmful.html} +\item \ulink{Reply-To Munging Considered + Useful}{http://www.metasystema.org/essays/reply-to-useful.mhtml} + +\end{itemize} + +The three options in this section work together to provide enough +flexibility to do whatever \mailheader{Reply-To} munging you might +(misguidingly :) feel you need to do. + +\begin{description} + +\item[first_strip_reply_to] + This variable controls whether any \mailheader{Reply-To} header + already present in the posted message should get removed before + any other munging occurs. Stripping this header will be done + regardless of whether or not Mailman will add its own + \mailheader{Reply-To} header to the message. + + If this option is set to \emph{No}, then any existing + \mailheader{Reply-To} header will be retained in the posted + message. If Mailman adds its own header, it will contain + addresses which are the union of the original header and the + Mailman added addresses. The mail standards specify that a + message may only have one \mailheader{Reply-To} header, but that + that header may contain multiple addresses. + +\item[reply_goes_to_list] + This variable controls whether Mailman will add its own + \mailheader{Reply-To} header, and if so, what the value of that + header will be (not counting original header stripping -- see + above). + + When you set this variable to \emph{Poster}, no additional + \mailheader{Reply-To} header will be added by Mailman. This + setting is strongly recommended. + + When you set this variable to \emph{This list}, a + \mailheader{Reply-To} header pointing back to your list's posting + address will be added. + + When you set this variable to \emph{Explicit address}, the value + of the variable \code{reply_to_address} (see below) will be + added. Note that this is one situation where + \mailheader{Reply-To} munging may have a legitimate purpose. Say + you have two lists at your site, an announce list and a discussion + list. The announce list might allow postings only from a small + number of approved users; the general list membership probably + can't post to this list. But you want to allow comments on + announcements to be posted to the general discussion list by any + list member. In this case, you can set the \mailheader{Reply-To} + header for the announce list to point to the discussion list's + posting address. + +\item[reply_to_address] + This is the address that will be added in the + \mailheader{Reply-To} header if \code{reply_goes_to_list} is set + to \emph{Explicit address}. + +\end{description} + +\subsubsection{Umbrella list settings} + +TBD. Note that umbrella lists are deprecated and will be replace with +a better mechanism for Mailman 3.0. + +\subsubsection{Notifications} + +Mailman sends notifications to the list administrators or list members +under a number of different circumstances. Most of these +notifications can be configured in this section, but see the Bounce +Processing and Auto-responder categories for other notifications that +Mailman can send. + +\begin{description} +\item[send_reminders] + By default Mailman sends all list members a monthly password + reminder. This notice serves two purposes. First, it reminds + people about all the lists they may be subscribed to on this + domain, including the lists where their subscription may be + disabled. Second, it reminds people about their passwords for + these lists, as well as the url for their personal options pages, + so that they can more easily configure their subscription options. + + Some people get annoyed with these monthly reminders, and they can + disable the reminders via their subscription options page. For + some lists, the monthly reminders aren't appropriate for any of + the members, so you can disable them list-wide by setting the + \code{send_reminders} variable to \emph{No}. + +\item[welcome_msg] + When new members are subscribed to the list, either by their own + action, or the action of a list administrator, a welcome message + can be sent to them. The welcome message contains some common + boilerplate information, such as the name of the list, + instructions for posting to the list, and the member's + subscription password. You can add additional information to the + welcome message by typing the text into the \code{welcome_msg} + text box. Note that because this text is sent as part of an + email, it should \strong{not} contain HTML. + +\item[send_welcome_msg] + This flag controls whether or not the welcome message is sent to + new subscribers. + +\item[goodbye_msg] + Like the \code{welcome_msg}, a ``goodbye'' message can be sent to + members when they unsubscribe from the list. Unlike the welcome + message, there's no boilerplate for the goodbye message. Enter + the entire goodbye message you'd like unsubscribing members to + receive into the \code{goodbye_msg} text box. + +\item[send_goodbye_msg] + This flag controls whether or not the goodbye message is sent to + unsubscribing members. + +\item[admin_immed_notify] + List moderators get notifications of pending administrative + actions, such as subscription or unsubscription requests that + require moderator approval, or posted messages that are being held + for moderator approval. List moderators will always get a daily + summary of such pending requests, but they can also get immediate + notifications when such a request is made. The + \code{admin_immed_notify} variable controls whether these + immediate notifications are sent or not. It's generally a good + idea to leave this set to \emph{Yes}. + +\item[admin_notify_mchanges] + This variable controls whether the list administrators should get + notifications when members join or leave the list. + +\item[respond_to_post_requests] + This variable controls whether the original sender of a posting + gets a notice when their message is held for moderator approval. + +\end{description} + +\subsubsection{Additional settings} + +This section contains some miscellaneous settings for your mailing +list. + +\begin{description} +\item[emergency] + When this option is enabled, all list traffic is emergency + moderated, i.e. held for moderation. Turn this option on when + your list is experiencing a flamewar and you want a cooling off + period. + +\item[new_member_options] + Each member has a set of subscription options which they can use + to control how they receive messages and otherwise interact with + the list. While the members can change these settings by logging + into their personal options page, you might want to set the + default for a number of the member options. You can do that with + this variable, but see also the other categories for other member + defaults you can set. + + This variable presents a set of checkboxes which control the + defaults for some of the member options. \emph{Conceal the + member's address} specifies whether or not the address is + displayed in the list roster. \emph{Acknowledge the member's + posting} controls whether or not Mailman sends an acknowledgement + to a member when they post a message to the list. \emph{Do not + send a copy of a member's own post} specifies whether a member + posting to the list will get a copy of their own posting. + \emph{Filter out duplicate messages to list members (if possible)} + specifies whether members who are explicitly listed as a recipient + of a message (e.g. via the \mailheader{Cc} header) will also get a + copy from Mailman. + + Of course, members can always override these defaults by making + changes on their membership options page. + +\item[administrivia] + This option specifies whether Mailman will search posted messages + for \emph{admimistrivia}, in other words, email commands which + usually should be posted to the \code{-request} address for the + list. Setting this to \emph{Yes} helps prevent such things as + unsubscribe messages getting erroneously posted to the list. + + If a message seems to contain administrivia, it is held for + moderator approval. + +\item[max_message_size] + This option specifies a maximum message size, in kilobytes, over + which the message will be held for moderator approval. + +\item[host_name] + This option specifies the host name part of email addresses used + by this list. For example, this is the \code{example.com} part of + the posting address \code{mylist@example.com}. + + It's generally not a good idea to change this value, since its + default value is specified when the mailing list is created. + Changing this to an incorrect value could make it difficult to + contact your mailing list. Also not that the url used to visit + the list's pages is not configurable through the web interface. + This is because if you messed it up, you'd have to have the site + administrator fix it. + +\item[include_rfc2369_headers] + \rfc{2369} is an internet standard that describes a bunch of + headers that mailing list managers should add to messages to make + it easier for people to interact with the list. Mail reading + programs which support this standard may provide buttons for easy + access to the list's archives, or for subscribing and + unsubscribing to the list. It's generally a good idea to enable + these headers as it provides for an improved user experience. + These headers are often called the \code{List-*} headers. + + However, not all mail readers are standards compliant yet, and if + you have a large number of members who are using non-compliant + mail readers, they may be annoyed at these headers. You should + first try to educate your members as to why these headers exist, + and how to hide them in their mail clients. As a last resort you + can disable these headers, but this is not recommended. + +\item[include_list_post_header] + The \mailheader{List-Post} header is one of the headers + recommended by \rfc{2369}. However for some announce-only mailing + lists, only a very select group of people are allowed to post to + the list; the general membership is usually not allowed to post to + such lists. For lists of this nature, the \mailheader{List-Post} + header is misleading. Select \emph{No} to disable the inclusion + of this header. (This does not affect the inclusion of the other + \code{List-*} headers.) +\end{description} + +\subsection{The Passwords Category} +As mentioned above, there are two primary administrative roles for +mailing lists. In this category you can specify the password for +these roles. + +The list owner has total control over the configuration of their +mailing list (within some bounds as specified by the site +administrator). Note that on this page, for historical reasons, the +list owner role is described here as the \emph{list administrator}. +You can set the list owner's password by entering it in the password +field on the left. You must type it twice for confirmation. Note +that if you forget this password, the only way for you to get back +into your list's administrative pages is to ask the site administrator +to reset it for you (there's no password reminders for list owners). + +If you want to delegate list moderation to someone else, you can enter +a different moderator password in the field on the right (typed twice +for confirmation). Note that if you aren't going to delegate +moderation, and the same people are going to both configure the list +and moderate postings to the list, don't enter anything into the +moderator password fields. If you do enter a separate moderator +password, be sure to fill in the \code{moderator} variable in the +\emph{General options} category page. + +\subsection{The Language Options Category} +Mailman is multilingual and internationalized, meaning you can set up +your list so that members can interact with it in any of a number of +natural languages. Of course, Mailman won't translate list +postings. :) + +However, if your site administrator has enabled its support, you can +set your list up to support any of about two dozen languages, such as +German, Italian, Japanese, or Spanish. Your list members can then +choose any of your supported languages as their \emph{preferred +language} for interacting with the list. Such things as their member +options page will be displayed in this language. Each mailing list +also has its own \emph{preferred language} which is the language the +list supports if no other language context is known. + +These variables control the language settings for your mailing list: + +\begin{description} +\item[preferred_language] + This is the list's preferred language, which is the language that + the list administrative pages will be displayed in. Also any + messages sent to the list owners by Mailman will be sent in this + language. This option is presented as a drop-down list containing + the language enabled in the \code{available_languages} variable. + +\item[available_languages] + This set of checkboxes contains all the natural languages that + your site administrator has made available to your mailing lists. + Select any language that you'd either like your members to be able + to view the list in, or that you'd like to be able to use in your + list's \code{preferred_language} variable. + +\item[encode_ascii_prefixes] + If your mailing list's preferred language uses a non-ASCII + character set and the \code{subject_prefix} contains non-ASCII + characters, the prefix will always be encoded according to the + relevant standards. However, if your subject prefix contains only + ASCII characters, you may want to set this option to \emph{Never} + to disable prefix encoding. This can make the subject headers + slightly more readable for users with mail readers that don't + properly handle non-ASCII encodings. + + Note however, that if your mailing list receives both encoded and + unencoded subject headers, you might want to choose \emph{As + needed}. Using this setting, Mailman will not encode ASCII + prefixes when the rest of the header contains only ASCII + characters, but if the original header contains non-ASCII + characters, it will encode the prefix. This avoids an ambiguity + in the standards which could cause some mail readers to display + extra, or missing spaces between the prefix and the original + header. +\end{description} + +\subsection{The Membership Management Category} + +The \emph{Membership Management} category is unlike the other +administrative categories. It doesn't contain configuration variables +or list settings. Instead, it presents a number of pages that allow +you to manage the membership of you list. This includes pages for +subscribing and unsubscribing members, and for searching for members, +and for changing various member-specific settings. + +More details on membership management are described in the Membership +Management section. + +\subsection{The Non-digest Options Category} + +Mailman delivers messages to users via two modes. List members can +elect to receive postings in bundles call \emph{digests} one or a few +times a day, or they can receive messages immediately whenever the +message is posted to the list. This latter delivery mode is also +called \emph{non-digest delivery}. There are two administrative +categories available for separately controlling digest and non-digest +delivery. You can even disable one or the other forms of delivery +(but not both). + +Both kinds of delivery can have list-specific headers and footers +added to them which can contain other useful information you want your +list members to see. For example, you can include instructions for +unsubscribing, or a url to the lists digest, or any other information. + +Non-digest deliveries can also be \emph{personalized} which means +certain parts of the message can contain information tailored to the +member receiving the message. For example, the \mailheader{To} header +will contain the address of the member when deliveries are +personalized. Footers and headers can contain personalized +information as well, such as a link to the individual user's options +page. + +In addition, personalized messages will contain extra information that +Mailman can use to unambiguously track bounces from members. +Ordinarily, Mailman does some pattern recognition on bounce messages +to determine list members whose addresses are no longer valid, but +because of the vagaries of mail systems, and the countless forwards +people can put in place, it's often the case that bounce messages +don't contain any useful information in them. Personalized messages +avoid this problem by encoding information in certain headers that +unambiguously identify the recipient of a message. If that message +bounces, Mailman will know exactly which member it was intended for. + +Note that because personalization requires extra system resources, it +must be enabled by the site administrator before you can choose it. + +Here are the variables which control non-digest delivery: + +\begin{description} +\item[nondigestable] + This option controls whether members can receive immediate + delivery or not. If not, they will be forced to receive messages + in digests. You can't disable non-digest delivery if digests are + already disabled. + +\item[personalize] + This option turns on message personalization. + +\item[msg_header] + This text box lets you enter information that will be included in + the header of every non-digest message sent through the + list. + + See below for more information on what can go in the headers and + footers. If you leave this text box empty, no header will be + added. + +\item[msg_footer] + Just like with the header, you can add a footer to every message. + The same rules apply to footers as apply to headers. +\end{description} + +Headers and footers can contain any text you want. For non-English +lists, the headers and footers can contain any character in the +character set of the list's preferred language. The headers and +footers can also contain \emph{substitution variables} which Mailman +will fill in with information taken from the mailing list. These +substitutions are in Python string interpolation format, where +something like \code{\%(list_name)s} is substituted with he name of +the mailing list. Note that the trailing \samp{s} is +required\footnote{The site administrator can configure lists to use a +simpler interpolation format, where \code{\$list_name} or +\code{\$\{list_name\}} would be substituted with the mailing list's +name. Ask your site administrator if the've configured your list this +way.}. + +For example, a footer containing the following text: + +\begin{verbatim} +This is the \%(list_name)s mailing list +Description: \%(description)s +\end{verbatim} + +might get attached to postings like so: + +\begin{verbatim} +This is the Example mailing list +Description: An example of Mailman mailing lists +\end{verbatim} + +Here is the list of substitution variables available for your headers +and footers: + +\begin{description} +\item[real_name] + This is the value of the \code{real_name} configuration variable + in the General options category. + +\item[list_name] + This is the canonical name of the mailing list. In other words + it's the posting address of the list\footnote{For backward + compatibility, the variable \code{_internal_name} is + equivalent.}. + +\item[host_name] + This is the domain name part of the email address for this list. + +\item[web_page_url] + This is the base url for contacting the list via the web. It can + be appended with \code{listinfo/\%(list_name)s} to yield the + general list information page for the mailing list. + +\item[description] + The brief description of the mailing list. + +\item[info] + This is the full description of the mailing list. + +\item[cgiext] + This is the extension added to CGI scripts. It might be the empty + string, \code{.cgi}, or something else depending on how your site + is configured. +\end{description} + +Note that \code{real_name}, \code{host_name}, \code{description}, and +\code{info} substitution variables take their values from the list +configuration variables of the same name. + +When personalization is enabled, the following substitution variables +are also available: + +\begin{description} +\item[user_address] + The address of the recipient of the message, coerced to lower case. + +\item[user_delivered_to] + The case-preserved address that the user subscribed to the mailing + list with\footnote{Usually it makes no difference which of + \code{user_address} and \code{user_delivered_to} is used, but it's + important to remember that they can be different. When they're + different, Mailman always uses the lower case address as the key + to the member's subscription information, but it always delivers + messages to the case-preserved version.}. + +\item[user_password] + The user's password, in clear text. + +\item[user_name] + The user's full name. + +\item[user_optionsurl] + The url to the user's personal options page. +\end{description} + +\subsection{The Digest Options Category} + +Digest delivery is a way to bundle many articles together into one +package, which can be delivered once per day (if there were any posted +articles), or whenever the package is bigger than a specified limit. +Some users may prefer this style of delivery for higher traffic lists +since they will receive fewer messages. + +Mailman supports two standard digest formats, and if digests are +enabled, users can select which of the two formats they receive. One +is MIME digests, where each message is an attachment inside a +\mimetype{multipart/digest}. This format also contains a summary +table of contents, and of course the an optional header and footer, +and it retains most of the headers of the original messages. + +The second type is called ``plaintext'' digests because they are +readable in mail readers that don't support MIME. Actually, they +adhere to the \rfc{1153} digest standard. The retain some, but not +all of the original messages, but can also include a summary and +headers and footers. + +Like non-digest delivery, you can enable or disable digest delivery, +but you cannot disable both types of delivery. You can specify +different headers and footers for digest and non-digest deliveries. +You cannot personalize digest deliveries. + +As list administrator, you may want to send an urgent message to all +list members, bypassing the normal digest bundling. To do this, send +the message with a \mailheader{Urgent} header, where the value of the +header is the list administrator's password. Non-digest members will +receive the message like normal, but digest members will receive the +message immediately\footnote{They'll also receive the message in the +digest.}. + +Here are the variables which control digest delivery: + +\begin{description} +\item[digestable] + The option controls whether members can receive digest deliveries + or not. If not, they will be forced to receive immediate + deliveries. You can't disable digests if non-digests are already + disabled. + +\item[digest_is_default] + Controls which style of delivery is the default for new members. + You can choose \emph{Regular} (non-digest) or \emph{Digest} + delivery. + +\item[mime_is_default_digest] + If a member is allowed to choose digests, this variable controls + which is the default digest style they will receive. \emph{Plain} + digests are \rfc{1153} format as described above. + +\item[digest_size_threshold] + Normally, digest members get at least one message per day, if + there have been any messages posted to the list. However, for + high volume lists, you may want to send out digests when the size + has reached a certain threshold, otherwise, the one digest they + receive could be huge. This variable controls the size threshold + by specifying the maximum digest size in kilobytes. Note that + this threshold isn't exact. Set this variable to zero to specify + that there is no size threshold, in which case no more than one + digest will be sent out per day. + +\item[digest_send_periodic] + This variable actually controls whether or not a digest is sent + daily when the size threshold has not yet been met. If set to + \emph{No}, then digests will only be sent when they are bigger + than \code{digest_size_threshold}. + +\item[digest_header] + This text box lets you enter information that will be included in + the header of every digest message sent through the list. The + same information can go in this header as can go in the + \code{msg_header}, except for the personalization variables. + +\item[digest_footer] + Just like with the header, you can add a footer to every message. + The same rules apply to digest footers as apply to digest headers. + +\item[digest_volume_frequency] + Each digest is numbered with a volume and an issue. This variable + controls how often a new digest volume is sent. When the digest + volume number is incremented, the issue number is reset to 1. + +\item[_new_volume] + This is an action variable, which forces an increment of the + volume number as soon as you submit the form. + +\item[_send_digest_now] + This is another action variable. Select \emph{Yes}, submit the + form, and the current digest is packaged up and sent to digest + members, regardless of size (well, there has to be at least one + message in the digest). +\end{description} + +\subsection{The Privacy Options Category} + +The Privacy category lets you control how much of the list's +information is public, as well as who can send messages to your list. +It also contains some spam detection filters. Note that this section +is not used to control whether your list's archives are public or +private; for that, use the \ref{Archiving options} category. + +There are four sub-categories: +\begin{itemize} +\item Subscription rules -- i.e. the rules for joining and leaving + your mailing list + +\item Sender filters -- the rules for who may post messages to your + list + +\item Recipient filters -- moderation rules based on the recipient of + the message + +\item Spam filters -- some regular expression based rules for header + matching +\end{itemize} + +The sender, recipient, and spam filtering rules are part of the +general list moderation features of Mailman. When a message is posted +to the list, it is matched against a number of criteria, the outcome +of which determines whether the message is reflected to the membership +or not. In general, the outcome is one of four states: + +\begin{itemize} +\item Approved or Accepted -- the message may be sent on to the + members of the mailing list. + +\item Hold -- the message will be held for moderator approval. The + list owners and moderators will then have to explicitly approve + the message before the list members will see it. + +\item Reject -- the message is bounced back to the original sender, + often with a notice containing the reason the message was + rejected. The list members never see rejected messages. + +\item Discard -- the message is simply thrown away without further + processing. +\end{itemize} + +Many of the fields in this section are text boxes accepting addresses, +one per line. Unless otherwise noted, these also accept regular +expressions which will be matched against an address, if the line +begins with a \^ (caret) character. + +\subsubsection{Subscription rules} + +This subcategory controls the rules for exposing the existance of this +list, and for what new members must do in order to subscribe to the +list. + +\begin{description} +\item[advertised] + This option controls whether this list will show up in the list + overview for the site. Normally, an overview contains the name + and short description of every mailing list in the virtual + domain. By setting this variable to \emph{No}, it will not show + up in this overview, nor will it show up in the administrative + overview. The only way then to find the list is to guess (or + know!) its name. + +\item[subscribe_policy] + This option controls the steps that a new member must take to join + the list. The available options may differ based on some defaults + that the site administrator chooses. They are: + + \begin{itemize} + \item None -- No verification is done on the subscribing + member. This is also called \emph{open subscriptions} and is + generally disabled by default. The site administrator must + allow list admins to choose this option; if not, this option + will not be presented to you. + + \item Confirm -- An email confirmation step is required before the + address is added to the list. When a member requests + subscription, either via the web page or by sending a + message to \var{yourlist}\code{-join@example.com}, Mailman + will send a confirmation message to the requesting address. + This mail-back confirmation contains a unique identifier, + which the requester can present to Mailman in order to + confirm their subscription. This can be done either by + replying to the mail-back, or by visiting the url in the + mail-back message. The url points to a page that lets the + user either discard or confirm their request. + + \item Require approval -- All subscription requests are held for + approval of the list moderator. No mail-back confirmation + is sent, but the list admins will recieve a message + indicating that approval is pending. + + \item Confirm and approve -- Here, a mail-back notice must first + be confirmed by the requester. Once confirmed, the list + moderator must then approve the request. This is the most + secure method for users to subscribe since it both verifies + the requesting address, and forces the list moderators to + approve the request. + + \end{itemize} + +\item[unsubscribe_policy] + Specifies whether the list moderator's approval is required for + unsubscription requests. \emph{No} is highly recommended, since + it is exceedingly impolite to not allow people to leave a mailing + list whenever they want (i.e. opt-out). \emph{Yes} is useful in + some specialized contexts; e.g. you may not want to allow + employees to unsubscribe from the company newsletter. + +\item[ban_list] + This contains a list of addresses (or regular expressiosn), one + per line, that are banned from ever subscribing to your mailing + list. If a match occurs during the subscription process, the + request will be automatically rejected, and the requester will get + a rejection notice. You can use this to permanently ban + troublesome posters to a members-only list. + +\item[private_roster] + This specifies who is allowed to view the roster of member + addresses. If you choose \emph{Anyone}, then the list membership + is completely public. You can limit exposure of the roster to + just list members, or just to the list administrators. In the + former case, a user must enter a valid member's address and + password before they can view the roster. In the latter case, a + list administrator's password must be enter; if a matching admin + password is entered, address field is ignored. + +\item[obscure_addresses] + Controls whether some simple obfuscation of addresses is used when + member addresses are included on web pages. This should reduce + the opportunity for email address harvesting by spammers, although + it probably doesn't eliminate it. +\end{description} + +\subsubsection{Sender filters} + +When a message is posted to the list, a series of moderation criteria are +applied to determine the disposition of the message. This section +contains the modeation controls for postings from both members and +non-members. + +\begin{description} +\item[default_member_moderation] + Member postings are held for moderation if their \emph{moderation + flag} is turned on. Note that only the list administrators can + change the value of a member's moderation flag. + + You can control whether new members get their moderation flag + turned on or off by default when they subscribe to the list. By + turning this flag off by default, postings by members will be + allowed without further intervention (barring other restrictions + such as size or implicit recipient lists -- see below). By + turning the flag on, you can quarantine new member postings to + make sure that they meet your criteria for netiquette, topicality, + etc. Once you determine that the new member understands the + community's posting rules, you can turn off their moderation flag + and let their postings go through unstopped. + + E-newsletter style lists can also be set up by using the + moderation flag. By setting the \code{member_moderation_action} + to \emph{Reject}, and by turning off the moderation flag for just + the few approved senders, your list will operate in essentially a + one-way direction. Note that you'd also need to reject or discard + postings from non-members. + +\item[member_moderation_action] + This is the action to take for postings from a member who's + moderation flag is set. For typical discussion lists, you'll + likely set this to \emph{Hold} so that the list moderator will get + a chance to manually approve, reject, or discard the message. For + e-newsletter and announcement lists, you might want to set this to + \emph{Reject} or \emph{Discard}. + + Note that when a moderated member posts to your list, and the + \code{member_moderation_action} is set to \emph{Hold}, the message + will appear on the administrative requests page. When you dispose + of the message, you will be given an opportunity to clear the + moderation flag at the same time. If you're quarantining new + posts, this makes it very convenient to both approve a new + member's post and de-moderate them at the same time. + +\item[member_moderation_notice] + When a member's moderation flag is turned on and + \code{member_moderation_action} is \emph{Reject}, this variable + contains the text sent in the rejection notice. +\end{description} + +The next batch of variables controls what happens when non-members +post messages to the list. Each of these accepts one email address +per line; regular expressions are allowed if the line starts with the +\^ (caret) character. These address lists are always consulted in the +order in which they're presented on this page (i.e. accepts first, +followed by holds, rejections, and discards). + +\begin{description} +\item[accept_these_nonmembers] + Postings from non-members whose addresses match this list are + accepted, barring other list restrictions due to size, implicit + recipients, etc. You might want to add alternative addresses of + approved posters to this list. + +\item[hold_these_nonmembers] + Postings from non-members whose addresses match this list are + held for moderator approval. + +\item[reject_these_nonmembers] + Postings from non-members whose addresses match this list are + rejected, i.e. bounced back to the original sender. There + currently is no way to add additional text to the rejection + message. + +\item[discard_these_nonmembers] + Postings from non-members whose addresses match this list are + discarded, with no bounce back message. You might want to add the + addresses of known spammers to this list. + +\item[generic_nonmember_action] + This variable controls what happens to non-member posts when the + address of the sender doesn't match any of the above four lists. + If you set this to \emph{Hold}, the posting will appear on the + administrative requests page, and you will be given an opportunity + to add the non-member to one of the above four lists at the same + time you dispose of the held message. + +\item[forward_auto_discards] + When messages from non-members are discarded, either because the + sender address matched \code{discard_these_nonmembers}, or because + \code{generic_nonmember_action} is \emph{Discard}, you can choose + whether such messages are forwarded to the lsit administrators or + not. +\end{description} + +\subsubsection{Recipient Filters} + +The variables in this section control various filters based on the +recipient of the message. + +\begin{description} +\item[require_explicit_destination] + This controls whether the mailing list posting address must be + explicitly named in the \mailheader{To} or \mailheader{Cc} + recipient lists. The main reason why it wouldn't is if the + message was blind-carbon-copied (i.e. \mailheader{Bcc}'d) to the + list. Spammers like to do this, but sometimes legitimate messages + are forwarded to the list this way. + + If the list is not explicitly addressed and this setting is turned + on, the message will be held for moderator approval. + +\item[acceptable_aliases] + This is the list of alternative addresses that are acceptable as a + list posting address when \code{require_explicit_destination} is + enabled. This is useful for when there aliases for the main + posting address (e.g. \code{help@example.com} may be an alias for + \code{help-list@example.com}). + +\item[max_num_recipients] + This is the maximum number of explicit recipients that are allowed + on the posted message. Spammers sometimes send messages with lots + of explicit recipients, so setting this number to a reasonable + value may cut down on spam. +\end{description} + +\subsubsection{Spam Filters} + +This section provides some adjuncts to spam fighting tools; it +doesn't replace dedicated anti-spam tools such as SpamAssassin or +Spambayes. + +\begin{description} +\item[bounce_matching_headers] + This variable contains header regular expressions, one per line, + and if any of a message's headers matches one of these patterns, + it will be held for moderation. The format is a colon separated + header and value, where the header is case insensitive and the + value is any valid Python regular expression. Lines that start + with \# are ignored. + + This variable can be used to catch known spammers by writing + regexps that match against \mailheader{To} or \mailheader{Cc} + lines, or known-bad \mailheader{Message-ID}s. Perhaps more useful + though are patterns that match headers added by spam detection + tools higher up in the tool chain. For example, you might + configure SpamAssassin to add an \mailheader{X-Spam-Score} header + with between zero and 5 stars depending on the spam score. Then + you can add a line to this variable like: + + \begin{verbatim} + X-Spam-Score: [*]{3,5} + \end{verbatim} + + This line will match from 3 to 5 stars in the value of this + field. +\end{description} + +\subsection{The Bounce Processing Category} + +These policies control the automatic bounce processing system in +Mailman. Here's an overview of how it works: + +When a bounce is received, Mailman tries to extract two pieces of +information from the message: the address of the member the message +was intended for, and the severity of the problem causing the bounce. +The severity can be either \emph{hard} for fatal errors, or +\emph{soft} for transient errors. When in doubt, a hard severity is +used. + +If no member address can be extracted from the bounce, then the bounce +message is usually discarded. Every member has a \emph{bounce score}, +initialized at zero, and every time we encounter a bounce from a +member we increment that member's score. Hard bounces increment by 1 +while soft bounces increment by 0.5. We only increment the bounce +score once per day, so even if we receive ten hard bounces from a +member per day, their score will increase by only 1 for that day. + +When a member's bounce score is greater than the \emph{bounce score +threshold} (see below), the member's subscription is disabled. Once +disabled, the member will not receive any postings from the list until +their membership is explicitly re-enabled, either by the list +administrator or the user. However, they will receive occasional +reminders that their membership has been disabled, and these reminders +will include information about how to re-enable their membership. You +can control both the number of reminders the member will receive and +the frequency with which these reminders are sent. + +There is one other important configuration variable; after a certain +period of time -- during which no bounces from the member are received +-- the bounce information is considered stale and discarded. Thus by +adjusting this value, and the score threshold, you can control how +quickly bouncing members are disabled. You should tune both of these +to the frequency and traffic volume of your list. + +\begin{description} + +\item[bounce_processing] + Specifies whether or not this list should do automatic bounce + processing. + +\item[bounce_score_threshold] + This is the bounce score above which a member's subscription will + be automatically disabled. When the subscription is re-enabled, + their bounce score will be reset to zero. This value can be a + floating point number. + +\item[bounce_info_stale_after] + Thenumber of days after which a member's bounce information is + considered stale. If no new bounces have been received in the + interrim, the bounce score is reset to zero. This value must be + an integer. + +\item[bounce_you_are_disabled_warnings] + The number of notices a disabled member will receive before their + address is removed from the mailing list's roster. Set this to 0 + to immediately remove an address from the list once their bounce + score exceeds the threshold. This value must be an integer. + +\item[bounce_you_are_disabled_warnings_interval] + The number of days between each disabled notification. + +\item[bounce_unrecognized_goes_to_list_owner] + This variable controls whether unrecognized bounces are discarded, + or forwarded on the list administrator. The bounce detector isn't + perfect, although personalization can make it much more accurate. + The list owner may want to receive unrecognized bounces so that + they can manually disable or remove such members. + +\item[bounce_notify_owner_on_disable] + This option controls whether or not the list owner is notified + when a member's subscription is automatically disabled due to + their bounce threshold being reached. + +\item[bounce_notify_owner_on_removal] + This option controls whether or not the list owner is notified + when a member is removed from the list after their disabled + notifications have been exhausted. +\end{description} + +\subsection{The Archiving Options Category} + +Mailman comes with a built-in web-based archiver called +\emph{Pipermail}, although it can be configured to use external, +third party archivers. + +\begin{description} + +\item[archive] + This option tells Mailman whether to archive messages it receives + or not, regardless of whether Pipermail or a third party archiver + is used. Turn this off if you don't want to archive messages. + + Note that senders can control whether their own posts are + archived, on an individual per-message basis. If the posted + message has a \mailheader{X-No-Archive} header (regardless of + value), or a \mailheader{X-Archive} header with a value of + \code{No} (case insensitive), then the message will not be + archived, although it will be treated as normal in all other + ways. + +\item[archive_private] + Controls whether Pipermail archives are private or public. + Private archives require a valid member address and password, or a + list administrator password in order to access them. This + option has no effect when a third party archiver is used. + +\item[archive_volume_frequency] + Controls how Pipermail splits messages in the archive. The most + common option is \emph{Monthly} meaning a new archive volume is + started every month. Very high volume lists may want a shorter + frequency (e.g. \emph{Weekly} or \emph{Daily}) where as lower + volume lists may want a longer frequency (e.g. \emph{Yearly}). + This option has no effect when a third party archiver is used. +\end{description} + +\subsection{The Mail/News Gateway Category} + +Mailman has a sophisticated mail-to-news gateway feature. It can +independently gate messages from news to mail and vice versa, and can +even be used to manage moderated newsgroups. + +\subsection{The Auto-responder Category} +\subsection{The Content Filtering Category} +\subsection{The Topics Category} + +\section{Membership Management} +\section{Tending to Pending Moderator Requests} +\section{Editing the Public HTML Pages} +\section{Deleting the Mailing List} + +\appendix + +\section{This is an Appendix} + +To create an appendix in a Python HOWTO document, use markup like +this: + +\begin{verbatim} +\appendix + +\section{This is an Appendix} + +To create an appendix in a Python HOWTO document, .... + + +\section{This is another} + +Just add another \section{}, but don't say \appendix again. +\end{verbatim} + + +\end{document} diff --git a/docs/howtos/mailman-install.tex b/docs/howtos/mailman-install.tex new file mode 100644 index 000000000..a0dcbea20 --- /dev/null +++ b/docs/howtos/mailman-install.tex @@ -0,0 +1,1803 @@ +\documentclass{howto} + +\title{GNU Mailman - Installation Manual} +\author{Barry Warsaw} +\authoraddress{\email{barry(at)python.org}} + +\date{\today} +\release{2.1} % software release, not documentation +\setreleaseinfo{} % empty for final release +\setshortversion{2.1} % major.minor only for software + +\begin{document} + +\maketitle + +% This makes the Abstract go on a separate page in the HTML version; +% if a copyright notice is used, it should go immediately after this. +% +\ifhtml +\chapter*{Front Matter\label{front}} +\fi + +\begin{abstract} +\noindent +This document describes how to install GNU Mailman on a POSIX-based system +such as \UNIX{}, MacOSX, or GNU/Linux. It will cover basic installation +instructions, as well as guidelines for integrating Mailman with your web and +mail servers. + +\noindent +The GNU Mailman website is at \url{http://www.list.org} +\end{abstract} + +% The ugly "%begin{latexonly}" pseudo-environment supresses the table +% of contents for HTML generation. +% +%begin{latexonly} +\tableofcontents +%end{latexonly} + + +\section{Installation Requirements} + +GNU Mailman works on most POSIX-based systems such as \UNIX{}, MacOSX, or +GNU/Linux. It does not currently work on Windows. You must have a mail +server that you can send messages to, and a web server that supports the +CGI/1.1 API. \ulink{Apache}{http://httpd.apache.org} makes a fine choice for +web server, and mail servers such as +\ulink{Postfix}{http://www.postfix.org}, +\ulink{Exim}{http://www.exim.org}, +\ulink{Sendmail}{http://www.sendmail.org}, and +\ulink{qmail}{http://cr.yp.to/qmail.html} should +work just fine. + +To install Mailman from source, you will need an ANSI C compiler to build +Mailman's security wrappers. The +\ulink{GNU C compiler gcc}{http://gcc.gnu.org} 2.8.1 or later is known +to work well. + +You must have the \ulink{Python}{http://www.python.org} interpreter installed +somewhere on your system. Mailman 2.1 requires Python 2.1 or newer, although +Python 2.3 or newer is recommended. + +\section{Set up your system} + +Before installing Mailman, you need to prepare your system by adding certain +users and groups. You will need to have root privileges to perform the steps +in this section. + +\subsection{Add the group and user} + +Mailman requires a unique user and group name which will own its files, and +under which its processes will run. Mailman's basic security is based on +group ownership permissions, so it's important to get this step +right\footnote{You will be able to check and repair your permissions after +installation is complete.}. Typically, you will add a new user and a new +group, both called \code{mailman}. The \code{mailman} user must be a member +of the \code{mailman} group. Mailman will be installed under the +\code{mailman} user and group, with the set-group-id (setgid) bit enabled. + +If these names are already in use, you can choose different user and group +names, as long as you remember these when you run \program{configure}. If you +choose a different unique user name, you will have to specify this with +\program{configure}'s \longprogramopt{with-username} option, and if you choose +a different group name, you will have to specify this with +\program{configure}'s \longprogramopt{with-groupname} option. + +On Linux systems, you can use the following commands to create these +accounts. Check your system's manual pages for details: + +\begin{verbatim} + % groupadd mailman + % useradd -c''GNU Mailman'' -s /no/shell -d /no/home -g mailman mailman +\end{verbatim} + +\subsection{Create the installation directory\label{create-install-dir}} +Typically, Mailman is installed into a single directory, which includes both +the Mailman source code and the run-time list and archive data. It is +possible to split the static program files from the variable data files and +install them in separate directories. This section will describe the +available options. + +The default is to install all of Mailman to +\file{/usr/local/mailman}\footnote{This is the default for Mailman 2.1. +Earlier versions of Mailman installed everything under \file{/home/mailman} by +default.}. You can change this base installation directory (referred to here +as \var{\$prefix}) by specifying the directory with the +\longprogramopt{prefix} \program{configure} option. If you're upgrading from +a previous version of Mailman, you may want to use the \longprogramopt{prefix} +option unless you move your mailing lists. + +\begin{notice}[warning] +You cannot install Mailman on a filesystem that is mounted with the +\code{nosuid} option. This will break Mailman, which relies on setgid +programs for its security. If this describes your environment, simply install +Mailman in a location that allows setgid programs. +\end{notice} + +Make sure the installation directory is set to group \code{mailman} (or +whatever you're going to specify with \longprogramopt{with-groupname}) and has +the setgid bit set\footnote{BSD users should see the \ref{bsd-issues} section +for additional information.}. You probably also want to guarantee that this +directory is readable and executable by everyone. For example, these shell +commands will accomplish this: + +\begin{verbatim} + % cd $prefix + % chgrp mailman . + % chmod a+rx,g+ws . +\end{verbatim} + +You are now ready to configure and install the Mailman software. + +\section{Build and install Mailman\label{building}} + +\subsection{Run \program{configure}} + +Before you can install Mailman, you must run \program{configure} to set +various installation options your system might need. + +\begin{notice}[note] +Take special note of the \longprogramopt{with-mail-gid} and +\longprogramopt{with-cgi-gid} options below. You will probably need to use +these. +\end{notice} + +You should \strong{not} be root while performing the steps in this section. +Do them under your own login, or whatever account you typically use to install +software. You do not need to do these steps as user \code{mailman}, but you +could. However, make sure that the login used is a member of the +\code{mailman} group as that that group has write permissions to the +\var{\$prefix} directory made in the previous step. You must also have +permission to create a setgid file in the file system where it resides (NFS +and other mounts can be configured to inhibit setgid settings). + +If you've installed other GNU software, you should be familiar with the +\program{configure} script. Usually you can just \program{cd} to the +directory you unpacked the Mailman source tarball into, and run +\program{configure} with no arguments: + +\begin{verbatim} + % cd mailman-<version> + % ./configure + % make install +\end{verbatim} + +The following options allow you to customize your Mailman +installation. + +\begin{description} +\item[\longprogramopt{prefix}=\var{dir}] + Standard GNU configure option which changes the base directory that + Mailman is installed into. By default \var{\$prefix} is + \file{/usr/local/mailman}. This directory must already exist, and be set + up as described in \ref{create-install-dir}. + +\item[\longprogramopt{exec-prefix}=\var{dir}] + Standard GNU configure option which lets you specify a different + installation directory for architecture dependent binaries. + +\item[\longprogramopt{with-var-prefix}=\var{dir}] + Store mutable data under \var{dir} instead of under the \var{\$prefix} or + \var{\$exec_prefix}. Examples of such data include the list archives and + list settings database. + +\item[\longprogramopt{with-python}=\file{/path/to/python}] + Specify an alternative Python interpreter to use for the wrapper programs. + The default is to use the interpreter found first on your shell's + \var{\$PATH}. + +\item[\longprogramopt{with-username}=\var{username-or-uid}] + Specify a different username than \code{mailman}. The value of this + option can be an integer user id or a user name. Be sure your + \var{\$prefix} directory is owned by this user. + +\item[\longprogramopt{with-groupname}=\var{groupname-or-gid}] + Specify a different groupname than \code{mailman}. The value of this + option can be an integer group id or a group name. Be sure your + \var{\$prefix} directory is group-owned by this group. + +\item[\longprogramopt{with-mail-gid}=\var{group-or-groups}] + Specify an alternative group for running scripts via the mail wrapper. + \var{group-or-groups} can be a list of one or more integer group ids or + symbolic group names. The first value in the list that resolves to an + existing group is used. By default, the value is the list \code{mailman}, + \code{other}, \code{mail}, and \code{daemon}. + + \begin{notice}[note] + This is highly system dependent and you must get this right, because the + group id is compiled into the mail wrapper program for added security. On + systems using \program{sendmail}, the \file{sendmail.cf} configuration + file designates the group id of \program{sendmail} processes using the + \var{DefaultUser} option. (If commented out, it still may be indicating + the default...) + \end{notice} + + Check your mail server's documentation and configuration files to find the + right value for this switch. + +\item[\longprogramopt{with-cgi-gid}=\var{group-or-groups}] + Specify an alternative group for running scripts via the CGI wrapper. + \var{group-or-groups} can be a list of one or more integer group ids or + symbolic group names. The first value in the list that resolves to an + existing group is used. By default, the value is the the list + \code{www}, \code{www-data}, and \code{nobody}. + + \begin{notice}[note] + The proper value for this is dependent on your web server configuration. + You must get this right, because the group id is compiled into the CGI + wrapper program for added security, and no Mailman CGI scripts will run if + this is incorrect. + \end{notice} + + If you're using Apache, check the values for the \var{Group} option in + your \file{httpd.conf} file. + +\item[\longprogramopt{with-cgi-ext}=\var{extension}] + Specify an extension for cgi-bin programs. The CGI wrappers placed in + \file{\var{\$prefix}/cgi-bin} will have this extension (some web servers + require an extension). \var{extension} must include the leading dot. + +\item[\longprogramopt{with-mailhost}=\var{hostname}] + Specify the fully qualified host name part for outgoing email. After the + installation is complete, this value can be overriden in + \file{\var{\$prefix}/Mailman/mm_cfg.py}. + +\item[\longprogramopt{with-urlhost}=\var{hostname}] + Specify the fully qualified host name part of urls. After the + installation is complete, this value can be overriden in + \file{\var{\$prefix}/Mailman/mm_cfg.py}. + +\item[\longprogramopt{with-gcc}=no] + Don't use gcc, even if it is found. In this case, \program{cc} must be + found on your \var{\$PATH}. + +\end{description} + +\subsection{Make and install} + +Once you've run \program{configure}, you can simply run \program{make}, then +\program{make install} to build and install Mailman. + +\section{Check your installation} + +After you've run \program{make install}, you should check that your +installation has all the correct permissions and group ownerships by running +the \program{check_perms} script. First change to the installation +(i.e. \var{\$prefix}) directory, then run the \program{bin/check_perms} +program. Don't try to run bin/check_perms from the source directory; it will +only run from the installation directory. + +If this reports no problems, then it's very likely <wink> that your +installation is set up correctly. If it reports problems, then you can either +fix them manually, re-run the installation, or use \program{bin/check_perms} +to fix the problems (probably the easiest solution): + +\begin{itemize} +\item You need to become the user that did the installation, and that owns all + the files in \var{\$prefix}, or root. + +\item Run \program{bin/check_perms -f} + +\item Repeat previous step until no more errors are reported! +\end{itemize} + +\begin{notice}[warning] +If you're running Mailman on a shared multiuser system, and you have mailing +lists with private archives, you may want to hide the private archive +directory from other users on your system. In that case, you should drop the +other execute permission (o-x) from the \file{archives/private} directory. +However, the web server process must be able to follow the symbolic link in +public directory, otherwise your public Pipermail archives will not work. To +set this up, become root and run the following commands: + +\begin{verbatim} +# cd <prefix>/archives +# chown <web-server-user> private +# chmod o-x private +\end{verbatim} + +You need to know what user your web server runs as. It may be \code{www}, +\code{apache}, \code{httpd} or \code{nobody}, depending on your server's +configuration. +\end{notice} + +\section{Set up your web server} + +Congratulations! You've installed the Mailman software. To get everything +running you need to hook Mailman up to both your web server and your mail +system. + +If you plan on running your mail and web servers on different machines, +sharing Mailman installations via NFS, be sure that the clocks on those two +machines are synchronized closely. You might take a look at the file +\file{Mailman/LockFile.py}; the constant \var{CLOCK_SLOP} helps the locking +mechanism compensate for clock skew in this type of environment. + +This section describes some of the things you need to do to connect Mailman's +web interface to your web server. The instructions here are somewhat geared +toward the Apache web server, so you should consult your web server +documentation for details. + +You must configure your web server to enable CGI script permission in the +\file{\var{\$prefix}/cgi-bin} to run CGI scripts. The line you should add +might look something like the following, with the real absolute directory +substituted for \var{\$prefix}, of course: + +\begin{verbatim} + Exec /mailman/* $prefix/cgi-bin/* +\end{verbatim} +% $ - emacs turd + + or: + +\begin{verbatim} + ScriptAlias /mailman/ $prefix/cgi-bin/ +\end{verbatim} +% $ - emacs turd + +\begin{notice}[warning] +You want to be very sure that the user id under which your CGI scripts run is +\strong{not} in the \code{mailman} group you created above, otherwise private +archives will be accessible to anyone. +\end{notice} + +Copy the Mailman, Python, and GNU logos to a location accessible to your web +server. E.g. with Apache, you've usually got an \file{icons} directory that +you can drop the images into. For example: + +\begin{verbatim} + % cp $prefix/icons/*.{jpg,png} /path/to/apache/icons +\end{verbatim} + +You then want to add a line to your \file{\var{\$prefix}/Mailman/mm_cfg.py} +file which sets the base URL for the logos. For example: + +\begin{verbatim} + IMAGE_LOGOS = '/images/' +\end{verbatim} + +The default value for \var{IMAGE_LOGOS} is \file{/icons/}. Read the comment +in \file{Defaults.py.in} for details. + +Configure your web server to point to the Pipermail public mailing list +archives. For example, in Apache: + +\begin{verbatim} + Alias /pipermail/ $varprefix/archives/public/ +\end{verbatim} +% $ - emacs turd + +where \var{\$varprefix} is usually \var{\$prefix} unless you've used the +\longprogramopt{with-var-prefix} option to \program{configure}. Also be +sure to configure your web server to follow symbolic links in this directory, +otherwise public Pipermail archives won't be accessible. For Apache users, +consult the \var{FollowSymLinks} option. + +If you're going to be supporting internationalized public archives, you will +probably want to turn off any default charset directive for the Pipermail +directory, otherwise your multilingual archive pages won't show up correctly. +Here's an example for Apache, based on the standard installation directories: + +\begin{verbatim} + <Directory "/usr/local/mailman/archives/public/"> + AddDefaultCharset Off + </Directory> +\end{verbatim} + +Now restart your web server. + +\section{Set up your mail server\label{mail-server}} + +This section describes some of the things you need to do to connect Mailman's +email interface to your mail server. The instructions here are different for +each mail server; if your mail server is not described in the following +subsections, try to generalize from the existing documentation, and consider +contributing documentation updates to the Mailman developers. + +\subsection{Using the Postfix mail server} + +Mailman should work pretty much out of the box with a standard Postfix +installation. It has been tested with various Postfix versions up to and +including Postfix 2.1.5. + +In order to support Mailman's optional VERP delivery, you will want to disable +\code{luser_relay} (the default) and you will want to set +\code{recipient_delimiter} for extended address semantics. You should comment +out any \code{luser_relay} value in your \file{main.cf} and just go with the +defaults. Also, add this to your \file{main.cf} file: + +\begin{verbatim} + recipient_delimiter = + +\end{verbatim} + +Using \samp{+} as the delimiter works well with the default values for +\var{VERP_FORMAT} and \var{VERP_REGEXP} in \file{Defaults.py}. + +When attempting to deliver a message to a non-existent local address, Postfix +may return a 450 error code. Since this is a transient error code, Mailman +will continue to attempt to deliver the message for +\var{DELIVERY_RETRY_PERIOD} -- 5 days by default. You might want to set +Postfix up so that it returns permanent error codes for non-existent local +users by adding the following to your \file{main.cf} file: + +\begin{verbatim} + unknown_local_recipient_reject_code = 550 +\end{verbatim} + +Finally, if you are using Postfix-style virtual domains, read the section on +virtual domain support below. + +\subsubsection{Integrating Postfix and Mailman} + +You can integrate Postfix and Mailman such that when new lists are created, or +lists are removed, Postfix's alias database will be automatically updated. +The following are the steps you need to take to make this work. + +In the description below, we assume that you've installed Mailman in the +default location, i.e. \file{/usr/local/mailman}. If that's not the case, +adjust the instructions according to your use of \program{configure}'s +\longprogramopt{prefix} and \longprogramopt{with-var-prefix} options. + +\begin{notice}[note] +If you are using virtual domains and you want Mailman to honor your virtual +domains, read the \ref{postfix-virtual} section below first! +\end{notice} + +\begin{itemize} +\item Add this to the bottom of the \file{\var{\$prefix}/Mailman/mm_cfg.py} + file: + + \begin{verbatim} + MTA = 'Postfix' + \end{verbatim} + + The MTA variable names a module in the \file{Mailman/MTA} directory + which contains the mail server-specific functions to be executed when a + list is created or removed. + +\item Look at the \file{Defaults.py} file for the variables + \var{POSTFIX_ALIAS_CMD} and \var{POSTFIX_MAP_CMD} command. Make sure + these point to your \program{postalias} and \program{postmap} programs + respectively. Remember that if you need to make changes, do it in + \file{mm_cfg.py}. + +\item Run the \program{bin/genaliases} script to initialize your + \file{aliases} file. + + \begin{verbatim} + % cd /usr/local/mailman + % bin/genaliases + \end{verbatim} + + Make sure that the owner of the \file{data/aliases} and + \file{data/aliases.db} file is \code{mailman} and that the group owner + for those files is \code{mailman}, or whatever user and group you used + in the configure command: + + \begin{verbatim} + % su + % chown mailman:mailman data/aliases* + \end{verbatim} + +\item Hack your Postfix's \file{main.cf} file to include the following path in + your \var{alias_maps} variable: + + \begin{verbatim} + /usr/local/mailman/data/aliases + \end{verbatim} + + Note that there should be no trailing \code{.db}. Do not include this + in your \var{alias_database} variable. This is because you do not want + Postfix's \program{newaliases} command to modify Mailman's + \file{aliases.db} file, but you do want Postfix to consult + \file{aliases.db} when looking for local addresses. + + You probably want to use a \code{hash:} style database for this entry. + Here's an example: + + \begin{verbatim} + alias_maps = hash:/etc/postfix/aliases, + hash:/usr/local/mailman/data/aliases + \end{verbatim} + +\item When you configure Mailman, use the + \longprogramopt{with-mail-gid=mailman} switch; this will be the default + if you configured Mailman after adding the \code{mailman} owner. + Because the owner of the \file{aliases.db} file is \code{mailman}, + Postfix will execute Mailman's wrapper program as uid and gid + \code{mailman}. + +\end{itemize} + +That's it! One caveat: when you add or remove a list, the \file{aliases.db} +file will updated, but it will not automatically run \program{postfix reload}. +This is because you need to be root to run this and suid-root scripts are not +secure. The only effect of this is that it will take about a minute for +Postfix to notice the change to the \file{aliases.db} file and update its +tables. + +\subsubsection{Virtual domains\label{postfix-virtual}} + +Postfix 2.0 supports ``virtual alias domains'', essentially what used to be +called ``Postfix-style virtual domains'' in earlier Postfix versions. To make +virtual alias domains work with Mailman, you need to do some setup in both +Postfix and Mailman. Mailman will write all virtual alias mappings to a file +called, by default, \file{/usr/local/mailman/data/virtual-mailman}. It will +also use \program{postmap} to create the \program{virtual-mailman.db} file +that Postfix will actually use. + +First, you need to set up the Postfix virtual alias domains as described in +the Postfix documentation (see Postfix's \code{virtual(5)} manpage). Note +that it's your responsibility to include the \code{virtual-alias.domain +anything} line as described manpage; Mailman will not include this line in +\file{virtual-mailman}. You are highly encouraged to make sure your virtual +alias domains are working properly before integrating with Mailman. + +Next, add a path to Postfix's \var{virtual_alias_maps} variable, pointing to +the virtual-mailman file, e.g.: + +\begin{verbatim} + virtual_alias_maps = <your normal virtual alias files>, + hash:/usr/local/mailman/data/virtual-mailman +\end{verbatim} + +assuming you've installed Mailman in the default location. If you're using an +older version of Postfix which doesn't have the \var{virtual_alias_maps} +variable, use the \var{virtual_maps} variable instead. + +Next, in your \file{mm_cfg.py} file, you will want to set the variable +\var{POSTFIX_STYLE_VIRTUAL_DOMAINS} to the list of virtual domains that Mailman +should update. This may not be all of the virtual alias domains that your +Postfix installation supports! The values in this list will be matched +against the \var{host_name} attribute of mailing lists objects, and must be an +exact match. + +Here's an example. Say that Postfix is configured to handle the virtual +domains \code{dom1.ain}, \code{dom2.ain}, and \code{dom3.ain}, and further +that in your \file{main.cf} file you've got the following settings: + +\begin{verbatim} + myhostname = mail.dom1.ain + mydomain = dom1.ain + mydestination = $myhostname, localhost.$mydomain + virtual_alias_maps = + hash:/some/path/to/virtual-dom1, + hash:/some/path/to/virtual-dom2, + hash:/some/path/to/virtual-dom2 +\end{verbatim} + +If in your \file{virtual-dom1} file, you've got the following lines: + +\begin{verbatim} + dom1.ain IGNORE + @dom1.ain @mail.dom1.ain +\end{verbatim} + +this tells Postfix to deliver anything addressed to \code{dom1.ain} to the +same mailbox at \code{mail.dom1.com}, its default destination. + +In this case you would not include \code{dom1.ain} in +\var{POSTFIX_STYLE_VIRTUAL_DOMAINS} because otherwise Mailman will write +entries for mailing lists in the dom1.ain domain as + +\begin{verbatim} + mylist@dom1.ain mylist + mylist-request@dom1.ain mylist-request + # and so on... +\end{verbatim} + +The more specific entries trump your more general entries, thus breaking the +delivery of any \code{dom1.ain} mailing list. + +However, you would include \code{dom2.ain} and \code{dom3.ain} in +\file{mm_cfg.py}: + +\begin{verbatim} + POSTFIX_STYLE_VIRTUAL_DOMAINS = ['dom2.ain', 'dom3.ain'] +\end{verbatim} + +Now, any list that Mailman creates in either of those two domains, will have +the correct entries written to \file{/usr/local/mailman/data/virtual-mailman}. + +As above with the \file{data/aliases*} files, you want to make sure that both +\file{data/virtual-mailman} and \file{data/virtual-mailman.db} are user and +group owned by \code{mailman}. + +\subsubsection{An alternative approach} + +Fil \email{fil@rezo.net} has an alternative approach based on virtual maps and +regular expressions, as described at: + +\begin{itemize} +\item (French) \url{http://listes.rezo.net/comment.php} +\item (English) \url{http://listes.rezo.net/how.php} +\end{itemize} + +This is a good (and simpler) alternative if you don't mind exposing an +additional hostname in the domain part of the addresses people will use to +contact your list. I.e. if people should use \code{mylist@lists.dom.ain} +instead of \code{mylist@dom.ain}. + +\subsection{Using the Exim mail server} + +\begin{notice}[note] +This section is derived from Nigel Metheringham's ``HOWTO - Using Exim and +Mailman together'', which covers Mailman 2.0.x and Exim 3. It has been +updated to cover Mailman 2.1 and Exim 4. The original document is here: +\url{http://www.exim.org/howto/mailman.html}. +\end{notice} + +There is no Mailman configuration needed other than the standard options +detailed in the Mailman install documentation. The Exim configuration is +transparent to Mailman. The user and group settings for Mailman must match +those in the config fragments given below. + +\subsubsection{Exim configuration} + +The Exim configuration is built so that a list created within Mailman +automatically appears to Exim without the need for defining any additional +aliases. + +The drawback of this configuration is that it will work poorly on systems +supporting lists in several different mail domains. While Mailman handles +virtual domains, it does not yet support having two distinct lists with the +same name in different virtual domains, using the same Mailman installation. +This will eventually change. (But see below for a variation on this scheme +that should accommodate virtual domains better.) + +The configuration file excerpts below are for use in an already functional +Exim configuration, which accepts mail for the domain in which the list +resides. If this domain is separate from the others handled by your Exim +configuration, then you'll need to: + +\begin{itemize} +\item add the list domain, ``my.list.domain'' to \var{local_domains} + +\item add a ``domains=my.list.domain'' option to the director (router) for the + list + +\item (optional) exclude that domain from your other directors (routers) +\end{itemize} + +\begin{notice}[note] +The instructions in this document should work with either Exim 3 or Exim 4. +In Exim 3, you must have a \var{local_domains} configuration setting; in Exim +4, you most likely have a \var{local_domains} domainlist. If you don't, you +probably know what you're doing and can adjust accordingly. Similarly, in +Exim 4 the concept of ``directors'' has disappeared -- there are only routers +now. So if you're using Exim 4, whenever this document says ``director'', +read ``router''. +\end{notice} + +Whether you are using Exim 3 or Exim 4, you will need to add some macros to +the main section of your Exim config file. You will also need to define one +new transport. With Exim 3, you'll need to add a new director; with Exim 4, a +new router plays the same role. + +Finally, the configuration supplied here should allow co-habiting Mailman 2.0 +and 2.1 installations, with the proviso that you'll probably want to use +\code{mm21} in place of \code{mailman} -- e.g., \var{MM21_HOME}, +\var{mm21_transport}, etc. + +\subsubsection{Main configuration settings} + +First, you need to add some macros to the top of your Exim config file. These +just make the director (router) and transport below a bit cleaner. Obviously, +you'll need to edit these based on how you configured and installed Mailman. + +\begin{verbatim} + # Home dir for your Mailman installation -- aka Mailman's prefix + # directory. + MAILMAN_HOME=/usr/local/mailman + MAILMAN_WRAP=MAILMAN_HOME/mail/mailman + + # User and group for Mailman, should match your --with-mail-gid + # switch to Mailman's configure script. + MAILMAN_USER=mailman + MAILMAN_GROUP=mailman +\end{verbatim} + +\subsubsection{Transport for Exim 3\label{exim3-transport}} + +Add this to the transports section of your Exim config file, +i.e. somewhere between the first and second ``end'' line: + +\begin{verbatim} + mailman_transport: + driver = pipe + command = MAILMAN_WRAP \ + '${if def:local_part_suffix \ + {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} \ + {post}}' \ + $local_part + current_directory = MAILMAN_HOME + home_directory = MAILMAN_HOME + user = MAILMAN_USER + group = MAILMAN_GROUP +\end{verbatim} + +\subsubsection{Director for Exim 3} + +If you're using Exim 3, you'll need to add the following director to your +config file (directors go between the second and third ``end'' lines). Also, +don't forget that order matters -- e.g. you can make Mailman lists take +precedence over system aliases by putting this director in front of your +aliasfile director, or vice-versa. + +\begin{verbatim} + # Handle all addresses related to a list 'foo': the posting address. + # Automatically detects list existence by looking + # for lists/$local_part/config.pck under MAILMAN_HOME. + mailman_director: + driver = smartuser + require_files = MAILMAN_HOME/lists/$local_part/config.pck + suffix_optional + suffix = -bounces : -bounces+* : \ + -confirm+* : -join : -leave : \ + -owner : -request : -admin + transport = mailman_transport +\end{verbatim} + +\subsubsection{Router for Exim 4} + +In Exim 4, there's no such thing as directors -- you need to add a new router +instead. Also, the canonical order of the configuration file was changed so +routers come before transports, so the router for Exim 4 comes first here. +Put this router somewhere after the ``begin routers'' line of your config +file, and remember that order matters. + +\begin{verbatim} + mailman_router: + driver = accept + require_files = MAILMAN_HOME/lists/$local_part/config.pck + local_part_suffix_optional + local_part_suffix = -bounces : -bounces+* : \ + -confirm+* : -join : -leave : \ + -owner : -request : -admin + transport = mailman_transport +\end{verbatim} +% $ - emacs turds + +\subsubsection{Transports for Exim 4} + +The transport for Exim 4 is the same as for Exim 3 (see \ref{exim3-transport}; +just copy the transport given above to somewhere under the ``begin +transports'' line of your Exim config file. + +\subsubsection{Additional notes} + +Exim should be configured to allow reasonable volume -- e.g. don't set +\var{max_recipients} down to a silly value -- and with normal degrees of +security -- specifically, be sure to allow relaying from 127.0.0.1, but pretty +much nothing else. Parallel deliveries and other tweaks can also be used if +you like; experiment with your setup to see what works. Delay warning +messages should be switched off or configured to only happen for non-list +mail, unless you like receiving tons of mail when some random host is down. + +\subsubsection{Problems} + +\begin{itemize} + +\item Mailman will send as many \code{MAIL FROM}/\code{RCPT TO} as it needs. + It may result in more than 10 or 100 messages sent in one connection, + which will exceed the default value of Exim's + \var{smtp_accept_queue_per_connection} value. This is bad because it + will cause Exim to switch into queue mode and severely delay delivery of + your list messages. The way to fix this is to set Mailman's + \var{SMTP_MAX_SESSIONS_PER_CONNECTION} (in + \file{\var{\$prefix}/Mailman/mm_cfg.py}) to a smaller value than Exim's + \var{smtp_accept_queue_per_connection}. + +\item Mailman should ignore Exim delay warning messages, even though Exim + should never send this to list messages. Mailman 2.1's general bounce + detection and VERP support should greatly improve the bounce detector's + hit rates. + +\item List existence is determined by the existence of a \file{config.pck} + file for a list. If you delete lists by foul means, be aware of this. + +\item If you are getting Exim or Mailman complaining about user ids when you + send mail to a list, check that the \var{MAILMAN_USER} and + \var{MAILMAN_GROUP} match those of Mailman itself (i.e. what were used + in the \program{configure} script). Also make sure you do not have + aliases in the main alias file for the list. +\end{itemize} + +\subsubsection{Receiver Verification} + +Exim's receiver verification feature is very useful -- it lets Exim reject +unrouteable addresses at SMTP time. However, this is most useful for +externally-originating mail that is addressed to mail in one of your local +domains. For Mailman list traffic, mail originates on your server, and is +addressed to random external domains that are not under your control. +Furthermore, each message is addressed to many recipients +-- up to 500 if you use Mailman's default configuration and don't tweak +\var{SMTP_MAX_RCPTS}. + +Doing receiver verification on Mailman list traffic is a recipe for trouble. +In particular, Exim will attempt to route every recipient addresses in +outgoing Mailman list posts. Even though this requires nothing more than a +few DNS lookups for each address, it can still introduce significant delays. +Therefore, you should disable recipient verification for Mailman traffic. + +Under Exim 3, put this in your main configuration section: + +\begin{verbatim} + receiver_verify_hosts = !127.0.0.1 +\end{verbatim} + +Under Exim 4, this is probably already taken care of for you by the default +recipient verification ACL statement (in the \code{RCPT TO} ACL): + +\begin{verbatim} + accept domains = +local_domains + endpass + message = unknown user + verify = recipient +\end{verbatim} + +which only does recipient verification on addresses in your domain. (That's +not exactly the same as doing recipient verification only on messages coming +from non-127.0.0.1 hosts, but it should do the trick for Mailman.) + +\subsubsection{SMTP Callback} + +Exim's SMTP callback feature is an even more powerful way to detect bogus +sender addresses than normal sender verification. Unfortunately, lots of +servers send bounce messages with a bogus address in the header, and there are +plenty that send bounces with bogus envelope senders (even though they're +supposed to just use an empty envelope sender for bounces). + +In order to ensure that Mailman can disable/remove bouncing addresses, you +generally want to receive bounces for Mailman lists, even if those bounces are +themselves not bounceable. Thus, you might want to disable SMTP callback on +bounce messages. + +With Exim 4, you can accomplish this using something like the following in +your \code{RCPT TO} ACL: + +\begin{verbatim} + # Accept bounces to lists even if callbacks or other checks would fail + warn message = X-WhitelistedRCPT-nohdrfromcallback: Yes + condition = \ + ${if and {{match{$local_part}{(.*)-bounces\+.*}} \ + {exists {MAILMAN_HOME/lists/$1/config.pck}}} \ + {yes}{no}} + {yes}{no}} + + accept condition = \ + ${if and {{match{$local_part}{(.*)-bounces\+.*}} \ + {exists {MAILMAN_HOME/lists/$1/config.pck}}} \ + {yes}{no}} + {yes}{no}} + + # Now, check sender address with SMTP callback. + deny !verify = sender/callout=90s +\end{verbatim} + +If you also do SMTP callbacks on header addresses, you'll want something like +this in your \code{DATA} ACL: + +\begin{verbatim} + deny !condition = $header_X-WhitelistedRCPT-nohdrfromcallback: + !verify = header_sender/callout=90s +\end{verbatim} +% $ - emacs turd + +\subsubsection{Doing VERP with Exim and Mailman} + +VERP will send one email, with a separate envelope sender (return path), for +each of your subscribers -- read the information in +\file{\var{\$prefix}/Mailman/Defaults.py} for the options that start with VERP. +In a nutshell, all you need to do to enable VERP with Exim is to add these lines to \file{\var{\$prefix}/Mailman/mm_cfg.py}: + +\begin{verbatim} + VERP_PASSWORD_REMINDERS = Yes + VERP_PERSONALIZED_DELIVERIES = Yes + VERP_DELIVERY_INTERVAL = Yes + VERP_CONFIRMATIONS = Yes +\end{verbatim} + +(The director (router) above is smart enough to deal with VERP bounces.) + +\subsubsection{Virtual Domains} + +One approach to handling virtual domains is to use a separate Mailman +installation for each virtual domain. Currently, this is the only way to have +lists with the same name in different virtual domains handled by the same +machine. + +In this case, the \var{MAILMAN_HOME} and \var{MAILMAN_WRAP} macros are useless +-- you can remove them. Change your director (router) to something like this: + +\begin{verbatim} + require_files = /virtual/${domain}/mailman/lists/${lc:$local_part}/config.pck +\end{verbatim} +% $ - emacs turd + +and change your transport like this: + +\begin{verbatim} + command = /virtual/${domain}/mailman/mail/mailman \ + ${if def:local_part_suffix \ + {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} + {post}} \ + $local_part + current_directory = /virtual/${domain}/mailman + home_directory = /virtual/${domain}/mailman +\end{verbatim} +% $ - emacs turd + +\subsubsection{List Verification} + +This is how a set of address tests for the Exim lists look on a working +system. The list in question is \email{quixote-users@mems-exchange.org}, and +these commands were run on the \code{mems-exchange.org} mail server ("\% " +indicates the Unix shell prompt): + +\begin{verbatim} + % exim -bt quixote-users + quixote-users@mems-exchange.org + router = mailman_main_router, transport = mailman_transport + + % exim -bt quixote-users-request + quixote-users-request@mems-exchange.org + router = mailman_router, transport = mailman_transport + + % exim -bt quixote-users-bounces + quixote-users-bounces@mems-exchange.org + router = mailman_router, transport = mailman_transport + + % exim -bt quixote-users-bounces+luser=example.com + quixote-users-bounces+luser=example.com@mems-exchange.org + router = mailman_router, transport = mailman_transport +\end{verbatim} + +If your \program{exim -bt} output looks something like this, that's a start: +at least it means Exim will pass the right messages to the right Mailman +commands. It by no means guarantees that your Exim/Mailman installation is +functioning perfectly, though! + +\subsubsection{Document History} + +Originally written by Nigel Metheringham \email{postmaster@exim.org}. Updated +by Marc Merlin \email{marc_soft@merlins.org} for Mailman 2.1, Exim 4. +Overhauled/reformatted/clarified/simplified by Greg Ward +\email{gward@python.net}. + +\subsection{Using the Sendmail mail server} + +\begin{notice}[warning] +You may be tempted to set the \var{DELIVERY_MODULE} configuration variable in +\file{mm_cfg.py} to \code{'Sendmail'} when using the Sendmail mail server. +\strong{Don't}. The \file{Sendmail.py} module is misnamed -- it's really a +command line based message handoff scheme as opposed to the SMTP scheme used +in \file{SMTPDirect.py} (the default). \file{Sendmail.py} has known security +holes and is provided as a proof-of-concept only\footnote{In fact, in later +versions of Mailman, this module is explicitly sabotaged. You have to know +what you're doing in order to re-enable it.}. If you are having problems +using \file{SMTPDirect.py} fix those instead of using \file{Sendmail.py}, or +you may open your system up to security exploits. +\end{notice} + +\subsubsection{Sendmail ``smrsh'' compatibility} + +Many newer versions of Sendmail come with a restricted execution utility +called ``smrsh'', which limits the executables that Sendmail will allow to be +used as mail programs. You need to explicitly allow Mailman's wrapper program +to be used with smrsh or Mailman will not work. If mail is not getting +delivered to Mailman's wrapper program and you're getting an ``operating +system error'' in your mail syslog, this could be your problem. + +One good way of enabling this is: + +\begin{itemize} + \item Find out where your Sendmail executes its smrsh wrapper + + \begin{verbatim} + % grep smrsh /etc/mail/sendmail.cf + \end{verbatim} + + \item Figure out where smrsh expects symlinks for allowable mail + programs. At the very beginning of the following output you will + see a full path to some directory, e.g. \file{/var/adm/sm.bin} or + similar: + + \begin{verbatim} + % strings $path_to_smrsh | less + \end{verbatim} + + \item cd into \file{/var/adm/sm.bin}, or where ever it happens to reside + on your system -- alternatives include \file{/etc/smrsh}, + \file{/var/smrsh} and \file{/usr/local/smrsh}. + + \begin{verbatim} + % cd /var/adm/sm.bin + \end{verbatim} + + \item Create a symbolic link to Mailman's wrapper program: + + \begin{verbatim} + % ln -s /usr/local/mailman/mail/mailman mailman + \end{verbatim} +\end{itemize} + +\subsubsection{Integrating Sendmail and Mailman} + +David Champion has contributed a recipe for more closely integrating Sendmail +and Mailman, such that Sendmail will automatically recognize and deliver to +new mailing lists as they are created, without having to manually edit alias +tables. + +In the \file{contrib} directory of Mailman's source distribution, you will +find four files: + +\begin{itemize} +\item \file{mm-handler.readme} - an explanation of how to set everything up +\item \file{mm-handler} - the mail delivery agent (MDA) +\item \file{mailman.mc} - a toy configuration file sample +\item \file{virtusertable} - a sample for RFC 2142 address exceptions +\end{itemize} + +\subsubsection{Performance notes} + +One of the surest performance killers for Sendmail users is when Sendmail is +configured to synchronously verify the recipient's host via DNS. If it does +this for messages posted to it from Mailman, you will get horrible +performance. Since Mailman usually connects via \code{localhost} +(i.e. 127.0.0.1) to the SMTP port of Sendmail, you should be sure to configure +Sendmail to \strong{not} do DNS verification synchronously for localhost +connections. + +\subsection{Using the Qmail mail server\label{qmail-issues}} + +There are some issues that users of the qmail mail transport agent have +encountered. None of the core maintainers use qmail, so all of this +information has been contributed by the Mailman user community, especially +Martin Preishuber and Christian Tismer, with notes by Balazs Nagy (BN) and +Norbert Bollow (NB). + +\begin{itemize} +\item You might need to set the mail-gid user to either \code{qmail}, + \code{mailman}, or \code{nofiles} by using the + \longprogramopt{with-mail-gid} \program{configure} option. + + \emph{BN:} it highly depends on your mail storing policy. For example + if you use the simple \file{\~{}alias/.qmail-*} files, you can use + \program{`id -g alias`}. But if you use \file{/var/qmail/users}, the + specified mail gid can be used. + + If you are going to be directing virtual domains directly to the + \code{mailman} user (using ``virtualdomains'' on a list-only domain, for + example), you will have to use \longprogramopt{with-mail-gid}=\var{gid + of mailman user's group}. This is incompatible with having list aliases + in \file{\~{}alias}, unless that alias simply forwards to + \code{mailman-listname*}. + +\item If there is a user \code{mailman} on your system, the alias + \code{mailman-owner} will work only in \file{\~{}mailman}. You have to do + a \program{touch .qmail-owner} in \file{\~{}mailman} directory to create + this alias. + + \emph{NB:} An alternative, IMHO better solution is to \program{chown + root \~{}mailman}, that will stop qmail from considering \code{mailman} to + be a user to whom mail can be delivered. (See ``man 8 qmail-getpw''.) + +\item In a related issue, if you have any users with the same name as one of + your mailing lists, you will have problems if list names contain + \samp{-} in them. Putting \file{.qmail} redirections into the user's + home directory doesn't work because the Mailman wrappers will not get + spawned with the proper GID. The solution is to put the following lines + in the \file{/var/qmail/users/assign} file: + +\begin{verbatim} + +zope-:alias:112:11:/var/qmail/alias:-:zope-: + . +\end{verbatim} + + where in this case the listname is e.g. \code{zope-users}. + + \emph{NB:} Alternatively, you could host the lists on a virtual domain, + and use the \file{/var/qmail/control/virtualdomains} file to put the + \code{mailman} user in charge of this virtual domain. + +\item \emph{BN:}If inbound messages are delivered by another user than + \code{mailman}, it's necessary to allow it to access \file{\~{}mailman}. + Be sure that \file{\~{}mailman} has group writing access and setgid bit is + set. Then put the delivering user to \code{mailman} group, and you can + deny access to \file{\~{}mailman} to others. Be sure that you can do the + same with the WWW service. + + By the way the best thing is to make a virtual mail server to handle all + of the mail. \emph{NB:} E.g. make an additional "A" DNS record for the + virtual mailserver pointing to your IP address, add the line + \code{lists.kva.hu:mailman} to \file{/var/qmail/control/virtualdomains} + and a \code{lists.kva.hu} line to \file{/var/qmail/control/rcpthosts} + file. Don't forget to HUP the qmail-send after modifying + ``virtualdomains''. Then every mail to lists.kva.hu will arrive to + mail.kva.hu's mailman user. + + Then make your aliases: + +\begin{verbatim} + .qmail => mailman@...'s letters + .qmail-owner => mailman-owner's letters +\end{verbatim} + + For list aliases, you can either create them manually: + +\begin{verbatim} + .qmail-list => posts to the 'list' list + .qmail-list-admin => posts to the 'list's owner + .qmail-list-request => requests to 'list' + etc +\end{verbatim} + + or for automatic list alias handling (when using the lists.kva.hu + virtual as above), see \file{contrib/qmail-to-mailman.py} in the Mailman + source distribution. Modify the \file{\~{}mailman/.qmail-default} to + include: + +\begin{verbatim} + |preline /path/to/python /path/to/qmail-to-mailman.py +\end{verbatim} + + and new lists will automatically be picked up. + +\item You have to make sure that the localhost can relay. If you start qmail + via inetd and tcpenv, you need some line the following in your + \file{/etc/hosts.allow} file: + +\begin{verbatim} + tcp-env: 127. 10.205.200. : setenv RELAYCLIENT +\end{verbatim} + + where 10.205.200. is your IP address block. If you use tcpserver, then + you need something like the following in your \file{/etc/tcp.smtp} file: + +\begin{verbatim} + 10.205.200.:allow,RELAYCLIENT="" + 127.:allow,RELAYCLIENT="" +\end{verbatim} + +\item \emph{BN:} Bigger \file{/var/qmail/control/concurrencyremote} values + work better sending outbound messages, within reason. Unless you know + your system can handle it (many if not most cannot) this should not be + set to a value greater than 120. + +\item More information about setting up qmail and relaying can be found in the + qmail documentation. +\end{itemize} + +\emph{BN:} Last but not least, here's a little script to generate aliases to +your lists (if for some reason you can/will not have them automatically picked +up using \file{contrib/qmail-to-mailman.py}): + +This script is for the Mailman 2.0 series: + +\begin{verbatim} +#!/bin/sh +if [ $# = 1 ]; then + i=$1 + echo Making links to $i in the current directory... + echo "|preline /home/mailman/mail/mailman post $i" > .qmail-$i + echo "|preline /home/mailman/mail/mailman mailowner $i" > .qmail-$i-admin + echo "|preline /home/mailman/mail/mailman mailowner $i" > .qmail-$i-owner + echo "|preline /home/mailman/mail/mailman mailowner $i" > .qmail-owner-$i + echo "|preline /home/mailman/mail/mailman mailcmd $i" > .qmail-$i-request +fi +\end{verbatim} +% $ - emacs turd + +\begin{notice}[note] +This is for a new Mailman 2.1 installation. Users upgrading from +Mailman 2.0 would most likely change \file{/usr/local/mailman} to +\file{/home/mailman}. If in doubt, refer to the \longprogramopt{prefix} +option passed to \program{configure} during compile time. +\end{notice} + +\begin{verbatim} +#!/bin/sh +if [ $# = 1 ]; then + i=$1 + echo Making links to $i in the current directory... + echo "|preline /usr/local/mailman/mail/mailman post $i" > .qmail-$i + echo "|preline /usr/local/mailman/mail/mailman admin $i" > .qmail-$i-admin + echo "|preline /usr/local/mailman/mail/mailman bounces $i" > .qmail-$i-bounces + # The following line is for VERP + # echo "|preline /usr/local/mailman/mail/mailman bounces $i" > .qmail-$i-bounces-default + echo "|preline /usr/local/mailman/mail/mailman confirm $i" > .qmail-$i-confirm + echo "|preline /usr/local/mailman/mail/mailman join $i" > .qmail-$i-join + echo "|preline /usr/local/mailman/mail/mailman leave $i" > .qmail-$i-leave + echo "|preline /usr/local/mailman/mail/mailman owner $i" > .qmail-$i-owner + echo "|preline /usr/local/mailman/mail/mailman request $i" > .qmail-$i-request + echo "|preline /usr/local/mailman/mail/mailman subscribe $i" > .qmail-$i-subscribe + echo "|preline /usr/local/mailman/mail/mailman unsubscribe $i" > .qmail-$i-unsubscribe +fi +\end{verbatim} +% $ - emacs turd + +\subsubsection{Information on VERP} + +You will note in the alias generating script for 2.1 above, there is a line +for VERP that has been commented out. If you are interested in VERP there are +two options. The first option is to allow Mailman to do the VERP formatting. +To activate this, uncomment that line and add the following lines to your +\file{mm_cfg.py} file: + +\begin{verbatim} + VERP_FORMAT = '%(bounces)s-+%(mailbox)s=%(host)s' + VERP_REGEXP = r'^(?P<bounces>.*?)-\+(?P<mailbox>[^=]+)=(?P<host>[^@]+)@.*$' +\end{verbatim} +% $ - emacs turd + +The second option is a patch on SourceForge located at: + +\url{http://sourceforge.net/tracker/?func=detail\&atid=300103\&aid=645513\&group_id=103} + +This patch currently needs more testing and might best be suitable for +developers or people well familiar with qmail. Having said that, this patch +is the more qmail-friendly approach resulting in large performance gains. + +\subsubsection{Virtual mail server} + +As mentioned in the \ref{qmail-issues} section for a virtual mail server, a +patch under testing is located at: + +\url{http://sf.net/tracker/index.php?func=detail\&aid=621257\&group_id=103\&atid=300103} + +Again, this patch is for people familiar with their qmail installation. + +\subsubsection{More information} + +You might be interested in some information on modifying footers that Norbert +Bollow has written about Mailman and qmail, available here: + + \url{http://mailman.cis.to/qmail-verh/} + +\section{Review your site defaults\label{customizing}} + +Mailman has a large number of site-wide configuration options which you should +now review and change according to your needs. Some of the options control +how Mailman interacts with your environment, and other options select defaults +for newly created lists\footnote{In general, changing the list defaults +described in this section will not affect any already created lists. To make +changes after a list has been created, use the web interface or the command +line scripts, such as \program{bin/withlist} and \program{bin/config_list}.}. +There are system tuning parameters and integration options. + +The full set of site-wide defaults lives in the +\file{\var{\$prefix}/Mailman/Defaults.py} file, however you should +\strong{never} modify this file! Instead, change the \file{mm_cfg.py} file in +that same directory. You only need to add values to \file{mm_cfg.py} that are +different than the defaults in \file{Defaults.py}, and future Mailman upgrades +are guaranteed never to touch your \file{mm_cfg.py} file. + +The \file{Defaults.py} file is documented extensively, so the options are not +described here. The \file{Defaults.py} and \file{mm_cfg.py} are both +\ulink{Python}{http://www.python.org} files so valid Python syntax must be +maintained or your Mailman installation will break. + +\begin{notice}[note] +Do \strong{not} change the \var{HOME_DIR} or \var{MAILMAN_DIR} variables. +These are set automatically by the \program{configure} script, and you will +break your Mailman installation by if you change these. +\end{notice} + +You should make any changes to \file{mm_cfg.py} using the account you +installed Mailman under in the \ref{building} section. + +\section{Create a site-wide mailing list} + +After you have completed the integration of Mailman and your mail server, you +need to create a ``site-wide'' mailing list. This is the one that password +reminders will appear to come from, and it is required for proper Mailman +operation. Usually this should be a list called \code{mailman}, but if you +need to change this, be sure to change the \var{MAILMAN_SITE_LIST} variable in +\file{mm_cfg.py}. You can create the site list with this command, following +the prompts: + +\begin{verbatim} + % bin/newlist mailman +\end{verbatim} + +Now configure your site list. There is a convenient template for a generic +site list in the installation directory, under \file{data/sitelist.cfg} which +can help you with this. You should review the configuration options in the +template, but note that any options not named in the \file{sitelist.cfg} file +won't be changed. + +The template can be applied to your site list by +running: + +\begin{verbatim} + % bin/config_list -i data/sitelist.cfg mailman +\end{verbatim} + +After applying the \file{sitelist.cfg} options, be sure you review the +site list's configuration via the admin pages. + +You should also subscribe yourself to the site list. + +\section{Set up cron} + +Several Mailman features occur on a regular schedule, so you must set up +\program{cron} to run the right programs at the right time\footnote{Note that +if you're upgrading from a previous version of Mailman, you'll want to install +the new crontab, but be careful if you're running multiple Mailman +installations on your site! Changing the crontab could mess with other +parallel Mailman installations.}. + +If your version of crontab supports the \programopt{-u} option, you must be +root to do this next step. Add \file{\var{\$prefix}/cron/crontab.in} as a +crontab entry by executing these commands: + +\begin{verbatim} + % cd $prefix/cron + % crontab -u mailman crontab.in +\end{verbatim} + +If you used the \longprogramopt{with-username} option, use that user name +instead of \code{mailman} for the \programopt{-u} argument value. If your +crontab does not support the \programopt{-u} option, try these commands: + +\begin{verbatim} + % cd $prefix/cron + % su - mailman + % crontab crontab.in +\end{verbatim} + +\section{Start the Mailman qrunner} + +Mailman depends on a process called the ``qrunner'' to delivery all +email messages it sees. You must start the qrunner by executing the following +command from the \var{\$prefix} directory: + +\begin{verbatim} + % bin/mailmanctl start +\end{verbatim} + +You probably want to start Mailman every time you reboot your system. Exactly +how to do this depends on your operating system. If your OS supports the +\program{chkconfig} command (e.g. RedHat and Mandrake Linuxes) you can +do the following (as root, from the Mailman install directory): + +\begin{verbatim} + % cp scripts/mailman /etc/init.d/mailman + % chkconfig --add mailman +\end{verbatim} + +Note that \file{/etc/init.d} may be \file{/etc/rc.d/init.d} on some systems. + +On Gentoo Linux, you can do the following: + +\begin{verbatim} + % cp scripts/mailman /etc/init.d/mailman + % rc-update add mailman default +\end{verbatim} + +On Debian, you probably want to use: + +\begin{verbatim} + % update-rc.d mailman defaults +\end{verbatim} + +For \UNIX{}es that don't support \program{chkconfig}, you might try the +following set of commands: + +\begin{verbatim} + % cp scripts/mailman /etc/init.d/mailman + % cp misc/mailman /etc/init.d + % cd /etc/rc.d/rc0.d + % ln -s ../init.d/mailman K12mailman + % cd ../rc1.d + % ln -s ../init.d/mailman K12mailman + % cd ../rc2.d + % ln -s ../init.d/mailman S98mailman + % cd ../rc3.d + % ln -s ../init.d/mailman S98mailman + % cd ../rc4.d + % ln -s ../init.d/mailman S98mailman + % cd ../rc5.d + % ln -s ../init.d/mailman S98mailman + % cd ../rc6.d + % ln -s ../init.d/mailman K12mailman +\end{verbatim} + +\section{Check the hostname settings} + +You should check the values for \var{DEFAULT_EMAIL_HOST} and +\var{DEFAULT_URL_HOST} in \file{Defaults.py}. Make any necessary changes in +the \file{mm_cfg.py} file, \strong{not} in the \file{Defaults.py} file. If you +change either of these two values, you'll want to add the following afterwards +in the \file{mm_cfg.py} file: + +\begin{verbatim} + add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST) +\end{verbatim} + +You will want to run the \program{bin/fix_url.py} to change the domain of any +existing lists. + +\section{Create the site password} + +There are two site-wide passwords that you can create from the command line, +using the \program{bin/mmsitepass} script. The first is the ``site password'' +which can be used anywhere a password is required in the system. The site +password will get you into the administration page for any list, and it can be +used to log in as any user. Think \code{root} for a Unix system, so pick this +password wisely! + +The second password is a site-wide ``list creator'' password. You can use +this to delegate the ability to create new mailing lists without providing all +the privileges of the site password. Of course, the owner of the site +password can also create new mailing lists, but the list creator password is +limited to just that special role. + +To set the site password, use this command: + +\begin{verbatim} + % $prefix/bin/mmsitepass <your-site-password> +\end{verbatim} + +To set the list creator password, use this command: + +\begin{verbatim} + % $prefix/bin/mmsitepass -c <list-creator-password> +\end{verbatim} + +It is okay not to set a list creator password, but you probably do want a site +password. + +\section{Create your first mailing list} + +For more detailed information about using Mailman, including creating and +configuring mailing lists, see the Mailman List Adminstration Manual. These +instructions provide a quick guide to creating your first mailing list via the +web interface: + +\begin{itemize} +\item Start by visiting the url \code{http://my.dom.ain/mailman/create}. + +\item Fill out the form as described in the on-screen instructions, and in the + ``List creator's password'' field, type the password you entered in + section \ref{customizing}. Type your own email address for the + ``Initial list owner address'', and select ``Yes'' to notify the list + administrator. + +\item Click on the ``Create List'' button. + +\item Check your email for a message from Mailman informing you that your new + mailing list was created. + +\item Now visit the list's administration page, either by following the link + on the confirmation web page or clicking on the link from the email + Mailman just sent you. Typically the url will be something like + \code{http://my.dom.ain/mailman/admin/mylist}. + +\item Type in the list's password and click on ``Let me in...'' + +\item Click on ``Membership Management'' and then on ``Mass Subscription''. + +\item Enter your email address in the big text field, and click on ``Submit + Your Changes''. + +\item Now go to your email and send a message to \code{mylist@my.dom.ain}. + Within a minute or two you should see your message reflected back to you + via Mailman. +\end{itemize} + +Congratulations! You've just set up and tested your first Mailman mailing +list. If you had any problems along the way, please see the +\ref{troubleshooting} section. + +\section{Troubleshooting\label{troubleshooting}} + +If you encounter problems with running Mailman, first check the question and +answer section below. If your problem is not covered there, check the +\ulink{online help}{http://www.list.org/help.html}, including the +\ulink{FAQ}{http://www.list.org/faq.html} and the +\ulink{interactive FAQ wizard}{http://www.python.org/cgi-bin/faqw-mm.py}. + +Also check for errors in your syslog files, your mail and web server log files +and in Mailman's \file{\var{\$prefix}/logs/error} file. If you're still +having problems, you should send a message to the +\email{mailman-users@python.org} mailing list\footnote{You must subscribe to +this mailing list in order to post to it, but the mailing list's archives are +publicly visible.}; see +\url{http://mail.python.org/mailman/listinfo/mailman-users} for more +information. + +Be sure to including information on your operating system, which version of +Python you're using, and which version of Mailman you're installing. + +Here is a list of some common questions and answers: + +\begin{itemize} + +\item \strong{Problem:} All Mailman web pages give a 404 File not found + error. + + \strong{Solution:} Your web server has not been set up properly for + handling Mailman's CGI programs. Make sure you have: + + \begin{enumerate} + \item configured the web server to give permissions to + \file{\var{\$prefix}/cgi-bin} + + \item restarted the web server properly. + \end{enumerate} + + Consult your web server's documentation for instructions on how to do + check these issues. + +\item \strong{Problem:} All Mailman web pages give an "Internal Server + Error". + + \strong{Solution:} The likely problem is that you are using the wrong + user or group for the CGI scripts. Check your web server's log files. + If you see a line like + + \begin{verbatim} + Attempt to exec script with invalid gid 51, expected 99 + \end{verbatim} + + you will need to reinstall Mailman, specifying the proper CGI group id, + as described in the \label{building} section. + +\item \strong{Problem:} I send mail to the list, and get back mail saying the + list is not found! + + \strong{Solution:} You probably didn't add the necessary aliases to the + system alias database, or you didn't properly integrate Mailman with + your mail server. Perhaps you didn't update the alias database, or your + system requires you to run \program{newaliases} explicitly. Refer to + your server specific instructions in the \ref{mail-server} section. + +\item \strong{Problem:} I send mail to the list, and get back mail saying, + ``unknown mailer error''. + + \strong{Solution:} The likely problem is that you are using the wrong + user or group id for the mail wrappers. Check your mail server's log + files; if you see a line like + + \begin{verbatim} + Attempt to exec script with invalid gid 51, expected 99 + \end{verbatim} + + you will need to reinstall Mailman, specifying the proper mail group id + as described in the \label{building} section. + +\item \strong{Problem:} I use Postfix as my mail server and the mail wrapper + programs are logging complaints about the wrong GID. + + \strong{Solution:} Make sure the \file{\var{\$prefix}/data/aliases.db} + file is user owned by \code{mailman} (or whatever user name you used + in the \program{configure} command). If this file is not user owned by + \code{mailman}, Postfix will not run the mail programs as the correct + user. + +\item \strong{Problem:} I use Sendmail as my mail server, and when I send mail + to the list, I get back mail saying, ``sh: mailman not available for + sendmail programs''. + + \strong{Solution:} Your system uses the Sendmail restricted shell + (smrsh). You need to configure smrsh by creating a symbolic link from + the mail wrapper (\file{\var{\$prefix}/mail/mailman}) to the directory + identifying executables allowed to run under smrsh. + + Some common names for this directory are \file{/var/admin/sm.bin}, + \file{/usr/admin/sm.bin} or \file{/etc/smrsh}. + + Note that on Debian Linux, the system makes \file{/usr/lib/sm.bin}, + which is wrong, you will need to create the directory + \file{/usr/admin/sm.bin} and add the link there. Note further any + aliases \program{newaliases} spits out will need to be adjusted to point + to the secure link to the wrapper. + +\item \strong{Problem:} I messed up when I called \program{configure}. How + do I clean things up and re-install? + + \strong{Solution:} + + \begin{verbatim} + % make clean + % ./configure --with-the-right-options + % make install + \end{verbatim} + +\end{itemize} + +\section{Platform and operating system notes} + +Generally, Mailman runs on any POSIX-based system, such as Solaris, the +various BSD variants, Linux systems, MacOSX, and other generic \UNIX{} +systems. It doesn't run on Windows. For the most part, the generic +instructions given in this document should be sufficient to get Mailman +working on any supported platform. Some operating systems have additional +recommended installation or configuration instructions. + +\subsection{GNU/Linux issues} + +Linux seems to be the most popular platform for running Mailman. Here are +some hints on getting Mailman to run on Linux: + +\begin{itemize} +\item If you are getting errors with hard link creations and/or you are using + a special secure kernel (securelinux/openwall/grsecurity), see the file + \file{contrib/README.check_perms_grsecurity} in the Mailman source + distribution. + + Note that if you are using Linux Mandrake in secure mode, you are + probably concerned by this. + +\item Apparently Mandrake 9.0 changed the permissions on gcc, so if you build + as the \code{mailman} user, you need to be sure \code{mailman} is in the + \code{cctools} group. + +\item If you installed Python from your Linux distribution's package manager + (e.g. .rpms for Redhat-derived systems or .deb for Debian), you must + install the ``development'' package of Python, or you may not get + everything you need. + + For example, using Python 2.2 on Debian, you will need to install the + \code{python2.2-dev} package. On Redhat, you probably need the + \code{python2-devel} package. + + If you install Python from source, you should be fine. + + One symptom of this problem, although for unknown reasons, is that you + might get an error such as this during your install: + + \begin{verbatim} + Traceback (most recent call last): + File "bin/update", line 44, in ? + import paths + ImportError: No module named paths + make: *** [update] Error 1 + \end{verbatim} + + If this happens, install the Python development package and try + \program{configure} and \program{make install} again. Or install the + latest version of Python from source, available from + \url{http://www.python.org}. + + This problem can manifest itself in other Linux distributions in + different ways, although usually it appears as \code{ImportErrors}. +\end{itemize} + +\subsection{BSD issues\label{bsd-issues}} + +Vivek Khera writes that some BSDs do nightly security scans for setuid file +changes. setgid directories also come up on the scan when they change. Also, +the setgid bit is not necessary on BSD systems because group ownership is +automatically inherited on files created in directories. On other \UNIX{}es, +this only happens when the directory has the setgid bit turned on. + +To install without turning on the setgid bit on directories, simply pass in +the \var{DIRSETGID} variable to \program{make}, after you've run +\program{configure}: + +\begin{verbatim} + % make DIRSETGID=: install +\end{verbatim} + +This disables the \program{chmod g+s} command on installed directories. + +\subsection{MacOSX issues} + +Many people run Mailman on MacOSX. Here are some pointers that have been +collected on getting Mailman to run on MacOSX. + +\begin{itemize} +\item Jaguar (MacOSX 10.2) comes with Python 2.2. While this isn't the very + latest stable version of Python, it ought to be sufficient to run + Mailman 2.1. + +\item David B. O'Donnell has a web page describing his configuration of + Mailman 2.0.13 and Postfix on MacOSX Server. + + \url{http://www.afp548.com/Articles/mail/python-mailman.html} + +\item Kathleen Webb posted her experiences in getting Mailman running on + Jaguar using Sendmail. + + \url{http://mail.python.org/pipermail/mailman-users/2002-October/022944.html} + +\item Panther server (MacOSX 10.3) comes with Mailman; Your operating system + should contain documentation that will help you, and Apple has a tech + document about a problem you might encounter running Mailman on Mac OS X + Server 10.3: + + \url{http://docs.info.apple.com/article.html?artnum=107889} +\end{itemize} + +Terry Allen provides the following detailed instructions on running Mailman on +the 'client' version of OSX, or in earlier versions of OSX: + +Mac OSX 10.3 and onwards has the basics for a successful Mailman installation. +Users of earlier versions of Mac OSX contains Sendmail and those users should +look at the Sendmail installation section for tips. You should follow the +basic installation steps as described earlier in this manual, substituting as +appropriate, the steps outlined in this section. + +By default, Mac OSX 10.3 'client' version does not have a fully functional +version of Postfix. Setting up a working MTA such as Postfix is beyond the +scope of this guide and you should refer to \url{http://www.postfix.org} for +tips on getting Postfix running. An easy way to set Postfix up is to install +and run Postfix Enabler, a stand-alone tool for configuring Postfix on Mac +OSX, available from +\url{http://www.roadstead.com/weblog/Tutorials/PostfixEnabler.html}. + +Likewise, Mac OSX 'client' version from 10.1 onwards includes a working Apache +webserver. This is switched on using the System Preferences control panel +under the 'Sharing tab'. A useful tool for configuring the Apache on Mac OSX +is Webmin, which can be obtained from +\url{http://www.webmin.com}. + +Webmin can also perform configuration for other system tasks, including +Postfix, adding jobs to your crontab, adding user and groups, plus adding +startup and shutdown jobs. + +In a stock installation of OSX, the requirement for Mailman is to have Python +installed. Python is not installed by default, so it is advised that you +install the developer's tools package, which may have been provided with your +system. It can also be downloaded from the Apple developer site at +\url{http://connect.apple.com}. Not only is the developer tools package an +essential requirement for installing Mailman, but it will come in handy at a +later date should you need other tools. The developer's tools are also know +by the name XCode tools. + +As a minimum, the Python version should be 2.2, but 2.3 is recommended. + +If you wish to add a user and group using the command line in OSX instead of +via Webmin or another GUI interface, open your terminal application and follow +the commands as indicated below - do not type the comments following the +\samp{\#} since they are just notes: + +\begin{verbatim} +sudo tcsh +niutil -create / /users/mailman +niutil -createprop / /users/mailman name mailman +# Note that xxx is a free user ID number on your system +niutil -createprop / /users/mailman uid xxx +niutil -createprop / /users/mailman home /usr/local/mailman +mkdir -p /usr/local/mailman +niutil -createprop / /users/mailman shell /bin/tcsh +passwd mailman +# To prevent malicious hacking, supply a secure password here +niutil -create / /groups/mailman +niutil -createprop / /groups/mailman name mailman +# Note that xxx is a free group ID number on your system +niutil -createprop / /groups/mailman gid xxx +niutil -createprop / /groups/mailman passwd '*' +niutil -createprop / /groups/mailman users 'mailman' +chown mailman:mailman /usr/local/mailman +cd /usr/local/mailman +chmod a+rx,g+ws . +exit +su mailman +\end{verbatim} + +For setting up Apache on OSX to handle Mailman, the steps are almost identical +and the configuration file on a stock Mac OSX Client version is stored in the +nearly standard location of \file{/etc/httpd/httpd.conf}. + +The \ulink{AFP548.com}{http://www.afp548.com} site has a time-saving automated startup item creator for +Mailman, which can be found at +\url{http://www.afp548.com/Software/MailmanStartup.tar.gz} + +To install it, copy it into your \file{/Library/StartupItems} directory. As +the root or superuser, from the terminal, enter the following: + +\begin{verbatim} +gunzip MailmanStartup.tar.gz +tar xvf MailmanStartup.tar +\end{verbatim} + +It will create the startup item for you so that when you reboot, Mailman will +start up. + +\end{document} diff --git a/docs/howtos/mailman-member-es.tex b/docs/howtos/mailman-member-es.tex new file mode 100644 index 000000000..2b69cde58 --- /dev/null +++ b/docs/howtos/mailman-member-es.tex @@ -0,0 +1,1631 @@ +% Complete documentation on the extended LaTeX mark up used for Python +% documentation is available in ``Documenting Python'', which is part +% of the standard documentation for Python. It may be found online +% at: +% +% http://www.python.org/doc/current/doc/doc.html + +\documentclass{howto} + +% This is a template for short or medium-size Python-related documents, +% mostly notably the series of HOWTOs, but it can be used for any +% document you like. + +% The title should be descriptive enough for people to be able to find +% the relevant document. +\title{GNU~Mailman Manual~del~Suscriptor~de~Listas} + +% Increment the release number whenever significant changes are made. +% The author and/or editor can define 'significant' however they like. +\release{0.03} +% CHANGELOG +% 0.03 Proofreading changes +% 0.02 Proofreading changes +% - proofread by Margaret McCarthy and Jason Walton +% 0.01 First draft of document + +% At minimum, give your name and an email address. You can include a +% snail-mail address if you like. +\author{Terri Oda} +\authoraddress{terri(en)zone12.com} +% Translated by "Pablo Chamorro C." pchamorro(en)ingeomin.gov.co + +\date{\today} % XXX update before tagging release! +\release{2.1} % software release, not documentation +\setreleaseinfo{} % empty for final release +\setshortversion{2.1} % major.minor only for software + +\usepackage[spanish]{babel} +\usepackage[latin1]{inputenc} +\hyphenation{listinfo listinfo} +\hyphenation{NOMBRELISTA NOMBRELISTA} +\hyphenation{private private} +\hyphenation{digest digest} +\hyphenation{password password} +\renewcommand{\note}{\bf Nota: \rm} +\renewcommand{\warning}{\bf Advertencia: \rm} + +\begin{document} +\maketitle + +% This makes the Abstract go on a separate page in the HTML version; +% if a copyright notice is used, it should go immediately after this. +% +\ifhtml +\chapter*{Prefacio\label{front}} +\fi + +% Copyright statement should go here, if needed. +% ... + +% The abstract should be a paragraph or two long, and describe the +% scope of the document. +\begin{abstract} +\noindent +Este documento describe el interfaz del suscriptor de listas GNU Mailman 2.1. +Este manual contiene instrucciones para suscripción, desuscripción, consulta +de los archivos de la lista, edición de opciones de suscriptor, obtención de +recordatorios de contraseñas y otras tareas a nivel del suscriptor. También +responde algunas preguntas comunes de interés para usuarios de listas Mailman. +\end{abstract} + +\tableofcontents + +% ============================================================================ +\section{Introducci\'on} +Este documento tiene como propósito ayudar a los usuarios del gestor de listas +de correo Mailman 2.1, a aprender a usar las características que este software, +pone a su disposición, incluyendo el uso de los interfaces web y de correo +electrónico para suscripción, desuscripción, cambio de opciones de suscriptor +y otras tareas a este nivel. También responde a algunas preguntas comunes de +interés para usuarios de listas Mailman. + +La información para administradores de listas y de sitio se proporciona en +otros documentos. + +Este documento se debe leer en orden. Si usted simplemente está buscando una +respuesta a una pregunta específica, consulte la sección o subsección que +necesite, donde encontrará referencias a otras secciones, en caso de ser +necesario o de potencial utilidad. + +\note{Para los propósitos de este documento, se asume que el lector está +familiarizado con los términos comunes relacionados con correo electrónico +(por ejemplo: asunto, cuerpo del mensaje) y sitios web (por ejemplo: +cuadro de lista desplegable, botón), o los puede consultar. También se asume +que el lector maneja suficientemente bien su programa de correo +electrónico y navegador web, de tal forma que instrucciones +tales como ``envíe correo electrónico a esta dirección'', ``visite esta +página web'' o ``rellene el formulario proporcionado'' no revistan duda. Si +usted no está familiarizado con estas acciones, sería conveniente que +consulte documentación adicional para que aprenda a hacer estas +tareas con su software preferido.} + +% ---------------------------------------------------------------------------- +\subsection{Reconocimientos} + +Varias secciones de este documento se tomaron del Manual de Administrador de +Listas de Mailman, escritas por Barry A. Warsaw, y también de la ayuda +integrada de Mailman 2.1. + +El resto de este manual fue escrito por Terri Oda. Terri ha estado manteniendo +listas de correo desde el año que alcanzó la edad para votar en Canada, +aunque las dos cosas no están relacionadas. Actualmente administra las +listas de correo de Linuxchix.org, así como tambien varios servidores más +pequeños. En el mundo ajeno a la administración de listas, Terri está haciendo +un trabajo con un detector de spam de vida artificial, y realmente es más una +programadora que una escritora de temas técnicos. + +Gracias a Margaret McCarthy, Jason Walton y Barry Warsaw por su ayuda en la +revisión y mejoramiento de este manual. + +Gracias también a Ikeda Soji, quien hizo una traducción Japonesa de este +documento. + +%WRITEME: More here. Do we need a license statement here? + +% ---------------------------------------------------------------------------- +\subsection{¿Qué es una lista de correo?} + +Una lista de correo es simplemente un grupo de direcciones a las cuales se +envía la misma información. Si usted fuera un editor de una revista, +tendría una lista de direcciones de correo postal de todos los suscriptores +de la revista. En el caso de las listas de correo electrónico, se usa +una lista de direcciones de correo electrónico de gente interesada en +escuchar o discutir sobre un tema dado. + +Entre los tipos más comunes de listas de correo electrónico están las listas +de anuncios y las listas de discusión. + +Las listas de anuncios sirven para que una o más personas puedan informar +a un grupo de personas, en forma similar a cómo hace un editor de una +revista que utiliza su lista de direcciones postales para distribuir las +revistas. Por ejemplo, una banda musical podría usar una lista de anuncios +para facilitar que sus seguidores estén al tanto de sus conciertos venideros. + +Una lista de discusión permite a un grupo de personas debatir temáticas entre +ellos mismos, pudiendo cada uno enviar mensajes a la lista y hacer que se +distribuyan a todos los integrantes del grupo. Esta discusión también se +puede moderar, de manera que sólo los mensajes a los cuales el administrador +les haya dado el visto bueno serán distribuidos a la lista. También es posible +hacer que sólo a ciertas personas se les permita enviar mensajes a la lista. +Por ejemplo, un grupo de entusiastas de modelos de aviones podrían usar una +lista de discusión para compartir consejos útiles sobre la construcción de +modelos y aviación. + +Algunos términos comunes: +\begin{itemize} + \item Un ``envío'' típicamente denota un mensaje que se envía a una lista + de correo. (Piense en poner un mensaje en un tablón de anuncios.) + \item A las personas que son parte de una lista de correo electrónico + normalmente se las llama ``suscriptores'' de la lista. + \item ``Los administradores de las listas'' son personas encargadas de, + mantener esas listas. Las listas pueden tener uno o más administradores. + \item Una lista puede tener también personas encargadas de leer los + mensajes enviados a la lista y decidir si éstos deberían ser distribuidos + a todos los suscriptores. A estas personas se les llaman moderadores. + \item A menudo varias listas de correo electrónico utilizan el + mismo software. A la persona que mantiene el software gracias al cual + funcionan las listas se le llama el ``administrador del sitio.'' A + menudo el administrador del sitio también administra listas individuales. +\end{itemize} +% ---------------------------------------------------------------------------- +\subsection{GNU Mailman} + +GNU Mailman es un programa que le permite administrar listas de correo electrónico, +con soporte para un rango amplio de tipos de listas de correo, tales como listas +de discusión general y listas de sólo anuncios. Mailman tiene características +extensivas que lo hacen bueno para los suscriptores, tales como: facilidad +en la suscripción y desuscripción, opciones de privacidad, y capacidad de +detener temporalmente la recepción de los envíos a la lista. En este documento +se describen las características de los suscriptores de las listas. + +Mailman también tiene muchas características que lo hacen atractivo a +administradores de listas y administradores de sitio. Estas características +están cubiertas en los manuales del administrador de listas y del sitio. + +% ============================================================================ +\section{Pasando de nuestros ejemplos a las listas reales} + +A menudo es más fácil, dar un ejemplo que explicar exactamente +como encontrar la dirección de una lista específica. Por ello en este manual +se incluirán ejemplos para una lista ficticia llamada +\email{NOMBRELISTA@DOMINIO} cuya página de información se encontraría en +\url{http://SERVIDORWEB/mailman/listinfo/NOMBRELISTA}. + +Ninguna de estas direcciones es real, pero muestran la forma típica que toman +las direcciones de las listas. Las palabras en máyusculas representan la +parte que se debería cambiar para adecuar los ejemplos a casos reales. Aunque +las configuraciones específicas para las listas pueden ser diferentes, usted +podrá reemplazar las palabras dadas en letras mayúsculas con los valores +concretos de una lista real: + +\begin{description} + \item [NOMBRELISTA] El nombre de su lista. + \item [DOMINIO] El nombre del servidor de correo que gestiona la lista. + \item [SERVIDORWEB] El nombre del servidor web que gestiona el interfaz web de la lista. Este puede ser el mismo utilizado como DOMINIO, y a menudo se refiere a la misma máquina, pero no tiene por qué ser idéntico. +\end{description} + +Por ejemplo, si usted estuviera interesado en la lista de usuarios mailman +(mailman-users), tendría que realizar las siguientes sustituciones: +NOMBRELISTA=mailman-users, DOMINIO=python.org, SERVIDORWEB=mail.python.org. +De esta forma, para la lista de correo \email{mailman-users@python.org}, +la página de información de esa lista se encontraría en la dirección URL +\url{http://mail.python.org/mailman/listinfo/mailman-users}. Estas, a +diferencia de la mayoría de ejemplos dados en este documento, son direcciones +reales. + +La mayoría de las listas tendrán esta información almacenada en las cabeceras +\mailheader{List-*}. Muchos programas de correo ocultan estas cabeceras en +forma predeterminada, así que si desea darles un vistazo debe hacer que su +programa de correo le muestre todas las cabeceras del mensaje. + +% ============================================================================ +\section{Interfaces de Mailman} +Mailman tiene dos interfaces diferentes para los suscriptores de las listas: +el interfaz web y el interfaz de correo electrónico. La mayoría de los +suscriptores de las listas de discusión usan el interfaz de correo electrónico, +ya que éste incluye las direcciones de correo electrónico que usted utiliza +para enviar mensajes a todos los suscriptores de esa lista. + +El interfaz que se use para cambiar las opciones es cuestión de gustos, ya que +la mayoría de las opciones que se pueden cambiar utilizando el interfaz web +(pero no todas) también se pueden cambiar por correo electrónico. Usualmente +es más fácil utilizar el interfaz web para cambiar opciones, ya que el interfaz +web proporciona instrucciones integradas, pero hay ocasiones en las cuales las +personas prefieren el interfaz de correo electrónico, así que se proporcionan +los dos. + +% ---------------------------------------------------------------------------- +\subsection{El interfaz web\label{sec:web}} +Para mucha gente, el interfaz web de Mailman es su característica más destacable +ya que resulta mucho más fácil para suscriptores y administradores saber +que opciones están disponibles y lo que hace cada una de ellas. + +Cada lista de correo también queda accesible desde varias páginas web. +Note que las direcciones URL exactas las configura el administrador +del sitio, así que pueden ser diferentes a las que se describen abajo. +En seguida se describe la configuración más común, pero debe consultar los +detalles con su administrador de sitio o proveedor del servicio. + +\hyphenchar\font=-1 +\begin{description} + \item [Página de información de la lista (listinfo)] + \begin{itemize} + \item Usualmente se encuentra en + \url{http://SERVIDORWEB/mailman /listinfo/NOMBRELISTA} + (por ejemplo, + \url{http://listas.ejemplo.com/mailman/listinfo/milista}). + + \item La página listinfo es el punto de inicio del interfaz + del suscriptor. Como se podría asumir por el nombre dado, esta + página contiene información acerca de la lista NOMBRELISTA. A + partir de esta página se puede llegar al resto de páginas del + suscriptor, así que realmente sólo se necesita conocer esta + dirección. + + \end{itemize} + + \item [Página de opciones del suscriptor] + \begin{itemize} + \item Usualmente se encuentra en + \url{http://SERVIDOR/mailman/options /NOMBRELISTA/DIRECCIONCORREO} + (por ejemplo, + \url{http://listas.ejemplo.com/mailman/options/milista + /maria@aqui.com}). + + \item También se puede acceder a esta página yendo a la página + listinfo y escribiendo su dirección de correo en el cuadro de texto + junto al botón etiquetado ``Opciones de Edición y Desuscripción'' + (este está cerca del final de la página). + + \item La página de opciones de suscriptor le permite + entrar/salir y cambiar la configuración de sus opciones, así como + también desuscribirse u obtener una copia de su contraseña por + correo electrónico. + + \item \textbf{Para acceder a su página de opciones de + suscriptor}: Si usted aún no ha ingresado, encontrará un cuadro + de texto cerca de la parte superior de la página para introducir + su contraseña (si no conoce su contraseña, mire la + sección \ref{sec:getpassword} para más información sobre cómo + obtener su contraseña). Escriba su contraseña en el cuadro de texto + mencionado y haga clic en el botón ``Cambiar''. + + \item Una vez haya ingresado, podrá mirar y cambiar toda la + configuración personal de su lista. + + \end{itemize} + \item [Archivos de la Lista] + \begin{itemize} + \item Usualmente los encontrará en + \url{http://SERVIDORWEB/pipermail/NOMBRELISTA} si la lista se archiva + públicamente, y + \url{http://SERVIDORWEB/mailman/private/NOMBRELISTA} si la lista se + archiva en forma privada (por ejemplo, + \url{http://listas.ejemplo.com/pipermail/milista} o + \url{http://listas.ejemplo.com/mailman/private/milista}). + + \item Las páginas de los archivos de la lista disponen de una copia de + los mensajes enviados a la lista, usualmente agrupados por + mes. En cada grupo mensual, los envíos se indexan por autor, fecha, + hilo y asunto. + + \item \note{Pipermail es el nombre del archivador predeterminado que + viene con Mailman, pero hay otros programas de archivado disponibles.} + + \item Si el archivo es privado, para acceder usted necesitará + suministrar su dirección de correo de suscriptor y su contraseña + (mire en la Sección~\ref{sec:getpassword} mayor información sobre + cómo obtener su contraseña). + \end{itemize} +\end{description} + +% ---------------------------------------------------------------------------- +\subsection{El interfaz de correo electrónico\label{sec:email}} + +Toda lista de correo tiene un conjunto de direcciones de correo electrónico +a las cuales se pueden enviar los mensajes, incluyendo, una dirección +para enviar los mensajes a la lista, una dirección destinada a recibir +mensajes devueltos y direcciones para procesar órdenes de correo. +Para una lista de correo ficticia llamada +\email{milista@ejemplo.com}, usted encontraría estas direcciones: + +\begin{itemize} +\item \email{milista@ejemplo.com} -- esta es la dirección de correo que la gente + debería usar para enviar mensajes a la lista. + +\item \email{milista-join@ejemplo.com} -- enviando un mensaje a esta dirección, + un nuevo miembro puede solicitar suscripción a la lista, pero si se hace, + Mailman ignora tanto la cabecera de \mailheader{Asunto} como el cuerpo de + tal mensaje. Note que milista-subscribe@ejemplo.com es un alias para la + dirección -join. + +\item \email{milista-leave@ejemplo.com} -- enviando un mensaje a esta dirección + un miembro puede solicitar que se le dé de baja de la lista. Igual que con + la dirección -join, se ignora la cabecera \mailheader{Asunto} y el cuerpo + del mensaje. Note que milista-unsubscribe@ejemplo.com es un alias para + la dirección -leave. + +\item \email{milista-owner@ejemplo.com} -- Esta dirección permite contactar al + al propietario o moderador de la lista. Esta es la dirección que deberá + utilizar cuando necesite contactar a la persona o personas encargadas de + la lista. + +\item \email{milista-request@ejemplo.com} -- Esta dirección está asociada a un + robot de correo que procesa órdenes de correo electrónico que se pueden usar + para definir las distintas opciones de los suscriptores, así + como también para procesar otras órdenes. En el Apéndice~\ref{a:commands} se + proporciona una lista de las órdenes de correo electrónico que reconoce el + robot. + +\item \email{milista-bounces@ejemplo.com} -- Esta dirección se usa para el + procesamiento automático de los mensajes devueltos de Mailman. + +\item \email{milista-confirm@ejemplo.com} -- Esta dirección se usa para + procesar mensajes de confirmación de las solicitudes de suscripción y + desuscripción. +\end{itemize} + +También hay una dirección -admin que permite contactar a los +administradores de las listas. Esta dirección solo existe por +compatibilidad con las versiones más antigüas de Mailman. + +Para cambiar las opciones, se usa la dirección \email{NOMBRELISTA-request} +(por ejemplo, \email{milista-request@ejemplo.com}). + +Las órdenes pueden aparecer tanto en el asunto como en el cuerpo del mensaje. +Cada orden debería ir en una línea distinta. Si su programa de correo +agrega automáticamente una firma a sus mensajes, usted podría desear colocar +la palabra ``\var{end}'' (sin comillas) en una línea separada después de sus +otras órdenes. La orden \var{end} hace que Mailman no siga procesando el +mensaje. + +La órden más importante es probablemente la orden ``\var{help}'', ya que +ésta hace que Mailman devuelva un mensaje completo de información útil sobre +las órdenes de correo y direcciones para uso del interfaz web. + +En los Apéndices \ref{a:commands} y \ref{a:options} se proporcionan referencias +rápidas a las órdenes de suscriptor (éstas se han adaptado ligeramente de la +salida de la orden \var{help}.) + +% ============================================================================ +\section{¡Necesito hablar con un humano!\label{sec:human}} +Si tiene problemas con cualquiera de estas órdenes, siempre puede +contactar a la persona o personas encargadas de las listas utilizando las +direcciones administrativas de las mismas. Los administradores de las listas +pueden ayudarle a resolver como hacer algo, suscribirlo/desuscribirlo, o +cambiar su configuración si por alguna razón usted no puede hacerlo. Por favor +recuerde que muchos administradores de listas de correo son voluntarios que +están donando su tiempo libre para administrar la lista y pueden ser personas +muy ocupadas. + +La dirección de correo del administrador de una lista tiene la forma +\email{NOMBRELISTA-owner@DOMINIO}, donde NOMBRELISTA es el nombre de la lista +(por ejemplo: usuarios-mailman) y DOMINIO es el nombre del servidor (por ejemplo: +python.org). Esta dirección de correo, junto con las direcciones de correo +electrónico de administradores específicos, están dadas en la parte inferior de +las páginas de información de cada lista. Mire en la Sección~\ref{sec:web} +las instrucciones de cómo encontrar la página de información de su lista. + +% ============================================================================ +\section{Suscripción y desuscripción} +Dado que suscribirse (unirse) o desuscribirse (salirse) son a menudo las únicas +cosas sobre las cuales un suscriptor de una lista necesita conocer, opcionalmente +con Mailman éstas tareas se pueden hacer sin necesidad de una contraseña. + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo me uno a la lista? (subscribe)\label{sec:subscribe}} + +Hay dos formas comunes para que usted se suscriba a una lista de correo Mailman. + +Usando el interfaz web: +\begin{enumerate} + \item Vaya a la página de información de la lista a la cual desea + suscribirse (posiblemente será similar a + \url{http://SERVIDORWEB/mailman/listinfo/NOMBRELISTA}). + \item Ubique la sección identificada como ``Suscribirse a NOMBRELISTA'' + y rellene los cuadros de texto respectivos: + \begin{itemize} + \item \emph{Debe} introducir su dirección de correo electrónico. + \item Puede suministrar su nombre. + \item Puede seleccionar su contraseña. En caso contrario, + Mailman le generará una. + + \warning{NO use una contraseña valiosa, ya que eventualmente esta + contraseña se enviará por correo electrónico como texto plano.} + \item Si la lista soporta más de un idioma, usted puede seleccionar + su idioma preferido. \note{Este cambio no afecta al idioma de los + mensajes enviados a la lista, solamente a los textos que despliega + Mailman, como por ejemplo, en la página de opciones del suscriptor.} + \end{itemize} + \item Haga clic en el botón suscribir. Debería aparecer una nueva página + informándole que se ha recibido su solicitud de suscripción. Esta página + le proporcionará instrucciones adicionales, tales como la necesidad de + esperar y responder a un mensaje de confirmación, dependiendo de las + políticas de suscripción de la lista. +\end{enumerate} + +Usando el interfaz de correo electrónico: +\begin{enumerate} + \item Abra un programa de correo que le permita enviar mensajes con la + dirección de remitente que usted desea suscribir. + \item Envíe un mensaje a la dirección de suscripción de la lista, la cual + será de la forma \email{NOMBRELISTA-join@DOMINIO}. El asunto y cuerpo + del mensaje se ignorarán, así que no importa lo que coloque ahí. +\end{enumerate} + +Después de seguir uno de los dos procedimientos (¡no necesita llevar a cabo +los dos!), hay unos pocas posibilidades dependiendo de la configuración +de la lista: +\begin{itemize} + \item Puede que reciba un mensaje preguntando si realmente desea + suscribirse a la lista. Esto es para prevenir que cualquier otra + persona lo suscriba a la lista sin su permiso. Siga las instrucciones + dadas en el mensaje para confirmar su deseo de suscribirse. + \item Si se está suscribiendo a una lista cerrada puede que el moderador + tenga que dar antes su visto bueno. + \item O puede que necesite el visto bueno del moderador, y luego sí, + seguir las instrucciones del correo de confirmación que pueda recibir. +\end{itemize} + +Una vez hecho esto, posiblemente recibirá otro mensaje, dándole la +bienvenida a la lista. Este mensaje contiene información útil, incluyendo su +contraseña de la lista y algunos enlaces directos para el cambio de sus +opciones, de manera que podría ser conveniente que lo guarde para referencia +posterior. + +\note{La suscripción también se puede realizar de otras formas. Mire en el +Apéndice~\ref{a:commands} las órdenes más avanzadas de suscripción por correo +electrónico.} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo dejo la lista? (unsubscribe)\label{sec:unsubscribe}} + +¿Ya no desea estar en una lista? Si sólo va a salir de vacaciones o +está demasiado ocupado para leer correos y desea suspender temporalmente +la recepción de esos mensajes, usted podría detener la entrega de correo +en lugar de desuscribirse. Esto significa que mantendría su contraseña +y configuración personal de manera que podría aún, por ejemplo, tener +acceso a los archivos privados de la lista. Si esto es +lo que desea, mire en la Sección~\ref{sec:nomail} las instrucciones +para inhabilitar temporalmente la entrega de correo. + +Si realmente lo desea hacer, hay dos formas para que se dé de baja +de una lista de correo Mailman. + +Usando el interfaz web: +\begin{enumerate} + \item Vaya a la página de información de la lista que usted desea dejar + (la dirección de esa página probablemente será similar a + \url{http://SERVIDORWEB/mailman/listinfo/NOMBRELISTA}). + \item Ubique la sección identificada como ``suscriptores de NOMBRELISTA'' + (usualmente se encuentra cerca de la parte inferior de la página). + \item Debería haber un botón etiquetado ``Desuscribirse o Editar Opciones.'' + Introduzca su dirección de correo electrónico en el cuadro de texto que se + encuentra junto a ese botón y haga clic en el. + \item Debería aparecer en pantalla una nueva página con un botón de + ``Desuscribir''. Haga clic en él para desuscribirse y siga las + instrucciones dadas. +\end{enumerate} + +Usando el interfaz de correo electrónico: +\begin{enumerate} + \item Abra un programa de correo que le permita enviar correo desde la + dirección que usted desee desuscribir. + \item Envíe un mensaje a la dirección de desuscripción de la lista, la cual + tendrá la forma \email{NOMBRELISTA-leave@DOMINIO}. No importa lo que coloque + en el asunto y en el cuerpo del mensaje ya que será ignorado. +\end{enumerate} + +Después de seguir alguno de estos procedimientos (¡no necesitará llevar +a cabo los dos!), Mailman le enviará un mensaje de confirmación, siendo +necesario que siga las instrucciones dadas en él para completar +la desuscripción. Esto es necesario para evitar que otras personas lo +desuscriban sin su permiso. Además, puede que un moderador tenga que aprobar +su desuscripción (no son comunes las desuscripciones aprobadas por un +administrador). + +Si no recibe ese mensaje de confirmación con las instrucciones de +desuscripción incluidas, asegúrese de haber escrito correctamente la +dirección de correo electrónico (si está usando el interfaz web) y que la +dirección que trató de dar de baja, está de hecho, suscrita a la lista. Por +razones de seguridad, Mailman genera la misma página de opciones de suscriptor +independientemente de si la dirección suministrada está suscrita. Esto +significa que la gente no puede usar esta parte del interfaz web para +averiguar si alguien está suscrito a la lista, pero también significa que +es difícil decir si se cometió un error al teclear. + +Una vez que se haya procesado su desuscripción, probablemente recibirá +otro mensaje confirmando su desuscripción de la lista, y a partir de allí +debería dejar de recibir mensajes. + +Si desea saltarse el proceso de confirmación (por ejemplo, para desuscribir +una dirección que ya no funciona), incluya la contraseña respectiva al hacerlo, +ya sea desde su página de opciones (ver Sección~\ref{sec:web}), o mediante +envío de ordenes de correo a NOMBRELISTA-request (mire en el +Apéndice~\ref{a:commands} las órdenes avanzadas de suscripción por correo +electrónico). Consulte en la Sección~\ref{sec:getpassword} más información +sobre la obtención de su contraseña. + +% ============================================================================ +\section{Contraseñas\label{sec:password}} +Cuando usted se suscribió, usted seleccionó su contraseña o Mailman se la +generó. Usted probablemente tiene una copia de ella en el mensaje de +bienvenida que se le envío a usted cuando se unió a la lista, y puede también +recibir un recordatorio de ella cada mes. Esta se usa para verificar su +identidad ante Mailman, de manera que sólo quien tenga la contraseña (¡usted!) +y los administradores puedan mirar y cambiar su configuración. + +\warning{No use contraseñas valiosas con Mailman, ya que éstas eventualmente +se envían en formato de texto plano.} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo obtengo mi contraseña?\label{sec:getpassword}} +Si olvidó su contraseña y no grabó ni el mensaje de bienvenida ni ningún +mensaje recordatorio, siempre podrá obtener un mensaje para obtener la +contraseña a través del interfaz web: + +\begin{enumerate} + \item Vaya a la página de información de la lista de la cual desea + obtener su contraseña (ésta probablemente será similar a + \url{http://SERVIDORWEB/mailman/listinfo/NOMBRELISTA}). + \item Ubique la sección identificada como ``Suscriptores de NOMBRELISTA'' + (esta sección usualmente se encuentra cerca de la parte inferior de la + página). + \item Debería haber un botón etiquetado ``Desuscribir o Editar Opciones.'' + Introduzca su dirección de correo electrónico en el cuadro de texto que se + encuentra junto a ese botón y haga clic en él. + \item Debería observar en pantalla una nueva página que tiene una + sección identificada como ``Recordatorio de Contraseña''. Haga clic en el + botón ``Recordar'' para hacer que Mailman le envíe su contraseña por correo + electrónico. +\end{enumerate} + +Si no recibe el recordatorio de contraseña por correo electrónico después de hacer +esto, asegúrese de haber escrito correctamente su dirección de correo electrónico +y que la dirección que utilizó está suscrita a la lista. Por razones de seguridad, +Mailman genera la misma página de opciones de suscriptor independientemente de si +la dirección proporcionada está suscrita o no. Esto significa que la gente no +puede usar esta parte del interfaz web para averiguar si alguien está suscrito a la +lista, pero también significa que es difícil decir si se cometió un error al teclear. + +También puede obtener un recordatorio utilizando el interfaz de correo +electrónico: +\begin{enumerate} + \item Envíe un mensaje a \email{NOMBRELISTA-request@DOMINIO} con la orden + \var{password} + + Las órdenes pueden aparecer tanto en el cuerpo como en el asunto + del mensaje (mire en la Sección~\ref{sec:email} mayor información sobre + envío de órdenes por correo). + + Si no está enviando mensajes desde la dirección suscrita, también + puede especificar esta dirección enviando la orden + \nolinebreak{\var{password~address=$<$DIRECCIÓN$>$}}. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo cambio mi contraseña?} + \warning{NO use una contraseña valiosa, ya que esta contraseña + se puede enviar por correo como texto plano.} + +Desde el interfaz web: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Section~\ref{sec:web} la forma de hacer esto). + + \item Localice los cuadros de texto de cambio de contraseña en el lado + derecho de la página e introduzca allí su nueva contraseña, luego haga + clic en el botón etiquetado ``Cambiar mi contraseña''. +\end{enumerate} + +El cambio de contraseña también puede realizarse para múltiples listas a la vez +si usted está suscrito a más de una lista en el mismo dominio. Mire en la +Sección~\ref{sec:global} la información sobre cambios globales de configuración. + +Desde el interfaz de correo electrónico: +\begin{enumerate} + \item Envíe un mensaje a la dirección de correo + \email{NOMBRELISTA-request@DOMINIO} con la orden + {\var{password~$<$CONTRASEÑA~-~ANTERIOR$>$~$<$CONTRASEÑA~-~NUEVA$>$}}. + + Las órdenes pueden aparecer tanto en cuerpo como en el asunto del + mensaje (mire en la Sección~\ref{sec:email} la información sobre + el envío de órdenes por correo). + + Si no está enviando el mensaje desde su dirección de suscripción, + puede también especificar esta dirección con + \var{address=$<$DIRECCIÓN$>$} después de $<$CONTRASEÑA-NUEVA$>$. + + Por ejemplo, si \email{maria@micasa.com} deseaba cambiar su contraseña + de la lista \var{milista}, de \var{zirc} a \var{miko}, pero ella estaba + enviando correo desde la dirección de la oficina + \email{maria@trabajo.com}, podría enviar un mensaje a + \email{milista-request@ejemplo.com} con el asunto + {\var{password~zirc~miko~address=maria@micasa.com}}. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo activo/desactivo los recordatorios de contraseñas? (opción +reminders)} +Si no desea recibir recordatorios de contraseña cada mes, puede desactivarlos +desde la página de opciones del suscriptor (siempre puede conseguir que se le +envíe la contraseña por correo cuando realmente lo desee. Mire las +instrucciones en la Sección~\ref{sec:getpassword}). + +Usando el interfaz web: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} la forma de hacer esto). + \item Localice la sección ``Obtener recordatorio de contraseña para + esta lista'' y cambie el valor en forma apropiada. +\end{enumerate} + +Este cambio también se puede con múltiples listas a la vez si usted +está suscrito a más de una lista en el mismo dominio. Mire en la +Sección~\ref{sec:global} la información sobre cambios globales de +configuración. + +Usando el interfaz de correo electrónico: +\begin{enumerate} + \item Envíe un mensaje a \email{NOMBRELISTA-request@DOMINIO} + con la orden \var{set~reminders~on} o \var{set~reminders~off}. + + Las órdenes pueden aparecer tanto en el cuerpo como en el asunto del + mensaje. Mire en la Sección~\ref{sec:email} la información sobre el envío + de órdenes por correo. + \item Seleccione ``on'' para recibir recordatorios y ``off'' para dejar de + recibir los recordatorios. +\end{enumerate} + +% ============================================================================ +\section{Cambiando la entrega del correo} +% ---------------------------------------------------------------------------- +\subsection{¿Cómo activo o desactivo la recepción de correo procedente de la +lista? (opción delivery)\label{sec:nomail}} + +Usted puede dejar de recibir temporalmente los mensajes de la lista sin +necesidad de darse de baja. Si desactiva la recepción de correo ya no +podrá recibir mensajes, pero seguirá siendo un suscriptor y como tal +conservará su contraseña y su configuración. + +Esto puede ser práctico en diversos casos. Por ejemplo, si sale de vacaciones +o cuando está demasiado ocupado para leer cualquier correo extra. + +Además, dado que muchas listas de correo solo aceptan mensajes de los +suscriptores, si eventualmente llega a necesitar enviar correo desde más de +una dirección (por ejemplo, una dirección para la casa y otra para cuando esté +viajando), podría tener más de una cuenta suscrita y hacer que solamente +una de ellas reciba los mensajes. + +Usted también puede usar su suscripción como un medio para leer archivos +privados, por ejemplo en el caso de listas con tráfico alto, donde por lo +general resulta preferible suspender la recepción de los mensajes en el buzón +del usuario y limitarse a su lectura mediante consulta vía interfaz web. Todo +lo que necesita hacer es suscribirse, desactivar la recepción del correo, y +usar su contraseña y dirección de correo electrónico para acceder a los +archivos. + +Para desactivar/activar la entrega de correo usando el interfaz web: +\begin{enumerate} + \item Ingrese a su página de opciones (mire las instrucciones en la + Sección~\ref{sec:web}). + \item Localice la sección identificada como ``Entrega de correo'' y + seleccione ``Desactivar'' para detener la recepción de correo, y + ``Activar'' para empezar a recibir el correo. +\end{enumerate} + +Esto también se puede hacer con varias listas a la vez, siempre que esté +suscrito a más de una lista en el mismo dominio. Mire en la +Sección~\ref{sec:global} la información acerca de los cambios globales de +configuración. + +Para activar/desactivar la entrega de correo usando el interfaz de correo +electrónico: +\begin{enumerate} + \item Envíe un mensaje a \email{NOMBRELISTA-request@DOMINIO} con la orden + \var{set~delivery~off} o \var{set~delivery~on}. + + Las órdenes pueden aparecer tanto en el cuerpo como en el asunto + del mensaje (mire en la Sección~\ref{sec:email} más información sobre + envío de órdenes por correo). + \item Seleccione ``off'' para parar la recepción de los envíos, y ``on'' + para empezar a recibirlos otra vez. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo puedo evitar recibir mensajes duplicados? (opción +duplicates) \label{sec:nodupes}} + +Mailman no puede impedir que usted reciba mensajes duplicados, pero puede +ayudar. Una situación habitual que hace que la gente reciba múltiples copias +de un correo se produce cuando un remitente usa la opción ``responder a +todos'' para enviar un mensaje de respuesta a la lista con copia a determinados +destinatarios. Si no desea recibir estos mensajes adicionales, se puede +configurar Mailman para que revise y mire si su dirección está en las líneas +\mailheader{To} o \mailheader{Cc} del mensaje, de manera que sólo reciba la +copia enviada por el remitente, y no una copia que haya sido alterada por +Mailman (para incluir cabeceras y piés, borrar archivos adjuntos, etc.). + +Para activar/desactivar esta opción usando el interfaz web: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} los detalles de cómo hacer esto). + \item Ubique en la parte inferior de la página la sección identificada + como ``¿Evitar copias de mensajes duplicados?'' y cambie el valor + según corresponda. +\end{enumerate} + +Esto también se puede hacer con varias listas a la vez si usted está suscrito +a más de una lista en el mismo dominio. Mire en la Sección~\ref{sec:global} +la información sobre cambios globales de configuración. + +Para activar/desactivar esto usando el interfaz de correo electrónico: +\begin{enumerate} + \item Envíe un mensaje a \email{NOMBRELISTA-request@DOMINIO} con la orden + \var{set~duplicates~on} o \var{set~duplicates~off}. + + Las órdenes pueden aparecer tanto en el cuerpo como en el asunto + del mensaje (mire en la Sección~\ref{sec:email} más información sobre + envío de órdenes por correo). + \item Seleccione ``on'' para recibir copias de los mensajes que ya le + hayan enviado, seleccione ``off'' para evitar recibir esos duplicados. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo cambio mi dirección de suscripción?\label{sec:changeaddress}} + +Para cambiar su dirección de suscripción: +\begin{enumerate} + \item Acceda a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} más detalles de cómo hacer esto). + \item Introduzca su nueva dirección en la sección identificada como + ``Cambiando su información de suscripción de NOMBRELISTA''. + \item Si desea cambiar su dirección para todas sus suscripciones + usando la dirección antigüa, habilite la opción ``Cambiar + globalmente''. Si tiene suscripciones con otras direcciones o + suscripciones a listas en un dominio diferente, se tendrán que + hacer por separado. Mire en la Sección~\ref{sec:global} más + información sobre cambios globales de configuración. +\end{enumerate} + +Mailman le enviará un mensaje de confirmación a su nueva dirección, pero el +cambio no tendrá efecto sino hasta que usted lo confirme siguiendo las +instrucciones dadas en ese mensaje. + +No hay una forma equivalente de hacer esto desde el interfaz de correo +electrónico, pero usted puede suscribirse y desuscribirse para conseguir más +o menos el mismo efecto (mire en las Secciones~\ref{sec:subscribe} y +\ref{sec:unsubscribe} más información sobre suscripción y desuscripción). + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo hago para dejar de recibir copias de mis propios + envíos o empezar a hacerlo? (opción myposts)\label{sec:getown}} + +Por omisión en Mailman, usted recibe una copia de cada mensaje que envíe a la +la lista. A algunas personas les gusta esto ya que les permite saber cuando +un envío ha alcanzado su destino y de esta manera pueden recibir una copia de +sus propias palabras con el resto de una eventual discusión, pero otros no +desearán recibir copias de sus propios envíos. + +\note{Esta opción no tiene efecto si está recibiendo mensajes agrupados} + +Si lo desea, en la Sección~\ref{sec:getack} se discute sobre el acuse de +recibo de los mensajes que se envían a la lista. + +Para hacer esto usando el interfaz web: +\begin{enumerate} + \item Acceda a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} las instrucciones de cómo hacer esto). + \item Localice la sección identificada como ``¿Recibir sus propios + envíos a la lista?'', seleccione ``Si'' para recibir copias de sus + propios mensajes, y ``No'' para evitar recibirlos. +\end{enumerate} + +Para hacer esto usando el interfaz de correo: +\begin{enumerate} + \item Envíe un mensaje a \email{NOMBRELISTA-request@DOMINIO} con la orden + \var{set~myposts~on} o \var{set~myposts~off}. + Las órdenes pueden aparecer tanto en el cuerpo como en el asunto del + mensaje. Mire en la Sección~\ref{sec:email} más información sobre el envío + de órdenes por correo. + \item Seleccione ``on'' para recibir copias de sus propios mensajes, y + ``off'' para evitar recibirlos. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo puedo hacer para que Mailman me informe cuando la lista +ha recibido un envío mío? (opción ack)\label{sec:getack}} + +Como con la mayoría de las listas, usted simplemente recibirá una copia de sus +correos enviados cuando el software de listas los distribuye, no obstante, la +opción ack le puede ser útil, ya sea si tiene desactivada la opción de recibir +copia de sus propios mensajes (ver Section~\ref{sec:getown}), si tiene +desactivada la recepción del correo procedente de la lista (ver +Section~\ref{sec:nomail}), si no está suscrito a un cierto tema (ver +Section~\ref{sec:sometopic}) o simplemente, si desea una confirmación de +mensaje recibido de parte del sistema. + +\note{Si no está suscrito a la lista no se puede usar esta opción, pero aún +así puede revisar los archivos por su cuenta (si la lista tiene archivos públicos), +o preguntar por los mensajes que envíe a alguien que esté suscrito a la lista.} + +Para utilizar esta opción usando el interfaz web: +\begin{enumerate} + \item Acceda a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} los detalles de cómo hacer esto). + \item Localice la sección identificada como ``¿Recibir acuse + de recibo al enviar correo a la lista?'' Seleccione ``Si'' + si desea recibir un correo de confirmación de cada mensaje enviado + y ``No'' para evitar recibir tales mensajes. +\end{enumerate} + +Para utilizar esta opción usando el interfaz de correo electrónico: +\begin{enumerate} + \item Envíe un mensaje a \email{NOMBRELISTA-request@DOMINIO} con la orden + \var{set~ack~on} o \var{set~ack~off}. + + Las órdenes pueden aparecer tanto en el cuerpo como en el asunto del + mensaje. Mire en la Sección~\ref{sec:email} más información sobre el envío + de órdenes por correo. + \item Seleccione ``on'' si desea recibir correo haciéndole saber que se han + recibido sus envíos y ``off'' para evitar recibir tal correo. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{Parece que no estoy recibiendo correo de las listas. ¿Qué debería + hacer?} + +Hay unas cuántas razones para que esto ocurra: +\begin{itemize} + \item Durante un cierto lapso de tiempo nadie ha enviado correo a la + lista o listas en las cuales usted está suscrito. + + Para revisar si este es el caso, intente accediendo a los archivos de + la lista (asumiendo que la lista tiene archivos). Si la lista no + tiene archivos, puede preguntar a otro suscriptor (mire en la + Sección~\ref{sec:web} la ayuda para encontrar los archivos de una + lista). + + \note{Generalmente se considera descortés envíar mensajes de prueba a + la lista entera. Si usted siente la necesidad de probar que la lista + está trabajando y por alguna razón usted no puede simplemente redactar + un mensaje regular a la lista, es menos perturbador solicitar un + mensaje de ayuda a la dirección administrativa de la lista + (NOMBRELISTA-request@DOMINIO) para mirar si trabaja, o contactar al + administrador de la lista para preguntarle si la lista está operando + normalmente.} + + \item Su dirección de correo está causando mensajes devueltos y por + ello el software de la lista le ha deshabilitado la entrega de correo + (temporalmente). + + Si su proveedor de correo ``devuelve'' demasiados mensajes (es decir, + si le dice a Mailman que el mensaje no se pudo enviar), Mailman + eventualmente ya no intenta enviarle correo. Esta característica + permite a Mailman manipular con gusto direcciones que ya no existen + (por ejemplo, cuando un suscriptor encuentra un nuevo servicio de + Internet y olvida darse de baja de la dirección antigüa), así como + también direcciones que están temporalmente fuera de servicio (por + ejemplo, cuando el suscriptor ha utilizado todo el espacio asignado de + su cuenta de correo, o cuando el proveedor de correo del suscriptor + está experimentando dificultades). + + Aún si usted no está enterado de cualquier dificultad con su proveedor + de correo, es una buena idea revisar esto. Algunos proveedores + populares de correo basado en web y servidores de Internet no son tan + confiables como uno podría asumir, ni tampoco lo es el Internet como + un todo. Usted también puede desear enviarse usted mismo un mensaje + de prueba desde otra cuenta o pedirle a un amigo que le envíe un + mensaje de prueba para asegurarse que su dirección suscrita está + trabajando. + + Para revisar si esta puede ser la razón por la cual usted no está + recibiendo mensajes, ingrese a su página de opciones (consulte en la + Sección~\ref{sec:web} más detalles de cómo hacer esto) y mire sus + opciones. Si se ha desactivado su suscripción o si Mailman ha + recibido mensajes devueltos provenientes de su dirección de correo, + usted encontrará un gran mensaje en la parte superior de esta página. + + Para reactivar la entrega de correo, ubique una opción identificada + como ``Entrega del correo'' y seleccione ``Habilitar'' para iniciar + de nuevo a recibir el correo. Para deshacerse de su puntaje de + mensajes devueltos, usted puede desactivar y luego volver a activar + la entrega. Más instrucciones sobre la desactivación o activación + de la entrega del correo se encuentran en la Sección~\ref{sec:nomail}. + + \note{Aún si usted no estuviera inhabilitado en el momento en que + revisa, usted podría estar recibiendo mensajes devueltos y no haber + alcanzado el límite para que su suscripción se desactive. Usted puede + necesitar revisar de nuevo.} + + \item Hay un retardo o interrupción en las redes existentes entre + usted y el servidor de listas. + + Por mucho que nos gustaría, Internet no es 100\% confiable ni siempre + es rápida. Algunas veces los mensajes simplemente demoran mucho + tiempo en llegar. Trate de ser paciente, especialmente si el servidor + está alejado (en términos de redes, no geográficamente, aunque a + menudo lo uno implica lo otro) de su proveedor de servicio de + Internet. + + Para revisar si esta podría ser la causa de su problema, usted puede + probar realizando un ping al servidor de la lista o trazar la ruta + entre usted y él (las instrucciones de cómo hacer esto varía de una + plataforma a otra, así que usted puede desear usar un motor de + búsqueda para encontrar aquellas más apropiadas para usted). + + \item El servidor de correo o Mailman podrían no estar funcionando + correctamente. Esto puede ocurrir si el sistema está sobrecargado con + virus o spam y el sistema de correo que aloja Mailman tiene problemas + al procesarlos. + + Para revisar si este es el caso, pruebe utilizando el interfaz web de + la lista y trate de enviar un mensaje a + \email{NOMBRELISTA-request@DOMINIO} con la orden ``\var{help}'' (sin + las comillas) en la línea de \mailheader{Asunto}. Si nada de esto + funciona después de un razonable lapso de tiempo, ese puede ser el + problema. Usted puede desear contactar al administrador de la lista + o al administrador del sitio. +\end{itemize} + +% ============================================================================ +\section{Envíos agrupados} +% ---------------------------------------------------------------------------- +\subsection{¿Cómo puedo empezar a recibir los mensajes enviados a la +lista agrupados en un correo de gran tamaño o dejar de hacerlo? +(opción digest)\label{sec:digest}} + +Los grupos de envíos se llaman ``digests'' en Mailman. En lugar de recibir +los mensajes de uno en uno, usted puede recibir los mensajes agrupados (digests). +En una lista bastante ocupada, esto típicamente significa que usted recibe +un correo por día, aunque podría ser más o menos frecuente dependiendo de la +lista. + +Usted también puede desear mirar la Sección~\ref{sec:MIME} que trata sobre +los envíos agrupados en formato MIME y texto plano. + +Para activar o desactivar los envíos en modo agrupado usando el interfaz web: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} más detalles de cómo hacer esto). + \item Ubique la sección identificada como ``Activar envíos agrupados'' + + Seleccione ``On'' para recibir los envíos agrupados. Seleccione + ``Off'' para recibir por separado cada uno de los envíos. +\end{enumerate} + +Para activar o desactivar los envíos en modo agrupado usando el interfaz de +correo electrónico: +\begin{enumerate} + \item Envíe un mensaje a \email{NOMBRELISTA-request@DOMINIO} con la orden + \var{set~digest~plain} o \var{set~digest~mime} o \var{set~digest~off}. + + Las órdenes pueden aparecer tanto en el cuerpo como en el asunto + de un mensaje (ver en la Sección~\ref{sec:email} más información sobre el + envío de órdenes por correo). + + \item Seleccione ``off'' si usted desea recibir los mensajes cada uno por + separado y seleccione ``plain'' o ``mime'' para recibir los mensajes + agrupados en un gran correo, en forma periódica. Mire en la + Sección~\ref{sec:MIME} más información sobre envíos agrupados en formato + MIME versus texto plano. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{¿Qué son los Envíos Agrupados MIME o de Texto Plano? ¿Cómo puedo +decidir cuales recibir? (opción digest)\label{sec:MIME}} + +MIME es la sigla de Multipurpose Internet Mail Extensions (Extensiones +Multipropósito de Correo de Internet). Se usa para enviar por correo +electrónico cosas que no necesariamente son simple texto plano (por +ejemplo, se podría usar MIME si usted fuera a enviar una fotografía de +su perro a un amigo). + +Un envío agrupado en formato MIME contiene cada mensaje como un adjunto dentro +del mensaje, junto con un resumen de la tabla de contenido. + +Un envío agrupado en formato texto plano es una forma más simple de envío +agrupado, el cual debería ser legible aún en los lectores de correo que no +soportan MIME. Los mensajes se ponen simplemente uno después de otro en un +gran mensaje de texto. + +Los programas de correo más modernos soportan MIME, así que usted sólo +necesita seleccionar envíos agrupados en formato de texto plano si +está teniendo problemas al leer los que están en formato MIME. + +\note{Esta opción no tiene efecto si usted no está recibiendo correo +en modo agrupado (mire en la Sección~\ref{sec:digest} más información +sobre recepción del correo en modo agrupado).} + +Para seleccionar el tipo de envíos agrupados a recibir, usando el interfaz +web: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} más detalles de cómo hacer esto). + \item Ubique la sección identificada como ``¿Recibir envíos agrupados MIME + o de texto plano?'' + + Seleccione ``MIME'' para recibir los envíos agrupados en formato MIME, o + ``Plain text'' para recibir los envíos agrupados en formato de texto plano. +\end{enumerate} + +Esto también se puede cambiar para múltiples listas al mismo tiempo si +usted está suscrito a más de una lista en el mismo dominio. Mire en la +Sección~\ref{sec:global} la información sobre cambios globales de +configuración. + +Para seleccionar su tipo de envíos agrupados a recibir, usando el interfaz +de correo electrónico: +\begin{enumerate} + \item Envíe un mensaje a \email{NOMBRELISTA-request@DOMINIO} + con la orden \var{set~digest~plain} o \var{set~digest~mime}. + + Los comandos pueden aparecer ya sea en el cuerpo o en la línea de + asunto del mensaje (mire en la Sección~\ref{sec:email} más información + sobre envío de órdenes por correo). + + \item Seleccione ``plain'' para recibir los envíos agrupados en formato + de texto plano, o ``mime'' para recibir los envíos agrupados en formato + MIME. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\section{Los temas en listas de correo\label{sec:topics}} + +Algunas listas están configuradas para que Mailman maneje diferentes temas. +Por ejemplo, la lista de cursos en Linuxchix.org es una lista de discusión +para cursos que se están dictando para miembros de linuxchix, y a menudo, hay +varios cursos que se están dictando al mismo tiempo (por ejemplo, redes para +principiantes, programación en C, etiquetado de documentos \LaTeX). + +Cada uno de estos cursos que se están dictando está asociado con un tema +diferente en la lista de manera que la gente puede escoger que curso o cursos +tomar. El administrador debe configurar los temas, pero es responsabilidad +de cada suscriptor asegurarse que cada envío tenga el tema correcto. +Usualmente, ello requiere adicionar una palabra o etiqueta de algún tipo en +el asunto (por ejemplo: [Redes] ¿Qué tipos de cables necesito?) +o asegurarse que la línea \mailheader{Palabras claves} tiene la información +correcta (por omisión, usted puede poner una sección \mailheader{Palabras +claves} en el comienzo del cuerpo de su mensaje, pero esto lo puede configurar +su administrador de la lista). Note que estas etiquetas no son sensibles a +minúsculas/mayúsculas. + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo puedo asegurarme que mis envíos tienen el tema apropiado? + \label{sec:posttopic}} + +Cuando un administrador de lista define un tema, puede definir tres cosas: +\begin{itemize} + \item un nombre de tema + \item una expresión regular (regexp) + \item una descripción +\end{itemize} + +Usted puede mirar esta información ingresando a su página de opciones de +suscriptor (ver en la Sección~\ref{sec:web} más detalles de cómo hacer esto) +y haciendo clic en el enlace ``Detalles'' de cualquiera de los temas que le +interesen. + +Para enviar un mensaje sobre un determinado tema, usted necesita asegurarse +que las \mailheader{Palabras claves} o las cabeceras de \mailheader{Asunto} +de su mensaje concuerdan con la \emph{expresión regular} de ese tema. Una +expresión regular es un patrón que puede coincidir con más de una cosa. +Realmente las expresiones regulares pueden ser mucho más complejas, así que +usted puede sencillamente preguntar al administrador de la lista si usted no +sabe como crear cabeceras o colas de una expresión dada. + +Si realmente usted desea saber más sobre expresiones regulares, siga leyendo, +pero para la mayor parte, su administador de la lista debería incluir en la +descripción del tema, lo que usted necesita adicionar a sus Palabras Claves o +línea de Asunto para que coincida con el patrón del tema. + +La mayoría de expresiones de temas Mailman corresponderan a expresiones +regulares bastante simples, así que en este documento simplemente se darán +algunos ejemplos comunes. Las expresiones regulares son un poquito complejas +para enseñar aquí en unas pocas líneas, así que si usted realmente desea +entender como trabajan, usted debería encontrar un instructivo o referencia en +otro lado (por ejemplo, DevShed tiene un buen instructivo en +\url{http://www.devshed.com/Server_Side/Administration/RegExp/}) + +Aquí hay algunos ejemplos de posibles expresiones regulares y líneas concordantes: +\begin{tableii}{l|l}{}{Expresión Regular}{Líneas concordantes} + \lineii{zuff}{Palabras Claves: zuff} + \lineii{zuff}{Palabras Claves: ZUFF} + \lineii{zuff}{Palabras Claves: Zuff} + \lineii{zuff}{Palabras Claves: amarilis, zuff, puré de manzana} + \lineii{zuff}{Asunto: [zuff] ¿Tienes lo necesario para el zuff?} + \lineii{zuff}{Asunto: ¿Tienes lo apropiado para el zuff?} + \lineii{zuff}{Asunto: ¿Qué es zuff?} +\hline + \lineii{\textbackslash[zuff\textbackslash]}{Palabras Claves: [zuff]} + \lineii{\textbackslash[zuff\textbackslash]}{Asunto: [zuff] ¿Tienes lo necesario?} + \lineii{\textbackslash[zuff\textbackslash]}{Asunto: Tutoriales en línea de zuff (Re: [zuff] ¿Qué es zuff?)} +\end{tableii} + +Unas pocas notas: +\begin{itemize} + \item Las concordancias no son sensibles a mayúsculas/minúsculas, así + que si concuerda zuff, lo hará ZUFF, zuFF, y cualquier otra variación + en el uso de las mayúsculas/minúsculas. + \item Algunos caracteres tienen un significado especial en una + expresión regular, así que para concordar específicamente con esos + caracteres, ellos deben ser ``escapados'' con una diagonal inversa + (\textbackslash). Como usted puede ver en los ejemplos de arriba, + los paréntesis rectangulares ([ y ]) son unos de esos caracteres + (otros incluyen ``.'', ``?'', y ``*''). La diagonal inversa también + se usa para otras cosas (no es broma la complejidad de las expresiones + regulares: consulte en otra documentación los detalles sobre otros + usos del caracter de diagonal inversa), pero este es el uso más + probable en una expresión de tema. +\end{itemize} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo me suscribo a algunos o a todos los temas de una lista? + \label{sec:sometopic}} + +Si el administrador de su lista configuró temas, usted puede elegir +suscribirse solamente a una parte de la lista seleccionado los temas que usted +desee recibir. + +Si usted desea recibir todos los mensajes enviados a la lista, asegúrese que +usted no está suscrito a ninguno de los temas. + +Probablemente usted también desdea mirar la Sección~\ref{sec:notopic} la cual +discute el cambio de su configuración para mensajes que no tienen temas +definidos. + +Para seleccionar los temas que desea recibir, utilizado el interfaz web: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} más detalles de cómo hacer esto). + \item Ubique la sección identificada como ``¿A qué temas le gustaría + suscribirse?'' + + Si algún tema está definido, usted puede seleccionar aquelos que + desee. Si usted no selecciona ningún tema de interés, usted recibirá + todos los mensajes enviados a la lista. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo logro o evito recibir mensajes sin tema definido? +\label{sec:notopic}} +Algunos mensajes no corresponderán con ninguno de los patrones de temas +definidos. Usted puede escoger recibir o ignorar tales mensajes que no +coinciden. Si usted desea recibir todos los mensajes enviados a la lista, +asegúrse que usted no está suscrito a ningún tema específico (ver +Sección~\ref{sec:sometopic}). + +Si usted únicamente está suscrito a algunos temas, usted puede elegir si +recibe o no recibe mensajes sin tema definido, de la misma forma cómo +usted puede seleccionar suscribirse únicamente a ciertos temas. + +Para cambiar esta opción: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} los detalles de cómo hacer esto). + \item Ubique la sección identificado como ``¿Desea recibir + mensajes que no concuerden con algún filtro de tema?'' + + Si usted desea recibir mensajes sin tema definido, seleccione ``Si''. + Si usted no desea recibir tales mensajes, seleccione ``No''. +\end{enumerate} + +This setting has no effect if you are not subscribed to any topics. +Este cambio no tiene efecto si usted no está suscrito a algún tema +de las listas. + +% ============================================================================ +\section{Definiendo otras opciones} + +% ---------------------------------------------------------------------------- +\subsection{¿Cambiar Globalmente? ¿Definir Globalmente? ¿Qué significa esto? + \label{sec:global}} + +Para algunas de las opciones dadas en su página de opciones de suscriptor, hay +una casilla de verificación que dice ``Cambiar globalmente'' o ``Aplicar +globalmente''. Esto significa que si usted cambia esta opción, también se +hará el cambio para todas las suscripciones que usted tenga en el mismo +dominio. Esto puede ser práctico si, por ejemplo, usted desea utilizar una +misma contraseña para todas sus listas, o si usted sale de vacaciones y desea +suspender la entrega de correo de todas las listas. + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo cambio el nombre que registré en Mailman? + \label{sec:changename}} + +Para cambiar su nombre de suscripción: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} más detalles de cómo hacer esto). + \item En la sección ``Cambio de su información de suscriptor de + NOMBRELISTA'', entre su nuevo nombre en el cuadro de texto apropiado. +\end{enumerate} + +Esto también se puede cambiar para múltiples listas al mismo tiempo si usted está +suscrito a más de una lista en el mismo dominio. Mire en la Sección~\ref{sec:global} +información sobre cambios globales de configuración. + +\note{Usted no necesita tener un nombre de suscriptor definido.} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo selecciono mi idioma preferido?} + +Mailman es multilingüe, lo que quiere decir que su interfaz se ha traducido a +muchos idiomas diferentes. El administrador de su lista puede habilitar +varios idiomas para su uso cuando se interactúa con Mailman. (Para obtener +un listado completo de los idiomas disponibles mire +\url{http://www.list.org/i18n.html}). Si su lista tiene otros idiomas +habilitados, usted puede utilizar el interfaz web y el interfaz de correo +electrónico, en un idioma de su elección. + +\note{Esto no significa que los mensajes enviados a la lista estarán en el +idioma que haya seleccionado. Únicamente las plantillas y otros textos +propios de Mailman, serán afectados por esta configuración. Los envíos se +hacen en el idioma que escriban los suscriptores.} + +Su idioma preferido se define cuando usted se suscribe (mire la +Sección\ref{sec:subscribe}), pero se puede cambiar posteriormente si la lista +soporta más de un idioma. + +Para cambiar su idioma preferido en Mailman: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} las instrucciones sobre cómo hacer esto). + \item Vaya a la sección identificada como ``¿Qué idioma prefiere?'' + y escoja el idioma apropiado de la lista desplegable. Si no hay una + lista de idiomas, probablemente la lista en que se encuentra sólo + soporta un idioma. +\end{enumerate} + +Si su lista no soporta el idioma que usted preferiría usar, puede contactar +al administrador de la lista (NOMBRELISTA-owner@DOMINIO) para mirar si se +puede adicionar, pero recuerde que esto puede representar mayor trabajo y el +administrador de la lista o del sitio pueden no tener el tiempo necesario o +la capacidad de hacerlo. + +Si el idioma de su elección no está disponible porque no existe traducción +para Mailman, por favor considere ofrecer su tiempo como traductor voluntario. +Para mayor información, usted puede desear consultar la lista de correo +mailman-i18n en \url{http://mail.python.org/mailman/listinfo/mailman-i18n}. +Información sobre el estado actual de los esfuerzos de internacionalización +se encuentra en \url{http://www.list.org/i18n.html}. + +\note{i18n en una abreviatura para ``internationalization'' ya que la palabra +comienza con una i, termina con una n, y tiene 18 letras entre ellas. Si +usted musita un poco, i18n inclusive suena un tanto como +``internationalization''.} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo evito que mi nombre aparezca en la lista de suscriptores? + (opción hide)\label{sec:nolist}} + +Si usted por alguna razón no desea que su dirección de correo aparezca en la +lista de suscriptores, puede optar por tenerla oculta. + +Las razones comunes para hacer esto incluyen el evitar correo basura no +solicitado (spam). Por omisión la lista de suscriptores se oculta para +bloquear a recolectores de spam, pero si usted siente que esto es +insuficiente, es bastante fácil eliminar su dirección de la lista de +de suscriptores dada en las páginas de información o mediante una solicitud +de correo electrónico (note que esto no oculta su dirección de los +administradores de la lista). Si usted desea mire en la +Sección~\ref{sec:antispam} más información sobre lo que Mailman hace para +ayudar a evitar el spam. + +Para cambiar esta opción utilizando el interfaz web: +\begin{enumerate} + \item Ingrese a su página de opciones de suscriptor (mire en la + Sección~\ref{sec:web} instrucciones sobre cómo hacer esto). + \item Vaya a la sección identificada como ``¿Ocultarse de la lista + de suscriptores?'' y escoja ``Si'' para ocultar su nombre de la + lista, o ``No'' para permitir que su nombre aparezca en la lista. +\end{enumerate} + +Para cambiar esta opción utilizando el interfaz de correo electrónico: +\begin{enumerate} + \item Envíe un mensaje a \email{NOMBRELISTA-request@DOMINIO} con la órden + \var{set~hide~on} o \var{set~hide~off}. + + Las órdenes puede aparecer tanto en el cuerpo como en el asunto del + mensaje (mire en la Sección~\ref{sec:email} más información sobre el envío + de órdenes por correo. + \item Seleccione ``on'' para ocultar su dirección de correo electrónico de + la lista de membresía, u ``off'' para dejar de ocultar su dirección. +\end{enumerate} + +% ============================================================================ +\section{Otras preguntas comunes} + +% ---------------------------------------------------------------------------- +\subsection{¿Cómo puedo consultar los archivos de la lista?} + +Si la lista se está archivando, los mensajes previamente enviados se pueden +ver yendo a las páginas web del archivo, un enlace al cual se encuentra en la +página de información de la lista y en la cabecera \mailheader{List-Archive} +de todo mensaje enviado (a menos que el administración de su lista haya +desactivado tales cabeceras). Muchos programas de correo ocultan la cabecera +de correo \mailheader{List-Archive}, así que usted primero necesita hacer que +su programa de correo le muestre las cabeceras completas antes de que usted +pueda mirar esa cabecera. + +Los archivos públicos usualmente tienen direcciones de la forma +\url{http://SERVIDORWEB/pipermail/NOMBRELISTA/}, mientras que los archivos +privados usualmente tienen direcciones de la forma +\url{http://SERVIDORWEB/mailman /private/NOMBRELISTA}. + +Mire en la Sección~\ref{sec:web} más información sobre búsqueda de +direcciones de una lista. + +% ---------------------------------------------------------------------------- +\subsection{¿Qué hace Mailman para protegerme del correo basura no +solicitado (spam)?\label{sec:antispam}} + +Los archivos de una lista técnica pueden incluir respuestas a un rango de +preguntas diferentes. A menudo, la gente que ha enviado estas respuestas +estaría gustoso de ayudar a alguien que no entiende completamente la +respuesta, y no le preocuparía dar su dirección para ese propósito. Pero +aunque sería maravilloso si todos nos puedieramos contactar unos a otros con +facilidad, también queremos asegurarnos que la gente que envía spam no abuse +de la lista ni de los archivos de la lista. + +Para hacer que un rango de opciones esté disponible a los administradores de +listas, Mailman permite una variedad de configuraciones para ayudar a proteger +las direcciones de correo. Muchos de estas configuraciones son opcionales +para el administrador de la lista, así que su lista particular puede estar +configurada en forma diferente. Los administradores de listas deben encontrar +un punto de equilibrio entre proteger a suscriptores y hacerlo difícil para que +la gente se ponga en contacto. + +\begin{itemize} + \item Lista de suscriptores + \begin{itemize} + \item El administrador de la lista puede seleccionar entre tener + la lista de suscriptores pública, visible únicamente a miembros + de la lista, o visible únicamente a administradores de la lista. + \item La lista de suscriptores se muestra con las direcciones + disimuladas para que a los recolectores de spam se les dificulte + obtener su dirección. + \item Usted puede mantener su dirección oculta de la lista de + suscriptores (mire más información en la Sección~\ref{sec:nolist}). + \item \note{La lista entera de suscriptores siempre está + disponible a los administradores de la lista.} + \end{itemize} + + \item Archivos de la lista + \begin{itemize} + \item El administrador de la lista pueden elegir que los archivos + sean públicos, visibles únicamente a suscriptores (privados), o + completamente no disponibles. + \item Los archivos HTML que son creados por Pipermail (el programa + de archivado que viene incluido por omisión con Mailman) contienen + únicamente direcciones disimuladas. Existen otros programas de + archivado que modifican las direcciones en diferentes grados para + que permanezcan menos legibles. + \item Si usted desea estar más seguro, puede definir la cabecera + de correo ``\mailheader{X-No-archive} yes'' y Mailman no + archivará sus envíos. Similarmente, puede definir la cabecera de + correo ``\mailheader{X-Archive} no'' para inhabilitar el + archivado. + + \warning{Esto no evita que otros suscritores reenvíen sus mensajes, + posiblemente aún, incluyendo su dirección de correo electrónico.} + \end{itemize} + + \item Envíos limitados a las listas + \begin{itemize} + \item El administrador de la lista puede elegir quien puede + envíar a la lista. La mayoría de las listas, se moderan + (un moderador o administrador revisa cada envío), se configuran + para que solamente los suscriptores puedan enviar a la lista, o + se permite que cualquier persona pueda enviar a la lista. + \item Permitiendo que solamente los suscriptores puedan enviar + a la lista, Mailman a menudo bloquea todo el spam y algunos + virus que se envían a la lista. Como tal, esta es una + configuración bastante común utilizada por los administradores + de listas. + \end{itemize} + + \item Listas anónimas + \begin{itemize} + \item Las listas también se pueden volver completamente anónimas: + toda la información que identifique al remitente se elimina de + la cabecera antes de enviar un mensaje. + \item Esto no es tipicamente usado como medida anti-spam (tiene + otros usos), pero se podría usar en esa forma si se quisiera. + \end{itemize} +\end{itemize} + +Por supuesto, muchos métodos para disimular direcciones pueden ser burlados por +determinadas personas, así que sea consciente de que las protecciones usadas +pueden no ser suficientes. + +% ============================================================================ +\appendix +% ---------------------------------------------------------------------------- +\section{Referencia rápida de órdenes de correo electrónico\label{a:commands}} +\begin{list}{}{} + \item confirm $<$CADENA-DE-CONFIRMACIÓN$>$ + \begin{list}{}{} + \item + Confirma una acción. La cadena de confirmación es obligatoria y se + debería enviar en la respuesta al mensaje de confirmación enviado por + Mailman. + \end{list} + + \item end + \begin{list}{}{} + \item + Termina el procesamiento de órdenes. Utilice esta orden si su programa + de correo añade automáticamente un archivo de firma. + \end{list} + + \item help + \begin{list}{}{} + \item + Recibe una copia del mensaje de ayuda. + \end{list} + + \item info + \begin{list}{}{} + \item + Obtiene información acerca de la lista. + \end{list} + + \item lists + \begin{list}{}{} + \item + Obtiene una listado de las listas de correo (cuyos nombres se muestran + públicamente), del servidor GNU Mailman. + \end{list} + + \item {password [$<$CONTRASEÑA-ANTERIOR$>$ $<$CONTRASEÑA-NUEVA$>$] [address=$<$DIRECCIÓN$>$]} + \begin{list}{}{} + \item + Obtiene o cambia su contraseña. Sin argumentos, devuelve su contraseña actual. + Usted puede cambiar su contraseña indicando los argumentos + $<$CONTRASEÑA-ANTERIOR$>$ y $<$CONTRASEÑA-NUEVA$>$ + \end{list} + + \item set ... + \begin{list}{}{} + \item + Cambia o muestra sus opciones de membresía. + + Use `set help' (sin las comillas) para obtener una lista más detallada de + las opciones que puede cambiar. Esta lista también se presenta en el + Apéndice~\ref{a:options}. + + Use `set show' (sin las comillas) para mirar la configuración actual de + sus opciones. + \end{list} + + \item{subscribe [$<$CONTRASEÑA$>$] [digest|nodigest] [address=$<$DIRECCIÓN$>$]} + \begin{list}{}{} + \item + Suscribirse a la lista de correo. Usted debe proporcionar su + contraseña para desuscribirse o cambiar sus opciones, pero si omite + la contraseña, Mailman le generará una. Usted puede obtener recordatorios + de su contraseña periódicamente. + + El siguiente parámetro puede ser ya sea: `nodigest' o `digest' (sin + comillas). Si usted desea suscribir una dirección diferente de la + dirección desde donde está enviando esta solicitud, puede especificar + `address=$<$DIRECCIÓN$>$' (sin paréntesis angulares ni comillas). + \end{list} + + \item {unsubscribe [$<$CONTRASEÑA$>$] [address=$<$DIRECCIÓN$>$]} + \begin{list}{}{} + \item + Desuscribirse de la lista de correo. Si usted suministra una contraseña, + ésta debe concordar con su contraseña actual. Si se omite, el sistema + le enviará un mensaje de confirmación para desuscribir la dirección. + Si usted desea desuscribir una dirección diferente a la dirección desde + donde envía esta solicitud, puede especificar `address=$<$DIRECCIÓN$>$' + (sin paréntesis angulares ni comillas). + \end{list} + + \item {who [$<$CONTRASEÑA$>$] [address=$<$DIRECCIÓN$>$]} + \begin{list}{}{} + \item + Muestra quien pertenece a la lista de correo. La lista está limitada + únicamente a los suscriptores, y usted debe proporcionar su contraseña + de membresía para obtenerla. Si usted está enviando desde una dirección + diferente a su dirección de membresía, especifique su dirección de + membresía con `address=$<$DIRECCIÓN$>$' (sin paréntesis angulares ni + comillas). + \end{list} +\end{list} + +% ---------------------------------------------------------------------------- +\section{Referencia rápida de opciones del suscriptor\label{a:options}} + +\begin{list}{}{} + \item set help + \begin{list}{}{} + \item Muestra esta ayuda detallada. + \end{list} + + \item {set show [address=$<$DIRECCIÓN$>$]} + \begin{list}{}{} + \item Muestra la configuración actual de sus opciones. Si usted está + enviando desde una dirección diferente de su dirección de membresía, + especifique su dirección de membresía con `address=$<$DIRECCIÓN$>$' + (sin paréntesis angulares ni comillas). + \end{list} + + \item {set authenticate $<$CONTRASEÑA$>$ [address=$<$DIRECCIÓN$>$]} + \begin{list}{}{} + \item Para cambiar cualquiera de sus opciones, usted debe incluir este + comando primero, junto con su contraseña de membresía. Si usted está + enviando desde una dirección diferente de su dirección de membresía, + especifique su dirección de membresía con `address=$<$DIRECCIÓN$>$' + (sin paréntesis angulares ni comillas). + \end{list} + + \item set ack on\\ + set ack off + \begin{list}{}{} + \item + Cuando se activa la opción `ack', usted recibirá un mensaje de + acuse de recibo cada vez que usted envíe un mensaje a la lista. + \end{list} + + \item set digest plain\\ + set digest mime\\ + set digest off + \begin{list}{}{} + \item + Cuando la opción `digest' está desactivada, usted recibirá los mensajes + inmediatamente cuando ellos se envían. Use `set digest plain' si en + su lugar desea recibir los mensajes agrupados en formato texto plano + (p.e. envíos agrupados RFC 1153). Use `set digest mime' si en su lugar + desea recibir los mensajes agrupados en formato MIME. + \end{list} + + \item set delivery on\\ + set delivery off + \begin{list}{}{} + \item + Activa o desactiva la entrega. Esta opción no lo desuscribe, en lugar + de ello, hace que Mailman deje de entregarle mensajes. Esto puede ser + útil si usted sale de vacaciones. ¡Asegúrese de usar `set delivery on' + cuando regrese de vacaciones! + \end{list} + + \item set myposts on\\ + set myposts off + \begin{list}{}{} + \item + Use `set myposts off' para evitar recibir copias de los mensajes que + usted envía a la lista. Esto no tiene efecto si usted está recibiendo + envíos agrupados. + \end{list} + + \item set hide on\\ + set hide off + \begin{list}{}{} + \item + Use `set hide on' para ocultar su dirección de correo electrónico cuando + la gente solicite la lista de suscriptores. + \end{list} + + \item set duplicates on\\ + set duplicates off + \begin{list}{}{} + \item + Use `set duplicates off' si usted desea que Mailman no le envíe + mensajes si su dirección está explicitamente en los campos To: o + Cc: del mensaje. Esto puede reducir el número de envíos duplicados + que usted recibe. + \end{list} + + \item set reminders on\\ + set reminders off + \begin{list}{}{} + \item Use `set reminders off' si usted desea desactivar el recordatorio + mensual de contraseña para la lista de correo. + \end{list} +\end{list} + +\end{document} diff --git a/docs/howtos/mailman-member.tex b/docs/howtos/mailman-member.tex new file mode 100644 index 000000000..9161071c9 --- /dev/null +++ b/docs/howtos/mailman-member.tex @@ -0,0 +1,1539 @@ +% Complete documentation on the extended LaTeX mark up used for Python +% documentation is available in ``Documenting Python'', which is part +% of the standard documentation for Python. It may be found online +% at: +% +% http://www.python.org/doc/current/doc/doc.html + +\documentclass{howto} + +% This is a template for short or medium-size Python-related documents, +% mostly notably the series of HOWTOs, but it can be used for any +% document you like. + +% The title should be descriptive enough for people to be able to find +% the relevant document. +\title{GNU Mailman - List Member Manual} + +% Increment the release number whenever significant changes are made. +% The author and/or editor can define 'significant' however they like. +\release{0.03} +% CHANGELOG +% 0.03 Proofreading changes +% 0.02 Proofreading changes +% - proofread by Margaret McCarthy and Jason Walton +% 0.01 First draft of document + +% At minimum, give your name and an email address. You can include a +% snail-mail address if you like. +\author{Terri Oda} +\authoraddress{terri(at)zone12.com} + +\date{\today} % XXX update before tagging release! +\release{2.1} % software release, not documentation +\setreleaseinfo{} % empty for final release +\setshortversion{2.1} % major.minor only for software + +\begin{document} +\maketitle + +% This makes the Abstract go on a separate page in the HTML version; +% if a copyright notice is used, it should go immediately after this. +% +\ifhtml +\chapter*{Front Matter\label{front}} +\fi + +% Copyright statement should go here, if needed. +% ... + +% The abstract should be a paragraph or two long, and describe the +% scope of the document. +\begin{abstract} +\noindent +This document describes the list member interface for GNU +Mailman 2.1. It contains instructions for subscribing, unsubscribing, +viewing the archives, editing user options, getting password reminders, +and other subscriber-level tasks. It also answers some common questions +of interest to Mailman list members. +\end{abstract} + +\tableofcontents + +% ============================================================================ +\section{Introduction} + +This document is intended to help the members of a Mailman 2.1 mailing list +learn to use the features available to them. It covers the use of the +web and email interfaces for subscribing and unsubscribing, changing +member options, getting password reminders and other subscriber-level +tasks. It also answers some common questions of interest to Mailman list +members. + +Information for list and site administrators is provided in +other documents. + +This document need not be read in order. If you are simply looking for +an answer to a specific question, jump to the appropriate place and +references to other sections will be provided if necessary or potentially +helpful. + +\note{For the purposes of this document, +we assume that the reader is familiar with common terms related to email (eg: +Subject line, body of the message) and web sites (eg: drop-down box, button) or +can look them up. We also assume that the reader can already use his or her +email program and web browser well enough that instructions such as ``send email +to this address'' or ``visit this web page'' or ``fill in the form provided'' are +clear. If you are not familiar with these actions, you may want to consult +other documentation to learn how to do these things with your particular +setup.} + +% ---------------------------------------------------------------------------- +\subsection{Acknowledgements} + +Sections of this document have been borrowed from the List Administrator Manual +found in Mailman CVS, which was written by Barry A. Warsaw, and from the in-line +help for Mailman 2.1. + +The rest of this manual has been written by Terri Oda. +Terri has been maintaining mailing lists since the year she attained +voting age in Canada, although the two are not related. She currently +oversees the mailing lists at Linuxchix.org, as well as several smaller +servers. In the world outside of list administration, Terri is doing +work with an artificial life spam detector, and is actually more of a +programmer than technical writer. + +Thanks to Margaret McCarthy, Jason Walton and Barry Warsaw for their help +in proofreading and otherwise improving this manual. + +Thanks also to Ikeda Soji, who made the Japanese translation of this +document, and Pablo Chamorro C., who made the Spanish translation. + +%WRITEME: More here. Do we need a license statement here? + +% ---------------------------------------------------------------------------- +\subsection{What is a mailing list?} + +A mailing list is simply a list of addresses to which the same information +is being sent. If you were a magazine publisher, you would have a list of +the mailing addresses of all the subscribers to the magazine. In the case +of an electronic mailing list, we use a list of email addresses from people +interested in hearing about or discussing a given topic. + +Two common types of email mailing lists are announcement lists and discussion +lists. + +Announcement lists are used so that one person or group can send +announcements to a group of people, much like a magazine publisher's mailing +list is used to send out magazines. For example, a band may use an +announcement mailing list to let their fan base know about their upcoming +concerts. + + +A discussion list allows a group of people to discuss topics amongst +themselves, with everyone able to send mail to the list and have it distributed +to everyone in the group. This discussion may also be moderated, so only +selected posts are sent on to the group as a whole, or only certain people are +allowed to send to the group. For example, a group of model plane enthusiasts +might use a discussion mailing list to share tips about model construction and +flying. + +Some common terms: +\begin{itemize} + \item A ``post'' typically denotes a message sent to a mailing list. + (Think of posting a message on a bulletin board.) + \item People who are part of an electronic mailing list are usually called + the list's ``members'' or ``subscribers.'' + \item ``List administrators'' are the people in charge of maintaining that + one list. Lists may have one or more administrators. + \item A list may also have people in charge of reading posts and deciding + if they should be sent on to all subscribers. These people are called + list moderators. + \item Often more than one electronic mailing list will be run using the same + piece of software. The person who maintains the software which runs + the lists is called the ``site administrator.'' Often the site administrator + also administrates individual lists. +\end{itemize} +% ---------------------------------------------------------------------------- +\subsection{GNU Mailman} + +GNU Mailman is software that lets you manage electronic mailing lists. It +supports a wide range of mailing list types, such as general discussion +lists and announce-only lists. Mailman has extensive features which make it +good for list subscribers, such as easy subscription and unsubscription, +privacy options, and the ability to temporarily stop getting posts from the +list. The list member features are covered in this document. + +Mailman also has many features which make it attractive to list and site +administrators. These features are covered in the list and site administrator +manuals. + +% ============================================================================ +\section{Translating from our examples to real lists} + +Often, it's easier to simply give an example than explain exactly how +to find the address for your specific list. As such, we'll frequently +give examples for a fictional list called +\email{LISTNAME@DOMAIN} whose list information page can be found at +\url{http://WEBSERVER/mailman/listinfo/LISTNAME}. + +Neither of these are +real addresses, but they show the form of a typical list address. +The capital letters used for the list-specific parts of each address should +make it easier to see what should be changed for each +list. Although specific list configurations may be different, you will +probably be able to just replace the words given in capital letters with the +appropriate values for a real list: + +\begin{description} + \item [LISTNAME] The name of your list. + \item [DOMAIN] The name of the mail server which handles that list. + \item [WEBSERVER] The name of the web server which handles the list web interface. This may be the same as DOMAIN, and often refers to the same machine, but does not have to be identical. +\end{description} + +As a real-life example, if you are interested in the mailman-users list, you'd +make the following substitutions: LISTNAME=mailman-users, DOMAIN=python.org, WEBSERVER=mail.python.org. As such, for the +\email{mailman-users@python.org} +mailing list, the list information page can be found at the URL +\url{http://mail.python.org/mailman/listinfo/mailman-users}. (These, unlike +most of the examples given in this document, are real addresses.) + +Most lists will have this information stored in the \mailheader{List-*} +headers. Many +mail programs will hide these by default, so you may have to choose to view +full headers before you can see these informational headers. + +% ============================================================================ +\section{Mailman's interfaces} +Mailman has two different interfaces for the list subscriber: the web +interface and the email interface. Most discussion list subscribers use +the email interface, since this includes the email address you use to send +mail to all the subscribers of that list. + +The interface you use for changing options is largely +a matter of preference, since most (but not all) of the options which can +be changed from the web interface can also be changed by email. + Usually it is easier to use the web interface for +changing options, since the web interface provides instructions as you go, but +there are times when people may prefer the email interface, so both are +provided. + +% ---------------------------------------------------------------------------- +\subsection{The web interface\label{sec:web}} +The web interface of Mailman is its selling point for many people, +since it makes it much easier for subscribers and administrators to see +which options are available, and what these options do. + +Every mailing list is also accessible by a number of web pages. Note that +the exact URLs are configurable by the site administrator, so they may be +different than what's described below. We'll describe the most common +configuration, but check with your site administrator or hosting +service for details. + +\begin{description} + \item [List information (listinfo) page] + \begin{itemize} + \item Usually found at \url{http://WEBSERVER/mailman/listinfo/LISTNAME} + (for example, \url{http://lists.example.com/mailman/listinfo/mylist}) + + \item The listinfo page is the starting point for the subscriber + interface. As one would assume from the name it's given, it + contains information about the LISTNAME list. + Usually all the other subscriber pages can be accessed from this + point, so you really only need to know this one address. + + \end{itemize} + + \item [Member options page] + \begin{itemize} + \item Usually found at \url{http://WEBSERVER/mailman/options/LISTNAME/EMAIL} + (For example, \url{http://lists.example.com/mailman/options/mylist/kathy@here.com}) + + \item This page can also be accessed by going to the listinfo page + and entering your email address into the box beside the button + marked ``Unsubscribe or Edit Options'' (this is near the bottom of the + page). + + \item The member options page allows you to log in/out and change your + list settings, as well as unsubscribe or get a copy of your password + mailed to you. + + \item \textbf{To log in to your member options page}: + If you are not already logged in, there will be a box near the top for + you to enter your password. (If you do not know your password, see + Section~\ref{sec:getpassword} for more information on getting your + password.) Enter your password in the box and press the button. + + \item Once you are logged in, you will be able to view and change + all your list settings. + + \end{itemize} + \item [List Archives] + \begin{itemize} + \item Usually found at \url{http://WEBSERVER/pipermail/LISTNAME} if the + list is publicly archived, and + \url{http://WEBSERVER/mailman/private/LISTNAME} if the list is privately + archived. (For example, + \url{http://lists.example.com/pipermail/mylist} or + \url{http://lists.example.com/mailman/private/mylist}) + + \item The list archive pages have copies of the posts sent to the + mailing list, usually grouped by month. In each monthly group, the + posts are usually indexed by author, date, thread, and subject. + + \item \note{Pipermail is the name of the default archiver that + comes with Mailman. Other archive programs are available.} + + \item If the archive is private, you will need to supply your + subscribed email address and your password to log in. (See + Section~\ref{sec:getpassword} for more information on getting + your password.) + \end{itemize} +\end{description} + +% ---------------------------------------------------------------------------- +\subsection{The email interface\label{sec:email}} +Every mailing list has a set of email addresses to which messages can be +sent. There's always one address for posting messages to the list, one +address to which bounces are sent, and addresses for processing email +commands. For a fictional mailing list called +\email{mylist@example.com}, you'd find these addresses: + +\begin{itemize} +\item \email{mylist@example.com} -- this is the email address people should + use for new postings to the list. + +\item \email{mylist-join@example.com} -- by sending a message to this address, + a new member can request subscription to the list. Both the + \mailheader{Subject} header and body of such a message are + ignored. Note that mylist-subscribe@example.com is an alias for + the -join address. + +\item \email{mylist-leave@example.com} -- by sending a message to this address, + a member can request unsubscription from the list. As with the + -join address, the \mailheader{Subject} header and body of the + message is ignored. Note that mylist-unsubscribe@example.com is + an alias for the -leave address. + +\item \email{mylist-owner@example.com} -- This address reaches the list owner + and list moderators directly. This is the address you use if + you need to contact the person or people in charge. + +\item \email{mylist-request@example.com} -- This address reaches a mail robot + which processes email commands that can be used to set member + subscription options, as well as process other commands. + A list of members' email commands is provided in + Appendix~\ref{a:commands}. + +\item \email{mylist-bounces@example.com} -- This address is used in + Mailman's automatic bounce processing. + +\item \email{mylist-confirm@example.com} -- This address is used for + processing confirmation messages for subscription + and unsubscription requests. +\end{itemize} + +There's also an -admin address which also reaches the list administrators, +but this address only exists for compatibility with older versions of +Mailman. + +For changing options, we use the \email{LISTNAME-request} +address (for example, \email{mylist-request@example.com}). + +Commands can appear in the subject line or the body of the message. Each +command should be on a separate line. If your mail program automatically +appends a signature to your messages, you may want to put the word +``\var{end}'' (without the quotes) on a separate line after your other commands. +The \var{end} command tells Mailman not to process the email after that +point. + +The most important command is probably the ``\var{help}'' command, since it +makes Mailman return a message full of useful information about the +email commands and directions to the web interface. + +Quick references to the subscriber commands have been provided in +Appendices \ref{a:commands} and \ref{a:options}. (These have been slightly +adapted from the output of the \var{help} command.) + + +% ============================================================================ +\section{I need to talk to a human!\label{sec:human}} + +If you have any trouble with any of these commands, you can always reach the +person or people in charge of a list by using the list administrator email address. +The list administrators can help you figure out +how to do something, subscribe/unsubscribe you, or change your +settings if you are unable to change them yourself for some reason. Please +remember that many mailing list administrators are volunteers who are donating +their spare time to run the list, and they may be very busy people. + +This list administrator email address is in the form \email{LISTNAME-owner@DOMAIN}, where LISTNAME is the name of the list (eg: mailman-users) and DOMAIN is +the name of the server (eg: python.org). +This email address, +along with the email addresses of specific administrators, is given on the +bottom of the list information pages. See Section~\ref{sec:web} for more +information on finding the list information page for your list + +% ============================================================================ +\section{Subscribing and unsubscribing} +Since subscribing (joining) and unsubscribing (leaving) lists are often the +only things a list member needs to know, these can both be done without +requiring you to know a password. + +% ---------------------------------------------------------------------------- +\subsection{How do I join a list? (subscribe)\label{sec:subscribe}} + +There are two common ways you can subscribe to a Mailman mailing list. + +Using the web interface: +\begin{enumerate} + \item Go to the list information page for the list you want to join. + (This will probably be something like + \url{http://WEBSERVER/mailman/listinfo/LISTNAME}) + \item Look for the section marked ``Subscribing to LISTNAME'' and fill in the + boxes. You can fill in the following: + \begin{itemize} + \item You \emph{must} enter your email address. + \item You may choose to supply your real name. + \item You may choose a password. If you do not choose one, Mailman will + generate one for you. + + \warning{Do NOT use a valuable password, since this + password may occasionally be mailed to you in plain text. } + \item If the list supports more than one language, you may be able to + choose your preferred language. \note{This setting does not affect + posts to the list, only Mailman texts that come from the list software, + such as your member + options page.} + \end{itemize} + \item Press the subscribe button. A new page should appear telling you + that your subscription request has been received. This page will provide + you with further instructions, such as the need to wait for and reply to a + confirmation messages, depending on the list's subscription policies. +\end{enumerate} + +Using the email interface: +\begin{enumerate} + \item Open a mail program which sends mail from the address you want to + subscribe. + \item Send a mail to the list subscription address, which will be in the + form \email{LISTNAME-join@DOMAIN}. The subject and body + of the message will be ignored, so it doesn't matter what you put there. +\end{enumerate} + +After following one of these sets of instructions (you don't need to do +both!), there are a few possible outcomes depending upon the settings for +that list. +\begin{itemize} + \item You may receive an email message asking for confirmation that you +really want to be subscribed to the list. This is to prevent anyone from +subscribing you to lists without your permission. Follow the instructions +given in the message to confirm your wish to be subscribed. + \item A moderator may also need +to confirm your subscription if you are subscribing to a closed list. + \item Or +you may have to wait for a moderator \textit{and} follow the instructions in +the confirmation mail. +\end{itemize} + +Once this is done, you will likely receive another message welcoming you to +the list. This message contains some useful information including your list +password and some quick links for changing your options, so you may want to +save it for later reference. + +\note{Subscribing can be done in other ways as well. See +Appendix~\ref{a:commands} for more advanced email subscribing commands.} + +% ---------------------------------------------------------------------------- +\subsection{How do I leave a list? (unsubscribe)\label{sec:unsubscribe}} + +Don't want to be on a list any more? If you're just going on vacation or +are too busy to read mails and want to temporarily turn them off, you may want +to stop mail delivery rather than unsubscribing. This means you keep your +password and other settings so you can, for example, still have access to +private list archives. If this is what you'd +prefer, see Section~\ref{sec:nomail} for instructions on disabling mail +delivery temporarily. + +If you actually want to leave the list, there are two common ways you can +unsubscribe from a Mailman mailing list. + +Using the web interface: +\begin{enumerate} + \item Go to the list information page for the list you want to leave. + (This will probably be something like + \url{http://WEBSERVER/mailman/listinfo/LISTNAME}) + \item Look for the section marked ``LISTNAME subscribers'' (usually found + near the bottom of the page). + \item There should be a button marked ``Unsubscribe or Edit Options.'' + Enter your email address in the box beside this button and press the + button. + \item You should be brought to a new page which has an ``Unsubscribe'' + button. Press it to unsubscribe and follow the instructions given. +\end{enumerate} + +Using the email interface: +\begin{enumerate} + \item Open a mail program which sends mail from the address you want to + unsubscribe. + \item Send a mail to the list unsubscribe address, which will be of the form + \email{LISTNAME-leave@DOMAIN}. + The subject and body + of this message will be ignored, so it doesn't matter what you put there. +\end{enumerate} + +After following one of these sets of instructions (you don't need to do +both!), you will be sent a confirmation mail and must follow the +instructions given in that mail to complete the unsubscription. This is to +stop people from unsubscribing you without your permission. In addition, a +moderator may need to approve your unsubscription. (Administrator-approved +unsubscriptions are uncommon.) + +If you do not receive this confirmation mail with instructions, make sure +that you typed your email address correctly (if you were using the web +interface to unsubscribe) and that the address you tried +to unsubscribe is, indeed, actually subscribed to that list. For security +reasons, Mailman generates the same member options page regardless of +whether the address entered is subscribed or not. This means that people +cannot use this part of the web interface to find out if someone is +subscribed to the list, but it also means that it's hard to tell if you just +made a typo. + +Once your unsubscription has been processed, you will will probably receive +another message confirming your unsubscription from the list, and at that +point you should stop receiving messages. + +If you wish to skip the confirmation process (for example, you might be +unsubscribing an address which no longer works), it is possible to bypass it by +using your password instead and either logging in to your options page using +it (See Section~\ref{sec:web}), or sending it with your email commands to +LISTNAME-request (See Appendix~\ref{a:commands} for advanced email +unsubscription commands). See Section~\ref{sec:getpassword} for more +information on getting your password. + +% ============================================================================ +\section{Passwords\label{sec:password}} +Your password was either set by you or generated by Mailman when you +subscribed. +You probably got a copy of it in a +welcome message sent when you joined the list, and you may also receive a +reminder of it every month. It is used to verify your identity to Mailman +so that only the holder of the password (you!) and the administrators +can view and change your settings. + +\warning{Do NOT use a valuable password for Mailman, since it can be +sent in plain text to you.} + +% ---------------------------------------------------------------------------- +\subsection{How do I get my password?\label{sec:getpassword}} +If you've forgotten your password and haven't saved the welcome message or +any reminder messages, you can always get a reminder through the web interface: + +\begin{enumerate} + \item Go to the list information page for the list from which you wish to + get your password + (This will probably be something like + \url{http://WEBSERVER/mailman/listinfo/LISTNAME}) + \item Look for the section marked ``LISTNAME subscribers'' + (this section is usually found near the bottom of the page). + \item There should be a button marked ``Unsubscribe or Edit Options.'' + Enter your email address in the box beside this button and press the + button. + \item You should be brought to a new page which has an ``Password + Reminder'' section. Press the ``Remind'' button to have your password + emailed to you. +\end{enumerate} + +If you do not receive the password reminder email after doing this, make sure +that you typed your +email address correctly and that the address you used is, indeed, actually +subscribed to that list. For security reasons, Mailman generates the same +member options page regardless of whether the address entered is subscribed +or not. This means that people cannot use this part of the web interface to +find out if someone is subscribed to the list, but it also means that it's +hard to tell if you just made a typo. + +You can also get a reminder using the email interface, +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \var{password} + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + + If you are not sending mail from your subscribed address, you can also + specify this address by sending the command \nolinebreak{\var{password~address=$<$ADDRESS$>$}}. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{How do I change my password?} + \warning{Do NOT use a valuable password, since this + password may be mailed to you in plain text. } + +From the web interface: +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} for + instructions on how to do this.) + + \item Look for the password changing boxes on the right-hand side of the + page and enter your new password in the appropriate boxes, then press the + button marked ``Change My Password.'' +\end{enumerate} + +This can also be changed for multiple lists at the same time if you are subscribed to +more than one list on the same domain. See Section~\ref{sec:global} for +information about changing settings globally. + + +From the email interface: +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \nolinebreak{\var{password~$<$OLDPASSWORD$>$~$<$NEWPASSWORD$>$}}. + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + + If you are not sending mail from your membership address, you can also + specify this address with \var{address=$<$ADDRESS$>$} after $<$NEWPASSWORD$>$. + + For example, if \email{kathy@here.com} wanted to change her \var{mylist} + password from \var{zirc} to \var{miko}, but she was sending mail from + her work address \email{kathy@work.com}, she could send a message + to \email{mylist-request@example.com} with the subject set to + \nolinebreak{\var{password~zirc~miko~address=kathy@here.com}}. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{How do I turn password reminders on or off? (reminders option)} +If you don't wish to the reminder email including your password every month, +you can disable it from the member options page. (You can always get the +password mailed out when you actually want it. See +Section~\ref{sec:getpassword} for instructions.) + +Using the web interface: +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} for + instructions on how to do this.) + \item Look for the section marked ``Get password reminder email for this + list?'' and change the value accordingly. +\end{enumerate} + +This can also be changed for multiple lists at the same time if you are subscribed to +more than one list on the same domain. See Section~\ref{sec:global} for +information about changing settings globally. + +Using the email interface: +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \var{set~reminders~on} or \var{set~reminders~off}. + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + \item Set it to ``on'' to receive reminders, and ``off'' to stop receiving + reminders. +\end{enumerate} + + +% ============================================================================ +\section{Changing mail delivery} +% ---------------------------------------------------------------------------- +\subsection{How do I turn mail delivery on or off? + (delivery option)\label{sec:nomail}} + +You may wish to temporarily stop getting messages from the +list without having to unsubscribe. +If you disable mail delivery, you will no longer receive messages, but will +still be a subscriber and will retain your password and other settings. + +This can be handy in a many different cases. For example, you could be +going on vacation or need a break from the list because you're too busy to +read any extra mail. +Many mailing lists also allow only subscribers to post to the list, so if you +commonly send mail from more than one address (eg, one address for at home +and another for when you're travelling), you may want to have more than +one subscribed account, but have only one of them actually receive mail. +You can also use this as a way to read private archives even on a list which +may be too busy for you to have sent directly to your mailbox. All you need to do is subscribe, disable mail delivery, and use your password and email to +log in to the archives. + +To disable/enable mail delivery using the web interface: +\begin{enumerate} + \item Log in to your options page. (See Section~\ref{sec:web} for instructions.) + \item Go down to the section marked ``Mail delivery'' and select ``Disabled'' + to stop receiving mail, and ``Enabled'' to start receiving mail. +\end{enumerate} + +This can also be changed for multiple lists at the same time if you are subscribed to +more than one list on the same domain. See Section~\ref{sec:global} for +information about changing settings globally. + +To disable/enable mail delivery using the email interface: +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \var{set~delivery~off} or \var{set~delivery~on}. + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + \item Set it to ``off'' to stop receiving posts, and ``on'' to start + receiving them again. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{How can I avoid getting duplicate messages? (duplicates option) +\label{sec:nodupes}} + +Mailman can't completely stop you from getting duplicate messages, but it +can help. One common reason people get multiple copies of a mail is that +the sender has used a ``group reply'' function to send mail to both the list +and some number of individuals. If you want to avoid getting these messages, +Mailman can be set to check and see if you are in the \mailheader{To} or +\mailheader{CC} lines of the message. If your address appears there, then +Mailman can be told not to deliver another copy to you. This means you get +only the copy sent by the original sender, and not a copy which been altered by +Mailman (to include headers and footers, strip attachments, etc.). + +To turn this on or off using the web interface: +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} + for more details on how to do this.) + \item Scroll down to the bottom of the page to the section marked + ``Avoid duplicate copies of messages?'' and change the value accordingly. +\end{enumerate} + +This can also be changed for multiple lists at the same time if you are subscribed to +more than one list on the same domain. See Section~\ref{sec:global} for +information about changing settings globally. + +To turn this on or off using the email interface: +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \var{set~duplicates~on} or \var{set~duplicates~off}. + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + \item Set it to ``on'' to receive list copies of messages already sent + to you, set it to ``off'' to avoid receiving these duplicates. +\end{enumerate} + + +% ---------------------------------------------------------------------------- +\subsection{How do I change my subscription address?\label{sec:changeaddress}} +To change your subscription address, +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} + for more details on how to do this.) + \item In the section marked ``Changing your LISTNAME membership information,'' + enter your new address. + \item If you wish to change your address for all subscriptions using the + old address, select the ``Change globally'' box. If you have subscriptions + under another address or for lists on a different domain, these will have + to be done separately. See Section~\ref{sec:global} for more + information about changing settings globally. +\end{enumerate} + +A confirmation message will be sent to your new address, and the change will +not happen until you confirm the change by following the instructions in that +message. + +There is no special way to do this from the email interface, but you can +subscribe and unsubscribe for more or less the same effect. (See +Sections~\ref{sec:subscribe} and \ref{sec:unsubscribe} for more information +on subscribing and unsubscribing.) + +% ---------------------------------------------------------------------------- +\subsection{How do I stop or start getting copies of my own posts? (myposts + option)\label{sec:getown}} +By default in Mailman, you get a copy of every post you send to the list. +Some people like this since it lets them know when the post has gone through +and means they have a copy of their own words with the rest of a discussion, +but others don't want to bother downloading copies of their own posts. + +\note{This option has no effect if you are receiving digests.} + +You may also want to see Section~\ref{sec:getack}, which discusses +acknowledgement emails for posts sent to the list. + +To set this using the web interface: +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} + for more details on how to do this.) + \item Look for the section marked ``Receive your own posts to the list?'' + Set it to ``Yes'' to receive copies of your own posts, and ``No'' to avoid + receiving them. +\end{enumerate} + +To set this using the email interface: +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \var{set~myposts~on} or \var{set~myposts~off}. + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + \item Set it to ``on'' to receive copies of your own posts, and ``off'' + to avoid receiving them. +\end{enumerate} + + +% ---------------------------------------------------------------------------- +\subsection{How can I get Mailman to tell me when my post has been received +by the list? (ack option)\label{sec:getack}} + +On most lists, you will simply receive a copy of your mail when it has gone +through the list software, but if this is disabled (See +Section~\ref{sec:getown}), your list mail delivery is disabled (See +Section~\ref{sec:nomail}), you are not subscribed to that topic (See +Section~\ref{sec:sometopic}) or you +simply want an extra acknowledgement from the system, this option may +be useful to you. + +\note{If you are not subscribed to the list, this option cannot be used. +You must either check the archives yourself (if the list has public archives), +ask someone who is subscribed to the list, or subscribe to use this option.} + +To set this using the web interface: +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} + for more details on how to do this.) + \item Look for the section marked ``Receive acknowledgement mail when you + send mail to the list?'' + Set it to ``Yes'' to receive a mail letting you know your post has been + received, and ``No'' to avoid receiving such an acknowledgement. +\end{enumerate} + +To set this using the email interface: +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \var{set~ack~on} or \var{set~ack~off}. + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + \item Set it to ``on'' if you wish to receive mail letting you know your + post has been received, and ``off'' to avoid receiving such an + acknowledgement. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\subsection{I don't seem to be getting mail from the lists. What should + I do?} +There are a few common reasons for this: +\begin{itemize} + \item No one has sent any mail to the list(s) you're on for a little while. + + To check if this is the case, try visiting the archives of the list + (assuming that the list has archives). If the list has no archives, you + may have to ask another subscriber. (See Section~\ref{sec:web} for help + in finding the list archives.) + + \note{Generally, it is considered + impolite to send test messages to the entire list. + If you feel a need to test that the list is working and for some reason you + cannot simply compose a regular message to the list, it is less disruptive + to send a help message to + the list request address (LISTNAME-request@DOMAIN) to see if that works, + or to contact the list + administrator (LISTNAME-owner@DOMAIN) to ask if the list is working.} + + \item You were bouncing mail and have had mail delivery (temporarily) + disabled by the list software. + + If your mail provider ``bounces'' too many messages (that is, it tells + Mailman that the message could not be delivered) + Mailman eventually stops trying to send you mail. This feature allows + Mailman to gracefully handle addresses which no longer exist (for example, + the subscriber has found a new Internet service provider and forgot to + unsubscribe the old address), as well + as addresses which are temporarily out-of-service (for example, the + subscriber has used up all of the allotted space for his or her email + account, or the subscriber's mail provider is experiencing difficulties). + + Even if you are unaware of any difficulties with your mail provider, it + is a good idea to check this. Some popular webmail providers and + internet servers are not as reliable as one might assume, nor is the + internet as a whole. You may want to also send yourself a test message + from another account or ask a friend to send you a test message to make + sure your subscribed address is working. + + To check if this may be the reason you are not receiving messages, log in + to the your options page (See + Section~\ref{sec:web} for more details on how to do this) and + look at your options. + If your subscription has been disabled or Mailman has received bounces from + your email address, there will be a big banner at the top of this page. + + To re-enable mail delivery, look for an option marked ``Mail Delivery'' and + set it to ``Enabled'' to start receiving mail again. + To get rid of your bounce score, you can disable and then re-enable delivery. + For more instructions on disabling or enabling mail delivery, + see Section~\ref{sec:nomail}. + + + + \note{Even if you have not been disabled at the time you check, you could be + bouncing messages and not have reached the threshold for your + subscription to be disabled. You may need to check again.} + + \item There is a delay or break in the networks between you and the + list server. + + No matter what many of us would like, the internet is not 100\% + reliable, nor is it always fast. Sometimes, messages simply take a long + time to get to you. Try to be patient, especially if the server is far + (in terms of networks, not geography, although often one implies the other) + from your internet service provider. + + To check if this might be causing your problem, you can try pinging + the list server or tracing the route between you and it. (Instructions + on how to do this varies from platform to platform, so you may want to + use a search engine to find those appropriate for you.) + + \item The mail server or Mailman might not be functioning properly. This + can happen if the system is overloaded with viruses or spam and the mail + system that hosts Mailman has trouble keeping up. + + To test if this is a case, try visiting the list's web interface and + try sending a message to \email{LISTNAME-request@DOMAIN} with the command + ``\var{help}'' (without the quotes) in the \mailheader{Subject}. If + neither of these works after a reasonable length of time, this may be + the problem. You may wish to contact either the list or site + administrator(s). +\end{itemize} + + +% ============================================================================ +\section{Digests} +% ---------------------------------------------------------------------------- +\subsection{How can I start or stop getting the list posts grouped into one +big email? (digest option)\label{sec:digest}} + +Groups of posts are called ``digests'' in Mailman. Rather than get messages +one at a time, you can get messages grouped together. On a moderately busy +list, this typically means you get one email per day, although it may be +more or less frequent depending upon the list. + +You may also want to look at Section~\ref{sec:MIME} which discusses MIME +and plain text digests. + +To turn digest mode on or off using the web interface, +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} + for more details on how to do this.) + \item Look for the section marked ``Set Digest Mode.'' + + Set it to ``On'' to + receive messages bundled together in digests. Set it to ``Off'' to + receive posts separately. +\end{enumerate} + +To turn digest mode on or off using the email interface, +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \var{set~digest~plain} or \var{set~digest~mime} or \var{set~digest~off}. + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + \item Set it to ``off'' if you wish to receive individual posts separately, + and to ``plain'' or ``mime'' to receive posts grouped into one large mail. + See Section~\ref{sec:MIME} for more information on plain versus MIME + digests. +\end{enumerate} + + +% ---------------------------------------------------------------------------- +\subsection{What are MIME and Plain Text Digests? How do I change which one +I get? (digest option)\label{sec:MIME}} + +MIME is short for Multipurpose Internet Mail Extensions. It is used to +send things by email which are not necessarily simple plain text. (For +example, MIME would be used if you were sending a picture of your dog to +a friend.) + +A MIME digest has each message as an attachment inside the message, along +with a summary table of contents. + +A plain text digest is a simpler form of digest, which should be readable +even in mail readers which don't support MIME. The messages are simply put +one after the other into one large text message. + +Most modern mail programs do support MIME, so you only need to choose +plain text digests if you are having trouble reading the MIME ones. + +\note{This option has no effect if you are not receiving mail bunched +as digests. (See Section~\ref{sec:digest} for more information on +receiving mail as digests.)} + +To set your digest type using the web interface: +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} + for more details on how to do this.) + \item Look for the section marked ``Get MIME or Plain Text Digests?.'' + + Set it to ``MIME'' to receive digests in MIME format, or ``Plain text'' to + receive digests in plain text format. +\end{enumerate} + +This can also be changed for multiple lists at the same time if you are subscribed to +more than one list on the same domain. See Section~\ref{sec:global} for +information about changing settings globally. + +To set your digest type using the email interface, +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \var{set~digest~plain} or \var{set~digest~mime}. + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + \item Set it to ``plain'' to get posts bundled into a plain text digest, + or ``mime'' to get posts bundled together into a MIME digest. +\end{enumerate} + +% ---------------------------------------------------------------------------- +\section{Mailing list topics\label{sec:topics}} + +Some lists are set up so that different topics are handled by Mailman. +For example, the courses list on Linuxchix.org is a discussion list for +courses being run by linuxchix members, and often there are several courses +being run at the same time. +(eg: Networking for beginners, C programming, \LaTeX ~document mark up.) +Each of the courses being run is associated with a separate topic on the list so that people +can choose only to receive the course they want to take. + +These +topics must be configured by the list administrator, but it is the +responsibility of each poster to make sure that their post is put with +the correct topic. Usually, this means adding a word or tag of some type to the +subject line (eg: [Networking] What type of cables do I need?) or making +sure the \mailheader{Keywords} line has the right information. (By default, +you can put a \mailheader{Keywords} section in the beginning of the body +of your message, but this can be configured by your list administrator.) +Note that these tags are case-insensitive. + +% ---------------------------------------------------------------------------- +\subsection{How do I make sure that my post has the right + topic?\label{sec:posttopic}} + +When a list administrator defines a topic, he or she sets three things: +\begin{itemize} + \item a topic name + \item a regular expression (regexp.) + \item a description +\end{itemize} + +You can view this information by logging in to your member options page. + (See Section~\ref{sec:web} for more details on how to do this.) and +clicking on the ``details'' link for any topic that interests you. + +To post on a given topic, you need to make sure that the +\mailheader{Keywords} or \mailheader{Subject} headers in a message +match the \emph{regular expression} for that topic. +A regular expression is a pattern which may match more than one thing. +Regular expressions can actually be fairly complex, so you may want to +just ask the list administrator if you don't know how to make +heads or tails of the expression given. + +If you really want to know more about regular expressions, read on, but for the +most part, your list administrator should include in the topic description what +you need to add to your Keywords or Subject line to match the topic pattern. + +Most Mailman topic expressions will be fairly simple regular expressions, so +in this document we will simply give you some common examples. Regular +expressions are a bit too complex to teach in a few lines here, so if you +really want to understand how the regular expressions work, you should +find a tutorial or reference elsewhere. (For example, DevShed has a decent +tutorial at +\url{http://www.devshed.com/Server_Side/Administration/RegExp/}) + +Here are some examples of possible regular expressions and matching lines: + +\begin{tableii}{l|l}{}{Regular expression}{Matching lines} + \lineii{zuff}{Keywords: zuff} + \lineii{zuff}{Keywords: ZUFF} + \lineii{zuff}{Keywords: Zuff} + \lineii{zuff}{Keywords: amaryllis, zuff, applesauce} + \lineii{zuff}{Subject: [zuff] Do you have the right stuff for zuff?} + \lineii{zuff}{Subject: Do you have the right stuff for zuff?} + \lineii{zuff}{Subject: What is zuff?} +\hline + \lineii{\textbackslash[zuff\textbackslash]}{Keywords: [zuff]} + \lineii{\textbackslash[zuff\textbackslash]}{Subject: [zuff] Do you have the right stuff?} + \lineii{\textbackslash[zuff\textbackslash]}{Subject: Online zuff tutorials (was Re: [zuff] What is zuff?)} +\end{tableii} + +A few notes: +\begin{itemize} + \item The matching is case-insensitive, so if zuff matches, so will ZUFF, + zuFF, and any other variations in capitalization. + \item Some characters have special meaning in a regular expression, so + to match those characters specifically, they must be ``escaped'' with a + backslash (\textbackslash). As you can see in the above example, + [ and ] are such characters. (Others include ``.'', ``?'', and ``*''). + The backslash is also used for other things (I wasn't kidding about + regular expressions being complex: consult other documentation + for details about other uses of the backslash character), but this + is the most likely use in a topic expression. +\end{itemize} + +% ---------------------------------------------------------------------------- +\subsection{How do I subscribe to all or only some topics on a + list?\label{sec:sometopic}} + +If topics have been set up by your mailing list administrator, you can +choose to subscribe to only part of a list by selecting the topics you +want to receive. + +If you wish to get all messages sent to the list, make sure you +are not subscribed to any topics. + +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} + for more details on how to do this.) + \item Look for the section marked ``Which topic categories would you like + to subscribe to?'' + + If any topics are defined, you can select those you wish. If you do + not select any topics of interest, you will receive all posts + sent to the list. +\end{enumerate} + +You probably also want to look at Section~\ref{sec:notopic} which discusses +changing your settings for messages where no topic is set. + +% ---------------------------------------------------------------------------- +\subsection{How do I get or avoid getting messages with no topic set? +\label{sec:notopic}} +Some messages will not match any predefined topic pattern. You can choose to +receive or ignore such non-matching messages. +If you wish to get all messages sent to the list, make sure you are +not subscribed to any specific topic. (See Section~\ref{sec:sometopic}.) + +If you are only subscribed to some topics, you can either choose to either +receive or not receive messages with no topic set, much the way you can +choose to subscribe only to certain topics. + +To change this setting, +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} + for more details on how to do this.) + \item Look for the section marked ``Do you want to receive message that do + not match any topic filter?'' + + If you wish to receive messages with no topic set, select ``Yes.'' If you + do not wish to receive such messages, choose ``No.'' +\end{enumerate} + +This setting has no effect if you are not subscribed to any topics. + +% ============================================================================ +\section{Setting other options} + +% ---------------------------------------------------------------------------- +\subsection{Change Globally? Set Globally? What does that mean? + \label{sec:global}} + +For some of the options given in your member options page, there is a +checkbox which says ``Change Globally'' or ``Set Globally.'' +This means that if you change this +option, you can also have the change made for all your other +subscriptions on the same domain. +This can be handy if, for example, you +want to make sure all your passwords are the same, or you are going on +vacation and want to turn off mail delivery from all the lists. + +% ---------------------------------------------------------------------------- +\subsection{How do I change my name as Mailman knows it? + \label{sec:changename}} + +To change your subscription name, +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} + for more details on how to do this.) + \item In the section marked ``Changing your LISTNAME membership information,'' + enter your new name in the appropriate box. +\end{enumerate} + +This can also be changed for multiple lists at the same time if you are subscribed to +more than one list on the same domain. See Section~\ref{sec:global} for +information about changing settings globally. + +\note{You do not need to have a subscription name set.} + +% ---------------------------------------------------------------------------- +\subsection{How do I set my preferred language?} + +Mailman is multi-lingual, meaning its interface has been translated to many +different languages. Your list administrator can enable various languages for +their use when interacting with Mailman. +(For a complete listing of the languages see +\url{http://www.list.org/i18n.html}.) If your list has other languages +enabled, you may be able to have the web interface, etc. in a language of your +choice. + +\note{This does NOT necessarily mean that all the posts sent to the list will +be in the language you selected. Only the pre-prepared texts presented by +Mailman will be affected by this setting. Posts are in whatever language the +poster uses.} + +Your preferred language is set when you subscribe (see +Section\ref{sec:subscribe}), and can be changed later if the list supports +more than one language. + +To change your preferred language in Mailman, +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} for + instructions on how to do this.) + \item Go to the section marked ``What language do you prefer?'' and choose + the appropriate language from the drop-down list. If there is no + drop-down list of languages, the list you are on probably only supports + one language. +\end{enumerate} + +If your list does not support the language you would prefer to use, you may +contact the list administrator (LISTNAME-owner@DOMAIN) to see if it can be +added, but remember that this may mean some work that the list and/or site +administrator(s) do not have time or the ability to do. + +If your language of choice is not available because no translation +exists for Mailman, please consider volunteering your time as a translator. +For more information you may want to consult the mailman-i18n mailing +list at \url{http://mail.python.org/mailman/listinfo/mailman-i18n}. The +current status of internationalization efforts is available at +\url{http://www.list.org/i18n.html}. + +\note{i18n is a common short-hand for ``internationalization'' because the word +starts with an i, ends with an n, and has 18 letters in between. If you mumble +a bit, i18n even sounds a bit like ``internationalization.''} + +% ---------------------------------------------------------------------------- +\subsection{How do I avoid having my name appear on the subscribers list? + (the hide option)\label{sec:nolist}} + +If you do not want to have your email address show up on the subscriber list +for any reason, you can opt to have it concealed. + +Common reasons for doing this include avoiding unsolicited bulk email (spam). +By default, the subscribers list is obscured to hinder spam harvesters, +but if you feel this is insufficient it's easy enough to remove your address +from the subscriber list given in the information pages or by email request. +(Note that this does not conceal your address from the list administrators.) +You may wish to see Section~\ref{sec:antispam} for more information on what +Mailman can do to help avoid spam. + +To change this setting using the web interface: +\begin{enumerate} + \item Log in to your member options page. (See Section~\ref{sec:web} for + instructions on how to do this.) + \item Go to the section marked ``Conceal yourself from subscriber list?'' and + choose ``Yes'' to hide your name from the list, or ``No'' to allow your name + to appear on the list. +\end{enumerate} + +To change this setting using the email interface: +\begin{enumerate} + \item Send a mail to \email{LISTNAME-request@DOMAIN} with the command + \var{set~hide~on} or \var{set~hide~off}. + + Commands can appear + in either the body or the subject of the message. (See + Section~\ref{sec:email} for more information about sending mail + commands.) + \item Set it to ``on'' to conceal your email address from the membership + list, or ``off'' to stop concealing your address. +\end{enumerate} + +% ============================================================================ +\section{Other common questions} + +% ---------------------------------------------------------------------------- +\subsection{How do I view the list archives?} +If the list is being archived, previously posted messages can be viewed by +going to the archive's web pages, a link to which can be found on the list +information page and in the \mailheader{List-Archive} header of every posted +message (unless your list administrator has disabled such headers). +Many mail programs hide the \mailheader{List-Archive} mail header, so you may +have to tell your mail program to allow you to view full headers before you +will be able to see it. + +Public archives usually have addresses of the form +\url{http://WEBSERVER/pipermail/LISTNAME/} and private archives usually +have addresses of the form \url{http://WEBSERVER/mailman/private/LISTNAME}. + +See Section~\ref{sec:web} for more information on finding the addresses of a +list. + +% ---------------------------------------------------------------------------- +\subsection{What does Mailman do to help protect me from unsolicited bulk email +(spam)?\label{sec:antispam}} + +A technical list's archives may include answers to a range of +different questions. Often, the people who have posted these answers would +be happy to help someone who doesn't quite understand the answer, and don't +mind giving their address out for that purpose. But +although it would be wonderful if everyone could contact each other easily, +we also want to make sure that the list and list archives are not abused by +people who send spam. + +To make a range of options available to list administrators, Mailman allows +a variety of configurations to help protect email addresses. +Many of these settings are optional to the list administrator, so your +particular list may be set up in different ways. List administrators +must walk a fine line between protecting subscribers and making it difficult +for people to get in touch. + +\begin{itemize} + \item Subscriber lists + \begin{itemize} + \item The list administrator can choose to have the subscriber list + public, viewable only to list members, or viewable only to list + administrators. + \item The subscriber list is shown with the addresses obscured to + make it difficult for spam harvesters to collect your address. + \item You can choose to have your address hidden from the subscriber + list. (See Section~\ref{sec:nolist} for more information.) + \item \note{The entire subscriber list is always available to the + list administrators.} + \end{itemize} + + \item List archives + \begin{itemize} + \item The list administrator can choose for the archives to be public, + viewable only to members (private), or completely unavailable. + \item The HTML archives which are created by Pipermail (the + archiving program which comes default with Mailman) contain only + obscured addresses. Other archiving programs are available and can + do different levels of obfuscation to make addresses less readable. + \item If you wish to be more sure, you can set the mail header + ``\mailheader{X-No-archive} yes'' and Mailman will not archive your + posts. Similarly, you can set the mail header + ``\mailheader{X-Archive} no'' to disable archiving. + + \warning{This does not stop other members from quoting your posts, + possibly even including your email address.} + \end{itemize} + + \item Limited posting to the lists + \begin{itemize} + \item The list administrator can choose who can post to the list. + Most lists are either moderated (a moderator or administrator + reviews each posting), set so only subscribers may post to the list, + or allow anyone to post to the list. + \item By allowing only subscribers to post to a list, Mailman often + blocks all spam and some viruses from being sent through the list. + As such, this is a fairly common setting used by list administrators. + \end{itemize} + + \item Anonymous lists + \begin{itemize} + \item Lists can also be made fully anonymous: all identifying + information about the sender is stripped from the header before the + message is sent on. + \item This is not typically used for anti-spam measures (it has + other uses), but it could be used in that way if desired. + \end{itemize} +\end{itemize} + +Of course, many address-obscuring methods can be circumvented by determined +people, so be aware that the protections used may not be enough. + +% ============================================================================ +\appendix +% ---------------------------------------------------------------------------- +\section{Email commands quick reference\label{a:commands}} +\begin{list}{}{} + \item confirm $<$CONFIRMATION-STRING$>$ + \begin{list}{}{} + \item + Confirm an action. The confirmation-string is required and should be + supplied within a mailback confirmation notice. + \end{list} + + \item end + \begin{list}{}{} + \item + Stop processing commands. Use this if your mail program automatically + adds a signature file. + \end{list} + + \item help + \begin{list}{}{} + \item + Receive a copy of the help message. + \end{list} + + \item info + \begin{list}{}{} + \item + Get information about this mailing list. + \end{list} + + \item lists + \begin{list}{}{} + \item + See a list of the public mailing lists on this GNU Mailman server. + \end{list} + + \item {password [$<$OLDPASSWORD$>$ $<$NEWPASSWORD$>$] [address=$<$ADDRESS$>$]} + \begin{list}{}{} + \item + Retrieve or change your password. With no arguments, this returns + your current password. With arguments $<$OLDPASSWORD$>$ and $<$NEWPASSWORD$>$ + you can change your password. + \end{list} + + \item set ... + \begin{list}{}{} + \item + Set or view your membership options. + + Use `set help' (without the quotes) to get a more detailed list of the + options you can change. This list is also given in + Appendix~\ref{a:options}. + + Use `set show' (without the quotes) to view your current option + settings. + \end{list} + + \item{subscribe [$<$PASSWORD$>$] [digest|nodigest] [address=$<$ADDRESS$>$]} + \begin{list}{}{} + \item + Subscribe to this mailing list. Your password must be given to + unsubscribe or change your options, but if you omit the password, one + will be generated for you. You may be periodically reminded of your + password. + + The next argument may be either: `nodigest' or `digest' (no quotes!). + If you wish to subscribe an address other than the address you sent + this request from, you may specify `address=$<$ADDRESS$>$' (no brackets + around the email address, and no quotes!) + \end{list} + + \item {unsubscribe [$<$PASSWORD$>$] [address=$<$ADDRESS$>$]} + \begin{list}{}{} + \item + Unsubscribe from the mailing list. If given, your password must match + your current password. If omitted, a confirmation email will be sent + to the unsubscribing address. If you wish to unsubscribe an address + other than the address you sent this request from, you may specify + `address=$<$ADDRESS$>$' (no brackets around the email address, and no + quotes!) + \end{list} + + \item {who [$<$PASSWORD$>$] [address=$<$ADDRESS$>$]} + \begin{list}{}{} + \item + See everyone who is on this mailing list. The roster is limited to + list members only, and you must supply your membership password to + retrieve it. If you're posting from an address other than your + membership address, specify your membership address with + `address=$<$ADDRESS$>$' (no brackets around the email address, and no + quotes!) + \end{list} +\end{list} + +% ---------------------------------------------------------------------------- +\section{Member options quick reference\label{a:options}} + +\begin{list}{}{} + \item set help + \begin{list}{}{} + \item Show this detailed help. + \end{list} + + \item {set show [address=$<$ADDRESS$>$]} + \begin{list}{}{} + \item View your current option settings. If you're posting from an address + other than your membership address, specify your membership address + with `address=$<$ADDRESS$>$' (no brackets around the email address, and no + quotes!). + \end{list} + + \item {set authenticate $<$PASSWORD$>$ [address=$<$ADDRESS$>$]} + \begin{list}{}{} + \item To set any of your options, you must include this command first, along + with your membership password. If you're posting from an address + other than your membership address, specify your membership address + with `address=$<$ADDRESS$>$' (no brackets around the email address, + and no quotes!). + \end{list} + + \item set ack on\\ + set ack off + \begin{list}{}{} + \item + When the `ack' option is turned on, you will receive an + acknowledgement message whenever you post a message to the list. + \end{list} + + \item set digest plain\\ + set digest mime\\ + set digest off + \begin{list}{}{} + \item + When the `digest' option is turned off, you will receive postings + immediately when they are posted. Use `set digest plain' if instead + you want to receive postings bundled into a plain text digest + (i.e. RFC 1153 digest). Use `set digest mime' if instead you want to + receive postings bundled together into a MIME digest. + \end{list} + + \item set delivery on\\ + set delivery off + \begin{list}{}{} + \item + Turn delivery on or off. This does not unsubscribe you, but instead + tells Mailman not to deliver messages to you for now. This is useful + if you're going on vacation. Be sure to use `set delivery on' when + you return from vacation! + \end{list} + + \item set myposts on\\ + set myposts off + \begin{list}{}{} + \item + Use `set myposts off' to avoid receiving copies of messages you post to + the list. This has no effect if you're receiving digests. + \end{list} + + \item set hide on\\ + set hide off + \begin{list}{}{} + \item + Use `set hide on' to conceal your email address when people request + the membership list. + \end{list} + + \item set duplicates on\\ + set duplicates off + \begin{list}{}{} + \item + Use `set duplicates off' if you want Mailman not to send you messages + if your address is explicitly mentioned in the To: or Cc: fields of + the message. This can reduce the number of duplicate postings you + will receive. + \end{list} + + \item set reminders on\\ + set reminders off + \begin{list}{}{} + \item Use `set reminders off' if you want to disable the monthly password + reminder for this mailing list. + \end{list} +\end{list} + +\end{document} diff --git a/docs/man/add_members.1 b/docs/man/add_members.1 new file mode 100644 index 000000000..d442a2b66 --- /dev/null +++ b/docs/man/add_members.1 @@ -0,0 +1,60 @@ +.\" +.\" GNU Mailman Manual +.\" +.\" add_members +.\" +.\" Documenter: Terri Oda +.\" terri (at) zone12.com +.\" Created: September 12, 2004 +.\" Last Updated: September 12, 2004 +.\" +.TH add_members 1 "September 12, 2004" "Mailman 2.1" "GNU Mailman Manual" +.\"===================================================================== +.SH NAME +add_members \- Remove members from a Mailman mailing list. +.\"===================================================================== +.SH SYNOPSIS +.B add_members +[-r \fIfile\fP] +[-d \fIfile\fP] +[-w <\fIy|n\fP>] +[-a <\fIy|n\fP>] +[-h] +\fIlistname\fP +.\"===================================================================== +.SH DESCRIPTION +.B add_members +adds members to a Mailman mailing list from the command line. +.PP +You must supply at least one of -r and -d options. At most one of the +files can be `-'. +.\"===================================================================== +.SH OPTIONS +.IP "--regular-members-file=\fIfile\fP, -r \fIfile\fP" +A file containing addresses of the members to be added, one +address per line. This list of people become non-digest +members. If file is `-', read addresses from stdin. Note that +-n/--non-digest-members-file are deprecated synonyms for this option. +.IP "--digest-members-file=\fIfile\fP, -d \fIfile\fP" +Similar to above, but these people become digest members. +.IP "--welome-msg=<\fIy|n\fP>, -w <\fIy|n\fP>" +Set whether or not to send the list members a welcome message, +overriding whatever the list's `send_welcome_msg' setting is. +.IP "--admin-notify=<\fIy|n\fP>, -a <\fIy|n\fP>" +Set whether or not to send the list administrators a notification on +the success/failure of these subscriptions, overriding whatever the +list's `admin_notify_mchanges' setting is. +.IP \fIlistname\fP +The name of the list to which you wish to add members. +.\"===================================================================== +.SH SEE ALSO +.BR clone_member (1), +.BR find_member (1), +.BR list_members (1), +.BR remove_members (1) +.PP +The Mailman website: http://www.list.org +.\"===================================================================== +.SH AUTHOR +This man page was created by Terri Oda <terri (at) zone12.com>. +Use <mailman-developers@python.org> to contact the developers. diff --git a/docs/man/check_db.1 b/docs/man/check_db.1 new file mode 100644 index 000000000..28a3b8149 --- /dev/null +++ b/docs/man/check_db.1 @@ -0,0 +1,60 @@ +.\" +.\" GNU Mailman Manual +.\" +.\" check_db +.\" +.\" Documenter: Terri Oda +.\" terri (at) zone12.com +.\" Created: September 14, 2004 +.\" Last Updated: September 14, 2004 +.\" +.TH check_db 1 "September 14, 2004" "Mailman 2.1" "GNU Mailman Manual" +.\"===================================================================== +.SH NAME +check_db \- Check a Mailman mailing list's config database file for integrity. +.\"===================================================================== +.SH SYNOPSIS +.B check_db +[-a] +[-v] +[-h] +[\fIlistname\fP [\fIlistname\fP ...]] +.\"===================================================================== +.SH DESCRIPTION +.B check_db +checks a list's config database file for integrity. +.PP +All of the following files are checked: +.RS + config.pck + config.pck.last + config.db + config.db.last + config.safety +.RE +.PP +It's okay if any of these are missing. config.pck and config.pck.last are +pickled versions of the config database file for 2.1a3 and beyond. config.db +and config.db.last are used in all earlier versions, and these are Python +marshals. config.safety is a pickle written by 2.1a3 and beyond when the +primary config.pck file could not be read. +.\"===================================================================== +.SH OPTIONS +.IP "--all, -a" +Check the databases for all lists. Otherwise only the lists named on +the command line are checked. +.IP "--verbose, -v" +Verbose output. The state of every tested file is printed. +Otherwise only corrupt files are displayed. +.IP "--help, -h" +Print help text and exit. +.\"===================================================================== +.SH SEE ALSO +.BR check_perms (1), +.BR transcheck (1) +.PP +The Mailman website: http://www.list.org +.\"===================================================================== +.SH AUTHOR +This man page was created by Terri Oda <terri (at) zone12.com>. +Use <mailman-developers@python.org> to contact the developers. diff --git a/docs/man/check_perms.1 b/docs/man/check_perms.1 new file mode 100644 index 000000000..76966a87c --- /dev/null +++ b/docs/man/check_perms.1 @@ -0,0 +1,46 @@ +.\" +.\" GNU Mailman Manual +.\" +.\" check_perms +.\" +.\" Documenter: Terri Oda +.\" terri (at) zone12.com +.\" Created: September 14, 2004 +.\" Last Updated: September 14, 2004 +.\" +.TH check_perms 1 "September 14, 2004" "Mailman 2.1" "GNU Mailman Manual" +.\"===================================================================== +.SH NAME +check_perms \- Check the permissions for the Mailman installation. +.\"===================================================================== +.SH SYNOPSIS +.B check_perms +[-f] +[-v] +[-h] +.\"===================================================================== +.SH DESCRIPTION +.B check_perms +checks the permissions for the Mailman installation. +.PP +With no arguments, just check and report all the files that have bogus +permissions or group ownership. With -f (and run as root), fix all the +permission problems found. With -v be verbose. +.\"===================================================================== +.SH OPTIONS +.IP "-f" +Run as root and fix all the permission problems found. +.IP "-v" +Verbose output. +.IP "--help, -h" +Print help message and exit. +.\"===================================================================== +.SH SEE ALSO +.BR check_db (1), +.BR transcheck (1) +.PP +The Mailman website: http://www.list.org +.\"===================================================================== +.SH AUTHOR +This man page was created by Terri Oda <terri (at) zone12.com>. +Use <mailman-developers@python.org> to contact the developers. diff --git a/docs/man/clone_member.1 b/docs/man/clone_member.1 new file mode 100644 index 000000000..35148f6af --- /dev/null +++ b/docs/man/clone_member.1 @@ -0,0 +1,71 @@ +.\" +.\" GNU Mailman Manual +.\" +.\" clone_member +.\" +.\" Documenter: Terri Oda +.\" terri (at) zone12.com +.\" Created: September 14, 2004 +.\" Last Updated: September 14, 2004 +.\" +.TH clone_member 1 "September 14, 2004" "Mailman 2.1" "GNU Mailman Manual" +.\"===================================================================== +.SH NAME +clone_member \- Clone a Mailman mailing list member address. +.\"===================================================================== +.SH SYNOPSIS +.B clone_member +[-l \fIlistname\fP] +[-r] +[-a] +[-q] +[-n] +[-h] +\fIfromoldaddr\fP \fItonewaddr\fP +.\"===================================================================== +.SH DESCRIPTION +.B clone_member +clones a member address. +.PP +Cloning a member address means that a new member will be added who has all the +same options and passwords as the original member address. Note that this +operation is fairly trusting of the user who runs it -- it does no +verification to the new address, it does not send out a welcome message, etc. +.PP +The existing member's subscription is usually not modified in any way. If you +want to remove the old address, use the -r flag. If you also want to change +any list admin addresses, use the -a flag. +.\"===================================================================== +.SH OPTIONS +.IP "--listname=\fIlistname\fP, -l \fIlistname\fP" +Check and modify only the named mailing lists. If -l is not given, +then all mailing lists are scanned from the address. Multiple -l +options can be supplied. +.IP "--remove, -r" +Remove the old address from the mailing list after it's been cloned. +.IP "--admin, -a" +Scan the list admin addresses for the old address, and clone or change +them too. +.IP "--quiet, -q" +Do the modifications quietly. +.IP "--nomodify, -n" +Print what would be done, but don't actually do it. Inhibits the +--quiet flag. +.IP "--help, -h" +Print help message and exit. +.IP \fIfromoldaddr\fP +(`from old address') is the old address of the user. +.IP \fItonewaddr\fP +(`to new address') is the new address of the user. +.\"===================================================================== +.SH SEE ALSO +.BR add_member (1), +.BR find_member (1), +.BR list_members (1), +.BR remove_members (1) +.PP +The Mailman website: http://www.list.org +.\"===================================================================== +.SH AUTHOR +This man page was created by Terri Oda <terri (at) zone12.com>. +Use <mailman-developers@python.org> to contact the developers. diff --git a/docs/man/find_member.1 b/docs/man/find_member.1 new file mode 100644 index 000000000..9d76bf5db --- /dev/null +++ b/docs/man/find_member.1 @@ -0,0 +1,64 @@ +add.\" +.\" GNU Mailman Manual +.\" +.\" find_member +.\" +.\" Documenter: Terri Oda +.\" terri (at) zone12.com +.\" Created: September 13, 2004 +.\" Last Updated: September 13, 2004 +.\" +.TH find_member 1 "September 13, 2004" "Mailman 2.1" "GNU Mailman Manual" +.\"===================================================================== +.SH NAME +find_member \- Find all Mailman mailing lists to which a given address is +subscribed. +.\"===================================================================== +.SH SYNOPSIS +.B find_member +[-l \fIlistname\fP] +[-x \fIlistname\fP] +[-w] +[-h] +\fIregex\fP +.\"===================================================================== +.SH DESCRIPTION +.B find_member +finds all Mailman mailing lists to which a member's address is subscribed. +.PP +The interaction between -l and -x is as follows. If any -l option is given +then only the named list will be included in the search. If any -x option is +given but no -l option is given, then all lists will be search except those +specifically excluded. +.PP +Regular expression syntax is Perl5-like, using the Python re module. Complete +specifications are at: +.PP +http://www.python.org/doc/current/lib/module-re.html +.PP +Address matches are case-insensitive, but case-preserved addresses are +displayed. +.\"===================================================================== +.SH OPTIONS +.IP "--listname=\fIlistname\fP, -l \fIlistname\fP" +Include only the named list in the search. +.IP "--exclude=\fIlistname\fP, -x \fIlistname\fP" +Exclude the named list from the search. +.IP "--owners, -w" +Search list owners as well as members. +.IP "--help, -h" +Print help message and exit. +.IP \fIregex\fP +A Python regular expression to match. +.\"===================================================================== +.SH SEE ALSO +.BR add_members (1), +.BR clone_member (1), +.BR list_members (1), +.BR remove_members (1) +.PP +The Mailman website: http://www.list.org +.\"===================================================================== +.SH AUTHOR +This man page was created by Terri Oda <terri (at) zone12.com>. +Use <mailman-developers@python.org> to contact the developers. diff --git a/docs/man/list_members.1 b/docs/man/list_members.1 new file mode 100644 index 000000000..cbf338a40 --- /dev/null +++ b/docs/man/list_members.1 @@ -0,0 +1,78 @@ +add.\" +.\" GNU Mailman Manual +.\" +.\" list_members +.\" +.\" Documenter: Terri Oda +.\" terri (at) zone12.com +.\" Created: September 13, 2004 +.\" Last Updated: September 13, 2004 +.\" +.TH list_member 1 "September 13, 2004" "Mailman 2.1" "GNU Mailman Manual" +.\"===================================================================== +.SH NAME +list_member \- List all the members of a Mailman mailing list. +.\"===================================================================== +.SH SYNOPSIS +.B list_member +[-o \fIfile\fP] +[-r] +[-d [\fIkind\fP]] +[-n [\fIwhy\fI]] +[-f] +[-p] +[-i] +[-u] +[-h] +\fIlistname\fP +.\"===================================================================== +.SH DESCRIPTION +.B list_member +lists all members of a mailing list. +.PP +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. +.\"===================================================================== +.SH OPTIONS +.IP "--output \fIfile\fP, -o \fIfile\fP" +Write output to specified file instead of standard out. +.IP "--regular, -r" +Print just the regular (non-digest) members. +.IP "--digest[=\fIkind\fP], -d [\fIkind\fP]" +Print just the digest members. Optional argument can be "mime" or +"plain" which prints just the digest members receiving that kind of +digest. +.IP "--nomail[=\fIwhy\fP], -n[\fIwhy\fP]" +Print the members that have delivery disabled. Optional argument can +be "byadmin", "byuser", "bybounce", or "unknown" which prints just the +users who have delivery disabled for that reason. It can also be +"enabled" which prints just those member for whom delivery is +enabled. +.IP "--fullnames, -f" +Include the full names in the output. +.IP "--preserve, -p" +Output member addresses case preserved the way they were added to the +list. Otherwise, addresses are printed in all lowercase. +.IP "--invalid, -i" +Print only the addresses in the membership list that are invalid. +Ignores -r, -d, -n. +.IP "--unicode, -u" +Print addresses which are stored as Unicode objects instead of normal +string objects. Ignores -r, -d, -n. +.IP "--help, -h" +Print help message and exit. +.IP "\fIlistname\fP" +The name of the mailing list to use. +.\"===================================================================== +.SH SEE ALSO +.BR add_members (1), +.BR clone_member (1), +.BR find_member (1), +.BR remove_members (1) +.PP +The Mailman website: http://www.list.org +.\"===================================================================== +.SH AUTHOR +This man page was created by Terri Oda <terri (at) zone12.com>. +Use <mailman-developers@python.org> to contact the developers. diff --git a/docs/man/remove_members.1 b/docs/man/remove_members.1 new file mode 100644 index 000000000..69ed545d6 --- /dev/null +++ b/docs/man/remove_members.1 @@ -0,0 +1,63 @@ +add.\" +.\" GNU Mailman Manual +.\" +.\" remove_members +.\" +.\" Documenter: Terri Oda +.\" terri (at) zone12.com +.\" Created: September 13, 2004 +.\" Last Updated: September 13, 2004 +.\" +.TH remove_members 1 "September 13, 2004" "Mailman 2.1" "GNU Mailman Manual" +.\"===================================================================== +.SH NAME +remove_members \- Remove members from a Mailman mailing list. +.\"===================================================================== +.SH SYNOPSIS +.B remove_members +[-f \fIfile\fP] +[-a] +[--fromall] +[-n] +[-N] +[-h] +[\fIlistname\fP] +[\fIaddr1\fP ...] +.\"===================================================================== +.SH DESCRIPTION +.B remove_members +removes members from a Mailman mailing list from the command line. +.\"===================================================================== +.SH OPTIONS +.IP "---file=\fIfile\fP, -f \fIfile\fP" +Remove member addresses found in the given file. If file is +`-', read stdin. +.IP "--all, -a" +Remove all members of the mailing list. +(mutually exclusive with --fromall) +.IP "--fromall" +Removes the given addresses from all the lists on this system +regardless of virtual domains if you have any. This option cannot be +used -a/--all. Also, you should not specify a listname when +using this option. +.IP "--nouserack, -n" +Don't send the admin acknowledgements. If not specified, the list +default value is used. +.IP "--help, -h" +Print help message and exit. +.IP \fPlistname\fI +The name of the mailing list to use. +.IP \fPaddr1\fI ... +Additional addresses to remove. +.\"===================================================================== +.SH SEE ALSO +.BR add_members (1), +.BR clone_member (1), +.BR find_member (1), +.BR list_members (1) +.PP +The Mailman website: http://www.list.org +.\"===================================================================== +.SH AUTHOR +This man page was created by Terri Oda <terri (at) zone12.com>. +Use <mailman-developers@python.org> to contact the developers. diff --git a/docs/man/sync_members.1 b/docs/man/sync_members.1 new file mode 100644 index 000000000..b185ae3c1 --- /dev/null +++ b/docs/man/sync_members.1 @@ -0,0 +1,81 @@ +add.\" +.\" GNU Mailman Manual +.\" +.\" list_members +.\" +.\" Documenter: Terri Oda +.\" terri (at) zone12.com +.\" Created: September 13, 2004 +.\" Last Updated: September 13, 2004 +.\" +.TH sync_members 1 "September 13, 2004" "Mailman 2.1" "GNU Mailman Manual" +.\"===================================================================== +.SH NAME +sync_members \- Synchronize a Mailman mailing list's membership with a flat file. +.\"===================================================================== +.SH SYNOPSIS +.B sync_members +[-n] +[-w <\fIyes|no\fP>] +[-g <\fIyes|no\fP>] +[-d <\fIyes|no\fP>] +[-a <\fIyes|no\fP>] +[-h] +-f \fIfilename\fP +\fIlistname\fP +.\"===================================================================== +.SH DESCRIPTION +.B sync_members +synchronizes a Mailman mailing list's membership with a flat file. +.PP +This script is useful if you have a Mailman mailing list and a sendmail +:include: style list of addresses (also as is used in Majordomo). For every +address in the file that does not appear in the mailing list, the address is +added. For every address in the mailing list that does not appear in the +file, the address is removed. Other options control what happens when an +address is added or removed. +.\"===================================================================== +.SH OPTIONS +.IP "--no-change -n" +Don't actually make the changes. Instead, print out what would be +done to the list. +.IP "-welcome-msg[=<\fIyes|no\fP>], -w[=<\fIyes|no\fP>]" +Sets whether or not to send the newly added members a welcome +message, overriding whatever the list's `send_welcome_msg' setting +is. With -w=yes or -w, the welcome message is sent. With -w=no, no +message is sent. +.IP "--goodbye-msg[=<\fIyes|no\fP>], -g[=<\fIyes|no\fP>]" +Sets whether or not to send the goodbye message to removed members, +overriding whatever the list's `send_goodbye_msg' setting is. With +-g=yes or -g, the goodbye message is sent. With -g=no, no message is +sent. +.IP "--digest[=<\fIyes|no\fP>], -d[=<\fIyes|no\fP>]" +Selects whether to make newly added members receive messages in +digests. With -d=yes or -d, they become digest members. With -d=no +(or if no -d option given) they are added as regular members. +.IP "--notifyadmin[=<\fIyes|no\fP>], -a[=<\fIyes|no\fP>]" +Specifies whether the admin should be notified for each subscription +or unsubscription. If you're adding a lot of addresses, you +definitely want to turn this off! With -a=yes or -a, the admin is +notified. With -a=no, the admin is not notified. With no -a option, +the default for the list is used. +.IP "--file <\fIfilename | -\fp>, -f <\fIfilename | -\fP>" +This option is required. It specifies the flat file to synchronize +against. Email addresses must appear one per line. If filename is +`-' then stdin is used. +.IP "--help, -h" +Print help message. +.IP \fIlistname\fP +Required. This specifies the list to synchronize. +.\"===================================================================== +.SH SEE ALSO +.BR add_members (1), +.BR clone_member (1), +.BR list_members (1), +.BR remove_members (1) +.PP +The Mailman website: http://www.list.org +.\"===================================================================== +.SH AUTHOR +This man page was created by Terri Oda <terri (at) zone12.com>. +Use <mailman-developers@python.org> to contact the developers. diff --git a/docs/man/transcheck.1 b/docs/man/transcheck.1 new file mode 100644 index 000000000..6e16a10f8 --- /dev/null +++ b/docs/man/transcheck.1 @@ -0,0 +1,41 @@ +.\" +.\" GNU Mailman Manual +.\" +.\" transcheck +.\" +.\" Documenter: Terri Oda +.\" terri (at) zone12.com +.\" Created: September 18, 2004 +.\" Last Updated: September 18, 2004 +.\" +.TH transcheck 1 "September 18, 2004" "Mailman 2.1" "GNU Mailman Manual" +.\"===================================================================== +.SH NAME +transcheck \- Check a given Mailman translation +.\"===================================================================== +.SH SYNOPSIS +.B transcheck +[-q] +\fIlang\fP +.\"===================================================================== +.SH DESCRIPTION +.B transcheck +checks a given Mailman translation, making sure that variables and +tags referenced in translation are the same variables and tags in +the original templates and catalog. +.\"===================================================================== +.SH OPTIONS +.IP "-q" +Asks for a brief summary. +.IP "\fIlang\fP" +Your country code. (e.g. 'it' for Italy) +.\"===================================================================== +.SH SEE ALSO +.BR check_perms (1), +.BR check_db (1) +.PP +The Mailman website: http://www.list.org +.\"===================================================================== +.SH AUTHOR +This man page was created by Terri Oda <terri (at) zone12.com>. +Use <mailman-developers@python.org> to contact the developers. diff --git a/docs/posting-flow-chart.ps b/docs/posting-flow-chart.ps new file mode 100644 index 000000000..e8d47e27c --- /dev/null +++ b/docs/posting-flow-chart.ps @@ -0,0 +1,735 @@ +%!PS-Adobe-2.0 +%%Title: posting-flow-chart +%%Creator: Dia v0.86 +%%CreationDate: Mon Oct 15 13:46:55 2001 +%%For: a user +%%DocumentPaperSizes: A4 +%%Orientation: Landscape +%%BeginSetup +%%EndSetup +%%EndComments +%%BeginProlog +[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one +/two /three /four /five /six /seven /eight /nine /colon /semicolon +/less /equal /greater /question /at /A /B /C /D /E +/F /G /H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W /X /Y +/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c +/d /e /f /g /h /i /j /k /l /m +/n /o /p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright +/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior +/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf +/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde +/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex +/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring +/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave +/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def +/Times-Roman-latin1 + /Times-Roman findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Times-Italic-latin1 + /Times-Italic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Times-Bold-latin1 + /Times-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Times-BoldItalic-latin1 + /Times-BoldItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/AvantGarde-Book-latin1 + /AvantGarde-Book findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/AvantGarde-BookOblique-latin1 + /AvantGarde-BookOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/AvantGarde-Demi-latin1 + /AvantGarde-Demi findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/AvantGarde-DemiOblique-latin1 + /AvantGarde-DemiOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Bookman-Light-latin1 + /Bookman-Light findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Bookman-LightItalic-latin1 + /Bookman-LightItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Bookman-Demi-latin1 + /Bookman-Demi findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Bookman-DemiItalic-latin1 + /Bookman-DemiItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Courier-latin1 + /Courier findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Courier-Oblique-latin1 + /Courier-Oblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Courier-Bold-latin1 + /Courier-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Courier-BoldOblique-latin1 + /Courier-BoldOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-latin1 + /Helvetica findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Oblique-latin1 + /Helvetica-Oblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Bold-latin1 + /Helvetica-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-BoldOblique-latin1 + /Helvetica-BoldOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Narrow-latin1 + /Helvetica-Narrow findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Narrow-Oblique-latin1 + /Helvetica-Narrow-Oblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Narrow-Bold-latin1 + /Helvetica-Narrow-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Helvetica-Narrow-BoldOblique-latin1 + /Helvetica-Narrow-BoldOblique findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchoolbook-Roman-latin1 + /NewCenturySchoolbook-Roman findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchoolbook-Italic-latin1 + /NewCenturySchoolbook-Italic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchoolbook-Bold-latin1 + /NewCenturySchoolbook-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchoolbook-BoldItalic-latin1 + /NewCenturySchoolbook-BoldItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Palatino-Roman-latin1 + /Palatino-Roman findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Palatino-Italic-latin1 + /Palatino-Italic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Palatino-Bold-latin1 + /Palatino-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Palatino-BoldItalic-latin1 + /Palatino-BoldItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/Symbol-latin1 + /Symbol findfont +definefont pop +/ZapfChancery-MediumItalic-latin1 + /ZapfChancery-MediumItalic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/ZapfDingbats-latin1 + /ZapfDingbats findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/cp {closepath} bind def +/c {curveto} bind def +/f {fill} bind def +/a {arc} bind def +/ef {eofill} bind def +/ex {exch} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth pop} bind def +/tr {translate} bind def + +/ellipsedict 8 dict def +ellipsedict /mtrx matrix put +/ellipse +{ ellipsedict begin + /endangle exch def + /startangle exch def + /yrad exch def + /xrad exch def + /y exch def + /x exch def /savematrix mtrx currentmatrix def + x y tr xrad yrad sc + 0 0 1 startangle endangle arc + savematrix setmatrix + end +} def + +/mergeprocs { +dup length +3 -1 roll +dup +length +dup +5 1 roll +3 -1 roll +add +array cvx +dup +3 -1 roll +0 exch +putinterval +dup +4 2 roll +putinterval +} bind def +%%EndProlog + + +%%Page: 1 1 +gs +90 rotate +10.504277 -10.504277 scale +-7.390052 13.596868 translate +n 15.000000 -5.986920 m 79.927437 -5.986920 l 79.927437 35.463012 l 15.000000 35.463012 l 15.000000 -5.986920 l clip +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 28.288577 -5.936920 m 34.143683 -5.936920 l 34.952105 -5.936920 35.607460 -5.489205 35.607460 -4.936920 c 35.607460 -4.384635 34.952105 -3.936920 34.143683 -3.936920 c 28.288577 -3.936920 l 27.480155 -3.936920 26.824800 -4.384635 26.824800 -4.936920 c 26.824800 -5.489205 27.480155 -5.936920 28.288577 -5.936920 c f +0.000000 0.000000 0.000000 srgb +n 28.288577 -5.936920 m 34.143683 -5.936920 l 34.952105 -5.936920 35.607460 -5.489205 35.607460 -4.936920 c 35.607460 -4.384635 34.952105 -3.936920 34.143683 -3.936920 c 28.288577 -3.936920 l 27.480155 -3.936920 26.824800 -4.384635 26.824800 -4.936920 c 26.824800 -5.489205 27.480155 -5.936920 28.288577 -5.936920 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(post a msg) dup sw 2 div 31.216130 ex sub -4.742230 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 31.228705 0.448229 m 34.632611 3.852135 l 31.228705 7.256041 l 27.824799 3.852135 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 31.228705 0.448229 m 34.632611 3.852135 l 31.228705 7.256041 l 27.824799 3.852135 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(is a) dup sw 2 div 31.228705 ex sub 3.646825 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(member?) dup sw 2 div 31.228705 ex sub 4.446825 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 31.228700 0.448231 m 31.216100 -3.936920 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 30.826403 -0.350616 m 31.228700 0.448231 l 31.626400 -0.352915 l f +1.000000 1.000000 1.000000 srgb +n 22.333205 8.807639 m 25.737111 12.211545 l 22.333205 15.615451 l 18.929299 12.211545 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 22.333205 8.807639 m 25.737111 12.211545 l 22.333205 15.615451 l 18.929299 12.211545 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(mod bit) dup sw 2 div 22.333205 ex sub 12.006235 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(set?) dup sw 2 div 22.333205 ex sub 12.806235 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 22.333200 8.807640 m 27.824800 3.852140 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 22.659157 7.974722 m 22.333200 8.807640 l 23.195108 8.568655 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +() dup sw 2 div 15.000000 ex sub 5.000000 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 28.675700 ex sub 3.001160 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 19.780300 ex sub 11.360600 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 23.184200 ex sub 14.764500 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 34.632600 3.852140 m 40.261205 8.139600 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 39.382424 7.973037 m 40.261205 8.139600 l 39.867187 7.336637 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 33.781600 ex sub 3.001160 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 40.261205 8.139600 m 43.907510 11.959285 l 40.261205 15.778970 l 36.614900 11.959285 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 40.261205 8.139600 m 43.907510 11.959285 l 40.261205 15.778970 l 36.614900 11.959285 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(explicit) dup sw 2 div 40.261205 ex sub 11.753975 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(accept?) dup sw 2 div 40.261205 ex sub 12.553975 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 39.349629 ex sub 14.824049 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 59.913105 8.346249 m 63.559411 11.992555 l 59.913105 15.638861 l 56.266799 11.992555 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 59.913105 8.346249 m 63.559411 11.992555 l 59.913105 15.638861 l 56.266799 11.992555 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(explicit) dup sw 2 div 59.913105 ex sub 11.787245 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(reject?) dup sw 2 div 59.913105 ex sub 12.587245 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 59.001528 ex sub 14.727284 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 54.324011 11.922575 m 56.266799 11.992555 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 55.452919 12.363498 m 56.266799 11.992555 l 55.481716 11.564017 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 42.995934 ex sub 11.004364 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 71.066405 8.389389 m 74.712711 12.035695 l 71.066405 15.682001 l 67.420099 12.035695 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 71.066405 8.389389 m 74.712711 12.035695 l 71.066405 15.682001 l 67.420099 12.035695 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(explicit) dup sw 2 div 71.066405 ex sub 11.830385 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(discard?) dup sw 2 div 71.066405 ex sub 12.630385 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 63.559411 11.992555 m 67.420100 12.035700 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 66.615680 12.426735 m 67.420100 12.035700 l 66.624620 11.626785 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 62.647834 ex sub 11.080979 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 71.066400 15.682000 m 71.055000 19.434500 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 70.657432 18.633289 m 71.055000 19.434500 l 71.457429 18.635719 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 70.154800 ex sub 14.770400 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 73.801100 ex sub 11.124100 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 59.913105 15.638861 m 59.907500 19.455400 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 59.508675 18.654813 m 59.907500 19.455400 l 60.308674 18.655988 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 22.333200 15.615400 m 22.362400 21.044900 l 27.166900 21.015055 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 26.369400 21.420017 m 27.166900 21.015055 l 26.364431 20.620032 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 28.954977 29.425200 m 34.810083 29.425200 l 35.618505 29.425200 36.273860 29.964050 36.273860 30.628755 c 36.273860 31.293460 35.618505 31.832310 34.810083 31.832310 c 28.954977 31.832310 l 28.146555 31.832310 27.491200 31.293460 27.491200 30.628755 c 27.491200 29.964050 28.146555 29.425200 28.954977 29.425200 c f +0.000000 0.000000 0.000000 srgb +n 28.954977 29.425200 m 34.810083 29.425200 l 35.618505 29.425200 36.273860 29.964050 36.273860 30.628755 c 36.273860 31.293460 35.618505 31.832310 34.810083 31.832310 c 28.954977 31.832310 l 28.146555 31.832310 27.491200 31.293460 27.491200 30.628755 c 27.491200 29.964050 28.146555 29.425200 28.954977 29.425200 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(hold for) dup sw 2 div 31.882530 ex sub 30.423445 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(moderation) dup sw 2 div 31.882530 ex sub 31.223445 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 28.666900 19.811500 m 34.666900 19.811500 l 35.495328 19.811500 36.166900 20.350350 36.166900 21.015055 c 36.166900 21.679760 35.495328 22.218610 34.666900 22.218610 c 28.666900 22.218610 l 27.838472 22.218610 27.166900 21.679760 27.166900 21.015055 c 27.166900 20.350350 27.838472 19.811500 28.666900 19.811500 c f +0.000000 0.000000 0.000000 srgb +n 28.666900 19.811500 m 34.666900 19.811500 l 35.495328 19.811500 36.166900 20.350350 36.166900 21.015055 c 36.166900 21.679760 35.495328 22.218610 34.666900 22.218610 c 28.666900 22.218610 l 27.838472 22.218610 27.166900 21.679760 27.166900 21.015055 c 27.166900 20.350350 27.838472 19.811500 28.666900 19.811500 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(pass thru) dup sw 2 div 31.666900 ex sub 21.209745 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 57.222377 19.455400 m 62.592683 19.455400 l 63.334168 19.455400 63.935260 19.903115 63.935260 20.455400 c 63.935260 21.007685 63.334168 21.455400 62.592683 21.455400 c 57.222377 21.455400 l 56.480892 21.455400 55.879800 21.007685 55.879800 20.455400 c 55.879800 19.903115 56.480892 19.455400 57.222377 19.455400 c f +0.000000 0.000000 0.000000 srgb +n 57.222377 19.455400 m 62.592683 19.455400 l 63.334168 19.455400 63.935260 19.903115 63.935260 20.455400 c 63.935260 21.007685 63.334168 21.455400 62.592683 21.455400 c 57.222377 21.455400 l 56.480892 21.455400 55.879800 21.007685 55.879800 20.455400 c 55.879800 19.903115 56.480892 19.455400 57.222377 19.455400 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(bounce it) dup sw 2 div 59.907530 ex sub 20.650090 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 67.885077 19.434500 m 74.224983 19.434500 l 75.100342 19.434500 75.809960 19.882215 75.809960 20.434500 c 75.809960 20.986785 75.100342 21.434500 74.224983 21.434500 c 67.885077 21.434500 l 67.009718 21.434500 66.300100 20.986785 66.300100 20.434500 c 66.300100 19.882215 67.009718 19.434500 67.885077 19.434500 c f +0.000000 0.000000 0.000000 srgb +n 67.885077 19.434500 m 74.224983 19.434500 l 75.100342 19.434500 75.809960 19.882215 75.809960 20.434500 c 75.809960 20.986785 75.100342 21.434500 74.224983 21.434500 c 67.885077 21.434500 l 67.009718 21.434500 66.300100 20.986785 66.300100 20.434500 c 66.300100 19.882215 67.009718 19.434500 67.885077 19.434500 c s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(discard it) dup sw 2 div 71.055030 ex sub 20.629190 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 40.261205 15.778970 m 40.184200 21.044900 l 36.166900 21.015055 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 36.969849 20.621009 m 36.166900 21.015055 l 36.963906 21.420987 l f +1.000000 1.000000 1.000000 srgb +n 65.017305 25.865999 m 69.790811 30.639505 l 65.017305 35.413011 l 60.243799 30.639505 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 65.017305 25.865999 m 69.790811 30.639505 l 65.017305 35.413011 l 60.243799 30.639505 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(generic) dup sw 2 div 65.017305 ex sub 30.034195 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(non-member) dup sw 2 div 65.017305 ex sub 30.834195 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(disposition) dup sw 2 div 65.017305 ex sub 31.634195 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 74.712700 12.035700 m 77.310000 12.068400 l 77.310000 30.668100 l 69.790800 30.639500 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 70.592316 30.242546 m 69.790800 30.639500 l 70.589273 31.042540 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(discard) dup sw 2 div 68.632800 ex sub 24.246900 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 66.210600 27.059400 m 71.055000 21.434500 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 70.836024 22.301708 m 71.055000 21.434500 l 70.229848 21.779644 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 63.823900 27.059400 m 59.907500 21.455400 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 60.693636 21.882004 m 59.907500 21.455400 l 60.037899 22.340271 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(reject) dup sw 2 div 61.865700 ex sub 24.257400 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 60.243800 30.639500 m 36.273860 30.628755 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 37.074039 30.229114 m 36.273860 30.628755 l 37.073681 31.029114 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(hold) dup sw 2 div 48.258830 ex sub 30.634128 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 18.929299 12.211545 m 17.707519 12.274592 l 17.707519 30.574592 l 27.491200 30.628755 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 26.688998 31.024320 m 27.491200 30.628755 l 26.693427 30.224332 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 61.437100 29.446100 m 35.727550 21.866089 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 36.608013 21.708655 m 35.727550 21.866089 l 36.381775 22.475998 l f +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(accept) dup sw 2 div 48.582325 ex sub 25.656094 m gs 1 -1 sc sh gr +1.000000 1.000000 1.000000 srgb +n 50.677705 8.276269 m 54.324011 11.922575 l 50.677705 15.568881 l 47.031399 11.922575 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0.000000 0.000000 0.000000 srgb +n 50.677705 8.276269 m 54.324011 11.922575 l 50.677705 15.568881 l 47.031399 11.922575 l cp s +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(explicit) dup sw 2 div 50.677705 ex sub 11.717265 m gs 1 -1 sc sh gr +0.000000 0.000000 0.000000 srgb +(hold?) dup sw 2 div 50.677705 ex sub 12.517265 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(yes) dup sw 2 div 49.766128 ex sub 14.657304 m gs 1 -1 sc sh gr +/Courier-latin1 ff 0.800000 scf sf +0.000000 0.000000 0.000000 srgb +(no) dup sw 2 div 53.412434 ex sub 11.010998 m gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +0.000000 0.000000 0.000000 srgb +n 50.677705 15.568881 m 50.723859 19.674592 l 35.845120 29.777721 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 36.282254 28.997392 m 35.845120 29.777721 l 36.731664 29.659231 l f +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0.000000 0.000000 0.000000 srgb +n 43.907510 11.959285 m 47.031399 11.922575 l s +0 slj +0.000000 0.000000 0.000000 srgb +n 46.236154 12.331948 m 47.031399 11.922575 l 46.226754 11.532003 l f +/Courier-latin1 ff 2.000000 scf sf +0.000000 0.000000 0.000000 srgb +(Sender Moderation Flowchart) dup sw 2 div 57.443403 ex sub 1.624592 m gs 1 -1 sc sh gr +gr +showpage + diff --git a/docs/readmes/INSTALL.txt b/docs/readmes/INSTALL.txt new file mode 100644 index 000000000..9485a392e --- /dev/null +++ b/docs/readmes/INSTALL.txt @@ -0,0 +1,25 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 1998-2005 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +The installation and upgrading instructions are now completely contained in +the Mailman Installation Guide. Web, PostScript, PDF, and plaintext formats +for this guide are available both within this source distribution and online. + +All manuals within this source distribution are provided in the admin/www +directory: + + HTML : admin/www/mailman-install/index.html + PostScript : admin/www/mailman-install.ps + PDF : admin/www/mailman-install.pdf + plain text : admin/www/mailman-install.txt + +Or go online at http://www.list.org/site.html to find the online installation +guide. + + + +Local Variables: +mode: indented-text +indent-tabs-mode: nil +End: diff --git a/docs/readmes/README-I18N.en b/docs/readmes/README-I18N.en new file mode 100644 index 000000000..ade319bd8 --- /dev/null +++ b/docs/readmes/README-I18N.en @@ -0,0 +1,213 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 2001-2003 by the Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + +INTERNATIONALIZATION + + Mailman 2.1 is multilingual. By default it supports English, but + additional languages may also be available. If the language you + want to add is already supported by Mailman, then getting all your + lists to also support that language is fairly easy. You just need + to go to the administrative web pages, click on the "Languages" + category, and select the languages you want your list to support. + + If the language you want to use has not been previously + translated, or you don't know where to find the language pack for + your language, read the section below or contact the Mailman + internationalization mailing list mailman-i18n@python.org. + + +ADDING NEW TRANSLATIONS + + Suppose you want to add new translations for a previously + unsupported language, what steps would you need to take? + + First, you should send a message to mailman-i18n@python.org to + make sure nobody has already created the translations for your + language. In the example below, we're going to create a + translation for the mythical language "Fredonia" which has the + official language code of "xx". + + You should see + + http://www.list.org/i18n.html + + for more information on internationalizing Mailman. Also, Simone + Piunno -- who is the Italian translation champion -- has written + up some nice instructions, which are provided below. + + In general you need to do two things to add translations for a + language in Mailman. You need to translate the message catalog + and you need to translate the templates. + + To translate the message catalog, grab the file + messages/mailman.pot and make a copy called mailman.po in the + subdirectory messages/xx/LC_MESSAGES. Then you edit the file and + add the translations for each message identified in the catalog. + It will be very helpful to have a good tool, such as KDE's KBabel + tool, or po-mode for Emacs, for this part of the job. + + Once you've added your translations, you can then run msgfmt over + your .po file to generate messages/xx/LC_MESSAGE/mailman.mo. Run + "make" in the messages subdirectory to do this. + + Next, create the subdirectory templates/xx and translate each of + the files in templates/en/*.{html,txt}. These you should also + donate back to the Mailman project. + + To make Mailman and your lists aware of the new language, follow + the directions in the section above. + + +TRANSLATION HINTS + + Q: If your language uses non-ASCII characters, such as the cedilla in + French, how should you add these to the catalogs and templates? + + A: For any message that is destined for the web interface, use an + HTML entity reference where appropriate. For messages destined + for email, you should use the non-ASCII characters explicitly. + This includes both for the message catalog and the templates. + + +RESYNCHRONIZING THE CATALOG + + As Mailman development continues, new updated catalogs + (i.e. mailman.pot files) will be made available. As mailman.pot + changes, the individual language catalogs + (i.e. xx/LC_MESSAGES/mailman.po files) need to be updated as well. + + In general, I as the Mailman maintainer will merge the new + catalogs with the individual language catalogs, and commit the + updates to CVS. Translators should grab the new mailman.po files + from CVS and update the translated messages. They should also + update the template translations. + + For best results, you will probably want to keep current on + changes to Mailman 2.1 in the CVS. As Mailman 2.1 moves towards + final release, the catalogs and templates should start to + stabilize. Alternatively, occasionally I will make new English + language packs available on SourceForge, and you can use these to + create your translations. + + +DONATING YOUR TRANSLATION BACK TO MAILMAN + + We'd really appreciate it if you donate your translations back to + the Mailman project, so that others can benefit from your effort. + You'll get credit of course, in the Mailman documentation. Here + are the steps to donate your translations, either the first time + or subsequent updates. + + The best thing to do is to send me <barry@python.org> a "tarball", + i.e. a gzip'd tarfile, that can be unpacked in the top level + directory of the Mailman CVS tree. This would be the directory + containing this README-I18N.en file. + + Your tarball should contain two directories, where your donated + language is `xx': + + templates/xx + messages/xx + + In templates/xx there should be the translated templates, all the + .txt and .html files, for your language, mirroring those in the + English template directory (always the master copy). + + In messages/xx you should have a single directory LC_MESSAGES, and + in that directory a file called mailman.po, which is the human + readable catalog for your language. Do not send me the mailman.mo + file, since I'll recreate it on my end, and that'll save on the + size of the tarball. + + That's basically it. If you need to include a README, please call + it README.xx and put it in the messages/xx directory. README.xx + can be in your native language. + + You can email the tarball to me, and if this is the first + installation of the language, please tell me what the + add_language() call in Defaults.py.in should be for your + language. + + +CURRENT LIST OF LANGUAGE SUPPORTED OUT-OF-THE BOX + + See http://www.list.org/i18n.html + + +MORE INSTRUCTIONS + + Here is the recipe that Simone Piunno used for the Italian + translations: + + "You can start without much technical knowledge, but if you want + to keep your translation up-to-date (while the development branch + evolves into the next stable release) you'd better learn how to + use cvs and diff. + + Here is my recipe. + + Basically, you'll start by copying templates/en/* to your sandbox dir + and then translating each file. Keep in mind that %(foo)s is a + variable reference (much like %s in C) and must be left untouched. + Also, you must be able to recognize a markup tag (eg, <foo>) because + they must be left untouched too, and you should know how to escape + non-ASCII characters, e.g. "è" -> "è", but only in html files. + Remember that if you need a literal % sign, it must be doubled: %% + + Next, you copy messages/mailman.pot, renaming it to serbian.po. + You can open this file with kbabel (a tool included in KDE SDK) and + translate each string (original on the higher half of the window, your + translation on the bottom half). + + If you are a masochist, you can even use emacs PO mode ;) + Keep attention to the same markers and escaping as above, with the added + complexity that here it's harder to say when a string is html (e.g. used + for web UI) or pure text (e.g used for email interface) + + Then you try to compile you .po file: + + msgfmt -v -o serbian.mo serbian.po + + No error messages should appear. + + Next, copy your files on an installed mailman tree, and run + bin/transcheck XX, where XX is your country code. + + No warning should appear (but maybe some warning is ok, if you really + know what you're doing). + + Now, try to run your translation (add an "add_language" line to + Mailman/Defaults.py) and check the many scattered pieces blend + together well. Sometimes you'll need some adjustment. + + When you're satistied, pack up a tar.gz with the following structure: + + messages/XX/LC_MESSAGES/mailman.po + templates/XX/admindbdetails.html + templates/XX/admindbpreamble.html + . + . + templates/XX/userpass.txt + templates/XX/verify.txt + + (XX is your country code) and send it to Barry Warsaw. Do not + include the mailman.mo file if you can help it. + + By that time, your translation could be somewhat obsolete, because + templates and mailman.pot could have been evolved meanwhile. + + Don't panic. + + You'll need to check diffs to find what changed and how, so that + you can easily update your files. + + Save everything everytime, you'll need it. + + + +Local Variables: +mode: text +indent-tabs-mode: nil +End: diff --git a/docs/readmes/README.CONTRIB b/docs/readmes/README.CONTRIB new file mode 100644 index 000000000..c378f3bce --- /dev/null +++ b/docs/readmes/README.CONTRIB @@ -0,0 +1,17 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 2001,2002 by the Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Encrypted mailing lists + + Raphinou <rb@raphinou.com> has documented a setup for encrypted + mailing lists at + + http://www.raphinou.com/smailman + + + +Local Variables: +mode: indented-text +indent-tabs-mode: nil +End: diff --git a/docs/readmes/README.NETSCAPE b/docs/readmes/README.NETSCAPE new file mode 100644 index 000000000..9828127fc --- /dev/null +++ b/docs/readmes/README.NETSCAPE @@ -0,0 +1,57 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + +NETSCAPE ISSUES + + Some of your users may experience problems sending mail to a + members-only list, if they are using Netscape Communicator as + their MUA. Communicator 4.x on Linux has been observed to insert + bogus unqualified Sender: headers -- i.e. Sender: headers with + only the username part of the email address. Other version of + Netscape may also have the same bug. + + By default, members-only lists use the From: header as the first + field to authenticate against, falling back to Sender:. The site + administrator can also configure Mailman to always use Sender: + first. If Sender: is used, and it exists in the email message, + but it is unqualified, it will never match a mailing list member's + address, and their post will always be held for approval. + + In the future, Mailman will improve its algorithm for finding a + matching address, but in the meantime, M. A. Lemburg <mal@lemburg.com> + provides the following advice. You can send this snippet to any user + whose posts are being held for seemingly no reason. + + Edit the two .js files in your .netscape directory (liprefs.js and + preferences.js) to include the function call: + + user_pref("mail.suppress_sender_header", true); + + BTW, the binary includes a comment which says that this is only + necessary on Unix. + + Since Communicator regenerates this file upon exit, the change + must be done when Communicator is not currently running. With the + next start, it will stop adding the Sender: header and things + start to work like a charm again. + + The reason things start to work again, is that Mailman falls back to + authenticating the From: header if the Sender: header is missing, + even if the site administrator has configured things to look at + Sender: first. + + +MOZILLA + + There are no known problems with Mozilla 0.9.x at this time. I + don't know whether the above Netscape problem also affects + Mozilla. + + + +Local Variables: +mode: indented-text +indent-tabs-mode: nil +End: diff --git a/docs/readmes/README.USERAGENT b/docs/readmes/README.USERAGENT new file mode 100644 index 000000000..af5718ecb --- /dev/null +++ b/docs/readmes/README.USERAGENT @@ -0,0 +1,49 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 2001,2002 by the Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + +INTRODUCTION + + Mailman is compliant with RFC 2369, which specifies a number of + List-* headers that mailing list management software should add to + every outbound email message. These headers are designed to make + it easy for mail user agents (MUAs) to assist users in common + mailing list tasks, such as getting help or unsubscribing. + + At this time, not all MUAs understand the RFC 2369 headers, and + instead of suppressing those List-* headers, they show them to the + user. Many list managers report that this can generate a large + amount of support requests from their user base. + + In Mailman 2.0, you cannot turn off the List-* headers without + hacking the Mailman source. Because these headers are in the + long-term benefit of end-users, it is strongly encouraged to leave + these headers in and lobby the MUA vendors to support them. In + the meantime, you can provide your users with the following + information to help them suppress these headers. + + +EUDORA USERS + + Mike Noyes provides the following suggestion: + + You can hide the new list headers. Edit your Eudora.ini file, and + add this line under [settings]. + + TabooHeaders=List,X-UID,Received,Status,X-UIDL,Message,In-Reply, \ + X-Priority,Mime-Version,Content,X-Persona,Resent-Message,References, \ + Return,X400,X-400,Mail-System,Errors-To,X-List,Delivery,Disposition, \ + X-Juno,Precedence,X-Attachments,X-MSMail,X-MimeOLE,X-Nav + + note: everything other than "List" is the default + + ref. Eudora .ini Settings TabooHeaders + http://www.eudora.com/techsupport/ini.html + + + +Local Variables: +mode: text +indent-tabs-mode: nil +End: diff --git a/docs/readmes/TODO.txt b/docs/readmes/TODO.txt new file mode 100644 index 000000000..8debf4264 --- /dev/null +++ b/docs/readmes/TODO.txt @@ -0,0 +1,174 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 1998-2003 by the Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + +The Mailman Wishlist +(Last Update: $Date: 2007-01-14 04:34:29 +0000 (Sun, 14 Jan 2007) $) + + Here's the wish list for future versions of Mailman. Many new + features have been added to Mailman 2.1, and it is currently + undecided whether the next release will be 2.2 or 3.0. + + Please also see the Mailman design notes wiki at + + http://www.zope.org/Members/bwarsaw/MailmanDesignNotes/FrontPage + +Email Handling + - Re-implement the bulk mailer to do DNS lookups and remote MTA + delivery directly (optional). + - For low-traffic sites, a queued message could trigger a qrunner + process. It would work until all mail was delivered, then sleep + and exit if no new work arrived. + - Strip any addresses of members who have nodupe turned on, from + the Cc headers of the list copy of a message. + - Separate processing for MIME and plaintext digests. E.g. you + might want to filter images out of plaintext but not MIME + digests. + +Documentation + - A detailed feature list + - A user's guide + - A site-admin's guide + - A list-admin's guide + - More on-line documentation and UI help + - A developer's guide w/ architecture and API information + - manpages for the scripts in bin and cron + - Integrate Christopher Kolar's documentation + +General Web UI + - NO DEAD ENDS and every web page is reachable. + - All web UI must be configurable so that it more easily + integrates into an existing site's design. Probably means using + a better template language/system like Zope's Presentation + Templates, Quixote, or PHP. + - Default UI should add a navigation sidebar to all web pages. + - Web pages should never mention disabled features. + - Allow a site admin and list admins to categorize lists, so that + they can be better organized on the listinfo and admin overview + pages. + +List Administration + - Allow the moderator to edit posts being held for approval (make + it evident, either through a header or other means that the + message was edited by the moderator). + - Allow the admin to disable option settings by users + - Allow admins to block nomail settings + - Allow admins to control and set individual headers, adding, + removing, or overriding those in the original message (sometimes + very useful, but could be dangerous!) + - New moderation choice: archive but don't send to list. + - New moderation choice: annotate and send to author for + resubmittal. Or just be able to annotate the message for + multiple moderator scenarios. + - Better integration with moderated newsgroups (and allow some + addresses to bypass even that moderation and be delivered to a + secondary channel, like moderators@isc.org). + - Allow a list to be marked `disabled' so things like the replybot + still works, and the archives are still available, but mail + posted to the list is always returned unsent. + - Ability to `sideline' some messages in the moderation queue + - Hook moderation up to a whitelist a la TMDA. A non-member + message gets held in a non-admindb queue, and the sender gets a + confirmation message. When they confirm, we moderate the + message as normal, but if they don't we assume it's spam (after + some period of time) and discard it. The admin should be able + to see all these super-quarantined messages with the flip of a + button. + - Add a moderation option to pass through any message which is a + reply to a message previously distributed through the list, even + if it comes from a non-member. Treat that non-member as a + member for the duration of the thread. Use In-Reply-To, + References and Message-ID to match these up. + - When a held message is forwarded (for admin editing and approved + resend) there should be a way to auto-discard the held message + when the approved resend is received. + - Have an option to sort the list of members by real name or email + address. + - Test a message for all hold criteria, record them all instead of + just the first match, and do a SpamAssassin like scoring to + decide whether the message should get held or not. + +List Membership + - Have one account per user per site, with multiple email + addresses and fallbacks. Allow them to subscribe whichever + address they want to whichever list, with different options per + subscription. + - Allow the user to get BOTH normal and digested delivery (but I + still don't understand why someone would want this) + - More flexible digests: index digests (subject and authors only, + with URLs to retrieve the article) + - Timed vacations, allowing a user to postpone or discard email + for a certain number of days or weeks. + - Keep user-centric stats, such as the date the user was + subscribed, the date of their last change to their account, the + date they last sent a message through the list. Perhaps also + log each message they send through the list. + +Site Administration + - Allow the site admin to define list styles or themes, and list + admins to choose one of the canned styles to apply to their + list. + - Allow the site admin to send an email message to all the list + admins using a mechanism similar to the Urgent: header (possibly + by addressing it to mailman@site.dom). + +Other Usability Improvments + - A better strategy is needed for sub-lists and super-lists, + including dealing with the resulting password reminders and + authorization to modify the sub & superlists. + - Add a limit on the number of posts from any one individual + within a period of time (1 post per day, 10 per week, etc). + Also, limits on mailbacks, infos, etc. + +Mailcmd interface + - Provide an email interface to all administrative commands + - Allow email unsubs from matching address to unsubscribe, + possibly adding an "allow open unsubscribes" option to control + this. Also, adding a confirmation with click-thru confirmation + to resubscribe. + - For email subscribes, keep an audit of where requests are coming + from, and send the original request headers in the confirmation + message. Helps track down subscribe bombs. + - Investigate Majordomo2's email admin capabilities. + - Support the `which' command. + +Portability & architecture + - Use a real transactional database for all information, and allow + various bits of information to come from different sources (a + relational database, ZODB, LDAP, etc) + - Member profiles + - Allow lists of the same name in two different virtual domains + - Should be able to gather statistics, such as deliveries/day, + performance, number of subscribers over time, etc. + - Implement something like Roundup's nosy lists, maybe even + integrate with Roundup. + - Split Mailman into libraries so, e.g. the delivery part could be + used by other projects. + +Bounce handling + - Add more patterns for bounce handling (never ending) + - Send mail to people who are being removed without their knowledge + (even though they're likely not to get it). + +Pipermail + Archiving mechanism + - Search engine for archives + - Provide downloadable tar.gz's of the html archives + - sort by date should go most-recent to oldest + - allow list owner to edit archive messages + - optional form front-end to public interfaces as a filter to + address harvesters. + - In general the whole Pipermail subsystem needs a good rewrite. + - Write an API between Mailman and the archiver so that message + footers can contain the URL to the archived message. + +Code cleanup + - Turn all remaining string exceptions into class exceptions + - Unit and system test suite! (ongoing) + + + +Local Variables: +mode: indented-text +indent-tabs-mode: nil +End: diff --git a/docs/readmes/UPGRADING.txt b/docs/readmes/UPGRADING.txt new file mode 100644 index 000000000..6f8ede6e1 --- /dev/null +++ b/docs/readmes/UPGRADING.txt @@ -0,0 +1,392 @@ +Mailman - The GNU Mailing List Management System +Copyright (C) 1998-2004 by the Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + +UPGRADING FROM PREVIOUS VERSIONS + + For the most part, upgrading Mailman entails installing the latest version + over the existing version. Usually, you can unpack the new release, run + 'configure' with the same options you used in your previous install, and + then do a 'make install'. However, there are some changes that may need + to be taken care of manually. + + What you need to do depends on the version you are using and the version + you are upgrading to. In all cases, you should first turn off your mail + and web access to your Mailman installation. You're essentially upgrading + a database, and it's usually a good idea to make sure the database cannot + be modified in the middle of the upgrade. + + My recommendations are: + + - Turn off your incoming mail daemon. Most remote smtp servers will + simply queue up messages destined for your domain if port 25 is shut + off. + + - Temporarily disable web access to Mailman. You can do this by either + turning off your web server temporarily, or by setting up a temporary + redirect to a "service unavailable" page for the Mailman URLs. Refer to + your web server documentation for details. + + +UPGRADING FROM 2.1.4 to 2.1.5 + + In Mailman 2.1.5, some significant changes have been made to the file + formats for qfiles and the pendings database. All care has been taken to + make sure the upgrades happen automatically and smoothly, but you should + double check and, for the ultra-paranoid, make backups of your Mailman + site before you upgrade. BE SURE TO TURN OFF MAILMAN AS DESCRIBED ABOVE + BEFORE YOU UPGRADE. + + Specifically, in MM2.1.4 every message in the queues were represented by + two files, a .msg or .pck file containing the email message, and a .db + file containing metadata about the message. In MM2.1.5 this has been made + more efficient by using only one file (with a .pck extension) for both the + message and metadata. This should make MM2.1.5 half as hostile to the + file system. + + The bin/upgrade script, which is run automatically when you upgrade, + should convert all the old style qfiles to the new style qfiles. Note + that this could take a long time if you have a lot of files in your qfiles + subdirectories. Pay particular attention to files you might have in + qfiles/shunt; these will get upgraded too, although files in qfiles/bad + will not. + + In MM2.1.4, the database file containing pending actions (i.e + subscriptions, unsubscriptions, message holds, etc.) was shared globally + among all mailing lists. In MM2.1.5, each list now has its own pending + database file. All care has been taken to properly split pending actions + from the global to the list-specific files, but it's possible there are + bugs here. Best practice is to clear all pending actions before you + upgrade, although this is not always possible. + + +UPGRADING FROM 2.0.x to 2.1 + + When you upgrade from Mailman 2.0.x to Mailman 2.1, you should double + check that your moderation and privacy options are still set the way you + want them. The Mailman options dealing with moderation and privacy have + changed significantly, to make them easier to understand and control. + Ever effort was taken to translate the old configuration variables to the + new configuration variables, but because the old semantics were so + complex, it is possible your settings may not have been correctly + translated. + + Check especially the values for (in Privacy -> Sender Filters) + default_member_moderation, generic_nonmember_action, and + accept_these_nonmembers. Check also the moderation flag on member + accounts in the Membership Management screen. + + In Mailman 2.1, the qrunner subsystem has been completely + rewritten. You no longer start qrunner from cron! Instead, there + is a bin/mailmanctl script which is used to start, stop, and + restart mail delivery. This script is appropriate to use as a + Unix init script. Be sure to update your crontab with the new + cron/crontab.in file. + + NOTE: It is very important that if you are upgrading from a + pre-MM2.1alpha2 system to a post-MM2.1alpha2 system that you let + the old qrunner process clear any and all messages sitting in the + qfiles/ directory *BEFORE* you upgrade. Otherwise after the + upgrade, those messages will not get delivered, and I'm not + exactly sure yet how to upgrade those pending messages. + + NOTE: When upgrading to Mailman 2.1, you will need to regenerate + your aliases files. There have been many changes to the alias + names, the programs they map to, and the name of the wrapper + script. See README.<yourMTA> for details of making Mailman work + with your mail server. + + To regenerate your aliases, use the bin/genaliases script. + + Mailman 2.1 introduces multilingual (a.k.a. internationalization + or i18n) support. Previously only one language per list was + supported, and it was assumed that this language would be English. + The upgrade script for Mailman 2.1 creates a subdirectory `en' + inside each lists/<listname> directory. It then copies all the + .txt and .html files from lists/<listname> into + lists/<listname>/en. + + If you have modified those templates to contain non-English text, + you will have to manually rename the en subdirectories to the + language code for the language of your templates. Mailman's + upgrade script should handle cleaning up any templates which are + duplicates of the defaults, but you'll want to double check this + manually. + + If you are running a MM2.0.x system with non-standard patches + applied, you might have some other problems with your upgrade. + Here are some instances we know about: + + - If you've applied patch #413752 (coerce to plaintext), then your + upgraded will not go smoothly. Take a look at patch #651406 for + an unofficial solution. + + http://sf.net/tracker/?group_id=103&atid=300103&func=detail&aid=413752 + http://sf.net/tracker/?group_id=103&atid=300103&func=detail&aid=651406 + + +UPGRADING INDIVIDUAL LISTS + + If you're nervous about upgrading all of your lists to 2.1 in one + go, you can move them and upgrade them one at a time. Start by + doing a clean Mailman 2.1 installation in an empty directory -- + call it $MM21. (I'll assume your Mailman 2.0 installation is in + $MM20.) + + Doing this means you'll have co-habiting Mailman 2.0 and 2.1 + installations for a while, until you have moved all of your lists + to Mailman 2.1. Depending on your MTA and web server, this could + be transparent and painless, or it could be an ongoing headache. + + If you use Apache with mod_rewrite, then it's fairly + straightforward to set things up so that both Mailman 2.0 and 2.1 + inhabit the /mailman and /pipermail URL-space of your server; this + makes the transition almost transparent to list admins and + subscribers. See below for details. + + Now, for each list that you want to move, you'll have to + + * Shut down your MTA. + + If you have a lot of outgoing list traffic, you might need to + leave your MTA up but only let it accept connections from + 127.0.0.1 (localhost), so Mailman 2.0 can flush its queue. + How to do this is MTA-dependent; for Exim, you can set + "local_interfaces = 127.0.0.1" and "kill -HUP" the Exim + daemon. + + * Shut down your web server. For a more professional look, or + if you want to allow people to keep accessing the rest of your + web site, you could make your web server respond to all + /mailman/ URLs with a "temporarily unavailable" message. + + How to do this is web server-dependent; with Apache and + mod_rewrite, this does the trick: + + RewriteRule ^/mailman/.* /var/www/unavailable.html [L] + + (Of course, you'll have to supply your own + /var/www/unavailable.html.) + + * Force Mailman 2.0 to process its queue: + + python -S $MM20/cron/qrunner + + (This is only necessary if there are any files in $MM20/qfiles; + if you need to do this, make sure you left your MTA listening to + 127.0.0.1.) + + * Move the list: + + cd $MM20 + mv -i lists/foo-list $MM21/lists + mv -i archives/private/foo-list $MM21/archives/private + mv -i archives/private/foo-list.mbox $MM21/archives/private + rm archives/public/foo-list + rm archives/public/foo-list.mbox + cd $MM21 + bin/withlist -l -r fix_url mylist + + (The fix_url step will not be necessary if your Mailman 2.0 + and 2.1 installations will be sharing the same URL-space.) + + * Edit your web server config so the list's URLs continue to + work. There are two possible approaches here; the simpler way + is to setup a new slice of URL-space that will be used by your + Mailman 2.1 installation, eg. /mailman-21: + With Apache and mod_rewrite: + + RewriteRule /mailman/(.*)/(foo-list.*) /mailman-21/$1/$2 [R=temp] + + (The [R=temp] assumes that "/mailman-21/" is a temporary URL, + and you'll move all your lists to "/mailman/" when the + transition to Mailman 2.1 is complete.) + + If you don't want to expose ugly temporary URLs like + "/mailman-21" to the world, it's only slightly more work to make + Mailman 2.0 and 2.1 share the same slices of URL-space. Here's + how to do it with Apache and mod_rewrite: + + RewriteRule ^/mailman/(.*)/(foo-list.*) \ + $MM21/cgi-bin/$1/$2 \ + [T=application/x-httpd-cgi] + + Not only is this more aesthetically pleasing, it's faster -- no + redirects. + + In either case, you'll want to rewrite the list's archive URLs + to Mailman 2.1's archive: + + RewriteRule ^/pipermail/(foo-list.*) $MM21/archives/public/$1 + + * Restart your web server (or disable the "temporarily + unavailable" stuff). + + * Restart your MTA (or make it listen to more than just + 127.0.0.1). + + +UPGRADING FROM 2.0 to 2.0.x (where x >= 1) + + Nothing much more than running "make install" (after upgrading) + should be necessary. + + +UPGRADING FROM 2.0 beta to 2.0 final + + You MUST re-run configure; running config.status is not sufficient + due to some recent changes in the autoconf scripts. You can do a + head of config.status if you don't remember the options you + originally ran configure with. + + The cron jobs for Mailman 2.0 final have changed considerably, + including the frequency with which they run. You should reload + misc/crontab.in for the `mailman' user to get the right settings. + See the INSTALL file for details. + + FAILURE TO DO THIS WILL RESULT IN A LESS THAN OPTIMALLY FUNCTIONAL + MAILMAN INSTALLATION. + + +UPGRADING FROM 1.x to 2.x + + In addition to the instructions above, I highly recommend that you + make sure your Mailman queue is cleared /before/ upgrading. + + Mailman version 1.x had a cron script called run_queue which was + part of its bulk mailer. With Mailman 2.x there is no default + bulk mailer (it lets the MTA handle this), and it is currently + unknown what the effects of upgrading are on the run_queue script, + but I'll bet it's not good. :) + + The way to make sure that your Mailman queue is empty is to look + in your $prefix/data directory. If you see any files that start + with "mm_q." you've still got messages waiting on the queue. You + can run $prefix/cron/run_queue by hand until the queue is cleared. + Multiple invocations of this script won't help though; they lock + each other out. Also, be warned that clearing the queue can take + a while and may cause a large load on your system (two reasons why + all this stuff has been redesigned in 2.x :). + + You do not need to run "make update" if you are upgrading from + version 1.0 or 1.1 to version 2.0, since this is now run + automatically when you do a "make install". However you should + modify your crontab entries to execute cron/qrunner instead of + cron/run_queue. You can also safely remove the file + $prefix/cron/run_queue. + + If you are upgrading from a pre-1.0 beta, you need to follow the + instructions below. + + +UPGRADING FROM PRE-1.0 to 2.x + + You need to do a few extra things to make sure that the file + system layout for the early 1.0 betas is upgraded to the 1.x + configuration. There are two ways to do this. + + First, from the source directory, after you've done a "make + install" you can run "make update". "make update" creates a file + named "update.log" in the top level of the source distribution. + If the script that updates the Mailman filesystem encounters + something that is not resolvable, it will log info about this to + "update.log". This is worth checking after the upgrade completes. + + You can also just change to the installation directory (i.e. $prefix) + and run bin/update. This is the same as above except that the + update.log file is not generated. + + Check your crontab entry. Remove any runs of obsolete scripts, in + particular cron/upvolumes_yearly, cron/upvolumes_monthly, or + cron/archive. + + +WHAT "MAKE UPDATE" DOES + + Below is an annotated listing of the things that "make update" + does. Hopefully, this will help resolve any problems you are + having. + + Note that it can't hurt to run "make update" each time you + upgrade, but if you're running version 1.0 or newer, it won't help + much either! + + - To upgrade to 1.0b10, you will need to copy + templates/options.html to lists/<listname>/options.html for each + mailing list you have. However, if you have edited the + options.html file, say from the Web interface, you will have to + merge these changes in manually. + + - The upgrade to 1.0b7 included the removal of + Mailman/smtplib.py{,c} since Mailman now uses the default Python + 1.5.2 version of smtplib. + + - Archiving files are moved around as part of integrating + Pipermail into Mailman, as of 1.0b6. In particular, + + 1) if a list has only a private mbox archive + $prefix/archives/private/<listname> is moved to + $prefix/archives/private/<listname>.mbox/<listname> + + 2) if a list has only a public mbox archive + $prefix/archives/public/<listname> is moved to + $prefix/archives/private/<listname>.mbox/<listname> + + and a symlink is made that points + $prefix/archives/public/<listname>.mbox to + $prefix/archives/private/<listname>.mbox/<listname> + + 3) if a list has both private and public mbox archives, + make update picks one of the above 2 configurations based on + whether or not the list currently is archived publicly. It then + renames the other mbox to mbox.preb6. + + 4) if a list used recent CVS sources, where archives were placed in + $prefix/public_html/archives, then these are moved to + $prefix/archives/private/<listname> and a symlink is made from + $prefix/archives/public/<listname> to that spot if the list's + archives are public. Also, a permissions-related security + problem is removed. + + To integrate mbox archives of old lists, log in as user `mailman' + and run $prefix/bin/arch <listname> <path-to-mbox-archive>. + + Also, by default, beta6 does both mbox and html based archiving, + but you can configure Mailman to do one, both, or neither. + Please see $prefix/Mailman/Defaults.py for details. + + There was a short period of time when the CVS sources archiving + code was not organized into its own package. The pickled + articles in the archives that were placed into archives during + this period stored the path to the module HyperArch, but that + module has moved. You can quick fix this by running + + ln -s $prefix/Mailman/Archiver/HyperArch.py \ + $prefix/Mailman/HyperArch.py + + - If upgrading from version 1.0b4 or earlier, "make update" moves + list-specific templates. For each list, + $prefix/templates/<listname>/* is moved to $prefix/lists/<listname>. + Please reference the generic templates in $prefix/templates to see + if any variables have changed (There shouldn't be many, only + options.html was updated from b5 to b6). + + For really old versions of Mailman, you may not even have + <listname> subdirectories in $prefix/templates! In this case + you will need to manually copy some files into your new list + directories. Here's an example shell command that will do the + trick: + + cp templates/{archives,handle_opts,listinfo,roster,subscribe}.html lists/<listname> + + - Some modules that existed in previous versions, but that have + been replaced with newer (differently named) modules, are + removed. + + + +Local Variables: +mode: indented-text +indent-tabs-mode: nil +End: |
