3 # Copyright (C) 1998-2006 by the Free Software Foundation, Inc.
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.
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.
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,
20 """Distributed default settings for significant Mailman config variables."""
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
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
34 # Some convenient constants
41 Yes = yes = On = on = True
42 No = no = Off = off = False
47 # General system-wide defaults
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
57 IMAGE_LOGOS = '/doc/mailman/images/'
59 # The name of the Mailman favicon
60 SHORTCUT_ICON = 'mm-icon.png'
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/'
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
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:
83 # add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
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/'
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
96 HOME_PAGE = 'index.html'
97 MAILMAN_SITE_LIST = 'mailman'
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
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'
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
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
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.
136 # add_virtualhost('www.dom.ain')
137 # VIRTUAL_HOST['www.dom.ain']
140 def add_virtualhost(urlhost, emailhost=None):
142 if emailhost is None:
143 emailhost = DOT.join(urlhost.split(DOT)[1:])
144 VIRTUAL_HOSTS[urlhost.lower()] = emailhost.lower()
146 # And set the default
147 add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
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>
156 # Spam avoidance defaults
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.
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.
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.
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
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.
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'
210 # Are archives on or off by default?
213 # Are archives public or private by default?
214 # 0=public, 1=private
215 DEFAULT_ARCHIVE_PRIVATE = 0
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.
232 DEFAULT_ARCHIVE_VOLUME_FREQUENCY = 1
233 DEFAULT_DIGEST_VOLUME_FREQUENCY = 1
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:
242 # %(listname)s -- gets the internal name of the list
243 # %(hostname)s -- gets the email hostname for the list
245 # being archived will be substituted for this. Please note that os.popen() is
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
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'
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
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
274 SCRUBBER_USE_ATTACHMENT_FILENAME_EXTENSION = False
276 # This variable defines what happens to text/html subparts. They can be
277 # stripped completely, escaped, or filtered through an external program. The
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
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
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
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
305 ARCHIVE_HTML_SANITIZER = 1
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
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)
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
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
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']
348 # When the archive is public, should Mailman also make the raw Unix mbox file
349 # publically available?
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.
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
366 #DELIVERY_MODULE = 'Sendmail'
367 DELIVERY_MODULE = 'SMTPDirect'
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.
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 = []
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'
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.
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
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.
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
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
428 # Command for direct command pipe delivery to sendmail compatible program,
429 # when DELIVERY_MODULE is 'Sendmail'.
430 SENDMAIL_CMD = '/usr/lib/sendmail'
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.
438 # Set this if you have an NNTP server you prefer gatewayed lists to use.
439 DEFAULT_NNTP_HOST = ''
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
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']
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'),
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.
466 # These are the modules that do tasks common to all delivery paths.
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.
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.
494 # This is the pipeline which messages sent to the -owner address go through
504 # This defines syslog() format strings for the SMTPDirect delivery module (see
505 # DELIVERY_MODULE above). Valid %()s string substitutions include:
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.
510 # size -- the size of the entire message, in bytes
512 # #recips -- the number of actual recipients for this message.
514 # #refused -- the number of smtp refused recipients (use this only in
517 # listname -- the `internal' name of the mailing list for this posting
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.
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
528 # sender -- the "sender" of the messages, which will be the From: or
529 # envelope-sender as determeined by the USE_ENVELOPE_SENDER variable
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
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 = (
543 '%(msg_message-id)s smtp to %(listname)s for %(#recips)d recips, completed in %(time).3f seconds')
545 # This will only be printed if there were no immediate smtp failures.
546 # Mutually exclusive with SMTP_LOG_REFUSED.
549 'post to %(listname)s from %(sender)s, size=%(size)d, message-id=%(msg_message-id)s, success')
551 # This will only be printed if there were any addresses which encountered an
552 # immediate smtp failure. Mutually exclusive with SMTP_LOG_SUCCESS.
555 'post to %(listname)s from %(sender)s, size=%(size)d, message-id=%(msg_message-id)s, %(#refused)d failures')
557 # This will be logged for each specific recipient failure. Additional %()s
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 = (
565 'delivery to %(recipient)s failed with code %(failcode)d: %(failmsg)s')
567 # These variables control the format and frequency of VERP-like delivery for
568 # better bounce detection. VERP is Variable Envelope Return Path, defined
571 # http://cr.yp.to/proto/verp.txt
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
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
584 # The first variable describes how to encode VERP envelopes. It must contain
585 # these three string interpolations:
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
591 # This example uses the default below.
593 # FQDN list address is: mylist@dom.ain
594 # Recipient is: aperson@a.nother.dom
596 # The envelope sender will be mylist-bounces+aperson=a.nother.dom@dom.ain
598 # Note that your MTA /must/ be configured to deliver such an addressed message
600 VERP_FORMAT = '%(bounces)s+%(mailbox)s=%(host)s'
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>[^@]+)@.*$'
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
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
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
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
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:
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'
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
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>[^@]+)@.*$'
652 # Set this to Yes to enable VERP-like (more user friendly) confirmations
653 VERP_CONFIRMATIONS = No
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
662 MAX_AUTORESPONSES_PER_DAY = 10
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.
676 # BAW: Eventually we may support weighted hash spaces.
677 # BAW: Although not enforced, the # of slices must be a power of 2
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
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
694 # WARNING: If you want to use Maildir delivery, you /must/ start Mailman's
695 # qrunner as root, or you will get permission problems.
697 # NOTE: Maildir delivery is experimental for Mailman 2.1.
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))
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)
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
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
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'
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.
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
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
752 SENDER_HEADERS = ('from', None, 'reply-to', 'sender')
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
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
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
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
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
782 # This variable controls the order in which list-specific category options are
783 # presented in the admin cgi page.
786 'general', 'passwords', 'language', 'members', 'nondigest', 'digest',
788 'privacy', 'bounce', 'archive', 'gateway', 'autoreply',
789 'contentfilter', 'topics',
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
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.
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
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.
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
825 DEFAULT_LIST_ADVERTISED = Yes
826 DEFAULT_MAX_NUM_RECIPIENTS = 10
827 DEFAULT_MAX_MESSAGE_SIZE = 40 # KB
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
840 # Where to put subject prefix for 'Re:' messages:
842 # old style: Re: [prefix] test
843 # new style: [prefix 123] Re: test ... (number is optional)
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
849 OLD_STYLE_PREFIXING = Yes
851 # Scrub regular delivery
852 DEFAULT_SCRUB_NONDIGEST = False
854 # Mail command processor will ignore mail command lines after designated max.
855 DEFAULT_MAIL_COMMANDS_MAX_LINES = 25
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
861 # Is the list owner notified of subscribes/unsubscribes?
862 DEFAULT_ADMIN_NOTIFY_MCHANGES = No
864 # Discard held messages after this days
865 DEFAULT_MAX_DAYS_TO_HOLD = 0
867 # Should list members, by default, have their posts be moderated?
868 DEFAULT_DEFAULT_MEMBER_MODERATION = No
870 # Should non-member posts which are auto-discarded also be forwarded to the
872 DEFAULT_FORWARD_AUTO_DISCARDS = Yes
874 # What shold happen to non-member posts which are do not match explicit
875 # non-member actions?
880 DEFAULT_GENERIC_NONMEMBER_ACTION = 1
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
886 # Alternate names acceptable as explicit destinations for this list.
887 DEFAULT_ACCEPTABLE_ALIASES ="""
889 # For mailing lists that have only other mailing lists for members:
890 DEFAULT_UMBRELLA_LIST = No
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"
896 # This variable controls whether monthly password reminders are sent.
897 DEFAULT_SEND_REMINDERS = Yes
899 # Send welcome messages to new users?
900 DEFAULT_SEND_WELCOME_MSG = Yes
902 # Send goodbye messages to unsubscribed members?
903 DEFAULT_SEND_GOODBYE_MSG = Yes
905 # Wipe sender information, and make it look like the list-admin
906 # address sends all messages
907 DEFAULT_ANONYMOUS_LIST = No
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
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
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
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
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
938 # ** please do not choose option 0 if you are not allowing open
939 # subscribes (next variable)
940 DEFAULT_SUBSCRIBE_POLICY = 1
942 # Does this site allow completely unchecked subscriptions?
943 ALLOW_OPEN_SUBSCRIBE = No
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
951 # Private_roster == 0: anyone can see, 1: members only, 2: admin only.
952 DEFAULT_PRIVATE_ROSTER = 1
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
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
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
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 = []
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',
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'
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 = []
997 # Replace multipart/alternative with its first alternative.
998 DEFAULT_COLLAPSE_ALTERNATIVES = Yes
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
1004 # Default action to take on filtered messages.
1005 # 0 = Discard, 1 = Reject, 2 = Forward, 3 = Preserve
1006 DEFAULT_FILTER_ACTION = 0
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
1012 # Check for administrivia in messages sent to the main list?
1013 DEFAULT_ADMINISTRIVIA = Yes
1018 # Digestification defaults. Same caveat applies here as with list defaults.
1021 # Will list be available in non-digested form?
1022 DEFAULT_NONDIGESTABLE = Yes
1024 # Will list be available in digested form?
1025 DEFAULT_DIGESTABLE = Yes
1026 DEFAULT_DIGEST_HEADER = ""
1027 DEFAULT_DIGEST_FOOTER = DEFAULT_MSG_FOOTER
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
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
1045 PLAIN_DIGEST_KEEP_HEADERS = [
1046 'Message', 'Date', 'From',
1047 'Subject', 'To', 'Cc',
1048 'Message-ID', 'Keywords',
1055 # Bounce processing defaults. Same caveat applies here as with list defaults.
1058 # Should we do any bounced mail response at all?
1059 DEFAULT_BOUNCE_PROCESSING = Yes
1061 # How often should the bounce qrunner process queued detected bounces?
1062 REGISTER_BOUNCES_EVERY = minutes(15)
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
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.
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.
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
1087 # Bounce scores greater than this value get disabled.
1088 DEFAULT_BOUNCE_SCORE_THRESHOLD = 5.0
1090 # Bounce information older than this interval is considered stale, and is
1092 DEFAULT_BOUNCE_INFO_STALE_AFTER = days(7)
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
1100 # The interval of time between disabled warnings.
1101 DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS_INTERVAL = days(7)
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
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
1117 # General time limits
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)
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)
1129 # How long should we wait before we retry a temporary delivery failure?
1130 DELIVERY_RETRY_WAIT = hours(1)
1135 # Lock management defaults
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.
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
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)
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)
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
1166 PENDINGDB_LOCK_DEBUGGING = Off
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!
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.
1181 EXEC_PREFIX = '@exec_prefix@'
1182 VAR_PREFIX = '@VAR_PREFIX@'
1184 # Work around a bogus autoconf 2.12 bug
1185 if EXEC_PREFIX == '${prefix}':
1186 EXEC_PREFIX = PREFIX
1188 # CGI extension, change using configure script
1191 # Group id that group-owns the Mailman installation
1192 MAILMAN_USER = '@MAILMAN_USER@'
1193 MAILMAN_GROUP = '@MAILMAN_GROUP@'
1195 # Enumeration for Mailman cgi widget types
1208 # An "extended email list". Contents must be an email address or a ^-prefixed
1209 # regular expression. Used in the sender moderation text boxes.
1211 # Extended spam filter widget
1224 # Standard text field width
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
1238 DontReceiveDuplicates = 256
1240 # A mapping between short option tags and their flag
1241 OPTINFO = {'hide' : ConcealSubscription,
1242 'nomail' : DisableDelivery,
1243 'ack' : AcknowledgePosts,
1244 'notmetoo': DontReceiveOwnPosts,
1246 'plain' : DisableMime,
1247 'nodupes' : DontReceiveDuplicates
1250 # Authentication contexts.
1252 # Mailman defines the following roles:
1254 # - User, a normal user who has no permissions except to change their personal
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.
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)
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')
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')
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')
1307 # Import a bunch of version numbers
1308 from Version import *
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. :-)
1319 LC_DESCRIPTIONS = {}
1321 def add_language(code, description, charset):
1322 LC_DESCRIPTIONS[code] = (description, charset)
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')