blob: 8cfafa2bb8739de9d26add6e94785f234282507f [file] [log] [blame]
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +01001<?php
2error_reporting(E_ERROR);
3//error_reporting(E_ALL);
4
5/*
6PLEASE USE THE FILE "vars.local.inc.php" TO OVERWRITE SETTINGS AND MAKE THEM PERSISTENT!
7This file will be reset on upgrades.
8*/
9
10// SQL database connection variables
11$database_type = 'mysql';
12$database_sock = '/var/run/mysqld/mysqld.sock';
13$database_host = 'mysql';
14$database_user = getenv('DBUSER');
15$database_pass = getenv('DBPASS');
16$database_name = getenv('DBNAME');
17
18// Other variables
19$mailcow_hostname = getenv('MAILCOW_HOSTNAME');
20$default_pass_scheme = getenv('MAILCOW_PASS_SCHEME');
21
22// Autodiscover settings
23// ===
24// Auto-detect HTTPS port =>
25$https_port = strpos($_SERVER['HTTP_HOST'], ':');
26if ($https_port === FALSE) {
27 $https_port = 443;
28} else {
29 $https_port = substr($_SERVER['HTTP_HOST'], $https_port+1);
30}
31
32// Alternatively select port here =>
33//$https_port = 1234;
34// Other settings =>
35$autodiscover_config = array(
36 // General autodiscover service type: "activesync" or "imap"
37 // emClient uses autodiscover, but does not support ActiveSync. mailcow excludes emClient from ActiveSync.
38 // With SOGo disabled, the type will always fallback to imap. CalDAV and CardDAV will be excluded, too.
39 'autodiscoverType' => 'activesync',
40 // If autodiscoverType => activesync, also use ActiveSync (EAS) for Outlook desktop clients (>= Outlook 2013 on Windows)
41 // Outlook for Mac does not support ActiveSync
42 'useEASforOutlook' => 'no',
43 // Please don't use STARTTLS-enabled service ports in the "port" variable.
44 // The autodiscover service will always point to SMTPS and IMAPS (TLS-wrapped services).
45 // The autoconfig service will additionally announce the STARTTLS-enabled ports, specified in the "tlsport" variable.
46 'imap' => array(
47 'server' => $mailcow_hostname,
Matthias Andreas Benkard8f915942021-08-16 10:57:25 +020048 'port' => (int)filter_var(substr(getenv('IMAPS_PORT'), strrpos(getenv('IMAPS_PORT'), ':')), FILTER_SANITIZE_NUMBER_INT),
49 'tlsport' => (int)filter_var(substr(getenv('IMAP_PORT'), strrpos(getenv('IMAP_PORT'), ':')), FILTER_SANITIZE_NUMBER_INT)
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +010050 ),
51 'pop3' => array(
52 'server' => $mailcow_hostname,
Matthias Andreas Benkard8f915942021-08-16 10:57:25 +020053 'port' => (int)filter_var(substr(getenv('POPS_PORT'), strrpos(getenv('POPS_PORT'), ':')), FILTER_SANITIZE_NUMBER_INT),
54 'tlsport' => (int)filter_var(substr(getenv('POP_PORT'), strrpos(getenv('POP_PORT'), ':')), FILTER_SANITIZE_NUMBER_INT)
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +010055 ),
56 'smtp' => array(
57 'server' => $mailcow_hostname,
Matthias Andreas Benkard8f915942021-08-16 10:57:25 +020058 'port' => (int)filter_var(substr(getenv('SMTPS_PORT'), strrpos(getenv('SMTPS_PORT'), ':')), FILTER_SANITIZE_NUMBER_INT),
59 'tlsport' => (int)filter_var(substr(getenv('SUBMISSION_PORT'), strrpos(getenv('SUBMISSION_PORT'), ':')), FILTER_SANITIZE_NUMBER_INT)
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +010060 ),
61 'activesync' => array(
Matthias Andreas Benkard8f915942021-08-16 10:57:25 +020062 'url' => 'https://' . $mailcow_hostname . ($https_port == 443 ? '' : ':' . $https_port) . '/Microsoft-Server-ActiveSync',
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +010063 ),
64 'caldav' => array(
65 'server' => $mailcow_hostname,
66 'port' => $https_port,
67 ),
68 'carddav' => array(
69 'server' => $mailcow_hostname,
70 'port' => $https_port,
71 ),
72);
73
74// If false, we will use DEFAULT_LANG
75// Uses HTTP_ACCEPT_LANGUAGE header
76$DETECT_LANGUAGE = true;
77
78// Change default language
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +010079$DEFAULT_LANG = 'en-gb';
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +010080
81// Available languages
Matthias Andreas Benkard8f915942021-08-16 10:57:25 +020082// https://www.iso.org/obp/ui/#search
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +010083// https://en.wikipedia.org/wiki/IETF_language_tag
Matthias Andreas Benkard8f915942021-08-16 10:57:25 +020084$AVAILABLE_LANGUAGES = array(
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +010085 // 'ca-es' => 'Català (Catalan)',
86 'cs-cz' => 'Čeština (Czech)',
87 'da-dk' => 'Danish (Dansk)',
88 'de-de' => 'Deutsch (German)',
89 'en-gb' => 'English',
90 'es-es' => 'Español (Spanish)',
91 'fi-fi' => 'Suomi (Finish)',
92 'fr-fr' => 'Français (French)',
Matthias Andreas Benkardd63fe562023-11-18 13:18:30 +010093 'gr-gr' => 'Ελληνικά (Greek)',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +010094 'hu-hu' => 'Magyar (Hungarian)',
95 'it-it' => 'Italiano (Italian)',
96 'ko-kr' => '한국어 (Korean)',
97 'lv-lv' => 'latviešu (Latvian)',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +010098 'nb-no' => 'Norsk (Norwegian)',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +010099 'nl-nl' => 'Nederlands (Dutch)',
100 'pl-pl' => 'Język Polski (Polish)',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100101 'pt-br' => 'Português brasileiro (Brazilian Portuguese)',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100102 'pt-pt' => 'Português (Portuguese)',
103 'ro-ro' => 'Română (Romanian)',
104 'ru-ru' => 'Pусский (Russian)',
Matthias Andreas Benkardd63fe562023-11-18 13:18:30 +0100105 'si-si' => 'Slovenščina (Slovenian)',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100106 'sk-sk' => 'Slovenčina (Slovak)',
107 'sv-se' => 'Svenska (Swedish)',
108 'tr-tr' => 'Türkçe (Turkish)',
109 'uk-ua' => 'Українська (Ukrainian)',
110 'zh-cn' => '简体中文 (Simplified Chinese)',
111 'zh-tw' => '繁體中文 (Traditional Chinese)',
Matthias Andreas Benkard8f915942021-08-16 10:57:25 +0200112);
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100113
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100114// default theme is lumen
115// additional themes can be found here: https://bootswatch.com/
116// copy them to data/web/css/themes/{THEME-NAME}-bootstrap.css
117$UI_THEME = "lumen";
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100118
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100119// Show DKIM private keys - false by default
120$SHOW_DKIM_PRIV_KEYS = false;
121
122// mailcow Apps - buttons on login screen
123$MAILCOW_APPS = array(
124 array(
125 'name' => 'Webmail',
126 'link' => '/SOGo/',
127 )
128);
129
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100130// Logo max file size in bytes
131$LOGO_LIMITS['max_size'] = 15 * 1024 * 1024; // 15MB
132
133// Logo max width in pixels
134$LOGO_LIMITS['max_width'] = 1920;
135
136// Logo max height in pixels
137$LOGO_LIMITS['max_height'] = 1920;
138
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100139// Rows until pagination begins
Matthias Andreas Benkardd63fe562023-11-18 13:18:30 +0100140$PAGINATION_SIZE = 25;
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100141
142// Default number of rows/lines to display (log table)
143$LOG_LINES = 1000;
144
145// Rows until pagination begins (log table)
146$LOG_PAGINATION_SIZE = 50;
147
148// Session lifetime in seconds
149$SESSION_LIFETIME = 10800;
150
151// Label for OTP devices
152$OTP_LABEL = "mailcow UI";
153
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100154// How long to wait (in s) for cURL Docker requests
155$DOCKER_TIMEOUT = 60;
156
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100157// Split DKIM key notation (bind format)
158$SPLIT_DKIM_255 = false;
159
160// OAuth2 settings
161$REFRESH_TOKEN_LIFETIME = 2678400;
162$ACCESS_TOKEN_LIFETIME = 86400;
163// Logout from mailcow after first OAuth2 session profile request
164$OAUTH2_FORGET_SESSION_AFTER_LOGIN = false;
165
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100166// Set a limit for mailbox and domain tagging
167$TAGGING_LIMIT = 25;
168
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100169// MAILBOX_DEFAULT_ATTRIBUTES define default attributes for new mailboxes
170// These settings will not change existing mailboxes
171
172// Force incoming TLS for new mailboxes by default
173$MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_in'] = false;
174
175// Force outgoing TLS for new mailboxes by default
176$MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_out'] = false;
177
178// Force password change on next login (only allows login to mailcow UI)
179$MAILBOX_DEFAULT_ATTRIBUTES['force_pw_update'] = false;
180
181// Enable SOGo access (set to false to disable access by default)
182$MAILBOX_DEFAULT_ATTRIBUTES['sogo_access'] = true;
183
184// Send notification when quarantine is not empty (never, hourly, daily, weekly)
185$MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification'] = 'hourly';
186
187// Mailbox has IMAP access by default
188$MAILBOX_DEFAULT_ATTRIBUTES['imap_access'] = true;
189
190// Mailbox has POP3 access by default
191$MAILBOX_DEFAULT_ATTRIBUTES['pop3_access'] = true;
192
193// Mailbox has SMTP access by default
194$MAILBOX_DEFAULT_ATTRIBUTES['smtp_access'] = true;
195
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100196// Mailbox has sieve access by default
197$MAILBOX_DEFAULT_ATTRIBUTES['sieve_access'] = true;
198
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100199// Mailbox receives notifications about...
200// "add_header" - mail that was put into the Junk folder
201// "reject" - mail that was rejected
202// "all" - mail that was rejected and put into the Junk folder
203$MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category'] = 'reject';
204
205// Default mailbox format, should not be changed unless you know exactly, what you do, keep the trailing ":"
206// Check dovecot.conf for further changes (e.g. shared namespace)
207$MAILBOX_DEFAULT_ATTRIBUTES['mailbox_format'] = 'maildir:';
208
209// Show last IMAP and POP3 logins
210$SHOW_LAST_LOGIN = true;
211
212// UV flag handling in FIDO2/WebAuthn - defaults to false to allow iOS logins
213// true = required
214// false = preferred
215// string 'required' 'preferred' 'discouraged'
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100216$WEBAUTHN_UV_FLAG_REGISTER = false;
217$WEBAUTHN_UV_FLAG_LOGIN = false;
218$WEBAUTHN_USER_PRESENT_FLAG = true;
219
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100220$FIDO2_UV_FLAG_REGISTER = 'preferred';
221$FIDO2_UV_FLAG_LOGIN = 'preferred'; // iOS ignores the key via NFC if required - known issue
222$FIDO2_USER_PRESENT_FLAG = true;
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100223
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100224$FIDO2_FORMATS = array('apple', 'android-key', 'android-safetynet', 'fido-u2f', 'none', 'packed', 'tpm');
225
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100226
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100227// Set visible Rspamd maps in mailcow UI, do not change unless you know what you are doing
228$RSPAMD_MAPS = array(
229 'regex' => array(
230 'Header-From: Blacklist' => 'global_mime_from_blacklist.map',
231 'Header-From: Whitelist' => 'global_mime_from_whitelist.map',
232 'Envelope Sender Blacklist' => 'global_smtp_from_blacklist.map',
233 'Envelope Sender Whitelist' => 'global_smtp_from_whitelist.map',
234 'Recipient Blacklist' => 'global_rcpt_blacklist.map',
235 'Recipient Whitelist' => 'global_rcpt_whitelist.map',
236 'Fishy TLDS (only fired in combination with bad words)' => 'fishy_tlds.map',
237 'Bad Words (only fired in combination with fishy TLDs)' => 'bad_words.map',
238 'Bad Words DE (only fired in combination with fishy TLDs)' => 'bad_words_de.map',
239 'Bad Languages' => 'bad_languages.map',
240 'Bulk Mail Headers' => 'bulk_header.map',
Matthias Andreas Benkard8f915942021-08-16 10:57:25 +0200241 'Bad (Junk) Mail Headers' => 'bad_header.map',
Matthias Andreas Benkard4edeb9f2021-01-02 15:32:21 +0100242 'Monitoring Hosts' => 'monitoring_nolog.map'
243 )
244);
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100245
246
247$IMAPSYNC_OPTIONS = array(
248 'whitelist' => array(
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100249 'abort',
250 'authmd51',
251 'authmd52',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100252 'authmech1',
253 'authmech2',
254 'authuser1',
255 'authuser2',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100256 'debug',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100257 'debugcontent',
258 'debugcrossduplicates',
259 'debugflags',
260 'debugfolders',
261 'debugimap',
262 'debugimap1',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100263 'debugimap2',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100264 'debugmemory',
265 'debugssl',
266 'delete1emptyfolders',
267 'delete2folders',
268 'disarmreadreceipts',
269 'domain1',
270 'domain2',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100271 'domino1',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100272 'domino2',
273 'dry',
274 'errorsmax',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100275 'exchange1',
276 'exchange2',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100277 'exitwhenover',
278 'expunge1',
279 'f1f2',
280 'filterbuggyflags',
281 'folder',
282 'folderfirst',
283 'folderlast',
284 'folderrec',
285 'gmail1',
286 'gmail2',
287 'idatefromheader',
288 'include',
289 'inet4',
290 'inet6',
291 'justconnect',
292 'justfolders',
293 'justfoldersizes',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100294 'justlogin',
295 'keepalive1',
296 'keepalive2',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100297 'log',
298 'logdir',
299 'logfile',
300 'maxbytesafter',
301 'maxlinelength',
302 'maxmessagespersecond',
303 'maxsize',
304 'maxsleep',
305 'minage',
306 'minsize',
307 'noabletosearch',
308 'noabletosearch1',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100309 'noabletosearch2',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100310 'noexpunge1',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100311 'noexpunge2',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100312 'nofoldersizesatend',
313 'noid',
314 'nolog',
315 'nomixfolders',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100316 'noresyncflags',
317 'nossl1',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100318 'nossl2',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100319 'nosyncacls',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100320 'notls1',
321 'notls2',
322 'nouidexpunge2',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100323 'nousecache',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100324 'oauthaccesstoken1',
325 'oauthaccesstoken2',
326 'oauthdirect1',
327 'oauthdirect2',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100328 'office1',
329 'office2',
330 'pidfile',
331 'pidfilelocking',
332 'prefix1',
333 'prefix2',
334 'proxyauth1',
335 'proxyauth2',
336 'resyncflags',
337 'resynclabels',
338 'search',
339 'search1',
340 'search2',
341 'sep1',
342 'sep2',
343 'showpasswords',
344 'skipemptyfolders',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100345 'ssl2',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100346 'sslargs1',
347 'sslargs2',
348 'subfolder1',
349 'subscribe',
350 'subscribed',
351 'syncacls',
352 'syncduplicates',
353 'syncinternaldates',
354 'synclabels',
355 'tests',
356 'testslive',
357 'testslive6',
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100358 'tls2',
Matthias Andreas Benkard9dabdab2024-03-06 13:12:09 +0100359 'truncmess',
360 'usecache',
361 'useheader',
362 'useuid'
Matthias Andreas Benkard3c18a082022-12-27 17:32:58 +0100363 ),
364 'blacklist' => array(
365 'skipmess',
366 'delete2foldersonly',
367 'delete2foldersbutnot',
368 'regexflag',
369 'regexmess',
370 'pipemess',
371 'regextrans2',
372 'maxlinelengthcmd'
373 )
374);