1/*
2Package config holds the configuration file definitions.
3
4Mox uses two config files:
5
61. mox.conf, also called the static configuration file.
72. domains.conf, also called the dynamic configuration file.
8
9The static configuration file is never reloaded during the lifetime of a
10running mox instance. After changes to mox.conf, mox must be restarted for the
11changes to take effect.
12
13The dynamic configuration file is reloaded automatically when it changes.
14If the file contains an error after the change, the reload is aborted and the
15previous version remains active.
16
17Below are "empty" config files, generated from the config file definitions in
18the source code, along with comments explaining the fields. Fields named "x" are
19placeholders for user-chosen map keys.
20
21# sconf
22
23The config files are in "sconf" format. Properties of sconf files:
24
25 - Indentation with tabs only.
26 - "#" as first non-whitespace character makes the line a comment. Lines with a
27 value cannot also have a comment.
28 - Values don't have syntax indicating their type. For example, strings are
29 not quoted/escaped and can never span multiple lines.
30 - Fields that are optional can be left out completely. But the value of an
31 optional field may itself have required fields.
32
33See https://pkg.go.dev/github.com/mjl-/sconf for details.
34
35# mox.conf
36
37 # NOTE: This config file is in 'sconf' format. Indent with tabs. Comments must be
38 # on their own line, they don't end a line. Do not escape or quote strings.
39 # Details: https://pkg.go.dev/github.com/mjl-/sconf.
40
41
42 # Directory where all data is stored, e.g. queue, accounts and messages, ACME TLS
43 # certs/keys. If this is a relative path, it is relative to the directory of
44 # mox.conf.
45 DataDir:
46
47 # Default log level, one of: error, info, debug, trace, traceauth, tracedata.
48 # Trace logs SMTP and IMAP protocol transcripts, with traceauth also messages with
49 # passwords, and tracedata on top of that also the full data exchanges (full
50 # messages), which can be a large amount of data.
51 LogLevel:
52
53 # Overrides of log level per package (e.g. queue, smtpclient, smtpserver,
54 # imapserver, spf, dkim, dmarc, dmarcdb, autotls, junk, mtasts, tlsrpt).
55 # (optional)
56 PackageLogLevels:
57 x:
58
59 # User to switch to after binding to all sockets as root. Default: mox. If the
60 # value is not a known user, it is parsed as integer and used as uid and gid.
61 # (optional)
62 User:
63
64 # If true, do not automatically fix file permissions when starting up. By default,
65 # mox will ensure reasonable owner/permissions on the working, data and config
66 # directories (and files), and mox binary (if present). (optional)
67 NoFixPermissions: false
68
69 # Full hostname of system, e.g. mail.<domain>
70 Hostname:
71
72 # If enabled, a single DNS TXT lookup of _updates.xmox.nl is done every 24h to
73 # check for a new release. Each time a new release is found, a changelog is
74 # fetched from https://updates.xmox.nl/changelog and delivered to the postmaster
75 # mailbox. (optional)
76 CheckUpdates: false
77
78 # In pedantic mode protocol violations (that happen in the wild) for SMTP/IMAP/etc
79 # result in errors instead of accepting such behaviour. (optional)
80 Pedantic: false
81
82 # Global TLS configuration, e.g. for additional Certificate Authorities. Used for
83 # outgoing SMTP connections, HTTPS requests. (optional)
84 TLS:
85
86 # (optional)
87 CA:
88
89 # (optional)
90 AdditionalToSystem: false
91
92 # (optional)
93 CertFiles:
94 -
95
96 # Automatic TLS configuration with ACME, e.g. through Let's Encrypt. The key is a
97 # name referenced in TLS configs, e.g. letsencrypt. (optional)
98 ACME:
99 x:
100
101 # For letsencrypt, use https://acme-v02.api.letsencrypt.org/directory.
102 DirectoryURL:
103
104 # How long before expiration to renew the certificate. Default is 30 days.
105 # (optional)
106 RenewBefore: 0s
107
108 # Email address to register at ACME provider. The provider can email you when
109 # certificates are about to expire. If you configure an address for which email is
110 # delivered by this server, keep in mind that TLS misconfigurations could result
111 # in such notification emails not arriving.
112 ContactEmail:
113
114 # TLS port for ACME validation, 443 by default. You should only override this if
115 # you cannot listen on port 443 directly. ACME will make requests to port 443, so
116 # you'll have to add an external mechanism to get the tls connection here, e.g. by
117 # configuring firewall-level port forwarding. Validation over the https port uses
118 # tls-alpn-01 with application-layer protocol negotiation, which essentially means
119 # the original tls connection must make it here unmodified, an https reverse proxy
120 # will not work. (optional)
121 Port: 0
122
123 # If set, used for suggested CAA DNS records, for restricting TLS certificate
124 # issuance to a Certificate Authority. If empty and DirectyURL is for Let's
125 # Encrypt, this value is set automatically to letsencrypt.org. (optional)
126 IssuerDomainName:
127
128 # ACME providers can require that a request for a new ACME account reference an
129 # existing non-ACME account known to the provider. External account binding
130 # references that account by a key id, and authorizes new ACME account requests by
131 # signing it with a key known both by the ACME client and ACME provider.
132 # (optional)
133 ExternalAccountBinding:
134
135 # Key identifier, from ACME provider.
136 KeyID:
137
138 # File containing the base64url-encoded key used to sign account requests with
139 # external account binding. The ACME provider will verify the account request is
140 # correctly signed by the key. File is evaluated relative to the directory of
141 # mox.conf.
142 KeyFile:
143
144 # File containing hash of admin password, for authentication in the web admin
145 # pages (if enabled). (optional)
146 AdminPasswordFile:
147
148 # Listeners are groups of IP addresses and services enabled on those IP addresses,
149 # such as SMTP/IMAP or internal endpoints for administration or Prometheus
150 # metrics. All listeners with SMTP/IMAP services enabled will serve all configured
151 # domains. If the listener is named 'public', it will get a few helpful additional
152 # configuration checks, for acme automatic tls certificates and monitoring of ips
153 # in dnsbls if those are configured.
154 Listeners:
155 x:
156
157 # Use 0.0.0.0 to listen on all IPv4 and/or :: to listen on all IPv6 addresses, but
158 # it is better to explicitly specify the IPs you want to use for email, as mox
159 # will make sure outgoing connections will only be made from one of those IPs. If
160 # both outgoing IPv4 and IPv6 connectivity is possible, and only one family has
161 # explicitly configured addresses, both address families are still used for
162 # outgoing connections. Use the "direct" transport to limit address families for
163 # outgoing connections.
164 IPs:
165 -
166
167 # If set, the mail server is configured behind a NAT and field IPs are internal
168 # instead of the public IPs, while NATIPs lists the public IPs. Used during
169 # IP-related DNS self-checks, such as for iprev, mx, spf, autoconfig,
170 # autodiscover, and for autotls. (optional)
171 NATIPs:
172 -
173
174 # Deprecated, use NATIPs instead. If set, IPs are not the public IPs, but are
175 # NATed. Skips IP-related DNS self-checks. (optional)
176 IPsNATed: false
177
178 # If empty, the config global Hostname is used. The internal services webadmin,
179 # webaccount, webmail and webapi only match requests to IPs, this hostname,
180 # "localhost". All except webadmin also match for any client settings domain.
181 # (optional)
182 Hostname:
183
184 # For SMTP/IMAP STARTTLS, direct TLS and HTTPS connections. (optional)
185 TLS:
186
187 # Name of provider from top-level configuration to use for ACME, e.g. letsencrypt.
188 # (optional)
189 ACME:
190
191 # Keys and certificates to use for this listener. The files are opened by the
192 # privileged root process and passed to the unprivileged mox process, so no
193 # special permissions are required on the files. If the private key will not be
194 # replaced when refreshing certificates, also consider adding the private key to
195 # HostPrivateKeyFiles and configuring DANE TLSA DNS records. (optional)
196 KeyCerts:
197 -
198
199 # Certificate including intermediate CA certificates, in PEM format.
200 CertFile:
201
202 # Private key for certificate, in PEM format. PKCS8 is recommended, but PKCS1 and
203 # EC private keys are recognized as well.
204 KeyFile:
205
206 # Minimum TLS version. Default: TLSv1.2. (optional)
207 MinVersion:
208
209 # Private keys used for ACME certificates. Specified explicitly so DANE TLSA DNS
210 # records can be generated, even before the certificates are requested. DANE is a
211 # mechanism to authenticate remote TLS certificates based on a public key or
212 # certificate specified in DNS, protected with DNSSEC. DANE is opportunistic and
213 # attempted when delivering SMTP with STARTTLS. The private key files must be in
214 # PEM format. PKCS8 is recommended, but PKCS1 and EC private keys are recognized
215 # as well. Only RSA 2048 bit and ECDSA P-256 keys are currently used. The first of
216 # each is used when requesting new certificates through ACME. (optional)
217 HostPrivateKeyFiles:
218 -
219
220 # Maximum size in bytes for incoming and outgoing messages. Default is 100MB.
221 # (optional)
222 SMTPMaxMessageSize: 0
223
224 # (optional)
225 SMTP:
226 Enabled: false
227
228 # Default 25. (optional)
229 Port: 0
230
231 # Do not offer STARTTLS to secure the connection. Not recommended. (optional)
232 NoSTARTTLS: false
233
234 # Do not accept incoming messages if STARTTLS is not active. Consider using in
235 # combination with an MTA-STS policy and/or DANE. A remote SMTP server may not
236 # support TLS and may not be able to deliver messages. Incoming messages for TLS
237 # reporting addresses ignore this setting and do not require TLS. (optional)
238 RequireSTARTTLS: false
239
240 # Do not announce the REQUIRETLS SMTP extension. Messages delivered using the
241 # REQUIRETLS extension should only be distributed onwards to servers also
242 # implementing the REQUIRETLS extension. In some situations, such as hosting
243 # mailing lists, this may not be feasible due to lack of support for the extension
244 # by mailing list subscribers. (optional)
245 NoRequireTLS: false
246
247 # Addresses of DNS block lists for incoming messages. Block lists are only
248 # consulted for connections/messages without enough reputation to make an
249 # accept/reject decision. This prevents sending IPs of all communications to the
250 # block list provider. If any of the listed DNSBLs contains a requested IP
251 # address, the message is rejected as spam. The DNSBLs are checked for healthiness
252 # before use, at most once per 4 hours. IPs we can send from are periodically
253 # checked for being in the configured DNSBLs. See MonitorDNSBLs in domains.conf to
254 # only monitor IPs we send from, without using those DNSBLs for incoming messages.
255 # Example DNSBLs: sbl.spamhaus.org, bl.spamcop.net. See
256 # https://www.spamhaus.org/sbl/ and https://www.spamcop.net/ for more information
257 # and terms of use. (optional)
258 DNSBLs:
259 -
260
261 # Delay before accepting a message from a first-time sender for the destination
262 # account. Default: 15s. (optional)
263 FirstTimeSenderDelay: 0s
264
265 # Override default setting for enabling TLS session tickets. Disabling session
266 # tickets may work around TLS interoperability issues. (optional)
267 TLSSessionTicketsDisabled: false
268
269 # SMTP for submitting email, e.g. by email applications. Starts out in plain text,
270 # can be upgraded to TLS with the STARTTLS command. Prefer using Submissions which
271 # is always a TLS connection. (optional)
272 Submission:
273 Enabled: false
274
275 # Default 587. (optional)
276 Port: 0
277
278 # Do not require STARTTLS. Since users must login, this means password may be sent
279 # without encryption. Not recommended. (optional)
280 NoRequireSTARTTLS: false
281
282 # SMTP over TLS for submitting email, by email applications. Requires a TLS
283 # config. (optional)
284 Submissions:
285 Enabled: false
286
287 # Default 465. (optional)
288 Port: 0
289
290 # IMAP for reading email, by email applications. Starts out in plain text, can be
291 # upgraded to TLS with the STARTTLS command. Prefer using IMAPS instead which is
292 # always a TLS connection. (optional)
293 IMAP:
294 Enabled: false
295
296 # Default 143. (optional)
297 Port: 0
298
299 # Enable this only when the connection is otherwise encrypted (e.g. through a
300 # VPN). (optional)
301 NoRequireSTARTTLS: false
302
303 # IMAP over TLS for reading email, by email applications. Requires a TLS config.
304 # (optional)
305 IMAPS:
306 Enabled: false
307
308 # Default 993. (optional)
309 Port: 0
310
311 # Account web interface, for email users wanting to change their accounts, e.g.
312 # set new password, set new delivery rulesets. Default path is /. (optional)
313 AccountHTTP:
314 Enabled: false
315
316 # Default 80 for HTTP and 443 for HTTPS. See Hostname at Listener for hostname
317 # matching behaviour. (optional)
318 Port: 0
319
320 # Path to serve requests on. (optional)
321 Path:
322
323 # If set, X-Forwarded-* headers are used for the remote IP address for rate
324 # limiting and for the "secure" status of cookies. (optional)
325 Forwarded: false
326
327 # Account web interface listener like AccountHTTP, but for HTTPS. Requires a TLS
328 # config. (optional)
329 AccountHTTPS:
330 Enabled: false
331
332 # Default 80 for HTTP and 443 for HTTPS. See Hostname at Listener for hostname
333 # matching behaviour. (optional)
334 Port: 0
335
336 # Path to serve requests on. (optional)
337 Path:
338
339 # If set, X-Forwarded-* headers are used for the remote IP address for rate
340 # limiting and for the "secure" status of cookies. (optional)
341 Forwarded: false
342
343 # Admin web interface, for managing domains, accounts, etc. Default path is
344 # /admin/. Preferably only enable on non-public IPs. Hint: use 'ssh -L
345 # 8080:localhost:80 you@yourmachine' and open http://localhost:8080/admin/, or set
346 # up a tunnel (e.g. WireGuard) and add its IP to the mox 'internal' listener.
347 # (optional)
348 AdminHTTP:
349 Enabled: false
350
351 # Default 80 for HTTP and 443 for HTTPS. See Hostname at Listener for hostname
352 # matching behaviour. (optional)
353 Port: 0
354
355 # Path to serve requests on. (optional)
356 Path:
357
358 # If set, X-Forwarded-* headers are used for the remote IP address for rate
359 # limiting and for the "secure" status of cookies. (optional)
360 Forwarded: false
361
362 # Admin web interface listener like AdminHTTP, but for HTTPS. Requires a TLS
363 # config. (optional)
364 AdminHTTPS:
365 Enabled: false
366
367 # Default 80 for HTTP and 443 for HTTPS. See Hostname at Listener for hostname
368 # matching behaviour. (optional)
369 Port: 0
370
371 # Path to serve requests on. (optional)
372 Path:
373
374 # If set, X-Forwarded-* headers are used for the remote IP address for rate
375 # limiting and for the "secure" status of cookies. (optional)
376 Forwarded: false
377
378 # Webmail client, for reading email. Default path is /webmail/. (optional)
379 WebmailHTTP:
380 Enabled: false
381
382 # Default 80 for HTTP and 443 for HTTPS. See Hostname at Listener for hostname
383 # matching behaviour. (optional)
384 Port: 0
385
386 # Path to serve requests on. (optional)
387 Path:
388
389 # If set, X-Forwarded-* headers are used for the remote IP address for rate
390 # limiting and for the "secure" status of cookies. (optional)
391 Forwarded: false
392
393 # Webmail client, like WebmailHTTP, but for HTTPS. Requires a TLS config.
394 # (optional)
395 WebmailHTTPS:
396 Enabled: false
397
398 # Default 80 for HTTP and 443 for HTTPS. See Hostname at Listener for hostname
399 # matching behaviour. (optional)
400 Port: 0
401
402 # Path to serve requests on. (optional)
403 Path:
404
405 # If set, X-Forwarded-* headers are used for the remote IP address for rate
406 # limiting and for the "secure" status of cookies. (optional)
407 Forwarded: false
408
409 # Like WebAPIHTTP, but with plain HTTP, without TLS. (optional)
410 WebAPIHTTP:
411 Enabled: false
412
413 # Default 80 for HTTP and 443 for HTTPS. See Hostname at Listener for hostname
414 # matching behaviour. (optional)
415 Port: 0
416
417 # Path to serve requests on. (optional)
418 Path:
419
420 # If set, X-Forwarded-* headers are used for the remote IP address for rate
421 # limiting and for the "secure" status of cookies. (optional)
422 Forwarded: false
423
424 # WebAPI, a simple HTTP/JSON-based API for email, with HTTPS (requires a TLS
425 # config). Default path is /webapi/. (optional)
426 WebAPIHTTPS:
427 Enabled: false
428
429 # Default 80 for HTTP and 443 for HTTPS. See Hostname at Listener for hostname
430 # matching behaviour. (optional)
431 Port: 0
432
433 # Path to serve requests on. (optional)
434 Path:
435
436 # If set, X-Forwarded-* headers are used for the remote IP address for rate
437 # limiting and for the "secure" status of cookies. (optional)
438 Forwarded: false
439
440 # Serve prometheus metrics, for monitoring. You should not enable this on a public
441 # IP. (optional)
442 MetricsHTTP:
443 Enabled: false
444
445 # Default 8010. (optional)
446 Port: 0
447
448 # Serve /debug/pprof/ for profiling a running mox instance. Do not enable this on
449 # a public IP! (optional)
450 PprofHTTP:
451 Enabled: false
452
453 # Default 8011. (optional)
454 Port: 0
455
456 # Serve autoconfiguration/autodiscovery to simplify configuring email
457 # applications, will use port 443. Requires a TLS config. (optional)
458 AutoconfigHTTPS:
459 Enabled: false
460
461 # TLS port, 443 by default. You should only override this if you cannot listen on
462 # port 443 directly. Autoconfig requests will be made to port 443, so you'll have
463 # to add an external mechanism to get the connection here, e.g. by configuring
464 # port forwarding. (optional)
465 Port: 0
466
467 # If set, plain HTTP instead of HTTPS is spoken on the configured port. Can be
468 # useful when the autoconfig domain is reverse proxied. (optional)
469 NonTLS: false
470
471 # Serve MTA-STS policies describing SMTP TLS requirements. Requires a TLS config.
472 # (optional)
473 MTASTSHTTPS:
474 Enabled: false
475
476 # TLS port, 443 by default. You should only override this if you cannot listen on
477 # port 443 directly. MTA-STS requests will be made to port 443, so you'll have to
478 # add an external mechanism to get the connection here, e.g. by configuring port
479 # forwarding. (optional)
480 Port: 0
481
482 # If set, plain HTTP instead of HTTPS is spoken on the configured port. Can be
483 # useful when the mta-sts domain is reverse proxied. (optional)
484 NonTLS: false
485
486 # All configured WebHandlers will serve on an enabled listener. (optional)
487 WebserverHTTP:
488 Enabled: false
489
490 # Port for plain HTTP (non-TLS) webserver. (optional)
491 Port: 0
492
493 # All configured WebHandlers will serve on an enabled listener. Either ACME must
494 # be configured, or for each WebHandler domain a TLS certificate must be
495 # configured. (optional)
496 WebserverHTTPS:
497 Enabled: false
498
499 # Port for HTTPS webserver. (optional)
500 Port: 0
501
502 # Destination for emails delivered to postmaster addresses: a plain 'postmaster'
503 # without domain, 'postmaster@<hostname>' (also for each listener with SMTP
504 # enabled), and as fallback for each domain without explicitly configured
505 # postmaster destination.
506 Postmaster:
507 Account:
508
509 # E.g. Postmaster or Inbox.
510 Mailbox:
511
512 # Destination for per-host TLS reports (TLSRPT). TLS reports can be per recipient
513 # domain (for MTA-STS), or per MX host (for DANE). The per-domain TLS reporting
514 # configuration is in domains.conf. This is the TLS reporting configuration for
515 # this host. If absent, no host-based TLSRPT address is configured, and no host
516 # TLSRPT DNS record is suggested. (optional)
517 HostTLSRPT:
518
519 # Account to deliver TLS reports to. Typically same account as for postmaster.
520 Account:
521
522 # Mailbox to deliver TLS reports to. Recommended value: TLSRPT.
523 Mailbox:
524
525 # Localpart at hostname to accept TLS reports at. Recommended value: tls-reports.
526 Localpart:
527
528 # Mailboxes to create for new accounts. Inbox is always created. Mailboxes can be
529 # given a 'special-use' role, which are understood by most mail clients. If
530 # absent/empty, the following mailboxes are created: Sent, Archive, Trash, Drafts
531 # and Junk. (optional)
532 InitialMailboxes:
533
534 # Special-use roles to mailbox to create. (optional)
535 SpecialUse:
536
537 # (optional)
538 Sent:
539
540 # (optional)
541 Archive:
542
543 # (optional)
544 Trash:
545
546 # (optional)
547 Draft:
548
549 # (optional)
550 Junk:
551
552 # Regular, non-special-use mailboxes to create. (optional)
553 Regular:
554 -
555
556 # Deprecated in favor of InitialMailboxes. Mailboxes to create when adding an
557 # account. Inbox is always created. If no mailboxes are specified, the following
558 # are automatically created: Sent, Archive, Trash, Drafts and Junk. (optional)
559 DefaultMailboxes:
560 -
561
562 # Transport are mechanisms for delivering messages. Transports can be referenced
563 # from Routes in accounts, domains and the global configuration. There is always
564 # an implicit/fallback delivery transport doing direct delivery with SMTP from the
565 # outgoing message queue. Transports are typically only configured when using
566 # smarthosts, i.e. when delivering through another SMTP server. Zero or one
567 # transport methods must be set in a transport, never multiple. When using an
568 # external party to send email for a domain, keep in mind you may have to add
569 # their IP address to your domain's SPF record, and possibly additional DKIM
570 # records. (optional)
571 Transports:
572 x:
573
574 # Submission SMTP over a TLS connection to submit email to a remote queue.
575 # (optional)
576 Submissions:
577
578 # Host name to connect to and for verifying its TLS certificate.
579 Host:
580
581 # If unset or 0, the default port for submission(s)/smtp is used: 25 for SMTP, 465
582 # for submissions (with TLS), 587 for submission (possibly with STARTTLS).
583 # (optional)
584 Port: 0
585
586 # If set an unverifiable remote TLS certificate during STARTTLS is accepted.
587 # (optional)
588 STARTTLSInsecureSkipVerify: false
589
590 # If set for submission or smtp transport, do not attempt STARTTLS on the
591 # connection. Authentication credentials and messages will be transferred in clear
592 # text. (optional)
593 NoSTARTTLS: false
594
595 # If set, authentication credentials for the remote server. (optional)
596 Auth:
597 Username:
598 Password:
599
600 # Allowed authentication mechanisms. Defaults to SCRAM-SHA-256-PLUS,
601 # SCRAM-SHA-256, SCRAM-SHA-1-PLUS, SCRAM-SHA-1, CRAM-MD5. Not included by default:
602 # PLAIN. Specify the strongest mechanism known to be implemented by the server to
603 # prevent mechanism downgrade attacks. (optional)
604 Mechanisms:
605 -
606
607 # Submission SMTP over a plain TCP connection (possibly with STARTTLS) to submit
608 # email to a remote queue. (optional)
609 Submission:
610
611 # Host name to connect to and for verifying its TLS certificate.
612 Host:
613
614 # If unset or 0, the default port for submission(s)/smtp is used: 25 for SMTP, 465
615 # for submissions (with TLS), 587 for submission (possibly with STARTTLS).
616 # (optional)
617 Port: 0
618
619 # If set an unverifiable remote TLS certificate during STARTTLS is accepted.
620 # (optional)
621 STARTTLSInsecureSkipVerify: false
622
623 # If set for submission or smtp transport, do not attempt STARTTLS on the
624 # connection. Authentication credentials and messages will be transferred in clear
625 # text. (optional)
626 NoSTARTTLS: false
627
628 # If set, authentication credentials for the remote server. (optional)
629 Auth:
630 Username:
631 Password:
632
633 # Allowed authentication mechanisms. Defaults to SCRAM-SHA-256-PLUS,
634 # SCRAM-SHA-256, SCRAM-SHA-1-PLUS, SCRAM-SHA-1, CRAM-MD5. Not included by default:
635 # PLAIN. Specify the strongest mechanism known to be implemented by the server to
636 # prevent mechanism downgrade attacks. (optional)
637 Mechanisms:
638 -
639
640 # SMTP over a plain connection (possibly with STARTTLS), typically for
641 # old-fashioned unauthenticated relaying to a remote queue. (optional)
642 SMTP:
643
644 # Host name to connect to and for verifying its TLS certificate.
645 Host:
646
647 # If unset or 0, the default port for submission(s)/smtp is used: 25 for SMTP, 465
648 # for submissions (with TLS), 587 for submission (possibly with STARTTLS).
649 # (optional)
650 Port: 0
651
652 # If set an unverifiable remote TLS certificate during STARTTLS is accepted.
653 # (optional)
654 STARTTLSInsecureSkipVerify: false
655
656 # If set for submission or smtp transport, do not attempt STARTTLS on the
657 # connection. Authentication credentials and messages will be transferred in clear
658 # text. (optional)
659 NoSTARTTLS: false
660
661 # If set, authentication credentials for the remote server. (optional)
662 Auth:
663 Username:
664 Password:
665
666 # Allowed authentication mechanisms. Defaults to SCRAM-SHA-256-PLUS,
667 # SCRAM-SHA-256, SCRAM-SHA-1-PLUS, SCRAM-SHA-1, CRAM-MD5. Not included by default:
668 # PLAIN. Specify the strongest mechanism known to be implemented by the server to
669 # prevent mechanism downgrade attacks. (optional)
670 Mechanisms:
671 -
672
673 # Like regular direct delivery, but makes outgoing connections through a SOCKS
674 # proxy. (optional)
675 Socks:
676
677 # Address of SOCKS proxy, of the form host:port or ip:port.
678 Address:
679
680 # IP addresses connections from the SOCKS server will originate from. This IP
681 # addresses should be configured in the SPF record (keep in mind DNS record time
682 # to live (TTL) when adding a SOCKS proxy). Reverse DNS should be set up for these
683 # address, resolving to RemoteHostname. These are typically the IPv4 and IPv6
684 # address for the host in the Address field.
685 RemoteIPs:
686 -
687
688 # Hostname belonging to RemoteIPs. This name is used during in SMTP EHLO. This is
689 # typically the hostname of the host in the Address field.
690 RemoteHostname:
691
692 # Like regular direct delivery, but allows to tweak outgoing connections.
693 # (optional)
694 Direct:
695
696 # If set, outgoing SMTP connections will *NOT* use IPv4 addresses to connect to
697 # remote SMTP servers. (optional)
698 DisableIPv4: false
699
700 # If set, outgoing SMTP connections will *NOT* use IPv6 addresses to connect to
701 # remote SMTP servers. (optional)
702 DisableIPv6: false
703
704 # Do not send DMARC reports (aggregate only). By default, aggregate reports on
705 # DMARC evaluations are sent to domains if their DMARC policy requests them.
706 # Reports are sent at whole hours, with a minimum of 1 hour and maximum of 24
707 # hours, rounded up so a whole number of intervals cover 24 hours, aligned at
708 # whole days in UTC. Reports are sent from the postmaster@<mailhostname> address.
709 # (optional)
710 NoOutgoingDMARCReports: false
711
712 # Do not send TLS reports. By default, reports about failed SMTP STARTTLS
713 # connections and related MTA-STS/DANE policies are sent to domains if their
714 # TLSRPT DNS record requests them. Reports covering a 24 hour UTC interval are
715 # sent daily. Reports are sent from the postmaster address of the configured
716 # domain the mailhostname is in. If there is no such domain, or it does not have
717 # DKIM configured, no reports are sent. (optional)
718 NoOutgoingTLSReports: false
719
720 # Also send TLS reports if there were no SMTP STARTTLS connection failures. By
721 # default, reports are only sent when at least one failure occurred. If a report
722 # is sent, it does always include the successful connection counts as well.
723 # (optional)
724 OutgoingTLSReportsForAllSuccess: false
725
726 # Default maximum total message size in bytes for each individual account, only
727 # applicable if greater than zero. Can be overridden per account. Attempting to
728 # add new messages to an account beyond its maximum total size will result in an
729 # error. Useful to prevent a single account from filling storage. The quota only
730 # applies to the email message files, not to any file system overhead and also not
731 # the message index database file (account for approximately 15% overhead).
732 # (optional)
733 QuotaMessageSize: 0
734
735# domains.conf
736
737 # NOTE: This config file is in 'sconf' format. Indent with tabs. Comments must be
738 # on their own line, they don't end a line. Do not escape or quote strings.
739 # Details: https://pkg.go.dev/github.com/mjl-/sconf.
740
741
742 # Domains for which email is accepted. For internationalized domains, use their
743 # IDNA names in UTF-8.
744 Domains:
745 x:
746
747 # Free-form description of domain. (optional)
748 Description:
749
750 # Hostname for client settings instead of the mail server hostname. E.g.
751 # mail.<domain>. For future migration to another mail operator without requiring
752 # all clients to update their settings, it is convenient to have client settings
753 # that reference a subdomain of the hosted domain instead of the hostname of the
754 # server where the mail is currently hosted. If empty, the hostname of the mail
755 # server is used for client configurations. Unicode name. (optional)
756 ClientSettingsDomain:
757
758 # If not empty, only the string before the separator is used to for email delivery
759 # decisions. For example, if set to "+", you+anything@example.com will be
760 # delivered to you@example.com. (optional)
761 LocalpartCatchallSeparator:
762
763 # If set, upper/lower case is relevant for email delivery. (optional)
764 LocalpartCaseSensitive: false
765
766 # With DKIM signing, a domain is taking responsibility for (content of) emails it
767 # sends, letting receiving mail servers build up a (hopefully positive) reputation
768 # of the domain, which can help with mail delivery. (optional)
769 DKIM:
770
771 # Emails can be DKIM signed. Config parameters are per selector. A DNS record must
772 # be created for each selector. Add the name to Sign to use the selector for
773 # signing messages.
774 Selectors:
775 x:
776
777 # sha256 (default) or (older, not recommended) sha1. (optional)
778 Hash:
779
780 # (optional)
781 Canonicalization:
782
783 # If set, some modifications to the headers (mostly whitespace) are allowed.
784 HeaderRelaxed: false
785
786 # If set, some whitespace modifications to the message body are allowed.
787 BodyRelaxed: false
788
789 # Headers to sign with DKIM. If empty, a reasonable default set of headers is
790 # selected. (optional)
791 Headers:
792 -
793
794 # If set, don't prevent duplicate headers from being added. Not recommended.
795 # (optional)
796 DontSealHeaders: false
797
798 # Period a signature is valid after signing, as duration, e.g. 72h. The period
799 # should be enough for delivery at the final destination, potentially with several
800 # hops/relays. In the order of days at least. (optional)
801 Expiration:
802
803 # Either an RSA or ed25519 private key file in PKCS8 PEM form.
804 PrivateKeyFile:
805
806 # List of selectors that emails will be signed with. (optional)
807 Sign:
808 -
809
810 # With DMARC, a domain publishes, in DNS, a policy on how other mail servers
811 # should handle incoming messages with the From-header matching this domain and/or
812 # subdomain (depending on the configured alignment). Receiving mail servers use
813 # this to build up a reputation of this domain, which can help with mail delivery.
814 # A domain can also publish an email address to which reports about DMARC
815 # verification results can be sent by verifying mail servers, useful for
816 # monitoring. Incoming DMARC reports are automatically parsed, validated, added to
817 # metrics and stored in the reporting database for later display in the admin web
818 # pages. (optional)
819 DMARC:
820
821 # Address-part before the @ that accepts DMARC reports. Must be
822 # non-internationalized. Recommended value: dmarc-reports.
823 Localpart:
824
825 # Alternative domain for reporting address, for incoming reports. Typically empty,
826 # causing the domain wherein this config exists to be used. Can be used to receive
827 # reports for domains that aren't fully hosted on this server. Configure such a
828 # domain as a hosted domain without making all the DNS changes, and configure this
829 # field with a domain that is fully hosted on this server, so the localpart and
830 # the domain of this field form a reporting address. Then only update the DMARC
831 # DNS record for the not fully hosted domain, ensuring the reporting address is
832 # specified in its "rua" field as shown in the suggested DNS settings. Unicode
833 # name. (optional)
834 Domain:
835
836 # Account to deliver to.
837 Account:
838
839 # Mailbox to deliver to, e.g. DMARC.
840 Mailbox:
841
842 # MTA-STS is a mechanism that allows publishing a policy with requirements for
843 # WebPKI-verified SMTP STARTTLS connections for email delivered to a domain.
844 # Existence of a policy is announced in a DNS TXT record (often
845 # unprotected/unverified, MTA-STS's weak spot). If a policy exists, it is fetched
846 # with a WebPKI-verified HTTPS request. The policy can indicate that
847 # WebPKI-verified SMTP STARTTLS is required, and which MX hosts (optionally with a
848 # wildcard pattern) are allowd. MX hosts to deliver to are still taken from DNS
849 # (again, not necessarily protected/verified), but messages will only be delivered
850 # to domains matching the MX hosts from the published policy. Mail servers look up
851 # the MTA-STS policy when first delivering to a domain, then keep a cached copy,
852 # periodically checking the DNS record if a new policy is available, and fetching
853 # and caching it if so. To update a policy, first serve a new policy with an
854 # updated policy ID, then update the DNS record (not the other way around). To
855 # remove an enforced policy, publish an updated policy with mode "none" for a long
856 # enough period so all cached policies have been refreshed (taking DNS TTL and
857 # policy max age into account), then remove the policy from DNS, wait for TTL to
858 # expire, and stop serving the policy. (optional)
859 MTASTS:
860
861 # Policies are versioned. The version must be specified in the DNS record. If you
862 # change a policy, first change it here to update the served policy, then update
863 # the DNS record with the updated policy ID.
864 PolicyID:
865
866 # If set to "enforce", a remote SMTP server will not deliver email to us if it
867 # cannot make a WebPKI-verified SMTP STARTTLS connection. In mode "testing",
868 # deliveries can be done without verified TLS, but errors will be reported through
869 # TLS reporting. In mode "none", verified TLS is not required, used for phasing
870 # out an MTA-STS policy.
871 Mode:
872
873 # How long a remote mail server is allowed to cache a policy. Typically 1 or
874 # several weeks.
875 MaxAge: 0s
876
877 # List of server names allowed for SMTP. If empty, the configured hostname is set.
878 # Host names can contain a wildcard (*) as a leading label (matching a single
879 # label, e.g. *.example matches host.example, not sub.host.example). (optional)
880 MX:
881 -
882
883 # With TLSRPT a domain specifies in DNS where reports about encountered SMTP TLS
884 # behaviour should be sent. Useful for monitoring. Incoming TLS reports are
885 # automatically parsed, validated, added to metrics and stored in the reporting
886 # database for later display in the admin web pages. (optional)
887 TLSRPT:
888
889 # Address-part before the @ that accepts TLSRPT reports. Recommended value:
890 # tls-reports.
891 Localpart:
892
893 # Alternative domain for reporting address, for incoming reports. Typically empty,
894 # causing the domain wherein this config exists to be used. Can be used to receive
895 # reports for domains that aren't fully hosted on this server. Configure such a
896 # domain as a hosted domain without making all the DNS changes, and configure this
897 # field with a domain that is fully hosted on this server, so the localpart and
898 # the domain of this field form a reporting address. Then only update the TLSRPT
899 # DNS record for the not fully hosted domain, ensuring the reporting address is
900 # specified in its "rua" field as shown in the suggested DNS settings. Unicode
901 # name. (optional)
902 Domain:
903
904 # Account to deliver to.
905 Account:
906
907 # Mailbox to deliver to, e.g. TLSRPT.
908 Mailbox:
909
910 # Routes for delivering outgoing messages through the queue. Each delivery attempt
911 # evaluates account routes, these domain routes and finally global routes. The
912 # transport of the first matching route is used in the delivery attempt. If no
913 # routes match, which is the default with no configured routes, messages are
914 # delivered directly from the queue. (optional)
915 Routes:
916 -
917
918 # Matches if the envelope from domain matches one of the configured domains, or if
919 # the list is empty. If a domain starts with a dot, prefixes of the domain also
920 # match. (optional)
921 FromDomain:
922 -
923
924 # Like FromDomain, but matching against the envelope to domain. (optional)
925 ToDomain:
926 -
927
928 # Matches if at least this many deliveries have already been attempted. This can
929 # be used to attempt sending through a smarthost when direct delivery has failed
930 # for several times. (optional)
931 MinimumAttempts: 0
932 Transport:
933
934 # Aliases that cause messages to be delivered to one or more locally configured
935 # addresses. Keys are localparts (encoded, as they appear in email addresses).
936 # (optional)
937 Aliases:
938 x:
939
940 # Expanded addresses to deliver to. These must currently be of addresses of local
941 # accounts. To prevent duplicate messages, a member address that is also an
942 # explicit recipient in the SMTP transaction will only have the message delivered
943 # once. If the address in the message From header is a member, that member also
944 # won't receive the message.
945 Addresses:
946 -
947
948 # If true, anyone can send messages to the list. Otherwise only members, based on
949 # message From address, which is assumed to be DMARC-like-verified. (optional)
950 PostPublic: false
951
952 # If true, members can see addresses of members. (optional)
953 ListMembers: false
954
955 # If true, members are allowed to send messages with this alias address in the
956 # message From header. (optional)
957 AllowMsgFrom: false
958
959 # Accounts represent mox users, each with a password and email address(es) to
960 # which email can be delivered (possibly at different domains). Each account has
961 # its own on-disk directory holding its messages and index database. An account
962 # name is not an email address.
963 Accounts:
964 x:
965
966 # Webhooks for events about outgoing deliveries. (optional)
967 OutgoingWebhook:
968
969 # URL to POST webhooks.
970 URL:
971
972 # If not empty, value of Authorization header to add to HTTP requests. (optional)
973 Authorization:
974
975 # Events to send outgoing delivery notifications for. If absent, all events are
976 # sent. Valid values: delivered, suppressed, delayed, failed, relayed, expanded,
977 # canceled, unrecognized. (optional)
978 Events:
979 -
980
981 # Webhooks for events about incoming deliveries over SMTP. (optional)
982 IncomingWebhook:
983
984 # URL to POST webhooks to for incoming deliveries over SMTP.
985 URL:
986
987 # If not empty, value of Authorization header to add to HTTP requests. (optional)
988 Authorization:
989
990 # Login addresses that cause outgoing email to be sent with SMTP MAIL FROM
991 # addresses with a unique id after the localpart catchall separator (which must be
992 # enabled when addresses are specified here). Any delivery status notifications
993 # (DSN, e.g. for bounces), can be related to the original message and recipient
994 # with unique id's. You can login to an account with any valid email address,
995 # including variants with the localpart catchall separator. You can use this
996 # mechanism to both send outgoing messages with and without unique fromid for a
997 # given email address. With the webapi and webmail, a unique id will be generated.
998 # For submission, the id from the SMTP MAIL FROM command is used if present, and a
999 # unique id is generated otherwise. (optional)
1000 FromIDLoginAddresses:
1001 -
1002
1003 # Period to keep messages retired from the queue (delivered or failed) around.
1004 # Keeping retired messages is useful for maintaining the suppression list for
1005 # transactional email, for matching incoming DSNs to sent messages, and for
1006 # debugging. The time at which to clean up (remove) is calculated at retire time.
1007 # E.g. 168h (1 week). (optional)
1008 KeepRetiredMessagePeriod: 0s
1009
1010 # Period to keep webhooks retired from the queue (delivered or failed) around.
1011 # Useful for debugging. The time at which to clean up (remove) is calculated at
1012 # retire time. E.g. 168h (1 week). (optional)
1013 KeepRetiredWebhookPeriod: 0s
1014
1015 # Default domain for account. Deprecated behaviour: If a destination is not a full
1016 # address but only a localpart, this domain is added to form a full address.
1017 Domain:
1018
1019 # Free form description, e.g. full name or alternative contact info. (optional)
1020 Description:
1021
1022 # Full name, to use in message From header when composing messages in webmail. Can
1023 # be overridden per destination. (optional)
1024 FullName:
1025
1026 # Destinations, keys are email addresses (with IDNA domains). All destinations are
1027 # allowed for logging in with IMAP/SMTP/webmail. If no destinations are
1028 # configured, the account can not login. If the address is of the form '@domain',
1029 # i.e. with localpart missing, it serves as a catchall for the domain, matching
1030 # all messages that are not explicitly configured. Deprecated behaviour: If the
1031 # address is not a full address but a localpart, it is combined with Domain to
1032 # form a full address. (optional)
1033 Destinations:
1034 x:
1035
1036 # Mailbox to deliver to if none of Rulesets match. Default: Inbox. (optional)
1037 Mailbox:
1038
1039 # Delivery rules based on message and SMTP transaction. You may want to match each
1040 # mailing list by SMTP MailFrom address, VerifiedDomain and/or List-ID header
1041 # (typically <listname.example.org> if the list address is listname@example.org),
1042 # delivering them to their own mailbox. (optional)
1043 Rulesets:
1044 -
1045
1046 # Matches if this regular expression matches (a substring of) the SMTP MAIL FROM
1047 # address (not the message From-header). E.g. '^user@example\.org$'. (optional)
1048 SMTPMailFromRegexp:
1049
1050 # Matches if this regular expression matches (a substring of) the single address
1051 # in the message From header. (optional)
1052 MsgFromRegexp:
1053
1054 # Matches if this domain matches an SPF- and/or DKIM-verified (sub)domain.
1055 # (optional)
1056 VerifiedDomain:
1057
1058 # Matches if these header field/value regular expressions all match (substrings
1059 # of) the message headers. Header fields and valuees are converted to lower case
1060 # before matching. Whitespace is trimmed from the value before matching. A header
1061 # field can occur multiple times in a message, only one instance has to match. For
1062 # mailing lists, you could match on ^list-id$ with the value typically the mailing
1063 # list address in angled brackets with @ replaced with a dot, e.g.
1064 # <name\.lists\.example\.org>. (optional)
1065 HeadersRegexp:
1066 x:
1067
1068 # Influences spam filtering only, this option does not change whether a message
1069 # matches this ruleset. Can only be used together with SMTPMailFromRegexp and
1070 # VerifiedDomain. SMTPMailFromRegexp must be set to the address used to deliver
1071 # the forwarded message, e.g. '^user(|\+.*)@forward\.example$'. Changes to junk
1072 # analysis: 1. Messages are not rejected for failing a DMARC policy, because a
1073 # legitimate forwarded message without valid/intact/aligned DKIM signature would
1074 # be rejected because any verified SPF domain will be 'unaligned', of the
1075 # forwarding mail server. 2. The sending mail server IP address, and sending EHLO
1076 # and MAIL FROM domains and matching DKIM domain aren't used in future
1077 # reputation-based spam classifications (but other verified DKIM domains are)
1078 # because the forwarding server is not a useful spam signal for future messages.
1079 # (optional)
1080 IsForward: false
1081
1082 # Influences spam filtering only, this option does not change whether a message
1083 # matches this ruleset. If this domain matches an SPF- and/or DKIM-verified
1084 # (sub)domain, the message is accepted without further spam checks, such as a junk
1085 # filter or DMARC reject evaluation. DMARC rejects should not apply for mailing
1086 # lists that are not configured to rewrite the From-header of messages that don't
1087 # have a passing DKIM signature of the From-domain. Otherwise, by rejecting
1088 # messages, you may be automatically unsubscribed from the mailing list. The
1089 # assumption is that mailing lists do their own spam filtering/moderation.
1090 # (optional)
1091 ListAllowDomain:
1092
1093 # Influences spam filtering only, this option does not change whether a message
1094 # matches this ruleset. If a message is classified as spam, it isn't rejected
1095 # during the SMTP transaction (the normal behaviour), but accepted during the SMTP
1096 # transaction and delivered to the specified mailbox. The specified mailbox is not
1097 # automatically cleaned up like the account global Rejects mailbox, unless set to
1098 # that Rejects mailbox. (optional)
1099 AcceptRejectsToMailbox:
1100
1101 # Mailbox to deliver to if this ruleset matches.
1102 Mailbox:
1103
1104 # Free-form comments. (optional)
1105 Comment:
1106
1107 # Full name to use in message From header when composing messages coming from this
1108 # address with webmail. (optional)
1109 FullName:
1110
1111 # If configured, messages classified as weakly spam are rejected with instructions
1112 # to retry delivery, but this time with a signed token added to the subject.
1113 # During the next delivery attempt, the signed token will bypass the spam filter.
1114 # Messages with a clear spam signal, such as a known bad reputation, are
1115 # rejected/delayed without a signed token. (optional)
1116 SubjectPass:
1117
1118 # How long unique values are accepted after generating, e.g. 12h.
1119 Period: 0s
1120
1121 # Default maximum total message size in bytes for the account, overriding any
1122 # globally configured default maximum size if non-zero. A negative value can be
1123 # used to have no limit in case there is a limit by default. Attempting to add new
1124 # messages to an account beyond its maximum total size will result in an error.
1125 # Useful to prevent a single account from filling storage. (optional)
1126 QuotaMessageSize: 0
1127
1128 # Mail that looks like spam will be rejected, but a copy can be stored temporarily
1129 # in a mailbox, e.g. Rejects. If mail isn't coming in when you expect, you can
1130 # look there. The mail still isn't accepted, so the remote mail server may retry
1131 # (hopefully, if legitimate), or give up (hopefully, if indeed a spammer).
1132 # Messages are automatically removed from this mailbox, so do not set it to a
1133 # mailbox that has messages you want to keep. (optional)
1134 RejectsMailbox:
1135
1136 # Don't automatically delete mail in the RejectsMailbox listed above. This can be
1137 # useful, e.g. for future spam training. It can also cause storage to fill up.
1138 # (optional)
1139 KeepRejects: false
1140
1141 # Automatically set $Junk and $NotJunk flags based on mailbox messages are
1142 # delivered/moved/copied to. Email clients typically have too limited
1143 # functionality to conveniently set these flags, especially $NonJunk, but they can
1144 # all move messages to a different mailbox, so this helps them. (optional)
1145 AutomaticJunkFlags:
1146
1147 # If enabled, junk/nonjunk flags will be set automatically if they match some of
1148 # the regular expressions. When two of the three mailbox regular expressions are
1149 # set, the remaining one will match all unmatched messages. Messages are matched
1150 # in the order 'junk', 'neutral', 'not junk', and the search stops on the first
1151 # match. Mailboxes are lowercased before matching.
1152 Enabled: false
1153
1154 # Example: ^(junk|spam). (optional)
1155 JunkMailboxRegexp:
1156
1157 # Example: ^(inbox|neutral|postmaster|dmarc|tlsrpt|rejects), and you may wish to
1158 # add trash depending on how you use it, or leave this empty. (optional)
1159 NeutralMailboxRegexp:
1160
1161 # Example: .* or an empty string. (optional)
1162 NotJunkMailboxRegexp:
1163
1164 # Content-based filtering, using the junk-status of individual messages to rank
1165 # words in such messages as spam or ham. It is recommended you always set the
1166 # applicable (non)-junk status on messages, and that you do not empty your Trash
1167 # because those messages contain valuable ham/spam training information.
1168 # (optional)
1169 JunkFilter:
1170
1171 # Approximate spaminess score between 0 and 1 above which emails are rejected as
1172 # spam. Each delivery attempt adds a little noise to make it slightly harder for
1173 # spammers to identify words that strongly indicate non-spaminess and use it to
1174 # bypass the filter. E.g. 0.95.
1175 Threshold: 0.000000
1176 Params:
1177
1178 # Track ham/spam ranking for single words. (optional)
1179 Onegrams: false
1180
1181 # Track ham/spam ranking for each two consecutive words. (optional)
1182 Twograms: false
1183
1184 # Track ham/spam ranking for each three consecutive words. (optional)
1185 Threegrams: false
1186
1187 # Maximum power a word (combination) can have. If spaminess is 0.99, and max power
1188 # is 0.1, spaminess of the word will be set to 0.9. Similar for ham words.
1189 MaxPower: 0.000000
1190
1191 # Number of most spammy/hammy words to use for calculating probability. E.g. 10.
1192 TopWords: 0
1193
1194 # Ignore words that are this much away from 0.5 haminess/spaminess. E.g. 0.1,
1195 # causing word (combinations) of 0.4 to 0.6 to be ignored. (optional)
1196 IgnoreWords: 0.000000
1197
1198 # Occurrences in word database until a word is considered rare and its influence
1199 # in calculating probability reduced. E.g. 1 or 2. (optional)
1200 RareWords: 0
1201
1202 # Maximum number of outgoing messages for this account in a 24 hour window. This
1203 # limits the damage to recipients and the reputation of this mail server in case
1204 # of account compromise. Default 1000. (optional)
1205 MaxOutgoingMessagesPerDay: 0
1206
1207 # Maximum number of first-time recipients in outgoing messages for this account in
1208 # a 24 hour window. This limits the damage to recipients and the reputation of
1209 # this mail server in case of account compromise. Default 200. (optional)
1210 MaxFirstTimeRecipientsPerDay: 0
1211
1212 # Do not apply a delay to SMTP connections before accepting an incoming message
1213 # from a first-time sender. Can be useful for accounts that sends automated
1214 # responses and want instant replies. (optional)
1215 NoFirstTimeSenderDelay: false
1216
1217 # Routes for delivering outgoing messages through the queue. Each delivery attempt
1218 # evaluates these account routes, domain routes and finally global routes. The
1219 # transport of the first matching route is used in the delivery attempt. If no
1220 # routes match, which is the default with no configured routes, messages are
1221 # delivered directly from the queue. (optional)
1222 Routes:
1223 -
1224
1225 # Matches if the envelope from domain matches one of the configured domains, or if
1226 # the list is empty. If a domain starts with a dot, prefixes of the domain also
1227 # match. (optional)
1228 FromDomain:
1229 -
1230
1231 # Like FromDomain, but matching against the envelope to domain. (optional)
1232 ToDomain:
1233 -
1234
1235 # Matches if at least this many deliveries have already been attempted. This can
1236 # be used to attempt sending through a smarthost when direct delivery has failed
1237 # for several times. (optional)
1238 MinimumAttempts: 0
1239 Transport:
1240
1241 # Redirect all requests from domain (key) to domain (value). Always redirects to
1242 # HTTPS. For plain HTTP redirects, use a WebHandler with a WebRedirect. (optional)
1243 WebDomainRedirects:
1244 x:
1245
1246 # Handle webserver requests by serving static files, redirecting, reverse-proxying
1247 # HTTP(s) or passing the request to an internal service. The first matching
1248 # WebHandler will handle the request. Built-in system handlers, e.g. for ACME
1249 # validation, autoconfig and mta-sts always run first. Built-in handlers for
1250 # admin, account, webmail and webapi are evaluated after all handlers, including
1251 # webhandlers (allowing for overrides of internal services for some domains). If
1252 # no handler matches, the response status code is file not found (404). If
1253 # webserver features are missing, forward the requests to an application that
1254 # provides the needed functionality itself. (optional)
1255 WebHandlers:
1256 -
1257
1258 # Name to use in logging and metrics. (optional)
1259 LogName:
1260
1261 # Both Domain and PathRegexp must match for this WebHandler to match a request.
1262 # Exactly one of WebStatic, WebRedirect, WebForward, WebInternal must be set.
1263 Domain:
1264
1265 # Regular expression matched against request path, must always start with ^ to
1266 # ensure matching from the start of the path. The matching prefix can optionally
1267 # be stripped by WebForward. The regular expression does not have to end with $.
1268 PathRegexp:
1269
1270 # If set, plain HTTP requests are not automatically permanently redirected (308)
1271 # to HTTPS. If you don't have a HTTPS webserver configured, set this to true.
1272 # (optional)
1273 DontRedirectPlainHTTP: false
1274
1275 # Transparently compress responses (currently with gzip) if the client supports
1276 # it, the status is 200 OK, no Content-Encoding is set on the response yet and the
1277 # Content-Type of the response hints that the data is compressible (text/...,
1278 # specific application/... and .../...+json and .../...+xml). For static files
1279 # only, a cache with compressed files is kept. (optional)
1280 Compress: false
1281
1282 # Serve static files. (optional)
1283 WebStatic:
1284
1285 # Path to strip from the request URL before evaluating to a local path. If the
1286 # requested URL path does not start with this prefix and ContinueNotFound it is
1287 # considered non-matching and next WebHandlers are tried. If ContinueNotFound is
1288 # not set, a file not found (404) is returned in that case. (optional)
1289 StripPrefix:
1290
1291 # Directory to serve files from for this handler. Keep in mind that relative paths
1292 # are relative to the working directory of mox.
1293 Root:
1294
1295 # If set, and a directory is requested, and no index.html is present that can be
1296 # served, a file listing is returned. Results in 403 if ListFiles is not set. If a
1297 # directory is requested and the URL does not end with a slash, the response is a
1298 # redirect to the path with trailing slash. (optional)
1299 ListFiles: false
1300
1301 # If a requested URL does not exist, don't return a file not found (404) response,
1302 # but consider this handler non-matching and continue attempts to serve with later
1303 # WebHandlers, which may be a reverse proxy generating dynamic content, possibly
1304 # even writing a static file for a next request to serve statically. If
1305 # ContinueNotFound is set, HTTP requests other than GET and HEAD do not match.
1306 # This mechanism can be used to implement the equivalent of 'try_files' in other
1307 # webservers. (optional)
1308 ContinueNotFound: false
1309
1310 # Headers to add to the response. Useful for cache-control, content-type, etc. By
1311 # default, Content-Type headers are automatically added for recognized file types,
1312 # unless added explicitly through this setting. For directory listings, a
1313 # content-type header is skipped. (optional)
1314 ResponseHeaders:
1315 x:
1316
1317 # Redirect requests to configured URL. (optional)
1318 WebRedirect:
1319
1320 # Base URL to redirect to. The path must be empty and will be replaced, either by
1321 # the request URL path, or by OrigPathRegexp/ReplacePath. Scheme, host, port and
1322 # fragment stay intact, and query strings are combined. If empty, the response
1323 # redirects to a different path through OrigPathRegexp and ReplacePath, which must
1324 # then be set. Use a URL without scheme to redirect without changing the protocol,
1325 # e.g. //newdomain/. If a redirect would send a request to a URL with the same
1326 # scheme, host and path, the WebRedirect does not match so a next WebHandler can
1327 # be tried. This can be used to redirect all plain http traffic to https.
1328 # (optional)
1329 BaseURL:
1330
1331 # Regular expression for matching path. If set and path does not match, a 404 is
1332 # returned. The HTTP path used for matching always starts with a slash. (optional)
1333 OrigPathRegexp:
1334
1335 # Replacement path for destination URL based on OrigPathRegexp. Implemented with
1336 # Go's Regexp.ReplaceAllString: $1 is replaced with the text of the first
1337 # submatch, etc. If both OrigPathRegexp and ReplacePath are empty, BaseURL must be
1338 # set and all paths are redirected unaltered. (optional)
1339 ReplacePath:
1340
1341 # Status code to use in redirect, e.g. 307. By default, a permanent redirect (308)
1342 # is returned. (optional)
1343 StatusCode: 0
1344
1345 # Forward requests to another webserver, i.e. reverse proxy. (optional)
1346 WebForward:
1347
1348 # Strip the matching WebHandler path from the WebHandler before forwarding the
1349 # request. (optional)
1350 StripPath: false
1351
1352 # URL to forward HTTP requests to, e.g. http://127.0.0.1:8123/base. If StripPath
1353 # is false the full request path is added to the URL. Host headers are sent
1354 # unmodified. New X-Forwarded-{For,Host,Proto} headers are set. Any query string
1355 # in the URL is ignored. Requests are made using Go's net/http.DefaultTransport
1356 # that takes environment variables HTTP_PROXY and HTTPS_PROXY into account.
1357 # Websocket connections are forwarded and data is copied between client and
1358 # backend without looking at the framing. The websocket 'version' and
1359 # 'key'/'accept' headers are verified during the handshake, but other websocket
1360 # headers, including 'origin', 'protocol' and 'extensions' headers, are not
1361 # inspected and the backend is responsible for verifying/interpreting them.
1362 URL:
1363
1364 # Headers to add to the response. Useful for adding security- and cache-related
1365 # headers. (optional)
1366 ResponseHeaders:
1367 x:
1368
1369 # Pass request to internal service, like webmail, webapi, etc. (optional)
1370 WebInternal:
1371
1372 # Path to use as root of internal service, e.g. /webmail/.
1373 BasePath:
1374
1375 # Name of the service, values: admin, account, webmail, webapi.
1376 Service:
1377
1378 # Routes for delivering outgoing messages through the queue. Each delivery attempt
1379 # evaluates account routes, domain routes and finally these global routes. The
1380 # transport of the first matching route is used in the delivery attempt. If no
1381 # routes match, which is the default with no configured routes, messages are
1382 # delivered directly from the queue. (optional)
1383 Routes:
1384 -
1385
1386 # Matches if the envelope from domain matches one of the configured domains, or if
1387 # the list is empty. If a domain starts with a dot, prefixes of the domain also
1388 # match. (optional)
1389 FromDomain:
1390 -
1391
1392 # Like FromDomain, but matching against the envelope to domain. (optional)
1393 ToDomain:
1394 -
1395
1396 # Matches if at least this many deliveries have already been attempted. This can
1397 # be used to attempt sending through a smarthost when direct delivery has failed
1398 # for several times. (optional)
1399 MinimumAttempts: 0
1400 Transport:
1401
1402 # DNS blocklists to periodically check with if IPs we send from are present,
1403 # without using them for checking incoming deliveries.. Also see DNSBLs in SMTP
1404 # listeners in mox.conf, which specifies DNSBLs to use both for incoming
1405 # deliveries and for checking our IPs against. Example DNSBLs: sbl.spamhaus.org,
1406 # bl.spamcop.net. (optional)
1407 MonitorDNSBLs:
1408 -
1409
1410# Examples
1411
1412Mox includes configuration files to illustrate common setups. You can see these
1413examples with "mox config example", and print a specific example with "mox
1414config example <name>". Below are all examples included in mox.
1415
1416# Example webhandlers
1417
1418 # Snippet of domains.conf to configure WebDomainRedirects and WebHandlers.
1419
1420 # Redirect all requests for mox.example to https://www.mox.example.
1421 WebDomainRedirects:
1422 mox.example: www.mox.example
1423
1424 # Each request is matched against these handlers until one matches and serves it.
1425 WebHandlers:
1426 -
1427 # Redirect all plain http requests to https, leaving path, query strings, etc
1428 # intact. When the request is already to https, the destination URL would have the
1429 # same scheme, host and path, causing this redirect handler to not match the
1430 # request (and not cause a redirect loop) and the webserver to serve the request
1431 # with a later handler.
1432 LogName: redirhttps
1433 Domain: www.mox.example
1434 PathRegexp: ^/
1435 # Could leave DontRedirectPlainHTTP at false if it wasn't for this being an
1436 # example for doing this redirect.
1437 DontRedirectPlainHTTP: true
1438 WebRedirect:
1439 BaseURL: https://www.mox.example
1440 -
1441 # The name of the handler, used in logging and metrics.
1442 LogName: staticmjl
1443 # With ACME configured, each configured domain will automatically get a TLS
1444 # certificate on first request.
1445 Domain: www.mox.example
1446 PathRegexp: ^/who/mjl/
1447 WebStatic:
1448 StripPrefix: /who/mjl
1449 # Requested path /who/mjl/inferno/ resolves to local web/mjl/inferno.
1450 # If a directory contains an index.html, it is served when a directory is requested.
1451 Root: web/mjl
1452 # With ListFiles true, if a directory does not contain an index.html, the contents are listed.
1453 ListFiles: true
1454 ResponseHeaders:
1455 X-Mox: hi
1456 -
1457 LogName: redir
1458 Domain: www.mox.example
1459 PathRegexp: ^/redir/a/b/c
1460 # Don't redirect from plain HTTP to HTTPS.
1461 DontRedirectPlainHTTP: true
1462 WebRedirect:
1463 # Just change the domain and add query string set fragment. No change to scheme.
1464 # Path will start with /redir/a/b/c (and whathever came after) because no
1465 # OrigPathRegexp+ReplacePath is set.
1466 BaseURL: //moxest.example?q=1#frag
1467 # Default redirection is 308 - Permanent Redirect.
1468 StatusCode: 307
1469 -
1470 LogName: oldnew
1471 Domain: www.mox.example
1472 PathRegexp: ^/old/
1473 WebRedirect:
1474 # Replace path, leaving rest of URL intact.
1475 OrigPathRegexp: ^/old/(.*)
1476 ReplacePath: /new/$1
1477 -
1478 LogName: app
1479 Domain: www.mox.example
1480 PathRegexp: ^/app/
1481 WebForward:
1482 # Strip the path matched by PathRegexp before forwarding the request. So original
1483 # request /app/api become just /api.
1484 StripPath: true
1485 # URL of backend, where requests are forwarded to. The path in the URL is kept,
1486 # so for incoming request URL /app/api, the outgoing request URL has path /app-v2/api.
1487 # Requests are made with Go's net/http DefaultTransporter, including using
1488 # HTTP_PROXY and HTTPS_PROXY environment variables.
1489 URL: http://127.0.0.1:8900/app-v2/
1490 # Add headers to response.
1491 ResponseHeaders:
1492 X-Frame-Options: deny
1493 X-Content-Type-Options: nosniff
1494
1495# Example transport
1496
1497 # Snippet for mox.conf, defining a transport called Example that connects on the
1498 # SMTP submission with TLS port 465 ("submissions"), authenticating with
1499 # SCRAM-SHA-256-PLUS (other providers may not support SCRAM-SHA-256-PLUS, but they
1500 # typically do support the older CRAM-MD5).:
1501
1502 # Transport are mechanisms for delivering messages. Transports can be referenced
1503 # from Routes in accounts, domains and the global configuration. There is always
1504 # an implicit/fallback delivery transport doing direct delivery with SMTP from the
1505 # outgoing message queue. Transports are typically only configured when using
1506 # smarthosts, i.e. when delivering through another SMTP server. Zero or one
1507 # transport methods must be set in a transport, never multiple. When using an
1508 # external party to send email for a domain, keep in mind you may have to add
1509 # their IP address to your domain's SPF record, and possibly additional DKIM
1510 # records. (optional)
1511 Transports:
1512 Example:
1513 # Submission SMTP over a TLS connection to submit email to a remote queue.
1514 # (optional)
1515 Submissions:
1516 # Host name to connect to and for verifying its TLS certificate.
1517 Host: smtp.example.com
1518
1519 # If set, authentication credentials for the remote server. (optional)
1520 Auth:
1521 Username: user@example.com
1522 Password: test1234
1523 Mechanisms:
1524 # Allowed authentication mechanisms. Defaults to SCRAM-SHA-256-PLUS,
1525 # SCRAM-SHA-256, SCRAM-SHA-1-PLUS, SCRAM-SHA-1, CRAM-MD5. Not included by default:
1526 # PLAIN. Specify the strongest mechanism known to be implemented by the server to
1527 # prevent mechanism downgrade attacks. (optional)
1528
1529 - SCRAM-SHA-256-PLUS
1530
1531
1532 # Snippet for domains.conf, specifying a route that sends through the transport:
1533
1534 # Routes for delivering outgoing messages through the queue. Each delivery attempt
1535 # evaluates account routes, domain routes and finally these global routes. The
1536 # transport of the first matching route is used in the delivery attempt. If no
1537 # routes match, which is the default with no configured routes, messages are
1538 # delivered directly from the queue. (optional)
1539 Routes:
1540 -
1541 Transport: Example
1542*/
1543package config
1544
1545// NOTE: DO NOT EDIT, this file is generated by ../gendoc.sh.
1546