9e7a057ea7c08cff9c86c1b95d9951f292f28cf9
[mspang/vmailman.git] / Mailman / Defaults.py.in
1 # -*- python -*-
2
3 # Copyright (C) 1998-2006 by the Free Software Foundation, Inc.
4 #
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
18 # USA.
19
20 """Distributed default settings for significant Mailman config variables."""
21
22 # NEVER make site configuration changes to this file.  ALWAYS make them in
23 # mm_cfg.py instead, in the designated area.  See the comments in that file
24 # for details.
25
26
27 import os
28
29 def seconds(s): return s
30 def minutes(m): return m * 60
31 def hours(h): return h * 60 * 60
32 def days(d): return d * 60 * 60 * 24
33
34 # Some convenient constants
35 try:
36     True, False
37 except NameError:
38     True = 1
39     False = 0
40
41 Yes = yes = On = on = True
42 No = no = Off = off = False
43
44
45 \f
46 #####
47 # General system-wide defaults
48 #####
49
50 # Should image logos be used?  Set this to 0 to disable image logos from "our
51 # sponsors" and just use textual links instead (this will also disable the
52 # shortcut "favicon").  Otherwise, this should contain the URL base path to
53 # the logo images (and must contain the trailing slash)..  If you want to
54 # disable Mailman's logo footer altogther, hack
55 # Mailman/htmlformat.py:MailmanLogo(), which also contains the hardcoded links
56 # and image names.
57 IMAGE_LOGOS = '/doc/mailman/images/'
58
59 # The name of the Mailman favicon
60 SHORTCUT_ICON = 'mm-icon.png'
61
62 # Don't change MAILMAN_URL, unless you want to point it at one of the mirrors.
63 MAILMAN_URL = 'http://www.gnu.org/software/mailman/index.html'
64 #MAILMAN_URL = 'http://www.list.org/'
65 #MAILMAN_URL = 'http://mailman.sf.net/'
66
67 # Mailman needs to know about (at least) two fully-qualified domain names
68 # (fqdn); 1) the hostname used in your urls, and 2) the hostname used in email
69 # addresses for your domain.  For example, if people visit your Mailman system
70 # with "http://www.dom.ain/mailman" then your url fqdn is "www.dom.ain", and
71 # if people send mail to your system via "yourlist@dom.ain" then your email
72 # fqdn is "dom.ain".  DEFAULT_URL_HOST controls the former, and
73 # DEFAULT_EMAIL_HOST controls the latter.  Mailman also needs to know how to
74 # map from one to the other (this is especially important if you're running
75 # with virtual domains).  You use "add_virtualhost(urlfqdn, emailfqdn)" to add
76 # new mappings.
77 #
78 # If you don't need to change DEFAULT_EMAIL_HOST and DEFAULT_URL_HOST in your
79 # mm_cfg.py, then you're done; the default mapping is added automatically.  If
80 # however you change either variable in your mm_cfg.py, then be sure to also
81 # include the following:
82 #
83 #     add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
84 #
85 # because otherwise the default mappings won't be correct.
86 DEFAULT_EMAIL_HOST = '@MAILHOST@'
87 DEFAULT_URL_HOST = '@URLHOST@'
88 DEFAULT_URL_PATTERN = 'http://%s/cgi-bin/mailman/'
89
90 # DEFAULT_HOST_NAME has been replaced with DEFAULT_EMAIL_HOST, however some
91 # sites may have the former in their mm_cfg.py files.  If so, we'll believe
92 # that, otherwise we'll believe DEFAULT_EMAIL_HOST.  Same for DEFAULT_URL.
93 DEFAULT_HOST_NAME = None
94 DEFAULT_URL = None
95
96 HOME_PAGE         = 'index.html'
97 MAILMAN_SITE_LIST = 'mailman'
98
99 # Normally when a site administrator authenticates to a web page with the site
100 # password, they get a cookie which authorizes them as the list admin.  It
101 # makes me nervous to hand out site auth cookies because if this cookie is
102 # cracked or intercepted, the intruder will have access to every list on the
103 # site.  OTOH, it's dang handy to not have to re-authenticate to every list on
104 # the site.  Set this value to Yes to allow site admin cookies.
105 ALLOW_SITE_ADMIN_COOKIES = No
106
107 # Command that is used to convert text/html parts into plain text.  This
108 # should output results to standard output.  %(filename)s will contain the
109 # name of the temporary file that the program should operate on.
110 HTML_TO_PLAIN_TEXT_COMMAND = '/usr/bin/lynx -dump %(filename)s'
111
112
113 \f
114 #####
115 # Virtual domains
116 #####
117
118 # Set up your virtual host mappings here.  This is primarily used for the
119 # thru-the-web list creation, so its effects are currently fairly limited.
120 # Use add_virtualhost() call to add new mappings.  The keys are strings as
121 # determined by Utils.get_domain(), the values are as appropriate for
122 # DEFAULT_HOST_NAME.
123 VIRTUAL_HOSTS = {}
124
125 # When set to Yes, the listinfo and admin overviews of lists on the machine
126 # will be confined to only those lists whose web_page_url configuration option
127 # host is included within the URL by which the page is visited - only those
128 # "on the virtual host".  When set to No, all advertised (i.e. public) lists
129 # are included in the overview.
130 VIRTUAL_HOST_OVERVIEW = On
131
132
133 # Helper function; use this in your mm_cfg.py files.  If optional emailhost is
134 # omitted it defaults to urlhost with the first name stripped off, e.g.
135 #
136 # add_virtualhost('www.dom.ain')
137 # VIRTUAL_HOST['www.dom.ain']
138 # ==> 'dom.ain'
139 #
140 def add_virtualhost(urlhost, emailhost=None):
141     DOT = '.'
142     if emailhost is None:
143         emailhost = DOT.join(urlhost.split(DOT)[1:])
144     VIRTUAL_HOSTS[urlhost.lower()] = emailhost.lower()
145
146 # And set the default
147 add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
148
149 # Note that you will want to run bin/fix_url.py to change the domain of an
150 # existing list.  bin/fix_url.py must be run within the bin/withlist script,
151 # like so: bin/withlist -l -r bin/fix_url.py <listname>
152
153
154 \f
155 #####
156 # Spam avoidance defaults
157 #####
158
159 # This variable contains a list of 2-tuple of the format (header, regex) which
160 # the Mailman/Handlers/SpamDetect.py module uses to match against the current
161 # message.  If the regex matches the given header in the current message, then
162 # it is flagged as spam.  header is case-insensitive and should not include
163 # the trailing colon.  regex is always matched with re.IGNORECASE.
164 #
165 # Note that the more searching done, the slower the whole process gets.  Spam
166 # detection is run against all messages coming to either the list, or the
167 # -owners address, unless the message is explicitly approved.
168 KNOWN_SPAMMERS = []
169
170
171 \f
172 #####
173 # Web UI defaults
174 #####
175
176 # Almost all the colors used in Mailman's web interface are parameterized via
177 # the following variables.  This lets you easily change the color schemes for
178 # your preferences without having to do major surgery on the source code.
179 # Note that in general, the template colors are not included here since it is
180 # easy enough to override the default template colors via site-wide,
181 # vdomain-wide, or list-wide specializations.
182
183 WEB_BG_COLOR = 'white'                            # Page background
184 WEB_HEADER_COLOR = '#99ccff'                      # Major section headers
185 WEB_SUBHEADER_COLOR = '#fff0d0'                   # Minor section headers
186 WEB_ADMINITEM_COLOR = '#dddddd'                   # Option field background
187 WEB_ADMINPW_COLOR = '#99cccc'                     # Password box color
188 WEB_ERROR_COLOR = 'red'                           # Error message foreground
189 WEB_LINK_COLOR = ''                               # If true, forces LINK=
190 WEB_ALINK_COLOR = ''                              # If true, forces ALINK=
191 WEB_VLINK_COLOR = ''                              # If true, forces VLINK=
192 WEB_HIGHLIGHT_COLOR = '#dddddd'                   # If true, alternating rows
193                                                   # in listinfo & admin display
194
195 \f
196 #####
197 # Archive defaults
198 #####
199
200 # The url template for the public archives.  This will be used in several
201 # places, including the List-Archive: header, links to the archive on the
202 # list's listinfo page, and on the list's admin page.
203 #
204 # This should be a string with "%(listname)s" somewhere in it.  Mailman will
205 # interpolate the name of the list into this.  You can also include a
206 # "%(hostname)s" in the string, into which Mailman will interpolate
207 # the host name (usually DEFAULT_URL_HOST).
208 PUBLIC_ARCHIVE_URL = 'http://%(hostname)s/pipermail/%(listname)s'
209
210 # Are archives on or off by default?
211 DEFAULT_ARCHIVE = On
212
213 # Are archives public or private by default?
214 # 0=public, 1=private
215 DEFAULT_ARCHIVE_PRIVATE = 0
216
217 # ARCHIVE_TO_MBOX
218 #-1 - do not do any archiving
219 # 0 - do not archive to mbox, use builtin mailman html archiving only
220 # 1 - archive to mbox to use an external archiving mechanism only
221 # 2 - archive to both mbox and builtin mailman html archiving -
222 #     use this to make both external archiving mechanism work and
223 #     mailman's builtin html archiving.  the flat mail file can be
224 #     useful for searching, external archivers, etc.
225 ARCHIVE_TO_MBOX = 2
226
227 # 0 - yearly
228 # 1 - monthly
229 # 2 - quarterly
230 # 3 - weekly
231 # 4 - daily
232 DEFAULT_ARCHIVE_VOLUME_FREQUENCY = 1
233 DEFAULT_DIGEST_VOLUME_FREQUENCY = 1
234
235 # These variables control the use of an external archiver.  Normally if
236 # archiving is turned on (see ARCHIVE_TO_MBOX above and the list's archive*
237 # attributes) the internal Pipermail archiver is used.  This is the default if
238 # both of these variables are set to No.  When either is set, the value should
239 # be a shell command string which will get passed to os.popen().  This string
240 # can contain the following substitution strings:
241 #
242 #     %(listname)s -- gets the internal name of the list
243 #     %(hostname)s -- gets the email hostname for the list
244 #
245 # being archived will be substituted for this.  Please note that os.popen() is
246 # used.
247 #
248 # Note that if you set one of these variables, you should set both of them
249 # (they can be the same string).  This will mean your external archiver will
250 # be used regardless of whether public or private archives are selected.
251 PUBLIC_EXTERNAL_ARCHIVER = No
252 PRIVATE_EXTERNAL_ARCHIVER = No
253
254 # A filter module that converts from multipart messages to "flat" messages
255 # (i.e. containing a single payload).  This is required for Pipermail, and you
256 # may want to set it to 0 for external archivers.  You can also replace it
257 # with your own module as long as it contains a process() function that takes
258 # a MailList object and a Message object.  It should raise
259 # Errors.DiscardMessage if it wants to throw the message away.  Otherwise it
260 # should modify the Message object as necessary.
261 ARCHIVE_SCRUBBER = 'Mailman.Handlers.Scrubber'
262
263 # Control parameter whether Mailman.Handlers.Scrubber should use message
264 # attachment's filename as is indicated by the filename parameter or use
265 # 'attachement-xxx' instead.  The default is set True because the applications
266 # on PC and Mac begin to use longer non-ascii filenames.  Historically, it
267 # was set False in 2.1.6 for backward compatiblity but it was reset to True
268 # for safer operation in mailman-2.1.7.
269 SCRUBBER_DONT_USE_ATTACHMENT_FILENAME = True
270
271 # Use of attachment filename extension per se is may be dangerous because
272 # virus fakes it. You can set this True if you filter the attachment by
273 # filename extension
274 SCRUBBER_USE_ATTACHMENT_FILENAME_EXTENSION = False
275
276 # This variable defines what happens to text/html subparts.  They can be
277 # stripped completely, escaped, or filtered through an external program.  The
278 # legal values are:
279 # 0 - Strip out text/html parts completely, leaving a notice of the removal in
280 #     the message.  If the outer part is text/html, the entire message is
281 #     discarded.
282 # 1 - Remove any embedded text/html parts, leaving them as HTML-escaped
283 #     attachments which can be separately viewed.  Outer text/html parts are
284 #     simply HTML-escaped.
285 # 2 - Leave it inline, but HTML-escape it
286 # 3 - Remove text/html as attachments but don't HTML-escape them. Note: this
287 #     is very dangerous because it essentially means anybody can send an HTML
288 #     email to your site containing evil JavaScript or web bugs, or other
289 #     nasty things, and folks viewing your archives will be susceptible.  You
290 #     should only consider this option if you do heavy moderation of your list
291 #     postings.
292 #
293 # Note: given the current archiving code, it is not possible to leave
294 # text/html parts inline and un-escaped.  I wouldn't think it'd be a good idea
295 # to do anyway.
296 #
297 # The value can also be a string, in which case it is the name of a command to
298 # filter the HTML page through.  The resulting output is left in an attachment
299 # or as the entirety of the message when the outer part is text/html.  The
300 # format of the string must include a "%(filename)s" which will contain the
301 # name of the temporary file that the program should operate on.  It should
302 # write the processed message to stdout.  Set this to
303 # HTML_TO_PLAIN_TEXT_COMMAND to specify an HTML to plain text conversion
304 # program.
305 ARCHIVE_HTML_SANITIZER = 1
306
307 # Set this to Yes to enable gzipping of the downloadable archive .txt file.
308 # Note that this is /extremely/ inefficient, so an alternative is to just
309 # collect the messages in the associated .txt file and run a cron job every
310 # night to generate the txt.gz file.  See cron/nightly_gzip for details.
311 GZIP_ARCHIVE_TXT_FILES = No
312
313 # This sets the default `clobber date' policy for the archiver.  When a
314 # message is to be archived either by Pipermail or an external archiver,
315 # Mailman can modify the Date: header to be the date the message was received
316 # instead of the Date: in the original message.  This is useful if you
317 # typically receive messages with outrageous dates.  Set this to 0 to retain
318 # the date of the original message, or to 1 to always clobber the date.  Set
319 # it to 2 to perform `smart overrides' on the date; when the date is outside
320 # ARCHIVER_ALLOWABLE_SANE_DATE_SKEW (either too early or too late), then the
321 # received date is substituted instead.
322 ARCHIVER_CLOBBER_DATE_POLICY = 2
323 ARCHIVER_ALLOWABLE_SANE_DATE_SKEW = days(15)
324
325 # Pipermail archives contain the raw email addresses of the posting authors.
326 # Some view this as a goldmine for spam harvesters.  Set this to Yes to
327 # moderately obscure email addresses, but note that this breaks mailto: URLs
328 # in the archives too.
329 ARCHIVER_OBSCURES_EMAILADDRS = Yes
330
331 # Pipermail assumes that messages bodies contain US-ASCII text.
332 # Change this option to define a different character set to be used as
333 # the default character set for the archive.  The term "character set"
334 # is used in MIME to refer to a method of converting a sequence of
335 # octets into a sequence of characters.  If you change the default
336 # charset, you might need to add it to VERBATIM_ENCODING below.
337 DEFAULT_CHARSET = None
338
339 # Most character set encodings require special HTML entity characters to be
340 # quoted, otherwise they won't look right in the Pipermail archives.  However
341 # some character sets must not quote these characters so that they can be
342 # rendered properly in the browsers.  The primary issue is multi-byte
343 # encodings where the octet 0x26 does not always represent the & character.
344 # This variable contains a list of such characters sets which are not
345 # HTML-quoted in the archives.
346 VERBATIM_ENCODING = ['iso-2022-jp']
347
348 # When the archive is public, should Mailman also make the raw Unix mbox file
349 # publically available?
350 PUBLIC_MBOX = No
351
352
353 \f
354 #####
355 # Delivery defaults
356 #####
357
358 # Final delivery module for outgoing mail.  This handler is used for message
359 # delivery to the list via the smtpd, and to an individual user.  This value
360 # must be a string naming a module in the Mailman.Handlers package.
361 #
362 # WARNING: Sendmail has security holes and should be avoided.  In fact, you
363 # must read the Mailman/Handlers/Sendmail.py file before it will work for
364 # you.
365 #
366 #DELIVERY_MODULE = 'Sendmail'
367 DELIVERY_MODULE = 'SMTPDirect'
368
369 # MTA should name a module in Mailman/MTA which provides the MTA specific
370 # functionality for creating and removing lists.  Some MTAs like Exim can be
371 # configured to automatically recognize new lists, in which case the MTA
372 # variable should be set to None.  Use 'Manual' to print new aliases to
373 # standard out (or send an email to the site list owner) for manual twiddling
374 # of an /etc/aliases style file.  Use 'Postfix' if you are using the Postfix
375 # MTA -- but then also see POSTFIX_STYLE_VIRTUAL_DOMAINS.
376 MTA = 'Manual'
377
378 # If you set MTA='Postfix', then you also want to set the following variable,
379 # depending on whether you're using virtual domains in Postfix, and which
380 # style of virtual domain you're using.  Set this flag to false if you're not
381 # using virtual domains in Postfix, or if you're using Sendmail-style virtual
382 # domains (where all addresses are visible in all domains).  If you're using
383 # Postfix-style virtual domains, where aliases should only show up in the
384 # virtual domain, set this variable to the list of host_name values to write
385 # separate virtual entries for.  I.e. if you run dom1.ain, dom2.ain, and
386 # dom3.ain, but only dom2 and dom3 are virtual, set this variable to the list
387 # ['dom2.ain', 'dom3.ain'].  Matches are done against the host_name attribute
388 # of the mailing lists.  See README.POSTFIX for details.
389 POSTFIX_STYLE_VIRTUAL_DOMAINS = []
390
391 # These variables describe the program to use for regenerating the aliases.db
392 # and virtual-mailman.db files, respectively, from the associated plain text
393 # files.  The file being updated will be appended to this string (with a
394 # separating space), so it must be appropriate for os.system().
395 POSTFIX_ALIAS_CMD = '/usr/sbin/postalias'
396 POSTFIX_MAP_CMD = '/usr/sbin/postmap'
397
398 # Ceiling on the number of recipients that can be specified in a single SMTP
399 # transaction.  Set to 0 to submit the entire recipient list in one
400 # transaction.  Only used with the SMTPDirect DELIVERY_MODULE.
401 SMTP_MAX_RCPTS = 500
402
403 # Ceiling on the number of SMTP sessions to perform on a single socket
404 # connection.  Some MTAs have limits.  Set this to 0 to do as many as we like
405 # (i.e. your MTA has no limits).  Set this to some number great than 0 and
406 # Mailman will close the SMTP connection and re-open it after this number of
407 # consecutive sessions.
408 SMTP_MAX_SESSIONS_PER_CONNECTION = 0
409
410 # Maximum number of simultaneous subthreads that will be used for SMTP
411 # delivery.  After the recipients list is chunked according to SMTP_MAX_RCPTS,
412 # each chunk is handed off to the smptd by a separate such thread.  If your
413 # Python interpreter was not built for threads, this feature is disabled.  You
414 # can explicitly disable it in all cases by setting MAX_DELIVERY_THREADS to
415 # 0.  This feature is only supported with the SMTPDirect DELIVERY_MODULE.
416 #
417 # NOTE: This is an experimental feature and limited testing shows that it may
418 # in fact degrade performance, possibly due to Python's global interpreter
419 # lock.  Use with caution.
420 MAX_DELIVERY_THREADS = 0
421
422 # SMTP host and port, when DELIVERY_MODULE is 'SMTPDirect'.  Make sure the
423 # host exists and is resolvable (i.e., if it's the default of "localhost" be
424 # sure there's a localhost entry in your /etc/hosts file!)
425 SMTPHOST = 'localhost'
426 SMTPPORT = 0                                      # default from smtplib
427
428 # Command for direct command pipe delivery to sendmail compatible program,
429 # when DELIVERY_MODULE is 'Sendmail'.
430 SENDMAIL_CMD = '/usr/lib/sendmail'
431
432 # Set these variables if you need to authenticate to your NNTP server for
433 # Usenet posting or reading.  If no authentication is necessary, specify None
434 # for both variables.
435 NNTP_USERNAME = None
436 NNTP_PASSWORD = None
437
438 # Set this if you have an NNTP server you prefer gatewayed lists to use.
439 DEFAULT_NNTP_HOST = ''
440
441 # These variables controls how headers must be cleansed in order to be
442 # accepted by your NNTP server.  Some servers like INN reject messages
443 # containing prohibited headers, or duplicate headers.  The NNTP server may
444 # reject the message for other reasons, but there's little that can be
445 # programmatically done about that.  See Mailman/Queue/NewsRunner.py
446 #
447 # First, these headers (case ignored) are removed from the original message.
448 NNTP_REMOVE_HEADERS = ['nntp-posting-host', 'nntp-posting-date', 'x-trace',
449                        'x-complaints-to', 'xref', 'date-received', 'posted',
450                        'posting-version', 'relay-version', 'received']
451
452 # Next, these headers are left alone, unless there are duplicates in the
453 # original message.  Any second and subsequent headers are rewritten to the
454 # second named header (case preserved).
455 NNTP_REWRITE_DUPLICATE_HEADERS = [
456     ('to', 'X-Original-To'),
457     ('cc', 'X-Original-Cc'),
458     ('content-transfer-encoding', 'X-Original-Content-Transfer-Encoding'),
459     ('mime-version', 'X-MIME-Version'),
460     ]
461
462 # All `normal' messages which are delivered to the entire list membership go
463 # through this pipeline of handler modules.  Lists themselves can override the
464 # global pipeline by defining a `pipeline' attribute.
465 GLOBAL_PIPELINE = [
466     # These are the modules that do tasks common to all delivery paths.
467     'SpamDetect',
468     'Approve',
469     'Replybot',
470     'Moderate',
471     'Hold',
472     'MimeDel',
473     'Scrubber',
474     'Emergency',
475     'Tagger',
476     'CalcRecips',
477     'AvoidDuplicates',
478     'Cleanse',
479     'CleanseDKIM',
480     'CookHeaders',
481     # And now we send the message to the digest mbox file, and to the arch and
482     # news queues.  Runners will provide further processing of the message,
483     # specific to those delivery paths.
484     'ToDigest',
485     'ToArchive',
486     'ToUsenet',
487     # Now we'll do a few extra things specific to the member delivery
488     # (outgoing) path, finally leaving the message in the outgoing queue.
489     'AfterDelivery',
490     'Acknowledge',
491     'ToOutgoing',
492     ]
493
494 # This is the pipeline which messages sent to the -owner address go through
495 OWNER_PIPELINE = [
496     'SpamDetect',
497     'Replybot',
498     'CleanseDKIM',
499     'OwnerRecips',
500     'ToOutgoing',
501     ]
502
503
504 # This defines syslog() format strings for the SMTPDirect delivery module (see
505 # DELIVERY_MODULE above).  Valid %()s string substitutions include:
506 #
507 #     time -- the time in float seconds that it took to complete the smtp
508 #     hand-off of the message from Mailman to your smtpd.
509 #
510 #     size -- the size of the entire message, in bytes
511 #
512 #     #recips -- the number of actual recipients for this message.
513 #
514 #     #refused -- the number of smtp refused recipients (use this only in
515 #     SMTP_LOG_REFUSED).
516 #
517 #     listname -- the `internal' name of the mailing list for this posting
518 #
519 #     msg_<header> -- the value of the delivered message's given header.  If
520 #     the message had no such header, then "n/a" will be used.  Note though
521 #     that if the message had multiple such headers, then it is undefined
522 #     which will be used.
523 #
524 #     allmsg_<header> - Same as msg_<header> above, but if there are multiple
525 #     such headers in the message, they will all be printed, separated by
526 #     comma-space.
527 #
528 #     sender -- the "sender" of the messages, which will be the From: or
529 #     envelope-sender as determeined by the USE_ENVELOPE_SENDER variable
530 #     below.
531 #
532 # The format of the entries is a 2-tuple with the first element naming the
533 # file in logs/ to print the message to, and the second being a format string
534 # appropriate for Python's %-style string interpolation.  The file name is
535 # arbitrary; qfiles/<name> will be created automatically if it does not
536 # exist.
537
538 # The format of the message printed for every delivered message, regardless of
539 # whether the delivery was successful or not.  Set to None to disable the
540 # printing of this log message.
541 SMTP_LOG_EVERY_MESSAGE = (
542     'smtp',
543     '%(msg_message-id)s smtp to %(listname)s for %(#recips)d recips, completed in %(time).3f seconds')
544
545 # This will only be printed if there were no immediate smtp failures.
546 # Mutually exclusive with SMTP_LOG_REFUSED.
547 SMTP_LOG_SUCCESS = (
548     'post',
549     'post to %(listname)s from %(sender)s, size=%(size)d, message-id=%(msg_message-id)s, success')
550
551 # This will only be printed if there were any addresses which encountered an
552 # immediate smtp failure.  Mutually exclusive with SMTP_LOG_SUCCESS.
553 SMTP_LOG_REFUSED = (
554     'post',
555     'post to %(listname)s from %(sender)s, size=%(size)d, message-id=%(msg_message-id)s, %(#refused)d failures')
556
557 # This will be logged for each specific recipient failure.  Additional %()s
558 # keys are:
559 #
560 #     recipient -- the failing recipient address
561 #     failcode  -- the smtp failure code
562 #     failmsg   -- the actual smtp message, if available
563 SMTP_LOG_EACH_FAILURE = (
564     'smtp-failure',
565     'delivery to %(recipient)s failed with code %(failcode)d: %(failmsg)s')
566
567 # These variables control the format and frequency of VERP-like delivery for
568 # better bounce detection.  VERP is Variable Envelope Return Path, defined
569 # here:
570 #
571 # http://cr.yp.to/proto/verp.txt
572 #
573 # This involves encoding the address of the recipient as we (Mailman) know it
574 # into the envelope sender address (i.e. the SMTP `MAIL FROM:' address).
575 # Thus, no matter what kind of forwarding the recipient has in place, should
576 # it eventually bounce, we will receive an unambiguous notice of the bouncing
577 # address.
578 #
579 # However, we're technically only "VERP-like" because we're doing the envelope
580 # sender encoding in Mailman, not in the MTA.  We do require cooperation from
581 # the MTA, so you must be sure your MTA can be configured for extended address
582 # semantics.
583 #
584 # The first variable describes how to encode VERP envelopes.  It must contain
585 # these three string interpolations:
586 #
587 # %(bounces)s -- the list-bounces mailbox will be set here
588 # %(mailbox)s -- the recipient's mailbox will be set here
589 # %(host)s    -- the recipient's host name will be set here
590 #
591 # This example uses the default below.
592 #
593 # FQDN list address is: mylist@dom.ain
594 # Recipient is:         aperson@a.nother.dom
595 #
596 # The envelope sender will be mylist-bounces+aperson=a.nother.dom@dom.ain
597 #
598 # Note that your MTA /must/ be configured to deliver such an addressed message
599 # to mylist-bounces!
600 VERP_FORMAT = '%(bounces)s+%(mailbox)s=%(host)s'
601
602 # The second describes a regular expression to unambiguously decode such an
603 # address, which will be placed in the To: header of the bounce message by the
604 # bouncing MTA.  Getting this right is critical -- and tricky.  Learn your
605 # Python regular expressions.  It must define exactly three named groups,
606 # bounces, mailbox and host, with the same definition as above.  It will be
607 # compiled case-insensitively.
608 VERP_REGEXP = r'^(?P<bounces>[^+]+?)\+(?P<mailbox>[^=]+)=(?P<host>[^@]+)@.*$'
609
610 # VERP format and regexp for probe messages
611 VERP_PROBE_FORMAT = '%(bounces)s+%(token)s'
612 VERP_PROBE_REGEXP = r'^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$'
613 # Set this Yes to activate VERP probe for disabling by bounce
614 VERP_PROBES = No
615
616 # A perfect opportunity for doing VERP is the password reminders, which are
617 # already addressed individually to each recipient.  Set this to Yes to enable
618 # VERPs on all password reminders.
619 VERP_PASSWORD_REMINDERS = No
620
621 # Another good opportunity is when regular delivery is personalized.  Here
622 # again, we're already incurring the performance hit for addressing each
623 # individual recipient.  Set this to Yes to enable VERPs on all personalized
624 # regular deliveries (personalized digests aren't supported yet).
625 VERP_PERSONALIZED_DELIVERIES = No
626
627 # And finally, we can VERP normal, non-personalized deliveries.  However,
628 # because it can be a significant performance hit, we allow you to decide how
629 # often to VERP regular deliveries.  This is the interval, in number of
630 # messages, to do a VERP recipient address.  The same variable controls both
631 # regular and digest deliveries.  Set to 0 to disable occasional VERPs, set to
632 # 1 to VERP every delivery, or to some number > 1 for only occasional VERPs.
633 VERP_DELIVERY_INTERVAL = 0
634
635 # For nicer confirmation emails, use a VERP-like format which encodes the
636 # confirmation cookie in the reply address.  This lets us put a more user
637 # friendly Subject: on the message, but requires cooperation from the MTA.
638 # Format is like VERP_FORMAT above, but with the following substitutions:
639 #
640 # %(addr)s -- the list-confirm mailbox will be set here
641 # %(cookie)s  -- the confirmation cookie will be set here
642 VERP_CONFIRM_FORMAT = '%(addr)s+%(cookie)s'
643
644 # This is analogous to VERP_REGEXP, but for splitting apart the
645 # VERP_CONFIRM_FORMAT.  MUAs have been observed that mung
646 # From: local_part@host
647 # into
648 # To: "local_part" <local_part@host>
649 # when replying, so we skip everything up to '<' if any.
650 VERP_CONFIRM_REGEXP = r'^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$'
651
652 # Set this to Yes to enable VERP-like (more user friendly) confirmations
653 VERP_CONFIRMATIONS = No
654
655 # This is the maximum number of automatic responses sent to an address because
656 # of -request messages or posting hold messages.  This limit prevents response
657 # loops between Mailman and misconfigured remote email robots.  Mailman
658 # already inhibits automatic replies to any message labeled with a header
659 # "Precendence: bulk|list|junk".  This is a fallback safety valve so it should
660 # be set fairly high.  Set to 0 for no limit (probably useful only for
661 # debugging).
662 MAX_AUTORESPONSES_PER_DAY = 10
663
664
665 \f
666 #####
667 # Qrunner defaults
668 #####
669
670 # Which queues should the qrunner master watchdog spawn?  This is a list of
671 # 2-tuples containing the name of the qrunner class (which must live in a
672 # module of the same name within the Mailman.Queue package), and the number of
673 # parallel processes to fork for each qrunner.  If more than one process is
674 # used, each will take an equal subdivision of the hash space.
675
676 # BAW: Eventually we may support weighted hash spaces.
677 # BAW: Although not enforced, the # of slices must be a power of 2
678
679 QRUNNERS = [
680     ('ArchRunner',     1), # messages for the archiver
681     ('BounceRunner',   1), # for processing the qfile/bounces directory
682     ('CommandRunner',  1), # commands and bounces from the outside world
683     ('IncomingRunner', 1), # posts from the outside world
684     ('NewsRunner',     1), # outgoing messages to the nntpd
685     ('OutgoingRunner', 1), # outgoing messages to the smtpd
686     ('VirginRunner',   1), # internally crafted (virgin birth) messages
687     ('RetryRunner',    1), # retry temporarily failed deliveries
688     ]
689
690 # Set this to Yes to use the `Maildir' delivery option.  If you change this
691 # you will need to re-run bin/genaliases for MTAs that don't use list
692 # auto-detection.
693 #
694 # WARNING: If you want to use Maildir delivery, you /must/ start Mailman's
695 # qrunner as root, or you will get permission problems.
696 #
697 # NOTE: Maildir delivery is experimental for Mailman 2.1.
698 USE_MAILDIR = No
699 # NOTE: If you set USE_MAILDIR = Yes, add the following line to your mm_cfg.py
700 # file (uncommented of course!)
701 # QRUNNERS.append(('MaildirRunner', 1))
702
703 # After processing every file in the qrunner's slice, how long should the
704 # runner sleep for before checking the queue directory again for new files?
705 # This can be a fraction of a second, or zero to check immediately
706 # (essentially busy-loop as fast as possible).
707 QRUNNER_SLEEP_TIME = seconds(1)
708
709 # When a message that is unparsable (by the email package) is received, what
710 # should we do with it?  The most common cause of unparsable messages is
711 # broken MIME encapsulation, and the most common cause of that is viruses like
712 # Nimda.  Set this variable to No to discard such messages, or to Yes to store
713 # them in qfiles/bad subdirectory.
714 QRUNNER_SAVE_BAD_MESSAGES = Yes
715
716 # This flag causes Mailman to fsync() its data files after writing and
717 # flushing its contents.  While this ensures the data is written to disk,
718 # avoiding data loss, it may be a performance killer.  Note that this flag
719 # affects both message pickles and MailList config.pck files.
720 SYNC_AFTER_WRITE = No
721
722
723 \f
724 #####
725 # General defaults
726 #####
727
728 # The default language for this server.  Whenever we can't figure out the list
729 # context or user context, we'll fall back to using this language.  See
730 # LC_DESCRIPTIONS below for legal values.
731 DEFAULT_SERVER_LANGUAGE = 'en'
732
733 # When allowing only members to post to a mailing list, how is the sender of
734 # the message determined?  If this variable is set to Yes, then first the
735 # message's envelope sender is used, with a fallback to the sender if there is
736 # no envelope sender.  Set this variable to No to always use the sender.
737 #
738 # The envelope sender is set by the SMTP delivery and is thus less easily
739 # spoofed than the sender, which is typically just taken from the From: header
740 # and thus easily spoofed by the end-user.  However, sometimes the envelope
741 # sender isn't set correctly and this will manifest itself by postings being
742 # held for approval even if they appear to come from a list member.  If you
743 # are having this problem, set this variable to No, but understand that some
744 # spoofed messages may get through.
745 USE_ENVELOPE_SENDER = No
746
747 # Membership tests for posting purposes are usually performed by looking at a
748 # set of headers, passing the test if any of their values match a member of
749 # the list.  Headers are checked in the order given in this variable.  The
750 # value None means use the From_ (envelope sender) header.  Field names are
751 # case insensitive.
752 SENDER_HEADERS = ('from', None, 'reply-to', 'sender')
753
754 # How many members to display at a time on the admin cgi to unsubscribe them
755 # or change their options?
756 DEFAULT_ADMIN_MEMBER_CHUNKSIZE = 30
757
758 # how many bytes of a held message post should be displayed in the admindb web
759 # page?  Use a negative number to indicate the entire message, regardless of
760 # size (though this will slow down rendering those pages).
761 ADMINDB_PAGE_TEXT_LIMIT = 4096
762
763 # Set this variable to Yes to allow list owners to delete their own mailing
764 # lists.  You may not want to give them this power, in which case, setting
765 # this variable to No instead requires list removal to be done by the site
766 # administrator, via the command line script bin/rmlist.
767 OWNERS_CAN_DELETE_THEIR_OWN_LISTS = No
768
769 # Set this variable to Yes to allow list owners to set the "personalized"
770 # flags on their mailing lists.  Turning these on tells Mailman to send
771 # separate email messages to each user instead of batching them together for
772 # delivery to the MTA.  This gives each member a more personalized message,
773 # but can have a heavy impact on the performance of your system.
774 OWNERS_CAN_ENABLE_PERSONALIZATION = No
775
776 # Should held messages be saved on disk as Python pickles or as plain text?
777 # The former is more efficient since we don't need to go through the
778 # parse/generate roundtrip each time, but the latter might be preferred if you
779 # want to edit the held message on disk.
780 HOLD_MESSAGES_AS_PICKLES = Yes
781
782 # This variable controls the order in which list-specific category options are
783 # presented in the admin cgi page.
784 ADMIN_CATEGORIES = [
785     # First column
786     'general', 'passwords', 'language', 'members', 'nondigest', 'digest',
787     # Second column
788     'privacy', 'bounce', 'archive', 'gateway', 'autoreply',
789     'contentfilter', 'topics',
790     ]
791
792 # See "Bitfield for user options" below; make this a sum of those options, to
793 # make all new members of lists start with those options flagged.  We assume
794 # by default that people don't want to receive two copies of posts.  Note
795 # however that the member moderation flag's initial value is controlled by the
796 # list's config variable default_member_moderation.
797 DEFAULT_NEW_MEMBER_OPTIONS = 256
798
799 # Specify the type of passwords to use, when Mailman generates the passwords
800 # itself, as would be the case for membership requests where the user did not
801 # fill in a password, or during list creation, when auto-generation of admin
802 # passwords was selected.
803 #
804 # Set this value to Yes for classic Mailman user-friendly(er) passwords.
805 # These generate semi-pronounceable passwords which are easier to remember.
806 # Set this value to No to use more cryptographically secure, but harder to
807 # remember, passwords -- if your operating system and Python version support
808 # the necessary feature (specifically that /dev/urandom be available).
809 USER_FRIENDLY_PASSWORDS = Yes
810 # This value specifies the default lengths of member and list admin passwords
811 MEMBER_PASSWORD_LENGTH = 8
812 ADMIN_PASSWORD_LENGTH = 10
813
814
815 \f
816 #####
817 # List defaults.  NOTE: Changing these values does NOT change the
818 # configuration of an existing list.  It only defines the default for new
819 # lists you subsequently create.
820 #####
821
822 # Should a list, by default be advertised?  What is the default maximum number
823 # of explicit recipients allowed?  What is the default maximum message size
824 # allowed?
825 DEFAULT_LIST_ADVERTISED = Yes
826 DEFAULT_MAX_NUM_RECIPIENTS = 10
827 DEFAULT_MAX_MESSAGE_SIZE = 40           # KB
828
829 # These format strings will be expanded w.r.t. the dictionary for the
830 # mailing list instance.
831 DEFAULT_SUBJECT_PREFIX  = "[%(real_name)s] "
832 # DEFAULT_SUBJECT_PREFIX = "[%(real_name)s %%d]" # for numbering
833 DEFAULT_MSG_HEADER = ""
834 DEFAULT_MSG_FOOTER = """_______________________________________________
835 %(real_name)s mailing list
836 %(real_name)s@%(host_name)s
837 %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
838 """
839
840 # Where to put subject prefix for 'Re:' messages:
841 #
842 #     old style: Re: [prefix] test
843 #     new style: [prefix 123] Re: test ... (number is optional)
844 #
845 # Old style is default for backward compatibility.  New style is forced if a
846 # list owner set %d (numbering) in prefix.  If the site owner had applied new
847 # style patch (from SF patch area) before, he/she may want to set this No in
848 # mm_cfg.py.
849 OLD_STYLE_PREFIXING = Yes
850
851 # Scrub regular delivery
852 DEFAULT_SCRUB_NONDIGEST = False
853
854 # Mail command processor will ignore mail command lines after designated max.
855 DEFAULT_MAIL_COMMANDS_MAX_LINES = 25
856
857 # Is the list owner notified of admin requests immediately by mail, as well as
858 # by daily pending-request reminder?
859 DEFAULT_ADMIN_IMMED_NOTIFY = Yes
860
861 # Is the list owner notified of subscribes/unsubscribes?
862 DEFAULT_ADMIN_NOTIFY_MCHANGES = No
863
864 # Discard held messages after this days
865 DEFAULT_MAX_DAYS_TO_HOLD = 0
866
867 # Should list members, by default, have their posts be moderated?
868 DEFAULT_DEFAULT_MEMBER_MODERATION = No
869
870 # Should non-member posts which are auto-discarded also be forwarded to the
871 # moderators?
872 DEFAULT_FORWARD_AUTO_DISCARDS = Yes
873
874 # What shold happen to non-member posts which are do not match explicit
875 # non-member actions?
876 # 0 = Accept
877 # 1 = Hold
878 # 2 = Reject
879 # 3 = Discard
880 DEFAULT_GENERIC_NONMEMBER_ACTION = 1
881
882 # Bounce if 'To:', 'Cc:', or 'Resent-To:' fields don't explicitly name list?
883 # This is an anti-spam measure
884 DEFAULT_REQUIRE_EXPLICIT_DESTINATION = Yes
885
886 # Alternate names acceptable as explicit destinations for this list.
887 DEFAULT_ACCEPTABLE_ALIASES ="""
888 """
889 # For mailing lists that have only other mailing lists for members:
890 DEFAULT_UMBRELLA_LIST = No
891
892 # For umbrella lists, the suffix for the account part of address for
893 # administrative notices (subscription confirmations, password reminders):
894 DEFAULT_UMBRELLA_MEMBER_ADMIN_SUFFIX = "-owner"
895
896 # This variable controls whether monthly password reminders are sent.
897 DEFAULT_SEND_REMINDERS = Yes
898
899 # Send welcome messages to new users?
900 DEFAULT_SEND_WELCOME_MSG = Yes
901
902 # Send goodbye messages to unsubscribed members?
903 DEFAULT_SEND_GOODBYE_MSG = Yes
904
905 # Wipe sender information, and make it look like the list-admin
906 # address sends all messages
907 DEFAULT_ANONYMOUS_LIST = No
908
909 # {header-name: regexp} spam filtering - we include some for example sake.
910 DEFAULT_BOUNCE_MATCHING_HEADERS = """
911 # Lines that *start* with a '#' are comments.
912 to: friend@public.com
913 message-id: relay.comanche.denmark.eu
914 from: list@listme.com
915 from: .*@uplinkpro.com
916 """
917
918 # Mailman can be configured to "munge" Reply-To: headers for any passing
919 # messages.  One the one hand, there are a lot of good reasons not to munge
920 # Reply-To: but on the other, people really seem to want this feature.  See
921 # the help for reply_goes_to_list in the web UI for links discussing the
922 # issue.
923 # 0 - Reply-To: not munged
924 # 1 - Reply-To: set back to the list
925 # 2 - Reply-To: set to an explicit value (reply_to_address)
926 DEFAULT_REPLY_GOES_TO_LIST = 0
927
928 # Mailman can be configured to strip any existing Reply-To: header, or simply
929 # extend any existing Reply-To: with one based on the above setting.
930 DEFAULT_FIRST_STRIP_REPLY_TO = No
931
932 # SUBSCRIBE POLICY
933 # 0 - open list (only when ALLOW_OPEN_SUBSCRIBE is set to 1) **
934 # 1 - confirmation required for subscribes
935 # 2 - admin approval required for subscribes
936 # 3 - both confirmation and admin approval required
937 #
938 # ** please do not choose option 0 if you are not allowing open
939 # subscribes (next variable)
940 DEFAULT_SUBSCRIBE_POLICY = 1
941
942 # Does this site allow completely unchecked subscriptions?
943 ALLOW_OPEN_SUBSCRIBE = No
944
945 # The default policy for unsubscriptions.  0 (unmoderated unsubscribes) is
946 # highly recommended!
947 # 0 - unmoderated unsubscribes
948 # 1 - unsubscribes require approval
949 DEFAULT_UNSUBSCRIBE_POLICY = 0
950
951 # Private_roster == 0: anyone can see, 1: members only, 2: admin only.
952 DEFAULT_PRIVATE_ROSTER = 1
953
954 # When exposing members, make them unrecognizable as email addrs, so
955 # web-spiders can't pick up addrs for spam purposes.
956 DEFAULT_OBSCURE_ADDRESSES = Yes
957
958 # RFC 2369 defines List-* headers which are added to every message sent
959 # through to the mailing list membership.  These are a very useful aid to end
960 # users and should always be added.  However, not all MUAs are compliant and
961 # if a list's membership has many such users, they may clamor for these
962 # headers to be suppressed.  By setting this variable to Yes, list owners will
963 # be given the option to suppress these headers.  By setting it to No, list
964 # owners will not be given the option to suppress these headers (although some
965 # header suppression may still take place, i.e. for announce-only lists, or
966 # lists with no archives).
967 ALLOW_RFC2369_OVERRIDES = Yes
968
969 # Defaults for content filtering on mailing lists.  DEFAULT_FILTER_CONTENT is
970 # a flag which if set to true, turns on content filtering.
971 DEFAULT_FILTER_CONTENT = No
972
973 # DEFAULT_FILTER_MIME_TYPES is a list of MIME types to be removed.  This is a
974 # list of strings of the format "maintype/subtype" or simply "maintype".
975 # E.g. "text/html" strips all html attachments while "image" strips all image
976 # types regardless of subtype (jpeg, gif, etc.).
977 DEFAULT_FILTER_MIME_TYPES = []
978
979 # DEFAULT_PASS_MIME_TYPES is a list of MIME types to be passed through.
980 # Format is the same as DEFAULT_FILTER_MIME_TYPES
981 DEFAULT_PASS_MIME_TYPES = ['multipart/mixed',
982                            'multipart/alternative',
983                            'text/plain']
984
985 # DEFAULT_FILTER_FILENAME_EXTENSIONS is a list of filename extensions to be
986 # removed. It is useful because many viruses fake their content-type as
987 # harmless ones while keep their extension as executable and expect to be
988 # executed when victims 'open' them.
989 DEFAULT_FILTER_FILENAME_EXTENSIONS = [
990     'exe', 'bat', 'cmd', 'com', 'pif', 'scr', 'vbs', 'cpl'
991     ]
992
993 # DEFAULT_PASS_FILENAME_EXTENSIONS is a list of filename extensions to be
994 # passed through. Format is the same as DEFAULT_FILTER_FILENAME_EXTENSIONS.
995 DEFAULT_PASS_FILENAME_EXTENSIONS = []
996
997 # Replace multipart/alternative with its first alternative.
998 DEFAULT_COLLAPSE_ALTERNATIVES = Yes
999
1000 # Whether text/html should be converted to text/plain after content filtering
1001 # is performed.  Conversion is done according to HTML_TO_PLAIN_TEXT_COMMAND
1002 DEFAULT_CONVERT_HTML_TO_PLAINTEXT = Yes
1003
1004 # Default action to take on filtered messages.
1005 # 0 = Discard, 1 = Reject, 2 = Forward, 3 = Preserve
1006 DEFAULT_FILTER_ACTION = 0
1007
1008 # Whether to allow list owners to preserve content filtered messages to a
1009 # special queue on the disk.
1010 OWNERS_CAN_PRESERVE_FILTERED_MESSAGES = Yes
1011
1012 # Check for administrivia in messages sent to the main list?
1013 DEFAULT_ADMINISTRIVIA = Yes
1014
1015
1016 \f
1017 #####
1018 # Digestification defaults.  Same caveat applies here as with list defaults.
1019 #####
1020
1021 # Will list be available in non-digested form?
1022 DEFAULT_NONDIGESTABLE = Yes
1023
1024 # Will list be available in digested form?
1025 DEFAULT_DIGESTABLE = Yes
1026 DEFAULT_DIGEST_HEADER = ""
1027 DEFAULT_DIGEST_FOOTER = DEFAULT_MSG_FOOTER
1028
1029 DEFAULT_DIGEST_IS_DEFAULT = No
1030 DEFAULT_MIME_IS_DEFAULT_DIGEST = No
1031 DEFAULT_DIGEST_SIZE_THRESHHOLD = 30     # KB
1032 DEFAULT_DIGEST_SEND_PERIODIC = Yes
1033
1034 # Headers which should be kept in both RFC 1153 (plain) and MIME digests.  RFC
1035 # 1153 also specifies these headers in this exact order, so order matters.
1036 MIME_DIGEST_KEEP_HEADERS = [
1037     'Date', 'From', 'To', 'Cc', 'Subject', 'Message-ID', 'Keywords',
1038     # I believe we should also keep these headers though.
1039     'In-Reply-To', 'References', 'Content-Type', 'MIME-Version',
1040     'Content-Transfer-Encoding', 'Precedence', 'Reply-To',
1041     # Mailman 2.0 adds these headers
1042     'Message',
1043     ]
1044
1045 PLAIN_DIGEST_KEEP_HEADERS = [
1046     'Message', 'Date', 'From',
1047     'Subject', 'To', 'Cc',
1048     'Message-ID', 'Keywords',
1049     'Content-Type',
1050     ]
1051
1052
1053 \f
1054 #####
1055 # Bounce processing defaults.  Same caveat applies here as with list defaults.
1056 #####
1057
1058 # Should we do any bounced mail response at all?
1059 DEFAULT_BOUNCE_PROCESSING = Yes
1060
1061 # How often should the bounce qrunner process queued detected bounces?
1062 REGISTER_BOUNCES_EVERY = minutes(15)
1063
1064 # Bounce processing works like this: when a bounce from a member is received,
1065 # we look up the `bounce info' for this member. If there is no bounce info,
1066 # this is the first bounce we've received from this member.  In that case, we
1067 # record today's date, and initialize the bounce score (see below for initial
1068 # value).
1069 #
1070 # If there is existing bounce info for this member, we look at the last bounce
1071 # receive date.  If this date is farther away from today than the `bounce
1072 # expiration interval', we throw away all the old data and initialize the
1073 # bounce score as if this were the first bounce from the member.
1074 #
1075 # Otherwise, we increment the bounce score.  If we can determine whether the
1076 # bounce was soft or hard (i.e. transient or fatal), then we use a score value
1077 # of 0.5 for soft bounces and 1.0 for hard bounces.  Note that we only score
1078 # one bounce per day.  If the bounce score is then greater than the `bounce
1079 # threshold' we disable the member's address.
1080 #
1081 # After disabling the address, we can send warning messages to the member,
1082 # providing a confirmation cookie/url for them to use to re-enable their
1083 # delivery.  After a configurable period of time, we'll delete the address.
1084 # When we delete the address due to bouncing, we'll send one last message to
1085 # the member.
1086
1087 # Bounce scores greater than this value get disabled.
1088 DEFAULT_BOUNCE_SCORE_THRESHOLD = 5.0
1089
1090 # Bounce information older than this interval is considered stale, and is
1091 # discarded.
1092 DEFAULT_BOUNCE_INFO_STALE_AFTER = days(7)
1093
1094 # The number of notifications to send to the disabled/removed member before we
1095 # remove them from the list.  A value of 0 means we remove the address
1096 # immediately (with one last notification).  Note that the first one is sent
1097 # upon change of status to disabled.
1098 DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS = 3
1099
1100 # The interval of time between disabled warnings.
1101 DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS_INTERVAL = days(7)
1102
1103 # Does the list owner get messages to the -bounces (and -admin) address that
1104 # failed to match by the bounce detector?
1105 DEFAULT_BOUNCE_UNRECOGNIZED_GOES_TO_LIST_OWNER = Yes
1106
1107 # Notifications on bounce actions.  The first specifies whether the list owner
1108 # should get a notification when a member is disabled due to bouncing, while
1109 # the second specifies whether the owner should get one when the member is
1110 # removed due to bouncing.
1111 DEFAULT_BOUNCE_NOTIFY_OWNER_ON_DISABLE = Yes
1112 DEFAULT_BOUNCE_NOTIFY_OWNER_ON_REMOVAL = Yes
1113
1114
1115 \f
1116 #####
1117 # General time limits
1118 #####
1119
1120 # Default length of time a pending request is live before it is evicted from
1121 # the pending database.
1122 PENDING_REQUEST_LIFE = days(3)
1123
1124 # How long should messages which have delivery failures continue to be
1125 # retried?  After this period of time, a message that has failed recipients
1126 # will be dequeued and those recipients will never receive the message.
1127 DELIVERY_RETRY_PERIOD = days(5)
1128
1129 # How long should we wait before we retry a temporary delivery failure?
1130 DELIVERY_RETRY_WAIT = hours(1)
1131
1132
1133 \f
1134 #####
1135 # Lock management defaults
1136 #####
1137
1138 # These variables control certain aspects of lock acquisition and retention.
1139 # They should be tuned as appropriate for your environment.  All variables are
1140 # specified in units of floating point seconds.  YOU MAY NEED TO TUNE THESE
1141 # VARIABLES DEPENDING ON THE SIZE OF YOUR LISTS, THE PERFORMANCE OF YOUR
1142 # HARDWARE, NETWORK AND GENERAL MAIL HANDLING CAPABILITIES, ETC.
1143
1144 # Set this to On to turn on MailList object lock debugging messages, which
1145 # will be written to logs/locks.  If you think you're having lock problems, or
1146 # just want to tune the locks for your system, turn on lock debugging.
1147 LIST_LOCK_DEBUGGING = Off
1148
1149 # This variable specifies how long the lock will be retained for a specific
1150 # operation on a mailing list.  Watch your logs/lock file and if you see a lot
1151 # of lock breakages, you might need to bump this up.  However if you set this
1152 # too high, a faulty script (or incorrect use of bin/withlist) can prevent the
1153 # list from being used until the lifetime expires.  This is probably one of
1154 # the most crucial tuning variables in the system.
1155 LIST_LOCK_LIFETIME = hours(5)
1156
1157 # This variable specifies how long an attempt will be made to acquire a list
1158 # lock by the incoming qrunner process.  If the lock acquisition times out,
1159 # the message will be re-queued for later delivery.
1160 LIST_LOCK_TIMEOUT = seconds(10)
1161
1162 # Set this to On to turn on lock debugging messages for the pending requests
1163 # database, which will be written to logs/locks.  If you think you're having
1164 # lock problems, or just want to tune the locks for your system, turn on lock
1165 # debugging.
1166 PENDINGDB_LOCK_DEBUGGING = Off
1167
1168
1169 \f
1170 #####
1171 # Nothing below here is user configurable.  Most of these values are in this
1172 # file for internal system convenience.  Don't change any of them or override
1173 # any of them in your mm_cfg.py file!
1174 #####
1175
1176 # These directories are used to find various important files in the Mailman
1177 # installation.  PREFIX and EXEC_PREFIX are set by configure and should point
1178 # to the installation directory of the Mailman package.
1179 PYTHON          = '@PYTHON@'
1180 PREFIX          = '@prefix@'
1181 EXEC_PREFIX     = '@exec_prefix@'
1182 VAR_PREFIX      = '@VAR_PREFIX@'
1183
1184 # Work around a bogus autoconf 2.12 bug
1185 if EXEC_PREFIX == '${prefix}':
1186     EXEC_PREFIX = PREFIX
1187
1188 # CGI extension, change using configure script
1189 CGIEXT = '@CGIEXT@'
1190
1191 # Group id that group-owns the Mailman installation
1192 MAILMAN_USER = '@MAILMAN_USER@'
1193 MAILMAN_GROUP = '@MAILMAN_GROUP@'
1194
1195 # Enumeration for Mailman cgi widget types
1196 Toggle      = 1
1197 Radio       = 2
1198 String      = 3
1199 Text        = 4
1200 Email       = 5
1201 EmailList   = 6
1202 Host        = 7
1203 Number      = 8
1204 FileUpload  = 9
1205 Select      = 10
1206 Topics      = 11
1207 Checkbox    = 12
1208 # An "extended email list".  Contents must be an email address or a ^-prefixed
1209 # regular expression.  Used in the sender moderation text boxes.
1210 EmailListEx = 13
1211 # Extended spam filter widget
1212 HeaderFilter  = 14
1213
1214 # Actions
1215 DEFER = 0
1216 APPROVE = 1
1217 REJECT = 2
1218 DISCARD = 3
1219 SUBSCRIBE = 4
1220 UNSUBSCRIBE = 5
1221 ACCEPT = 6
1222 HOLD = 7
1223
1224 # Standard text field width
1225 TEXTFIELDWIDTH = 40
1226
1227 # Bitfield for user options.  See DEFAULT_NEW_MEMBER_OPTIONS above to set
1228 # defaults for all new lists.
1229 Digests             = 0 # handled by other mechanism, doesn't need a flag.
1230 DisableDelivery     = 1 # Obsolete; use set/getDeliveryStatus()
1231 DontReceiveOwnPosts = 2 # Non-digesters only
1232 AcknowledgePosts    = 4
1233 DisableMime         = 8 # Digesters only
1234 ConcealSubscription = 16
1235 SuppressPasswordReminder = 32
1236 ReceiveNonmatchingTopics = 64
1237 Moderate = 128
1238 DontReceiveDuplicates = 256
1239
1240 # A mapping between short option tags and their flag
1241 OPTINFO = {'hide'    : ConcealSubscription,
1242            'nomail'  : DisableDelivery,
1243            'ack'     : AcknowledgePosts,
1244            'notmetoo': DontReceiveOwnPosts,
1245            'digest'  : 0,
1246            'plain'   : DisableMime,
1247            'nodupes' : DontReceiveDuplicates
1248            }
1249
1250 # Authentication contexts.
1251 #
1252 # Mailman defines the following roles:
1253
1254 # - User, a normal user who has no permissions except to change their personal
1255 #   option settings
1256 # - List creator, someone who can create and delete lists, but cannot
1257 #   (necessarily) configure the list.
1258 # - List moderator, someone who can tend to pending requests such as
1259 #   subscription requests, or held messages
1260 # - List administrator, someone who has total control over a list, can
1261 #   configure it, modify user options for members of the list, subscribe and
1262 #   unsubscribe members, etc.
1263 # - Site administrator, someone who has total control over the entire site and
1264 #   can do any of the tasks mentioned above.  This person usually also has
1265 #   command line access.
1266
1267 UnAuthorized = 0
1268 AuthUser = 1          # Joe Shmoe User
1269 AuthCreator = 2       # List Creator / Destroyer
1270 AuthListAdmin = 3     # List Administrator (total control over list)
1271 AuthListModerator = 4 # List Moderator (can only handle held requests)
1272 AuthSiteAdmin = 5     # Site Administrator (total control over everything)
1273
1274 # Useful directories
1275 LIST_DATA_DIR   = os.path.join(VAR_PREFIX, 'lists')
1276 LOG_DIR         = os.path.join(VAR_PREFIX, 'logs')
1277 LOCK_DIR        = os.path.join(VAR_PREFIX, 'locks')
1278 DATA_DIR        = os.path.join(VAR_PREFIX, 'data')
1279 SPAM_DIR        = os.path.join(VAR_PREFIX, 'spam')
1280 WRAPPER_DIR     = os.path.join(EXEC_PREFIX, 'mail')
1281 BIN_DIR         = os.path.join(PREFIX, 'bin')
1282 SCRIPTS_DIR     = os.path.join(PREFIX, 'scripts')
1283 TEMPLATE_DIR    = os.path.join(PREFIX, 'templates')
1284 MESSAGES_DIR    = os.path.join(PREFIX, 'messages')
1285 PUBLIC_ARCHIVE_FILE_DIR  = os.path.join(VAR_PREFIX, 'archives', 'public')
1286 PRIVATE_ARCHIVE_FILE_DIR = os.path.join(VAR_PREFIX, 'archives', 'private')
1287
1288 # Directories used by the qrunner subsystem
1289 QUEUE_DIR       = os.path.join(VAR_PREFIX, 'qfiles')
1290 INQUEUE_DIR     = os.path.join(QUEUE_DIR, 'in')
1291 OUTQUEUE_DIR    = os.path.join(QUEUE_DIR, 'out')
1292 CMDQUEUE_DIR    = os.path.join(QUEUE_DIR, 'commands')
1293 BOUNCEQUEUE_DIR = os.path.join(QUEUE_DIR, 'bounces')
1294 NEWSQUEUE_DIR   = os.path.join(QUEUE_DIR, 'news')
1295 ARCHQUEUE_DIR   = os.path.join(QUEUE_DIR, 'archive')
1296 SHUNTQUEUE_DIR  = os.path.join(QUEUE_DIR, 'shunt')
1297 VIRGINQUEUE_DIR = os.path.join(QUEUE_DIR, 'virgin')
1298 BADQUEUE_DIR    = os.path.join(QUEUE_DIR, 'bad')
1299 RETRYQUEUE_DIR  = os.path.join(QUEUE_DIR, 'retry')
1300 MAILDIR_DIR     = os.path.join(QUEUE_DIR, 'maildir')
1301
1302 # Other useful files
1303 PIDFILE = "/var/run/mailman/mailman.pid"
1304 SITE_PW_FILE = os.path.join(DATA_DIR, 'adm.pw')
1305 LISTCREATOR_PW_FILE = os.path.join(DATA_DIR, 'creator.pw')
1306
1307 # Import a bunch of version numbers
1308 from Version import *
1309
1310 # Vgg: Language descriptions and charsets dictionary, any new supported
1311 # language must have a corresponding entry here. Key is the name of the
1312 # directories that hold the localized texts. Data are tuples with first
1313 # element being the description, as described in the catalogs, and second
1314 # element is the language charset.  I have chosen code from /usr/share/locale
1315 # in my GNU/Linux. :-)
1316 def _(s):
1317     return s
1318
1319 LC_DESCRIPTIONS = {}
1320
1321 def add_language(code, description, charset):
1322     LC_DESCRIPTIONS[code] = (description, charset)
1323
1324 add_language('ar',    _('Arabic'),              'utf-8')
1325 add_language('ca',    _('Catalan'),             'iso-8859-1')
1326 add_language('cs',    _('Czech'),               'iso-8859-2')
1327 add_language('da',    _('Danish'),              'iso-8859-1')
1328 add_language('de',    _('German'),              'iso-8859-1')
1329 add_language('en',    _('English (USA)'),       'us-ascii')
1330 add_language('es',    _('Spanish (Spain)'),     'iso-8859-1')
1331 add_language('et',    _('Estonian'),            'iso-8859-15')
1332 add_language('eu',    _('Euskara'),             'iso-8859-15') # Basque
1333 add_language('fi',    _('Finnish'),             'iso-8859-1')
1334 add_language('fr',    _('French'),              'iso-8859-1')
1335 add_language('hr',    _('Croatian'),            'iso-8859-2')
1336 add_language('hu',    _('Hungarian'),           'iso-8859-2')
1337 add_language('ia',    _('Interlingua'),         'iso-8859-15')
1338 add_language('it',    _('Italian'),             'iso-8859-1')
1339 add_language('ja',    _('Japanese'),            'euc-jp')
1340 add_language('ko',    _('Korean'),              'euc-kr')
1341 add_language('lt',    _('Lithuanian'),          'iso-8859-13')
1342 add_language('nl',    _('Dutch'),               'iso-8859-1')
1343 add_language('no',    _('Norwegian'),           'iso-8859-1')
1344 add_language('pl',    _('Polish'),              'iso-8859-2')
1345 add_language('pt',    _('Portuguese'),          'iso-8859-1')
1346 add_language('pt_BR', _('Portuguese (Brazil)'), 'iso-8859-1')
1347 add_language('ro',    _('Romanian'),            'iso-8859-2')
1348 add_language('ru',    _('Russian'),             'koi8-r')
1349 add_language('sr',    _('Serbian'),             'utf-8')
1350 add_language('sl',    _('Slovenian'),           'iso-8859-2')
1351 add_language('sv',    _('Swedish'),             'iso-8859-1')
1352 add_language('tr',    _('Turkish'),             'iso-8859-9')
1353 add_language('uk',    _('Ukrainian'),           'utf-8')
1354 add_language('vi',    _('Vietnamese'),          'utf-8')
1355 add_language('zh_CN', _('Chinese (China)'),     'utf-8')
1356 add_language('zh_TW', _('Chinese (Taiwan)'),    'utf-8')
1357
1358 del _