Add configuration for dsn lifetime in message store.
[mailman.git] / src / mailman / config / schema.cfg
blobcc982bbd63324ba5d1dfb06e65f4f8588277eb41
1 # Copyright (C) 2008-2023 by the Free Software Foundation, Inc.
3 # This file is part of GNU Mailman.
5 # GNU Mailman is free software: you can redistribute it and/or modify it under
6 # the terms of the GNU General Public License as published by the Free
7 # Software Foundation, either version 3 of the License, or (at your option)
8 # any later version.
10 # GNU Mailman is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13 # more details.
15 # You should have received a copy of the GNU General Public License along with
16 # GNU Mailman.  If not, see <https://www.gnu.org/licenses/>.
18 # This is the GNU Mailman configuration schema.  It defines the default
19 # configuration options for the core system and plugins.  It uses ini-style
20 # formats under the lazr.config regime to define all system configuration
21 # options.  See <https://launchpad.net/lazr.config> for details.
24 [mailman]
25 # This address is the "site owner" address.  Certain messages which must be
26 # delivered to a human, but which can't be delivered to a list owner (e.g. a
27 # bounce from a list owner), will be sent to this address.  It should point to
28 # a human.
29 site_owner: changeme@example.com
31 # This is the local-part of an email address used in the From field whenever a
32 # message comes from some entity to which there is no natural reply recipient.
33 # Mailman will append '@' and the host name of the list involved.  This
34 # address must not bounce and it must not point to a Mailman process.
35 noreply_address: noreply
37 # The default language for this server.
38 default_language: en
40 # Membership tests for posting purposes are usually performed by looking at a
41 # set of headers, passing the test if any of their values match a member of
42 # the list.  Headers are checked in the order given in this variable.  The
43 # value From_ means to use the envelope sender.  Field names are case
44 # insensitive.  This is a space separate list of headers.
45 sender_headers: from from_ reply-to sender
47 # This is a space separated list of regexps which match headers to be kept
48 # in messages to anonymous lists.  Many headers are removed from posts to
49 # anonymous lists before this is consulted, but of the remaining headers,
50 # any X-* headers that don't match one of these patterns are also removed.
51 # The X-* headers kept by default are those X-* headers added by Mailman
52 # and any X-Spam- headers.  The match is case-insensitive.  This does not
53 # affect non X-* headers, those of which might identify senders or their
54 # domains are deleted or replaced.
55 anonymous_list_keep_headers: ^x-mailman- ^x-content-filtered-by: ^x-topics:
56  ^x-ack: ^x-beenthere: ^x-list-administrivia: ^x-spam-
58 # Mail command processor will ignore mail command lines after designated max.
59 email_commands_max_lines: 10
61 # Default length of time a pending request is live before it is evicted from
62 # the pending database.
63 pending_request_life: 3d
65 # Default lifetime of pending moderator requests as opposed to the above which
66 # is for user confirmations.
67 moderator_request_life: 180d
69 # Default lifetime of saved bounce DSNs.  This doesn't need to be long.
70 # They only need to be saved so they can be attached to admin notices which
71 # are normally sent immediately, but by an asynchronous process.
72 dsn_lifetime: 1d
74 # How long should files be saved before they are evicted from the cache?
75 cache_life: 7d
77 # How often should the task runner execute tasks like evicting expired
78 # pendings, workflows and cached files?
79 run_tasks_every: 1h
81 # Which paths.* file system layout to use.
82 layout: here
84 # Can MIME filtered messages be preserved by list owners?
85 filtered_messages_are_preservable: no
87 # How should text/html parts be converted to text/plain when the mailing list
88 # is set to convert HTML to plaintext?  This names a command to be called,
89 # where the substitution variable $filename is filled in by Mailman, and
90 # contains the path to the temporary file that the command should read from.
91 # The command should print the converted text to stdout.
92 html_to_plain_text_command: /usr/bin/lynx -dump $filename
94 # Should Mailman's content filtering append a report of what it removed to
95 # the message?
96 filter_report: no
98 # Specify what characters are allowed in list names.  Characters outside of
99 # the class [-_.+=!$*{}~0-9a-z] matched case insensitively are never allowed,
100 # but this specifies a subset as the only allowable characters.  This must be
101 # a valid character class regexp or the effect on list creation is
102 # unpredictable.
103 listname_chars: [-_.0-9a-z]
105 # Should we hold posts to lists that have a digest subject or quote the
106 # digest masthead?
107 hold_digest: no
109 # If hold_digest is yes, this is the minimum number of non-blank digest
110 # masthead lines that are needed to be matched in the message for it to be
111 # considered as quoting the masthead.
112 masthead_threshold: 4
114 # Should we check maximum message size against content filtered message?
115 check_max_size_on_filtered_message: no
117 # These hooks are deprecated, but are kept here so as not to break existing
118 # configuration files.  However, these hooks are not run.  Define a plugin
119 # instead.
120 pre_hook:
121 post_hook:
124 [plugin.master]
125 # Plugin configuration section template.
127 # To add a plugin, instantiate this section (changing `master` to whatever
128 # your plugin's name is), and define at least a `path` and a `class`.  When
129 # the plugin is loaded, its subpackages will be search for components matching
130 # the following interfaces:
132 # - IChain for new chains
133 # - ICliSubCommand - `mailman` subcommands
134 # - IEmailCommand - new email commands
135 # - IHandler for new handlers
136 # - IPipeline for new pipelines
137 # - IRule for new rules
138 # - IStyle for new styles.
140 # See the IPlugin interface for more details.
142 # The full Python import path for you IPlugin implementing class.  It is
143 # required to provide this.
144 class:
146 # Whether to enable this plugin or not.
147 enabled: no
149 # Additional configuration file for this plugin.  If the value starts with
150 # `python:` it is a Python import path, in which case the value should not
151 # include the trailing .cfg (although the file is required to have this
152 # suffix).  Without `python:`, it is a file system path, and must be an
153 # absolute path, since no guarantees are made about the current working
154 # directory.
155 configuration:
157 # Package (as a dotted Python import path) to search for components that this
158 # plugin wants to add, such as ISTyles, IRules, etc.  If not given, the
159 # plugin's name is used.
160 component_package:
163 [shell]
164 # `mailman shell` (also `withlist`) gives you an interactive prompt that you
165 # can use to interact with an initialized and configured Mailman system.  Use
166 # --help for more information.  This section allows you to configure certain
167 # aspects of this interactive shell.
169 # Customize the interpreter prompt.
170 prompt: >>>
172 # Banner to show on startup.
173 banner: Welcome to the GNU Mailman shell
174  Use commit() to commit changes.
175  Use abort() to discard changes since the last commit.
176  Exit with ctrl+D does an implicit commit() but exit() does not.
178 # Use IPython as the shell, which must be found on the system.  Valid values
179 # are `no`, `yes`, and `debug` where the latter is equivalent to `yes` except
180 # that any import errors will be displayed to stderr.
181 use_ipython: no
183 # Set this to allow for command line history if readline is available.  This
184 # can be as simple as $var_dir/history.py to put the file in the var directory.
185 history_file:
188 [paths.master]
189 # Important directories for Mailman operation.  These are defined here so that
190 # different layouts can be supported.   For example, a developer layout would
191 # be different from a FHS layout.  Most paths are based off the var_dir, and
192 # often just setting that will do the right thing for all the other paths.
193 # You might also have to set spool_dir though.
195 # Substitutions are allowed, but must be of the form $var where 'var' names a
196 # configuration variable in the paths.* section.  Substitutions are expanded
197 # recursively until no more $-variables are present.  Beware of infinite
198 # expansion loops!
200 # This is the root of the directory structure that Mailman will use to store
201 # its run-time data.
202 var_dir: /var/tmp/mailman
203 # This is where the Mailman queue files directories will be created.
204 queue_dir: $var_dir/queue
205 # This is the directory containing the Mailman 'runner' and 'master' commands
206 # if set to the string '$argv', it will be taken as the directory containing
207 # the 'mailman' command.
208 bin_dir: $argv
209 # All list-specific data.
210 list_data_dir: $var_dir/lists
211 # Directory where log files go.
212 log_dir: $var_dir/logs
213 # Directory for system-wide locks.
214 lock_dir: $var_dir/locks
215 # Directory for system-wide data.
216 data_dir: $var_dir/data
217 # Cache files.
218 cache_dir: $var_dir/cache
219 # Directory for configuration files and such.
220 etc_dir: $var_dir/etc
221 # Directory containing Mailman plugins.
222 ext_dir: $var_dir/ext
223 # Directory where the default IMessageStore puts its messages.
224 messages_dir: $var_dir/messages
225 # Directory for archive backends to store their messages in.  Archivers should
226 # create a subdirectory in here to store their files.
227 archive_dir: $var_dir/archives
228 # Root directory for site-specific template override files.
229 template_dir: $var_dir/templates
230 # There are also a number of paths to specific file locations that can be
231 # defined.  For these, the directory containing the file must already exist,
232 # or be one of the directories created by Mailman as per above.
234 # This is where PID file for the master runner is stored.
235 pid_file: $var_dir/master.pid
236 # Lock file.
237 lock_file: $lock_dir/master.lck
240 [devmode]
241 # Setting enabled to true enables certain safeguards and other behavior
242 # changes that make developing Mailman easier.  For example, it forces the
243 # SMTP RCPT TO recipients to be a test address so that no messages are
244 # accidentally sent to real addresses.
245 enabled: no
247 # Set this to an address to force the SMTP RCPT TO recipents when devmode is
248 # enabled.  This way messages can't be accidentally sent to real addresses.
249 recipient:
251 # This gets set by the testing layers so that the runner subprocesses produce
252 # predictable dates and times.
253 testing: no
255 # Time-outs for starting up various test subprocesses, such as the LMTP and
256 # REST servers.  This is only used for the test suite, so if you're seeing
257 # test failures, try increasing the wait time.
258 wait: 60s
261 [passwords]
262 # Where can we find the passlib configuration file?  The path can be either a
263 # file system path or a Python import path.  If the value starts with python:
264 # then it is a Python import path, otherwise it is a file system path.  File
265 # system paths must be absolute since no guarantees are made about the current
266 # working directory.  Python paths should not include the trailing .cfg, which
267 # the file must end with.
268 configuration: python:mailman.config.passlib
270 # When Mailman generates them, this is the default length of passwords.
271 password_length: 8
274 [runner.master]
275 # Define which runners, and how many of them, to start.
277 # The full import path to the class for this runner.
278 class: mailman.core.runner.Runner
280 # The queue directory path that this runner scans.  This is ignored for
281 # runners that don't manage a queue directory.
282 path: $QUEUE_DIR/$name
284 # The number of parallel runners.  This must be a power of 2.  This is ignored
285 # for runners that don't manage a queue directory.
286 instances: 1
288 # Whether to start this runner or not.
289 start: yes
291 # The maximum number of restarts for this runner.  When the runner exits
292 # because of an error or other unexpected problem, it is automatically
293 # restarted, until the maximum number of restarts has been reached.
294 max_restarts: 10
296 # The sleep interval for the runner.  It wakes up once every interval to
297 # process the files in its slice of the queue directory.  Some runners may
298 # ignore this.
299 sleep_time: 1s
302 [database]
303 # The class implementing the IDatabase.
304 class: mailman.database.sqlite.SQLiteDatabase
306 # Use this to set the Storm database engine URL.  You generally have one
307 # primary database connection for all of Mailman.  List data and most rosters
308 # will store their data in this database, although external rosters may access
309 # other databases in their own way.  This string supports standard
310 # 'configuration' substitutions.
311 url: sqlite:///$DATA_DIR/mailman.db
312 debug: no
315 [logging.template]
316 # This defines various log settings.  The options available are:
318 # - level     -- Overrides the default level; this may be any of the
319 #                standard Python logging levels, case insensitive.
320 # - format    -- Overrides the default format string
321 # - datefmt   -- Overrides the default date format string
322 # - path      -- Overrides the default logger path.  This may be a relative
323 #                path name, in which case it is relative to Mailman's LOG_DIR,
324 #                or it may be an absolute path name.  You cannot change the
325 #                handler class that will be used.
326 # - propagate -- Boolean specifying whether to propagate log message from this
327 #                logger to the root "mailman" logger.  You cannot override
328 #                settings for the root logger.
330 # In this section, you can define defaults for all loggers, which will be
331 # prefixed by 'mailman.'.  Use subsections to override settings for specific
332 # loggers.  The names of the available loggers are:
334 # - archiver        --  All archiver output
335 # - bounce          --  All bounce processing logs go here
336 # - config          --  Configuration issues
337 # - database        --  Database logging (SQLAlchemy and Alembic)
338 # - debug           --  Only used for development
339 # - error           --  All exceptions go to this log
340 # - fromusenet      --  Information related to the Usenet to Mailman gateway
341 # - http            --  Internal wsgi-based web interface
342 # - locks           --  Lock state changes
343 # - mischief        --  Various types of hostile activity
344 # - plugins         --  Plugin logs
345 # - runner          --  Runner process start/stops
346 # - smtp            --  SMTP activity
347 # - subscribe       --  Information about leaves/joins
348 # - task            --  Messages from the task runner
349 # - vette           --  Message vetting information
350 format: %(asctime)s (%(process)d) %(message)s
351 datefmt: %b %d %H:%M:%S %Y
352 propagate: no
353 level: info
354 path: mailman.log
356 [logging.root]
358 [logging.archiver]
360 [logging.bounce]
361 path: bounce.log
363 [logging.config]
365 [logging.database]
366 level: warn
368 [logging.debug]
369 path: debug.log
370 level: info
372 [logging.error]
374 [logging.fromusenet]
376 [logging.http]
378 [logging.gunicorn]
379 format: %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
381 [logging.locks]
383 [logging.mischief]
385 [logging.plugins]
386 path: plugins.log
388 [logging.runner]
390 [logging.smtp]
391 path: smtp.log
393 # The smtp logger defines additional options for handling the logging of each
394 # attempted delivery.  These format strings specify what information is logged
395 # for every message, every successful delivery, every refused delivery and
396 # every recipient failure.  To disable a status message, set the value to 'no'
397 # (without the quotes).
399 # These template strings accept the following set of substitution
400 # placeholders, if available.
402 # msgid     -- the Message-ID of the message in question
403 # listname  -- the fully-qualified list name
404 # sender    -- the sender if available
405 # recip     -- the recipient address if available, or the number of
406 #              recipients being delivered to
407 # size      -- the approximate size of the message in bytes
408 # seconds   -- the number of seconds the operation took
409 # refused   -- the number of refused recipients
410 # smtpcode  -- the SMTP success or failure code
411 # smtpmsg   -- the SMTP success or failure message
413 every: $msgid smtp to $listname for $recip recips, completed in $time seconds
414 success: $msgid post to $listname from $sender, $size bytes
415 refused: $msgid post to $listname from $sender, $size bytes, $refused failures
416 failure: $msgid delivery to $recip failed with code $smtpcode, $smtpmsg
418 [logging.subscribe]
420 [logging.task]
422 [logging.vette]
425 [webservice]
426 # The hostname at which admin web service resources are exposed.
427 hostname: localhost
429 # The port at which the admin web service resources are exposed.
430 port: 8001
432 # Whether or not requests to the web service are secured through SSL.
433 use_https: no
435 # Whether or not to show tracebacks in an HTTP response for a request that
436 # raised an exception.
437 show_tracebacks: yes
439 # The API version number for the current (highest) API.
440 api_version: 3.1
442 # The administrative username.
443 admin_user: restadmin
445 # The administrative password.
446 admin_pass: restpass
448 # Number of workers to start.
449 # http://docs.gunicorn.org/en/stable/settings.html#workers
450 workers: 2
452 # Configuration for webservice.
453 configuration: python:mailman.config.gunicorn
456 [language.master]
457 # Template for language definitions.  The section name must be [language.xx]
458 # where xx is the 2-character ISO code for the language.
460 # The English name for the language.
461 description: English (USA)
462 # And the default character set for the language.
463 charset: us-ascii
464 # Whether the language is enabled or not.
465 enabled: yes
467 # Language charsets as imported from Mailman 2.1 defaults
468 # Ref: http://www.lingoes.net/en/translator/langcode.htm
469 [language.ar]
470 description: Arabic
471 charset: utf-8
472 enabled: yes
474 [language.ast]
475 description: Asturian
476 charset: utf-8
477 enabled: yes
479 [language.bg]
480 description: Bulgarian
481 charset: utf-8
482 enabled: yes
484 [language.ca]
485 description: Catalan
486 charset: utf-8
487 enabled: yes
489 [language.cs]
490 description: Czech
491 charset: utf-8
492 enabled: yes
494 [language.da]
495 description: Danish
496 charset: utf-8
497 enabled: yes
499 [language.de]
500 description: German
501 charset: utf-8
502 enabled: yes
504 [language.el]
505 description: Greek
506 charset: utf-8
507 enabled: yes
509 [language.es]
510 description: Spanish
511 charset: utf-8
512 enabled: yes
514 [language.et]
515 description: Estonian
516 charset: utf-8
517 enabled: yes
519 [language.eu]
520 # Basque
521 description: Euskara
522 charset: utf-8
523 enabled: yes
525 [language.fi]
526 description: Finnish
527 charset: utf-8
528 enabled: yes
530 [language.fr]
531 description: French
532 charset: utf-8
533 enabled: yes
535 [language.gl]
536 description: Galician
537 charset: utf-8
538 enabled: yes
540 [language.he]
541 description: Hebrew
542 charset: utf-8
543 enabled: yes
545 [language.hr]
546 description: Croatian
547 charset: utf-8
548 enabled: yes
550 [language.hu]
551 description: Hungarian
552 charset: utf-8
553 enabled: yes
555 [language.ia]
556 description: Interlingua
557 charset: utf-8
558 enabled: yes
560 [language.it]
561 description: Italian
562 charset: utf-8
563 enabled: yes
565 [language.ja]
566 description: Japanese
567 charset: utf-8
568 enabled: yes
570 [language.ko]
571 description: Korean
572 charset: utf-8
573 enabled: yes
575 [language.lt]
576 description: Lithuanian
577 charset: utf-8
578 enabled: yes
580 [language.nl]
581 description: Dutch
582 charset: utf-8
583 enabled: yes
585 [language.no]
586 description: Norwegian
587 charset: utf-8
588 enabled: yes
590 [language.pl]
591 description: Polish
592 charset: utf-8
593 enabled: yes
595 [language.pt]
596 description: Portuguese
597 charset: utf-8
598 enabled: yes
600 [language.pt_BR]
601 description: Portuguese (Brazil)
602 charset: utf-8
603 enabled: yes
605 [language.ro]
606 description: Romanian
607 charset: utf-8
608 enabled: yes
610 [language.ru]
611 description: Russian
612 charset: utf-8
613 enabled: yes
615 [language.sk]
616 description: Slovak
617 charset: utf-8
618 enabled: yes
620 [language.sl]
621 description: Slovenian
622 charset: utf-8
623 enabled: yes
625 [language.sr]
626 description: Serbian
627 charset: utf-8
628 enabled: yes
630 [language.sv]
631 description: Swedish
632 charset: utf-8
633 enabled: yes
635 [language.tr]
636 description: Turkish
637 charset: utf-8
638 enabled: yes
640 [language.uk]
641 description: Ukrainian
642 charset: utf-8
643 enabled: yes
645 [language.vi]
646 description: Vietnamese
647 charset: utf-8
648 enabled: yes
650 [language.zh_CN]
651 description: Chinese
652 charset: utf-8
653 enabled: yes
655 [language.zh_TW]
656 description: Chinese (Taiwan)
657 charset: utf-8
658 enabled: yes
660 [ARC]
661 # This section defines email authetication parameters, in particular, with
662 # respect to the ARC(Authenticated-Recieved-Chain) protocol. See
663 # http://arc-spec.org/ for reference.
665 # The DMARC protocol is the industry standard for cryptographically validating
666 # both the content and originating source of email. However it is regularly
667 # the case that mailing lists break this source of authentication via modifying
668 # the From, and possibly other headers, and altering the contents of
669 # emails by, say, adding a common footer to outgoing mail.
670 # The ARC protocol is the industry standard for rectify this.
671 # ARC cryptographically seals the outgoing emails by adding a collection
672 # of headers.  These headers act quite analagously to a chain of DKIM
673 # signatures, where each intermediary validates the ARC signature(if one exists)
674 # of the incomming message, and then appends its own collection of header fields.
675 # Enabling this protocol makes it possible for email service providers
676 # to validate the content & originator of an email, even if it has taken multiple
677 # steps from the originator to the recipient.
679 # The general implementation of ARC within Mailman is addition of two
680 # additional handlers to the pipeline.  One, at the very beginning of the
681 # pipeline cryptographically validaties the incomming ARC headers before the
682 # message has been modified, and appends its results to the
683 # Authentication-Results header.
685 # The second handler is at the end of the pipeline.  It cryptographically
686 # signs the message, with all modifications that have been made, along
687 # with the analysis of the validation handler, and adds its output as
688 # a new set of ARC header fields.
690 # This flag globally enables ARC signing & validation. To enable, set this to
691 # yes.
692 enabled: no
694 # DKIM & DMARC authentication checks on incoming email is critical to using ARC
695 # successfully. Mailman can do these check on its own, but if you already perform
696 # these checks earlier in your pipeline, say via a milter previous to Mailman,
697 # they can be used instead, as long as you specify your domain as a trusted
698 # domain below.  If those checks are not placed in an Authentication-Results
699 # header from a trusted domain they will be ignored.
700 dmarc: yes
701 dkim: yes
703 # This is the domain name as which Mailman identifies in any authentication
704 # headers it generates. Mandatory to set for ARC signing to work.
705 authserv_id:
707 # Trusted Domains
709 # This list should include all additional domains
710 # that you manage that may be handling your incoming mail
711 # Only necessary to update if there are local domains or subdomains
712 # that are performing DKIM, DMARC, or SPF checks.
714 #     trusted_authserv_ids: subdomain.your_domain.com, trusted_other_domain.com
715 trusted_authserv_ids:
717 # Key Management
719 # In order for your server to be able to cryptographical sign its messages
720 # a DKIM public/private key pair will need to be created.
721 # See http://www.gettingemaildelivered.com/dkim-explained-how-to-set-up-and-use-domainkeys-identified-mail-effectively
722 # for reference.  The following parameters let the software find your
723 # private & public keys
725 # .. note::
727 #    Some versions of OpenSSL generate private keys which some versions of
728 #    dkimpy (the library used by Mailman for handling ARC) cannot read.
729 #    This manifests in "Unparsable private key" exceptions while processing
730 #    email. If you encounter this, try to regenerate the RSA key with the
731 #    -traditional flag.
733 # ::
734 #     privkey: /some/location/yourprivatekey.pem
735 #     selector: test
736 #     domain: your_domain.com
737 privkey:
738 selector:
739 domain:
742 # This configures the headers that will be cryptographically signed
743 # This list is what is recommended by the DKIM & ARC specifications.
744 # Inclusion of the From header is mandatory.
745 sig_headers: From, Sender, Reply-To, Subject, Date, Message-ID, To, Cc, MIME-Version, Content-Type, Content-Transfer-Encoding, Content-ID, Content-Description, Resent-Date, Resent-From, Resent-Sender, Resent-To, Resent-Cc, Resent-Message-ID, In-Reply-To, References, List-Id, List-Help, List-Unsubscribe, List-Subscribe, List-Post, List-Owner, List-Archive
747 [antispam]
748 # This section defines basic antispam detection settings.
750 # This value contains lines which specify RFC 822 headers in the email to
751 # check for spamminess.  Each line contains a `key: value` pair, where the key
752 # is the header to check and the value is a Python regular expression to match
753 # against the header's value.  Multiple checks should be entered as multiline
754 # value with leading spaces:
755 # ::
756 #     header_checks:
757 #       X-Spam: (yes|maybe)
758 #       Authentication-Results: mail.example.com; dmarc=(fail|quarantine)
760 # The header value and regular expression are always matched
761 # case-insensitively.
762 header_checks:
764 # The chain to jump to if any of the header patterns matches.  This must be
765 # the name of an existing chain such as 'discard', 'reject', 'hold', or
766 # 'accept', otherwise 'hold' will be used.
767 jump_chain: hold
770 [mta]
771 # The class defining the interface to the incoming mail transport agent.
772 incoming: mailman.mta.postfix.LMTP
774 # The callable implementing delivery to the outgoing mail transport agent.
775 # This must accept three arguments, the mailing list, the message, and the
776 # message metadata dictionary.
777 outgoing: mailman.mta.deliver.deliver
779 # How to connect to the outgoing MTA.  If smtp_user and smtp_pass is given,
780 # then Mailman will attempt to log into the MTA when making a new connection.
781 smtp_host: localhost
782 smtp_port: 25
783 smtp_user:
784 smtp_pass:
786 # One of smtp/smtps/starttls, specifies the protocol Mailman will use when
787 # connecting.  Typically will correspond to smtp_port: 25 -> smtp, 465 -> smtps,
788 # 587 -> starttls.
789 smtp_secure_mode: smtp
791 # When smtp_secure_mode is smtps or starttls, whether to require a server cert
792 # and verify it.
793 smtp_verify_cert: yes
795 # When smtp_secure_mode is smtps or starttls, whether to check that the
796 # server certificate specifies the same hostname as smtp_host.
797 smtp_verify_hostname: yes
799 # Where the LMTP server listens for connections.  Use 127.0.0.1 instead of
800 # localhost for Postfix integration, because Postfix only consults DNS
801 # (e.g. not /etc/hosts).
802 lmtp_host: 127.0.0.1
803 lmtp_port: 8024
805 # Ceiling on the number of recipients that can be specified in a single SMTP
806 # transaction.  Set to 0 to submit the entire recipient list in one
807 # transaction.
808 max_recipients: 10
810 # Ceiling on the number of SMTP sessions to perform on a single socket
811 # connection.  Some MTAs have limits.  Set this to 0 to do as many as we like
812 # (i.e. your MTA has no limits).  Set this to some number great than 0 and
813 # Mailman will close the SMTP connection and re-open it after this number of
814 # consecutive sessions.
815 max_sessions_per_connection: 0
817 # Maximum number of simultaneous subthreads that will be used for SMTP
818 # delivery.  After the recipients list is chunked according to max_recipients,
819 # each chunk is handed off to the SMTP server by a separate such thread.  If
820 # your Python interpreter was not built for threads, this feature is disabled.
821 # You can explicitly disable it in all cases by setting max_delivery_threads
822 # to 0.
823 max_delivery_threads: 0
825 # How long should messages which have delivery failures continue to be
826 # retried?  After this period of time, a message that has failed recipients
827 # will be dequeued and those recipients will never receive the message.
828 delivery_retry_period: 5d
830 # These variables control the format and frequency of VERP-like delivery for
831 # better bounce detection.  VERP is Variable Envelope Return Path, defined
832 # here:
834 # http://cr.yp.to/proto/verp.txt
836 # This involves encoding the address of the recipient as Mailman knows it into
837 # the envelope sender address (i.e. RFC 5321 MAIL FROM).  Thus, no matter what
838 # kind of forwarding the recipient has in place, should it eventually bounce,
839 # we will receive an unambiguous notice of the bouncing address.
841 # However, we're technically only "VERP-like" because we're doing the envelope
842 # sender encoding in Mailman, not in the MTA.  We do require cooperation from
843 # the MTA, so you must be sure your MTA can be configured for extended address
844 # semantics.
846 # The first variable describes how to encode VERP envelopes.  It must contain
847 # these three string interpolations, which get filled in by Mailman:
849 # $bounces -- the list's -bounces robot address will be set here
850 # $local   -- the recipient address's local mailbox part will be set here
851 # $domain  -- the recipient address's domain name will be set here
853 # This example uses the default below.
855 # FQDN list address is: mylist@dom.ain
856 # Recipient is:         aperson@a.nother.dom
858 # The envelope sender will be mylist-bounces+aperson=a.nother.dom@dom.ain
860 # Note that your MTA /must/ be configured to deliver such an addressed message
861 # to mylist-bounces!
862 verp_delimiter: +
863 verp_format: ${bounces}+${local}=${domain}
865 # For nicer confirmation emails, use a VERP-like format which encodes the
866 # confirmation cookie in the reply address.  This lets us put a more user
867 # friendly Subject: on the message, but requires cooperation from the MTA.
868 # Format is like verp_format, but with the following substitutions:
870 # $address  -- the list-confirm address
871 # $cookie   -- the confirmation cookie
872 verp_confirm_format: $address+$cookie
874 # This regular expression unambiguously decodes VERP addresses, which will be
875 # placed in the To: (or other, depending on the MTA) header of the bounce
876 # message by the bouncing MTA.  Getting this right is critical -- and tricky.
877 # Learn your Python regular expressions.  It must define exactly three named
878 # groups, `bounces`, `local` and `domain`, with the same definition as above.
879 # It will be compiled case-insensitively.
880 verp_regexp: ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
882 # This is analogous to verp_regexp, but for splitting apart the
883 # verp_confirm_format.  MUAs have been observed that mung
885 # From: local_part@host
887 # into
889 # To: "local_part" <local_part@host>
891 # when replying, so we skip everything up to '<' if any.
892 verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
894 # Set this to 'no' to disable user friendly confirmations and avoid encoding
895 # the confirmation cookie in the reply address.
896 verp_confirmations: yes
898 # Another good opportunity is when regular delivery is personalized.  Here
899 # again, we're already incurring the performance hit for addressing each
900 # individual recipient.  Set this to 'yes' to enable VERPs on all personalized
901 # regular deliveries (personalized digests aren't supported yet).
902 verp_personalized_deliveries: no
904 # And finally, we can VERP normal, non-personalized deliveries.  However,
905 # because it can be a significant performance hit, we allow you to decide how
906 # often to VERP regular deliveries.  This is the interval, in number of
907 # messages, to do a VERP recipient address.  The same variable controls both
908 # regular and digest deliveries.  Set to 0 to disable occasional VERPs, set to
909 # 1 to VERP every delivery, or to some number > 1 for only occasional VERPs.
910 verp_delivery_interval: 0
912 # VERP format and regexp for probe messages.
913 verp_probe_format: $bounces+$token@$domain
914 verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
915 # Set this 'yes' to activate VERP probe for disabling by bounce.
916 verp_probes: no
918 # This is the maximum number of automatic responses sent to an address because
919 # of -request messages or posting hold messages.  This limit prevents response
920 # loops between Mailman and misconfigured remote email robots.  Mailman
921 # already inhibits automatic replies to any message labeled with a header
922 # "Precendence: bulk|list|junk".  This is a fallback safety valve so it should
923 # be set fairly high.  Set to 0 for no limit (probably useful only for
924 # debugging).
925 max_autoresponses_per_day: 10
927 # Some list posts and mail to the -owner address may contain DomainKey or
928 # DomainKeys Identified Mail (DKIM) signature headers <http://www.dkim.org/>.
929 # Various list transformations to the message such as adding a list header or
930 # footer or scrubbing attachments or even reply-to munging can break these
931 # signatures.  It is generally felt that these signatures have value, even if
932 # broken and even if the outgoing message is resigned.  However, some sites
933 # may wish to remove these headers by setting this to 'yes'.
934 remove_dkim_headers: no
936 # Where can we find the mail server specific configuration file?  The path can
937 # be either a file system path or a Python import path.  If the value starts
938 # with python: then it is a Python import path, otherwise it is a file system
939 # path.  File system paths must be absolute since no guarantees are made about
940 # the current working directory.  Python paths should not include the trailing
941 # .cfg, which the file must end with.
942 configuration: python:mailman.config.postfix
945 [bounces]
946 # How often should the bounce runner process queued detected bounces?
947 register_bounces_every: 15m
950 [archiver.master]
951 # To add new archivers, define a new section based on this one, overriding the
952 # following values.
954 # The class implementing the IArchiver interface.
955 class:
957 # Set this to 'yes' to enable the archiver.
958 enable: no
960 # Additional configuration for the archiver.  The path can be either a file
961 # system path or a Python import path.  If the value starts with python: then
962 # it is a Python import path, otherwise it is a file system path.  File system
963 # paths must be absolute since no guarantees are made about the current
964 # working directory.  Python paths should not include the trailing .cfg, which
965 # the file must end with.
966 configuration: changeme
968 # When sending the message to the archiver, you have the option of
969 # "clobbering" the Date: header, specifically to make it more sane.  Some
970 # archivers can't handle dates that are wildly off from reality.  This does
971 # not change the Date: header for any other delivery vector except this
972 # specific archive.
974 # When the original Date header is clobbered, it will always be stored in
975 # X-Original-Date.  The new Date header will always be set to the date at
976 # which the messages was received by the Mailman server, in UTC.
978 # Your options here are:
979 # * never  -- Leaves the original Date header alone.
980 # * always -- Always override the Date header.
981 # * maybe  -- Override the Date only if it is outside the clobber_skew period.
982 clobber_date: maybe
983 clobber_skew: 1d
985 [archiver.mhonarc]
986 # This is the stock MHonArc archiver.
987 class: mailman.archiving.mhonarc.MHonArc
988 configuration: python:mailman.config.mhonarc
990 [archiver.mail_archive]
991 # This is the stock mail-archive.com archiver.
992 class: mailman.archiving.mailarchive.MailArchive
993 configuration: python:mailman.config.mail_archive
995 [archiver.prototype]
996 # This is a prototypical sample archiver.
997 class: mailman.archiving.prototype.Prototype
1000 [styles]
1001 # The default style to apply if nothing else was requested.  The value is the
1002 # name of an existing style.  If no such style exists, no style will be
1003 # applied.
1004 default: legacy-default
1007 [digests]
1008 # Headers which should be kept in both RFC 1153 (plain) and MIME digests.  RFC
1009 # 1153 also specifies these headers in this exact order, so order matters.
1010 # These are space separated and case insensitive.
1011 mime_digest_keep_headers:
1012     Date From To Cc Subject Message-ID Keywords
1013     In-Reply-To References Content-Type MIME-Version
1014     Content-Transfer-Encoding Precedence Reply-To
1015     Message List-Post
1017 plain_digest_keep_headers:
1018     Message Date From
1019     Subject To Cc
1020     Message-ID Keywords
1021     Content-Type
1024 [nntp]
1025 # Set these variables if you need to authenticate to your NNTP server for
1026 # Usenet posting or reading.  Leave these blank if no authentication is
1027 # necessary.
1028 user:
1029 password:
1031 # Host and port of the NNTP server to connect to.  Leave these blank to use
1032 # the default localhost:119.
1033 host:
1034 port:
1036 # This controls how headers must be cleansed in order to be accepted by your
1037 # NNTP server.  Some servers like INN reject messages containing prohibited
1038 # headers, or duplicate headers.  The NNTP server may reject the message for
1039 # other reasons, but there's little that can be programmatically done about
1040 # that.
1042 # These headers (case ignored) are removed from the original message.  This is
1043 # a whitespace separate list of headers.
1044 remove_headers:
1045     nntp-posting-host nntp-posting-date x-trace
1046     x-complaints-to xref date-received posted
1047     posting-version relay-version received
1049 # These headers are left alone, unless there are duplicates in the original
1050 # message.  Any second and subsequent headers are rewritten to the second
1051 # named header (case preserved).  This is a list of header pairs, one pair per
1052 # line.
1053 rewrite_duplicate_headers:
1054     To X-Original-To
1055     CC X-Original-CC
1056     Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
1057     MIME-Version X-MIME-Version
1059 # The NNTP runner periodically runs the gatenews command to gate news from
1060 # usenet for lists that do that.  This controls how often gatenews is run.
1061 gatenews_every: 5m
1064 [dmarc]
1065 # RFC 7489 - Domain-based Message Authentication, Reporting, and Conformance.
1066 # https://en.wikipedia.org/wiki/DMARC
1068 # Parameters for DMARC DNS lookups.  If you are seeing 'DNSException: Unable
1069 # to query DMARC policy ...' entries in your error log, you may need to adjust
1070 # these.
1072 # The time to wait for a response from a name server before timeout.
1073 resolver_timeout: 3s
1075 # The total time to spend trying to get an answer to the DNS question.
1076 resolver_lifetime: 5s
1078 # A URL from which to retrieve the data for the algorithm that computes
1079 # Organizational Domains for DMARC policy lookup purposes.  This can be
1080 # anything handled by the Python urllib.request.urlopen function.  See
1081 # https://publicsuffix.org/list/ for info.
1082 org_domain_data_url: https://publicsuffix.org/list/public_suffix_list.dat
1084 # How long should the local suffix list be used before it's considered out of
1085 # date.  After this amount of time a new list will be downloaded, but if it
1086 # can't be accessed, old data will still be used.
1087 cache_lifetime: 7d
1090 # urlpatterns typically represent the urls that are used in email templates
1091 # generated by Mailman Core. They key represents the `$key` that can be
1092 # used in the templates.
1094 # These are the url patterns for Postorius.
1095 [urlpatterns]
1096 mailinglist: $base_url/lists/$list_id
1097 held_message: $base_url/lists/$list_id/held_messages
1098 pending_subscriptions: $base_url/lists/$list_id/subscription_requests
1099 pending_unsubscriptions: $base_url/lists/$list_id/unsubscription_requests
1100 domain: $base_url/domains/$domain