1 Mailman - The GNU Mailing List Management System
2 Copyright (C) 1998-2005 by the Free Software Foundation, Inc.
3 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
5 Note: We're migrating the FAQ to an on-line interactive system called
6 "FAQ Wizard". To see the Mailman FAQ Wizard in action, go to
7 http://www.python.org/cgi-bin/faqw-mm.py
9 FREQUENTLY ASKED QUESTIONS
11 Q. How do you spell this program?
13 A. You spell it "Mailman", with a leading capital "M" and a lowercase
14 second "m". It is incorrect to spell it "MailMan" (i.e. you should
17 Q. I'm getting really terrible performance for outgoing messages. It
18 seems that if the MTA has trouble resolving DNS for any recipients,
19 qrunner just gets really slow clearing the queue. Any ideas?
21 A. What's likely happening is that your MTA is doing DNS resolution on
22 recipients for messages delivered locally (i.e. from Mailman to
23 your MTA via SMTPDirect.py). This is a Bad Thing. You need to
24 turn off synchronous DNS resolution for messages originating from
27 In Exim, the value to edit is receiver_verify_hosts. See
28 README.EXIM for details. Other MTAs have (of course) different
29 parameters and defaults that control this. First check the README
30 file for your MTA and then consult your MTA's own documentation.
32 Q. My list members are complaining about Mailman's List-* headers!
33 What can I do about this?
35 A. These headers are described in RFC 2369 and are added by Mailman
36 for the long-term benefit of end-users. While discouraged, the
37 list admin can disable these via the General Options page. See
38 also README.USERAGENT for more information.
40 Q. Can I put the user's address in the footer that Mailman adds to
43 A. Yes, in Mailman 2.1. The site admin needs to enable personalization by
44 setting the following variable in the mm_cfg.py file:
46 OWNERS_CAN_ENABLE_PERSONALIZATION = Yes
48 Once this is done, list admins can enable personalization for regular
49 delivery members (digest deliveries can't be personalized currently). A
50 personalized list can include the user's address in the footer.
52 Q. My users hate HTML in their email and for security reasons, I want
53 to strip out all MIME attachments. How can I do this?
55 A. Mailman 2.1 has this feature built-in. See the Content Filtering
56 Options page in the admin interface.
58 Q. What if I get "document contains no data" from the web server, or
59 mail isn't getting delivered, or I see "Premature end of script
60 headers" or "Mailman CGI error!!!"
62 A. The most likely cause of this is that the GID that is compiled into
63 the C wrappers does not match the GID that your Web server invokes
64 CGI scripts with. Note that a similar error could occur if your
65 mail system invokes filter programs under a GID that does not match
66 the one compiled into the C mail wrapper.
68 To fix this you will need to re-configure Mailman using the
69 --with-cgi-gid and --with-mail-gid options. See the INSTALL file
72 These errors are logged to syslog and they do not show up in the
73 Mailman log files. Problems with the CGI wrapper do get reported
74 in the web browser though (unless STEALTH_MODE is enabled), and
75 include the expected GID, so that should help a lot.
77 You may want to have syslog running and configured to log the
78 mail.error log class somewhere; on Solaris systems, the line
80 mail.debug /var/log/syslog
82 causes the messages to go to them in /var/log/syslog, for example.
83 (The distributed syslog.conf forwards the message to the loghost,
84 when present. See the syslog man page for more details.)
86 If your system is set like this, and you get a failure trying to
87 visit the mailman/listinfo web page, and it's due to a UID or GID
88 mismatch, then you should get an entry at the end of
89 /var/log/syslog identifying the expected and received values.
91 If you are not getting any log messages in syslog, or in Mailman's
92 own log files, but messages are still not being delivered, then it
93 is likely that qrunner is not running (qrunner is the process that
94 handles all mail in the system). In Mailman 2.0, qrunner was
95 invoked from cron so make sure your crontab entries for the
96 `mailman' user have been installed. In Mailman 2.1, qrunner is
97 started with the bin/mailmanctl script, which can be invoked
98 manually, or merged with your OS's init scripts.
100 Q. What should I check periodically?
102 A. Many of the scripts have their standard error logged to
103 $prefix/logs/error, and some of the modules write caught errors
104 there, as well, so you should check there at least occasionally to
105 look for bugs in the code and problems in your setup.
107 You may want to periodically check the other log files in the logs/
108 directory, perhaps occasionally rotating them with something like
109 the Linux logrotate script.
111 Q. I can't access the public archives. Why?
113 A. If you are using Apache, you must make sure that FollowSymLinks is
114 enabled for the path to the public archives. Note that the actual
115 archives always reside in the private tree, and only when archives
116 are public, is the symlink followed. See this archive message for
119 http://mail.python.org/pipermail/mailman-users/1998-November/000150.html
121 Q. Still having problems? Running QMail?
123 A. Make sure that you are using "preline" before calling the "mailman"
126 |preline /home/mailman/mail/mailman post listname
128 "preline" adds a Unix-style "From " header which the archiver requires.
129 You can fix the archive mbox files by adding:
131 From somebody Mon Oct 9 12:27:34 MDT 2000
133 before every message and re-running the archive command
134 "bin/arch listname". The archives should now exist. See README.QMAIL
135 for more information.
137 Q. Still having problems? Running on GNU/Linux?
139 A. See the README.LINUX file.
141 Q. I want to get rid of some messages in my archive. How do I do
144 A. David Rocher posts the following recipe:
146 * remove $prefix/archives/private/<listname>
147 * edit $prefix/archives/private/<listname>.mbox/<listname>.mbox [optional]
148 * run $prefix/bin/arch <listname>
150 Q. How secure are the authentication mechanisms used in Mailman's web
153 A. If your Mailman installation run on an SSL-enabled web server
154 (i.e. you access the Mailman web pages with "https://..." URLs),
155 you should be as safe as SSL itself is.
157 However, most Mailman installation run under standard,
158 encryption-unaware servers. There's nothing wrong with that for
159 most applications, but a sufficiently determined cracker *could*
160 get unauthorized access by:
162 * Packet sniffing: The password used to do the initial
163 authentication for any non-public Mailman page is sent as clear
164 text over the net. If you consider this to be a big problem, you
165 really should use an SSL-enabled server.
167 * Stealing a valid cookie: After successful password
168 authentication, Mailman sends a "cookie" back to the user's
169 browser. This cookie will be used for "automatic" authentication
170 when browsing further within the list's protected pages. Mailman
171 employs "session cookies" which are set until you quit your
172 browser or explicitly log out.
174 Gaining access to the user's cookie (e.g. by being able to read
175 the user's browser cookie database, or by means of packet
176 sniffing, or maybe even by some broken browser offering all it's
177 cookies to any and all sites the user accesses), and at the same
178 time being able to fulfill the other criteria for using the
179 cookie could result in unauthorized access.
181 Note that this problem is more easily exploited when users browse
182 the web via proxies -- in that case, the cookie would be valid
183 for any connections made through that proxy, and not just for
184 connections made from the particular machine the user happens to
185 be accessing the proxy from.
187 * Getting access to the user's terminal: This is really just
188 another kind of cookie stealing. The short cookie expiration
189 time is supposed to help defeat this problem. It can be
190 considered the price to pay for the convenience of not having to
191 type the password in every time.
193 Q. I want to backup my lists. What do I need to save?
195 A. See this FAQ wizard entry:
196 http://www.python.org/cgi-bin/faqw-mm.py?req=show&file=faq04.006.htp
198 Q. How do I rename a list?
200 A. Renaming a list is currently a bit of a pain to do completely
201 correctly, especially if you want to make sure that the old list
202 contacts are automatically forwarded to the new list. This ought
205 The biggest problem you have is how to stop mail and web traffic to
206 your list during the transition, and what to do about any mail
207 undelivered to the old list after the move. I don't think there
208 are any foolproof steps, but here's how you can reduce the risk:
210 - Temporarily disable qrunner. To do this, you need to edit the
211 user `mailman's crontab entry. Execute the following command,
212 commenting out the qrunner line when you're dropped into your
213 editor. Then save the file and quit the editor.
215 % crontab -u mailman -e
217 - Turn off your mail server. This is mostly harmless since remote
218 MTAs will just keep retrying until you turn it back on, and it's
219 not going to be off for very long.
221 - Next turn off your web server if possible. This of course means
222 your entire site will be off-line while you make the switch and
223 this may not be acceptable to you. The next best suggestion is
224 to set up your permanent redirects now for the list you're
225 moving. This means that anybody looking for the list under its
226 old name will be redirected to the new name, but they'll get
227 errors until you've completed the move.
229 Let's say the old name is "oldname" and the new name is
230 "newname". Here are some Apache directives that will do the
233 RedirectMatch permanent /mailman/(.*)/oldname(.*) http://www.dom.ain/mailman/$1/newname$2
234 RedirectMatch permanent /pipermail/oldname(.*) http://www.dom.ain/pipermail/newname$1
236 Add these to your httpd.conf file and restart Apache.
238 - Now cd to the directory where you've installed Mailman. Let's
239 say it's /usr/local/mailman:
241 % cd /usr/local/mailman
243 and cd to the `lists' subdirectory:
247 You should now see the directory `oldname'. Move this to
252 - Now cd to the private archives directory:
254 % cd ../archives/private
256 You will need to move the oldname's .mbox directory, and the
257 .mbox file within that directory. Don't worry about the public
258 archives; the next few steps will take care of them without
259 requiring you to fiddle around in the file system:
261 % mv oldname.mbox newname.mbox
262 % mv newname.mbox/oldname.mbox newname.mbox/newname.mbox
264 - You now need to run the `bin/move_list' script to update some of
265 the internal archiver paths. IMPORTANT: Skip this step if you
266 are using Mailman 2.1!
269 % bin/move_list newname
271 - You should now regenerate the public archives:
275 - You'll likely need to change some of your list's configuration
276 options, especially if you want to accept postings addressed to
277 the old list on the new list. Visit the admin interface for your
280 o Go to the General options
282 o Change the "real_name" option to reflect the new list's name,
285 o Change the subject prefix to reflect the new list's name,
286 e.g. "[Newname] " (yes, that's a trailing space character).
288 o Optionally, update other configuration fields like info,
289 description, or welcome_msg. YMMV.
293 o Go to the Privacy options
295 o Add the old list's address to acceptable_aliases.
296 E.g. "oldname@dom.ain". This way, (after the /etc/aliases
297 changes described below) messages posted to the old list will
298 not be held by the new list for "implicit destination"
303 - Now you want to update your /etc/aliases file to include the
304 aliases for the new list, and forwards for the old list to the
305 new list. Note that these instructions are for Sendmail style
306 alias files, adjust to the specifics of how your MTA is set up.
308 o Find the lines defining the aliases for your old list's name
310 o Copy and paste them just below the originals.
312 o Change all the references of "oldname" to "newname" in the
315 o Now change the targets of the original aliases to forward to
316 the new aliases. When you're done, you will end up with
317 /etc/aliases entries like the following (YMMV):
319 XXX This needs updating for MM2.1!
321 # Forward the oldname list to the newname list
322 oldname: newname@dom.ain
323 oldname-request: newname-request@dom.ain
324 oldname-admin: newname-admin@dom.ain
325 oldname-owner: newname-owner@dom.ain
327 newname: "|/usr/local/mailman/mail/mailman post newname"
328 newname-admin: "|/usr/local/mailman/mail/mailman mailowner newname"
329 newname-request: "|/usr/local/mailman/mail/mailman mailcmd newname"
330 newname-owner: newname-admin
334 - Before you restart everything, you want to make one last check.
335 You're looking for files in the qfiles/ directory that may have
336 been addressed to the old list but weren't delivered before you
337 renamed the list. Do something like the following:
339 % cd /usr/local/mailman/qfiles
342 If you get no hits, skip to the next step, you've got nothing to
345 If you did get hits, then things get complicated. I warn you
346 that the rest of this step is untested. :(
348 For each of the .msg files that were destined for the old list,
349 you need to change the corresponding .db file. Unfortunately
350 there's no easy way to do this. Anyway...
352 Save the following Python code in a file called 'hackdb.py':
354 -------------------------hackdb.py
357 fp = open(sys.argv[1])
360 d['listname'] = sys.argv[2]
361 fp = open(sys.argv[1], 'w')
364 -------------------------
366 And then for each file that matched your grep above, do the
369 % python hackdb.py reallylonghexfilenamematch1.db newname
371 - It's now safe to turn your MTA back on.
373 - Turn your qrunner back on by running
375 % crontab -u mailman -e
377 again and this time uncommenting the qrunner line. Save the file
378 and quit your editor.
380 - Rejoice, you're done. Send $100,000 in shiny new pennies to the
381 Mailman cabal as your downpayment toward making this easier for
382 the next list you have to rename. :)
388 indent-tabs-mode: nil