From 6b8e981bdc4e647c9c39638c259d4ff7b1945e2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20S=C3=BCtterlin?= Date: Sat, 26 Jul 2025 01:06:24 +0000 Subject: [PATCH 01/26] fix: Only use HTTP_ORIGIN if it is sent. --- data/web/inc/functions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php index edf428d5a..55329e73a 100644 --- a/data/web/inc/functions.inc.php +++ b/data/web/inc/functions.inc.php @@ -2211,7 +2211,7 @@ function cors($action, $data = null) { $cors_settings['allowed_origins'] = $allowed_origins[0]; if (in_array('*', $allowed_origins)){ $cors_settings['allowed_origins'] = '*'; - } else if (in_array($_SERVER['HTTP_ORIGIN'], $allowed_origins)) { + } else if (array_key_exists('HTTP_ORIGIN', $_SERVER) && in_array($_SERVER['HTTP_ORIGIN'], $allowed_origins)) { $cors_settings['allowed_origins'] = $_SERVER['HTTP_ORIGIN']; } // always allow OPTIONS for preflight request From 3d5b57889a3169dbe835febd4a832701684af44b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20S=C3=BCtterlin?= Date: Sat, 26 Jul 2025 01:08:16 +0000 Subject: [PATCH 02/26] fix: Empty App Links The return value of the function caused a warning in header.inc.php:42 if no additional links were set. header.inc.php is the only caller of this function, thus it is safe to return an empty array here. --- data/web/inc/functions.customize.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/web/inc/functions.customize.inc.php b/data/web/inc/functions.customize.inc.php index 1d19066d2..56527ff96 100644 --- a/data/web/inc/functions.customize.inc.php +++ b/data/web/inc/functions.customize.inc.php @@ -293,7 +293,7 @@ function customize($_action, $_item, $_data = null) { } if (empty($app_links)){ - return false; + return []; } // convert from old style From ad9b328ed56316efbfb8606088897194ba2bb20f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20S=C3=BCtterlin?= Date: Sat, 26 Jul 2025 01:12:48 +0000 Subject: [PATCH 03/26] fix: Undefined array key "pending_tfa_methods" in /web/inc/footer.inc.php on line 29 --- data/web/inc/footer.inc.php | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/data/web/inc/footer.inc.php b/data/web/inc/footer.inc.php index ac1bff033..ecc4ddce1 100644 --- a/data/web/inc/footer.inc.php +++ b/data/web/inc/footer.inc.php @@ -26,23 +26,25 @@ if (is_array($alertbox_log_parser)) { // map tfa details for twig $pending_tfa_authmechs = []; -foreach($_SESSION['pending_tfa_methods'] as $authdata){ - $pending_tfa_authmechs[$authdata['authmech']] = false; -} -if (isset($pending_tfa_authmechs['webauthn'])) { - $pending_tfa_authmechs['webauthn'] = true; -} -if (!isset($pending_tfa_authmechs['webauthn']) - && isset($pending_tfa_authmechs['yubi_otp'])) { - $pending_tfa_authmechs['yubi_otp'] = true; -} -if (!isset($pending_tfa_authmechs['webauthn']) - && !isset($pending_tfa_authmechs['yubi_otp']) - && isset($pending_tfa_authmechs['totp'])) { - $pending_tfa_authmechs['totp'] = true; -} -if (isset($pending_tfa_authmechs['u2f'])) { - $pending_tfa_authmechs['u2f'] = true; +if (array_key_exists('pending_tfa_methods', $_SESSION)) { + foreach($_SESSION['pending_tfa_methods'] as $authdata){ + $pending_tfa_authmechs[$authdata['authmech']] = false; + } + if (isset($pending_tfa_authmechs['webauthn'])) { + $pending_tfa_authmechs['webauthn'] = true; + } + if (!isset($pending_tfa_authmechs['webauthn']) + && isset($pending_tfa_authmechs['yubi_otp'])) { + $pending_tfa_authmechs['yubi_otp'] = true; + } + if (!isset($pending_tfa_authmechs['webauthn']) + && !isset($pending_tfa_authmechs['yubi_otp']) + && isset($pending_tfa_authmechs['totp'])) { + $pending_tfa_authmechs['totp'] = true; + } + if (isset($pending_tfa_authmechs['u2f'])) { + $pending_tfa_authmechs['u2f'] = true; + } } // globals From 53c35493a5c673968db35e8eb47463f673cfe3c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20S=C3=BCtterlin?= Date: Thu, 21 Aug 2025 18:36:01 +0000 Subject: [PATCH 04/26] fix: imapsync gets correct timeouts Previously imapsync only attached the timeout1 / timeout2 arguments if the argument was negative (which is not even possible). Now the argument is added for every positive number. Fixes #6590 --- data/Dockerfiles/dovecot/imapsync_runner.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/Dockerfiles/dovecot/imapsync_runner.pl b/data/Dockerfiles/dovecot/imapsync_runner.pl index 9eaf5f431..1030603ce 100644 --- a/data/Dockerfiles/dovecot/imapsync_runner.pl +++ b/data/Dockerfiles/dovecot/imapsync_runner.pl @@ -132,8 +132,8 @@ while ($row = $sth->fetchrow_arrayref()) { "--tmpdir", "/tmp", "--nofoldersizes", "--addheader", - ($timeout1 gt "0" ? () : ('--timeout1', $timeout1)), - ($timeout2 gt "0" ? () : ('--timeout2', $timeout2)), + ($timeout1 le "0" ? () : ('--timeout1', $timeout1)), + ($timeout2 le "0" ? () : ('--timeout2', $timeout2)), ($exclude eq "" ? () : ("--exclude", $exclude)), ($subfolder2 eq "" ? () : ('--subfolder2', $subfolder2)), ($maxage eq "0" ? () : ('--maxage', $maxage)), From 4d88e191068c0b17a3e0e00d73f417788c756ae2 Mon Sep 17 00:00:00 2001 From: Sajjad hassanzadeh <32982356+Hassanzadeh-sd@users.noreply.github.com> Date: Thu, 28 Aug 2025 14:06:43 +0330 Subject: [PATCH 05/26] Feat/prometheus-exporter : Add prometheus exporter and grafana dashboard for mailcow. (#6314) * add : readme for prometheus exporter configs * add : grafana dashboard json file * add: prometheus exporter service on docker-compose.override.yml * migrate: doc files into docs.mailcow.email project * add : security configs in prometheus exporter compose file * add : explain more in my comment part in prometheus override compose file * remove : mailcow dockerized docs --------- Co-authored-by: Saji --- .../docker-compose.override.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 helper-scripts/docker-compose.override.yml.d/PROMETHEUS_EXPORTER/docker-compose.override.yml diff --git a/helper-scripts/docker-compose.override.yml.d/PROMETHEUS_EXPORTER/docker-compose.override.yml b/helper-scripts/docker-compose.override.yml.d/PROMETHEUS_EXPORTER/docker-compose.override.yml new file mode 100644 index 000000000..6fd4e8e08 --- /dev/null +++ b/helper-scripts/docker-compose.override.yml.d/PROMETHEUS_EXPORTER/docker-compose.override.yml @@ -0,0 +1,18 @@ +services: + prometheus-exporter-mailcow: + image: ghcr.io/mailcow/prometheus-exporter:2 + ports: + - "9099:9099" + restart: always + environment: + MAILCOW_EXPORTER_HOST: "" # Replace with your Mailcow hostname + MAILCOW_EXPORTER_API_KEY: "" # Replace with your API key + MAILCOW_EXPORTER_TOKEN: "" # Replace with your secure key + # MAILCOW_EXPORTER_TOKEN_DISABLE: "true" # Uncomment only if it is safe to disable token authentication (e.g., internal network only) + dns: + - ${IPV4_NETWORK:-172.22.1}.254 + networks: + mailcow-network: + ipv4_address: ${IPV4_NETWORK:-172.22.1}.209 + aliases: + - prometheus-exporter From 5e66ffa36604e8c41bb23c7606ad951ed888b6b4 Mon Sep 17 00:00:00 2001 From: maxi322 <66129899+maxi322@users.noreply.github.com> Date: Thu, 28 Aug 2025 12:56:37 +0200 Subject: [PATCH 06/26] watchdog: use dig instead of check_dns (#6685) * watchdog: use dig instead of check_dns check_dns is slower and uses more system resources, dig wrapped in a script is a more performant approach and uses fewer system resources * added debug mode + compose image bump --------- Co-authored-by: maxi322 Co-authored-by: DerLinkman --- data/Dockerfiles/watchdog/Dockerfile | 5 ++-- data/Dockerfiles/watchdog/check_dns.sh | 39 ++++++++++++++++++++++++++ data/Dockerfiles/watchdog/watchdog.sh | 7 ++++- docker-compose.yml | 3 +- 4 files changed, 50 insertions(+), 4 deletions(-) create mode 100755 data/Dockerfiles/watchdog/check_dns.sh diff --git a/data/Dockerfiles/watchdog/Dockerfile b/data/Dockerfiles/watchdog/Dockerfile index a55a97a4c..6d8541d79 100644 --- a/data/Dockerfiles/watchdog/Dockerfile +++ b/data/Dockerfiles/watchdog/Dockerfile @@ -16,7 +16,6 @@ RUN apk add --update \ fcgi \ openssl \ nagios-plugins-mysql \ - nagios-plugins-dns \ nagios-plugins-disk \ bind-tools \ redis \ @@ -32,9 +31,11 @@ RUN apk add --update \ tzdata \ whois \ && curl https://raw.githubusercontent.com/mludvig/smtp-cli/v3.10/smtp-cli -o /smtp-cli \ - && chmod +x smtp-cli + && chmod +x smtp-cli \ + && mkdir /usr/lib/mailcow COPY watchdog.sh /watchdog.sh COPY check_mysql_slavestatus.sh /usr/lib/nagios/plugins/check_mysql_slavestatus.sh +COPY check_dns.sh /usr/lib/mailcow/check_dns.sh CMD ["/watchdog.sh"] diff --git a/data/Dockerfiles/watchdog/check_dns.sh b/data/Dockerfiles/watchdog/check_dns.sh new file mode 100755 index 000000000..ce4cfa3b1 --- /dev/null +++ b/data/Dockerfiles/watchdog/check_dns.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +while getopts "H:s:" opt; do + case "$opt" in + H) HOST="$OPTARG" ;; + s) SERVER="$OPTARG" ;; + *) echo "Usage: $0 -H host -s server"; exit 3 ;; + esac +done + +if [ -z "$SERVER" ]; then + echo "No DNS Server provided" + exit 3 +fi + +if [ -z "$HOST" ]; then + echo "No host to test provided" + exit 3 +fi + +# run dig and measure the time it takes to run +START_TIME=$(date +%s%3N) +dig_output=$(dig +short +timeout=2 +tries=1 "$HOST" @"$SERVER" 2>/dev/null) +dig_rc=$? +dig_output_ips=$(echo "$dig_output" | grep -E '^[0-9.]+$' | sort | paste -sd ',' -) +END_TIME=$(date +%s%3N) +ELAPSED_TIME=$((END_TIME - START_TIME)) + +# validate and perform nagios like output and exit codes +if [ $dig_rc -ne 0 ] || [ -z "$dig_output" ]; then + echo "Domain $HOST was not found by the server" + exit 2 +elif [ $dig_rc -eq 0 ]; then + echo "DNS OK: $ELAPSED_TIME ms response time. $HOST returns $dig_output_ips" + exit 0 +else + echo "Unknown error" + exit 3 +fi diff --git a/data/Dockerfiles/watchdog/watchdog.sh b/data/Dockerfiles/watchdog/watchdog.sh index d1c659ce8..a087ca5f1 100755 --- a/data/Dockerfiles/watchdog/watchdog.sh +++ b/data/Dockerfiles/watchdog/watchdog.sh @@ -1,5 +1,10 @@ #!/bin/bash +if [ "${DEV_MODE}" != "n" ]; then + echo -e "\e[31mEnabled Debug Mode\e[0m" + set -x +fi + trap "exit" INT TERM trap "kill 0" EXIT @@ -297,7 +302,7 @@ unbound_checks() { touch /tmp/unbound-mailcow; echo "$(tail -50 /tmp/unbound-mailcow)" > /tmp/unbound-mailcow host_ip=$(get_container_ip unbound-mailcow) err_c_cur=${err_count} - /usr/lib/nagios/plugins/check_dns -s ${host_ip} -H stackoverflow.com 2>> /tmp/unbound-mailcow 1>&2; err_count=$(( ${err_count} + $? )) + /usr/lib/mailcow/check_dns.sh -s ${host_ip} -H stackoverflow.com 2>> /tmp/unbound-mailcow 1>&2; err_count=$(( ${err_count} + $? )) DNSSEC=$(dig com +dnssec | egrep 'flags:.+ad') if [[ -z ${DNSSEC} ]]; then echo "DNSSEC failure" 2>> /tmp/unbound-mailcow 1>&2 diff --git a/docker-compose.yml b/docker-compose.yml index 8fa7e0606..ce33e3d93 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -521,7 +521,7 @@ services: - /lib/modules:/lib/modules:ro watchdog-mailcow: - image: ghcr.io/mailcow/watchdog:2.08 + image: ghcr.io/mailcow/watchdog:2.09 dns: - ${IPV4_NETWORK:-172.22.1}.254 tmpfs: @@ -588,6 +588,7 @@ services: - OLEFY_THRESHOLD=${OLEFY_THRESHOLD:-5} - MAILQ_THRESHOLD=${MAILQ_THRESHOLD:-20} - MAILQ_CRIT=${MAILQ_CRIT:-30} + - DEV_MODE=${DEV_MODE:-n} networks: mailcow-network: aliases: From 6c5d82c4df2cf24be38608e45b4e1e6bed6e61b2 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Thu, 28 Aug 2025 14:06:17 +0200 Subject: [PATCH 07/26] expanded postscreen whitelist with modern freemailers + included checks.mailcow.email --- data/conf/postfix/postscreen_access.cidr | 98 +++++++++++++++---- helper-scripts/update_postscreen_whitelist.sh | 5 +- 2 files changed, 82 insertions(+), 21 deletions(-) diff --git a/data/conf/postfix/postscreen_access.cidr b/data/conf/postfix/postscreen_access.cidr index 4453feca3..1783620dd 100644 --- a/data/conf/postfix/postscreen_access.cidr +++ b/data/conf/postfix/postscreen_access.cidr @@ -1,13 +1,25 @@ -# Whitelist generated by Postwhite v3.4 on Fri Aug 1 00:24:14 UTC 2025 +# Whitelist generated by Postwhite v3.4 on Do 28. Aug 14:05:16 CEST 2025 # https://github.com/stevejenkins/postwhite/ -# 2166 total rules +# 2225 total rules 2a00:1450:4000::/36 permit 2a01:111:f400::/48 permit +2a01:111:f403::/49 permit 2a01:111:f403:8000::/50 permit 2a01:111:f403:8000::/51 permit -2a01:111:f403::/49 permit 2a01:111:f403:c000::/51 permit 2a01:111:f403:f000::/52 permit +2a01:238:20a:202:5370::1 permit +2a01:238:20a:202:5372::1 permit +2a01:238:20a:202:5373::1 permit +2a01:238:400:101:53::1 permit +2a01:238:400:102:53::1 permit +2a01:238:400:103:53::1 permit +2a01:238:400:301:53::1 permit +2a01:238:400:302:53::1 permit +2a01:238:400:303:53::1 permit +2a01:238:400:470:53::1 permit +2a01:238:400:471:53::1 permit +2a01:238:400:472:53::1 permit 2a01:b747:3000:200::/56 permit 2a01:b747:3001:200::/56 permit 2a01:b747:3002:200::/56 permit @@ -17,16 +29,17 @@ 2a01:b747:3006:200::/56 permit 2a02:a60:0:5::/64 permit 2c0f:fb50:4000::/36 permit -2.207.151.53 permit 2.207.217.30 permit 3.64.237.68 permit 3.65.3.180 permit 3.70.123.177 permit 3.72.182.33 permit 3.74.81.189 permit +3.74.125.228 permit 3.75.33.185 permit 3.93.157.0/24 permit 3.94.40.108 permit +3.121.107.214 permit 3.129.120.190 permit 3.210.190.0/24 permit 3.211.80.218 permit @@ -42,7 +55,7 @@ 8.40.222.0/23 permit 8.40.222.250/31 permit 12.130.86.238 permit -13.107.253.40 permit +13.107.253.44 permit 13.110.208.0/21 permit 13.110.209.0/24 permit 13.110.216.0/22 permit @@ -64,6 +77,8 @@ 18.97.2.64/26 permit 18.156.89.250 permit 18.156.205.64 permit +18.157.70.148 permit +18.157.114.255 permit 18.157.243.190 permit 18.158.153.154 permit 18.194.95.56 permit @@ -75,9 +90,7 @@ 18.216.232.154 permit 18.235.27.253 permit 18.236.40.242 permit -18.236.56.161 permit 20.51.6.32/30 permit -20.51.98.61 permit 20.52.52.2 permit 20.52.128.133 permit 20.59.80.4/30 permit @@ -153,7 +166,6 @@ 34.212.163.75 permit 34.215.104.144 permit 34.218.115.239 permit -34.218.116.3 permit 34.225.212.172 permit 34.241.242.183 permit 35.83.148.184 permit @@ -171,6 +183,7 @@ 37.218.249.47 permit 37.218.251.62 permit 39.156.163.64/29 permit +40.90.65.81 permit 40.92.0.0/15 permit 40.92.0.0/16 permit 40.107.0.0/16 permit @@ -178,6 +191,7 @@ 40.233.64.216 permit 40.233.83.78 permit 40.233.88.28 permit +43.239.212.33 permit 44.206.138.57 permit 44.210.169.44 permit 44.217.45.156 permit @@ -188,7 +202,10 @@ 44.246.68.102 permit 44.246.77.92 permit 45.14.148.0/22 permit -46.19.170.16 permit +45.143.132.0/24 permit +45.143.133.0/24 permit +45.143.134.0/24 permit +45.143.135.0/24 permit 46.226.48.0/21 permit 46.228.36.37 permit 46.228.36.38/31 permit @@ -254,6 +271,9 @@ 50.56.130.221 permit 50.56.130.222 permit 50.112.246.219 permit +51.77.79.158 permit +51.83.17.38 permit +51.89.119.103 permit 52.1.14.157 permit 52.5.230.59 permit 52.6.74.205 permit @@ -304,6 +324,8 @@ 52.234.172.96/28 permit 52.235.253.128 permit 52.236.28.240/28 permit +54.36.149.183 permit +54.38.221.122 permit 54.90.148.255 permit 54.165.19.38 permit 54.174.52.0/24 permit @@ -324,6 +346,7 @@ 54.255.61.23 permit 56.124.6.228 permit 57.103.64.0/18 permit +57.129.93.249 permit 62.13.128.0/24 permit 62.13.129.128/25 permit 62.13.136.0/21 permit @@ -643,6 +666,11 @@ 77.238.189.142 permit 77.238.189.146/31 permit 77.238.189.148/30 permit +79.135.106.0/24 permit +79.135.107.0/24 permit +81.169.146.243 permit +81.169.146.245 permit +81.169.146.246 permit 81.223.46.0/27 permit 82.165.159.2 permit 82.165.159.3 permit @@ -658,7 +686,17 @@ 82.165.159.45 permit 82.165.159.130 permit 82.165.159.131 permit +85.9.206.169 permit +85.9.210.45 permit 85.158.136.0/21 permit +85.215.255.39 permit +85.215.255.40 permit +85.215.255.41 permit +85.215.255.45 permit +85.215.255.46 permit +85.215.255.47 permit +85.215.255.48 permit +85.215.255.49 permit 86.61.88.25 permit 87.238.80.0/21 permit 87.248.103.12 permit @@ -698,6 +736,7 @@ 87.248.117.205 permit 87.253.232.0/21 permit 89.22.108.0/24 permit +91.134.188.129 permit 91.198.2.0/24 permit 91.211.240.0/22 permit 94.236.119.0/26 permit @@ -1342,9 +1381,9 @@ 108.174.6.215 permit 108.175.18.45 permit 108.175.30.45 permit -108.177.8.0/22 permit -108.177.96.0/19 permit +108.177.96.0/20 permit 108.179.144.0/20 permit +109.224.244.0/24 permit 109.237.142.0/24 permit 111.221.23.128/25 permit 111.221.26.0/27 permit @@ -1508,7 +1547,6 @@ 148.105.0.0/16 permit 148.105.8.0/21 permit 149.72.0.0/16 permit -149.72.223.204 permit 149.72.248.236 permit 149.97.173.180 permit 150.230.98.160 permit @@ -1623,7 +1661,6 @@ 169.148.144.0/25 permit 169.148.144.10 permit 169.148.146.0/23 permit -169.148.174.33 permit 169.148.175.3 permit 169.148.188.0/24 permit 169.148.188.182 permit @@ -1671,6 +1708,9 @@ 185.12.80.0/22 permit 185.28.196.0/22 permit 185.58.84.93 permit +185.70.40.0/24 permit +185.70.41.0/24 permit +185.70.43.0/24 permit 185.80.93.204 permit 185.80.93.227 permit 185.80.95.31 permit @@ -1732,6 +1772,7 @@ 188.125.85.234/31 permit 188.125.85.236/31 permit 188.125.85.238 permit +188.165.51.139 permit 188.172.128.0/20 permit 192.0.64.0/18 permit 192.18.139.154 permit @@ -1757,7 +1798,11 @@ 193.142.157.0/24 permit 193.142.157.191 permit 193.142.157.198 permit +193.201.168.38 permit +193.201.168.170/31 permit 194.19.134.0/25 permit +194.25.134.16/28 permit +194.25.134.80/28 permit 194.64.234.129 permit 194.97.196.0/24 permit 194.97.196.3 permit @@ -1957,8 +2002,6 @@ 208.71.42.212/31 permit 208.71.42.214 permit 208.72.249.240/29 permit -208.74.204.5 permit -208.74.204.9 permit 208.75.120.0/22 permit 208.76.62.0/24 permit 208.76.63.0/24 permit @@ -2022,6 +2065,8 @@ 212.227.15.4 permit 212.227.15.5 permit 212.227.15.6 permit +212.227.15.7 permit +212.227.15.8 permit 212.227.15.14 permit 212.227.15.15 permit 212.227.15.18 permit @@ -2038,16 +2083,30 @@ 212.227.15.53 permit 212.227.15.54 permit 212.227.15.55 permit +212.227.17.1 permit +212.227.17.2 permit +212.227.17.7 permit 212.227.17.11 permit 212.227.17.12 permit +212.227.17.16 permit +212.227.17.17 permit 212.227.17.18 permit 212.227.17.19 permit 212.227.17.20 permit 212.227.17.21 permit 212.227.17.22 permit 212.227.17.26 permit +212.227.17.27 permit 212.227.17.28 permit 212.227.17.29 permit +212.227.126.206 permit +212.227.126.207 permit +212.227.126.208 permit +212.227.126.209 permit +212.227.126.220 permit +212.227.126.221 permit +212.227.126.222 permit +212.227.126.223 permit 212.227.126.224 permit 212.227.126.225 permit 212.227.126.226 permit @@ -2155,16 +2214,17 @@ 2607:13c0:0002:0000:0000:0000:0000:1000/116 permit 2607:13c0:0004:0000:0000:0000:0000:0000/116 permit 2607:f8b0:4000::/36 permit -2620:109:c003:104::/64 permit 2620:109:c003:104::215 permit -2620:109:c006:104::/64 permit +2620:109:c003:104::/64 permit 2620:109:c006:104::215 permit +2620:109:c006:104::/64 permit 2620:109:c00d:104::/64 permit 2620:10d:c090:400::8:1 permit 2620:10d:c091:400::8:1 permit 2620:10d:c09b:400::8:1 permit 2620:10d:c09c:400::8:1 permit -2620:119:50c0:207::/64 permit 2620:119:50c0:207::215 permit +2620:119:50c0:207::/64 permit 2800:3f0:4000::/36 permit -194.25.134.0/24 permit # t-online.de +49.12.4.251 permit # checks.mailcow.email +2a01:4f8:c17:7906::10 permit # checks.mailcow.email diff --git a/helper-scripts/update_postscreen_whitelist.sh b/helper-scripts/update_postscreen_whitelist.sh index 04335bda5..dda64b263 100644 --- a/helper-scripts/update_postscreen_whitelist.sh +++ b/helper-scripts/update_postscreen_whitelist.sh @@ -6,9 +6,10 @@ SPFTOOLS_DIR=${WORKING_DIR}/spf-tools POSTWHITE_DIR=${WORKING_DIR}/postwhite POSTWHITE_CONF=${POSTWHITE_DIR}/postwhite.conf -CUSTOM_HOSTS='"web.de gmx.net mail.de freenet.de arcor.de unity-mail.de"' +CUSTOM_HOSTS='"web.de gmx.net mail.de freenet.de arcor.de unity-mail.de protonmail.ch ionos.com strato.com t-online.de"' STATIC_HOSTS=( - "194.25.134.0/24 permit # t-online.de" + "49.12.4.251 permit # checks.mailcow.email" + "2a01:4f8:c17:7906::10 permit # checks.mailcow.email" ) mkdir ${SCRIPT_DIR}/postwhite_tmp From 0b0a65a3f338a2e3b191841d6322d4dcc4834e70 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Thu, 28 Aug 2025 17:02:16 +0200 Subject: [PATCH 08/26] web: rename login placeholder for mailbox to email address (#6693) --- data/web/lang/lang.de-de.json | 3 ++- data/web/lang/lang.en-gb.json | 3 ++- data/web/templates/user_index.twig | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index 1d2edc1b4..55fc11ab4 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -846,7 +846,8 @@ "password": "Passwort", "reset_password": "Passwort zurücksetzen", "request_reset_password": "Passwortänderung anfordern", - "username": "Benutzername" + "username": "Benutzername", + "email": "E-Mail-Adresse" }, "mailbox": { "action": "Aktion", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 78059c0b8..4ee5675be 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -847,7 +847,8 @@ "password": "Password", "reset_password": "Reset Password", "request_reset_password": "Request password change", - "username": "Username" + "username": "Username", + "email": "Email address" }, "mailbox": { "action": "Action", diff --git a/data/web/templates/user_index.twig b/data/web/templates/user_index.twig index 234aa01cb..28eb6389c 100644 --- a/data/web/templates/user_index.twig +++ b/data/web/templates/user_index.twig @@ -48,7 +48,7 @@
- +
From c0b7a98e6c44c62ee06eb7462ac05d313e2a808e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 29 Aug 2025 18:23:56 +0200 Subject: [PATCH 09/26] chore(deps): update actions/checkout action to v5 (#6671) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/image_builds.yml | 2 +- .github/workflows/pr_to_nightly.yml | 2 +- .github/workflows/rebuild_backup_image.yml | 2 +- .github/workflows/update_postscreen_access_list.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/image_builds.yml b/.github/workflows/image_builds.yml index 27fc9a2d5..a5ebb902f 100644 --- a/.github/workflows/image_builds.yml +++ b/.github/workflows/image_builds.yml @@ -27,7 +27,7 @@ jobs: - "watchdog-mailcow" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup Docker run: | curl -sSL https://get.docker.com/ | CHANNEL=stable sudo sh diff --git a/.github/workflows/pr_to_nightly.yml b/.github/workflows/pr_to_nightly.yml index 51df14f6e..334dcf69a 100644 --- a/.github/workflows/pr_to_nightly.yml +++ b/.github/workflows/pr_to_nightly.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 - name: Run the Action diff --git a/.github/workflows/rebuild_backup_image.yml b/.github/workflows/rebuild_backup_image.yml index adf69eb35..a8679d980 100644 --- a/.github/workflows/rebuild_backup_image.yml +++ b/.github/workflows/rebuild_backup_image.yml @@ -13,7 +13,7 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up QEMU uses: docker/setup-qemu-action@v3 diff --git a/.github/workflows/update_postscreen_access_list.yml b/.github/workflows/update_postscreen_access_list.yml index 3d79e801b..eed07876e 100644 --- a/.github/workflows/update_postscreen_access_list.yml +++ b/.github/workflows/update_postscreen_access_list.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Generate postscreen_access.cidr run: | From 48e90a72dce562eef8cf237faffe2b03f32d8a28 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 29 Aug 2025 18:27:34 +0200 Subject: [PATCH 10/26] Changed clamavs tmp folder structure --- data/Dockerfiles/clamd/clamd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Dockerfiles/clamd/clamd.sh b/data/Dockerfiles/clamd/clamd.sh index 2c6e75dc6..c656be065 100755 --- a/data/Dockerfiles/clamd/clamd.sh +++ b/data/Dockerfiles/clamd/clamd.sh @@ -8,7 +8,7 @@ fi # Cleaning up garbage echo "Cleaning up tmp files..." -rm -rf /var/lib/clamav/clamav-*.tmp +rm -rf /var/lib/clamav/tmp.* # Prepare whitelist From 921de02a2b09d1a80cc68dca811cbf892b44ee2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A1ndor?= <9724897+sandroshu@users.noreply.github.com> Date: Fri, 29 Aug 2025 18:32:17 +0200 Subject: [PATCH 11/26] Update lang.hu-hu.json (#6697) Extended Hungarian translation --- data/web/lang/lang.hu-hu.json | 624 +++++++++++++++++++++++++++++++--- 1 file changed, 586 insertions(+), 38 deletions(-) diff --git a/data/web/lang/lang.hu-hu.json b/data/web/lang/lang.hu-hu.json index 3b9eb5fbc..6ec3ed68a 100644 --- a/data/web/lang/lang.hu-hu.json +++ b/data/web/lang/lang.hu-hu.json @@ -9,11 +9,11 @@ "source": "Forrás", "spamfilter": "Spam szűrő", "subject": "Tárgy", - "sys_mails": "Rendszer-üzenetek", + "sys_mails": "Rendszerüzenetek", "text": "Szöveg", "time": "Idő", "title": "Cím", - "title_name": "\"mailcow UI\" website címe", + "title_name": "\"mailcow UI\" weboldal címe", "to_top": "Vissza a tetejére", "transport_dest_format": "Szintaxis: pelda.hu, .pelda.hu, *, fiok@pelda.hu (több érték esetén vesszővel elválasztva)", "upload": "Feltöltés", @@ -29,14 +29,14 @@ "logo_dark_label": "Sötét üzemmódhoz invertálva", "f2b_regex_info": "Figyelembe vett naplók: SOGo, Postfix, Dovecot, PHP-FPM.", "f2b_retry_window": "Újrapróbálkozási ablak (s) a maximális próbálkozásokhoz", - "f2b_whitelist": "Fehérlistás hálózatok/hostok", + "f2b_whitelist": "Engedélyezési listás hálózatok/hostok", "filter_table": "Szűrő táblázat", "forwarding_hosts": "Továbbító hostok", - "forwarding_hosts_add_hint": "Megadhat IPv4/IPv6 címeket, hálózatokat CIDR jelölésben, állomásneveket (amelyek IP-címekre lesznek feloldva) vagy tartományneveket (amelyek IP-címekre lesznek feloldva az SPF rekordok vagy ezek hiányában az MX rekordok lekérdezésével).", + "forwarding_hosts_add_hint": "Megadhat IPv4/IPv6 címeket, hálózatokat CIDR jelölésben, állomásneveket (amelyek IP címekre lesznek feloldva) vagy tartományneveket (amelyek IP címekre lesznek feloldva az SPF rekordok vagy ezek hiányában az MX rekordok lekérdezésével).", "from": "A címről", "copy_to_clipboard": "Szöveg másolva a vágólapra!", "f2b_manage_external": "A Fail2Ban külső kezelése", - "f2b_manage_external_info": "A Fail2ban továbbra is karbantartja a tiltólistát, de nem állít be aktívan szabályokat a forgalom blokkolására. Használja az alábbi generált tiltólistát a forgalom külső blokkolásához.", + "f2b_manage_external_info": "A Fail2ban továbbra is karbantartja a tiltólistát, de nem állít be aktívan szabályokat a forgalom blokkolásához. Használja az alábbi generált tiltólistát a forgalom külső blokkolásához.", "f2b_max_ban_time": "Maximális tiltási idő (s)", "f2b_netban_ipv4": "IPv4 alhálózat mérete, amelyre tilalmat kell alkalmazni (8-32)", "f2b_netban_ipv6": "IPv6 alhálózat mérete, amelyre tilalmat kell alkalmazni (8-128)", @@ -47,13 +47,13 @@ "html": "HTML", "import": "Import", "ip_check": "IP ellenőrzés", - "ip_check_disabled": "Az IP-ellenőrzés le van tiltva. Bekapcsolhatja a következő menüpont alatt
Rendszer > Beállítások > Opciók > Személyreszabás", + "ip_check_disabled": "Az IP ellenőrzés le van tiltva. Bekapcsolhatja a következő menüpont alatt
Rendszer > Beállítások > Opciók > Személyreszabás", "is_mx_based": "MX alapú", "last_applied": "Utoljára alkalmazott", "link": "Link", "loading": "Kérjük, várj...", "login_time": "Bejelentkezési idő", - "f2b_list_info": "Egy feketelistán szereplő állomás vagy hálózat mindig nagyobb súlyú, mint egy fehérlistás entitás. A lista frissítései néhány másodpercig tartanak.", + "f2b_list_info": "Egy tiltólistán szereplő állomás vagy hálózat mindig nagyobb súlyú, mint egy engedélyezési listás elem. A lista frissítései néhány másodpercig tartanak.", "f2b_ban_time_increment": "A tiltási idő minden egyes tiltással növekszik", "additional_rows": " - további sorokat adtak hozzá", "admin": "Adminisztrátor", @@ -68,7 +68,7 @@ "api_key": "API-kulcs", "api_read_only": "Csak olvasható hozzáférés", "api_read_write": "Olvasás-írás hozzáférés", - "api_skip_ip_check": "IP-ellenőrzés kihagyása az API esetében", + "api_skip_ip_check": "IP ellenőrzés kihagyása az API esetében", "cors_settings": "CORS beállítások", "guid": "GUID - egyedi példányazonosító", "dkim_to": "A címre", @@ -82,8 +82,8 @@ "edit": "Szerkesztés", "empty": "Nincs eredmény", "excludes": "Kizárja ezeket a kedvezményezetteket", - "f2b_ban_time": "Tilalmi idő (s)", - "f2b_blacklist": "Feketelistás hálózatok/hostok", + "f2b_ban_time": "Tiltás időtartam (s)", + "f2b_blacklist": "Tiltólistás címek", "f2b_filter": "Regex szűrők", "logo_info": "A képed 40px magasságúra lesz méretezve a felső navigációs sávhoz és max. 250px szélességűre a kezdőlaphoz. A skálázható grafika használata erősen ajánlott.", "dkim_add_key": "ARC/DKIM kulcs hozzáadása", @@ -122,21 +122,187 @@ "arrival_time": "Érkezési idő (szerveridő)", "authed_user": "Azonosított felhasználó", "ays": "Biztos, hogy folytatni akarod?", - "ban_list_info": "A tiltott IP-címek listáját lásd alább: hálózat (fennmaradó tiltási idő) - [akciók].
A tiltás feloldására várakozó IP-ket néhány másodpercen belül eltávolítjuk az aktív tiltási listáról.
A piros címkék a feketelistán szereplő aktív állandó tiltásokat jelzik.", + "ban_list_info": "A tiltott IP címek listáját lásd alább: hálózat (fennmaradó tiltási idő) - [akciók].
A tiltás feloldására várakozó IP-ket néhány másodpercen belül eltávolítjuk az aktív tiltási listáról.
A piros címkék a tiltólistán szereplő aktív állandó tiltásokat jelzik.", "configuration": "Konfiguráció", "convert_html_to_text": "HTML átalakítása egyszerű szöveggé", "credentials_transport_warning": "Figyelmeztetés: Egy új közlekedési térképbejegyzés hozzáadása frissíti a hitelesítő adatokat minden olyan bejegyzéshez, amelynek a következő ugrás oszlopa megegyezik.", "customize": "Testreszabás", "destination": "Célállomás", "customer_id": "Ügyfél azonosító", - "apps_name": "\"mailcow Apps\" név" + "apps_name": "\"mailcow Apps\" név", + "admin_quicklink": "Gyorshivatkozás elrejtése az Adminisztrátori bejelentkezési oldalra", + "app_hide": "Elrejtés a bejelentkezéshez", + "domainadmin_quicklink": "Gyorshivatkozás elrejtése a Domain adminisztrátori bejelentkezési oldalra", + "filter": "Szűrő", + "force_sso_text": "Ha egy külső OIDC-szolgáltató van beállítva, ez az opció elrejti az alapértelmezett mailcow bejelentkezési űrlapokat, és csak az egységes bejelentkezési (Single Sign-On) gombot jeleníti meg", + "force_sso": "A mailcow bejelentkezés letiltása és csak az egységes bejelentkezés megjelenítése", + "hash_remove_info": "Egy arányszám-korlát hash eltávolítása (ha még létezik) teljesen visszaállítja a számlálóját.
\r\n Minden hash-t egyedi szín jelöl.", + "iam": "Azonosítási szolgáltató", + "iam_attribute_field": "Attribútum mező", + "iam_authorize_url": "Engedélyezési végpont", + "iam_auth_flow": "Azonosítási folyamat", + "iam_auth_flow_info": "Az engedélyezési kód áramláson (Authorization Code Flow) kívül, amelyet az egységes bejelentkezéshez (Single-Sign On) használnak (ez a standard áramlás Keycloak-ban), a mailcow támogatja a közvetlen hitelesítő adatokkal történő hitelesítési áramlást is. A Jelszóáramlás (Mailpassword Flow) megpróbálja érvényesíteni a felhasználó hitelesítő adatait a Keycloak Admin REST API használatával. A mailcow a mailcow_password attribútumból olvassa be a hash-elt jelszót, amely a Keycloak-ban van leképezve.", + "iam_basedn": "Bázis DN", + "iam_client_id": "Kliens azonosító", + "iam_client_secret": "Kliens titok", + "iam_client_scopes": "Kliens hatókörök", + "iam_default_template": "Alapértelmezett sablon", + "iam_default_template_description": "Ha nincs sablon hozzárendelve egy felhasználóhoz, az alapértelmezett sablon lesz felhasználva a postafiók létrehozásához, de a postafiók frissítéséhez nem.", + "iam_description": "Külső azonosítási szolgáltató konfigurálása.
A felhasználók postafiókjai automatikusan létrejönnek az első bejelentkezéskor, feltéve, hogy van attribútum-hozzárendelés beállítva.", + "iam_extra_permission": "A következő beállításokhoz a Keycloak-ban lévő mailcow kliensnek szüksége van egy Service account-ra és a view-users engedélyre.", + "iam_host": "Házigazda", + "iam_host_info": "Adjon meg egy vagy több LDAP állomást, vesszővel elválasztva.", + "iam_import_users": "Felhasználók importálása", + "iam_login_provisioning": "Felhasználók automatikus létrehozása bejelentkezéskor", + "iam_mapping": "Attribútum-hozzárendelés", + "iam_bindpass": "Bind jelszó", + "iam_periodic_full_sync": "Időszakos teljes szinkronizálás", + "iam_port": "Port", + "iam_realm": "Tartomány", + "iam_redirect_url": "Átirányítási URL", + "iam_rest_flow": "Mailpassword Flow", + "iam_server_url": "Szerver URL", + "iam_sso": "Egységes bejelentkezés", + "iam_sync_interval": "Szinkronizálási / importálási időtartam (perc)", + "iam_test_connection": "Kapcsolat tesztelése", + "iam_token_url": "Token végpont", + "iam_userinfo_url": "Felhasználói információ végpont", + "iam_username_field": "Felhasználónév mező", + "iam_binddn": "Bind DN", + "iam_use_ssl": "SSL használata", + "iam_use_ssl_info": "Ha az SSL-t engedélyezi, és a port 389-re van állítva, az automatikusan felülíródik 636-ra.", + "iam_use_tls": "StartTLS használata", + "iam_use_tls_info": "Ha a TLS-t engedélyezi, az LDAP szerver alapértelmezett portját kell használnia (389). Az SSL portok nem használhatók.", + "iam_version": "Verzió", + "ignore_ssl_error": "SSL hibák figyelmen kívül hagyása", + "ip_check_opt_in": "Választás a harmadik féltől származó ipv4.mailcow.email és ipv6.mailcow.email szolgáltatás használatára a külső IP címek feloldásához.", + "license_info": "A licensz nem kötelező, de segít a további fejlesztésben.
Regisztrálja a GUID-ját itt vagy vásároljon támogatást a mailcow telepítéséhez.", + "lookup_mx": "A cél egy reguláris kifejezés, amely illeszkedik az MX névre (.*\\.google\\.com, hogy a google.com-ra végződő MX-en keresztül továbbítsa az összes levelet)", + "main_name": "\"mailcow UI\" név", + "merged_vars_hint": "A szürkével jelölt sorok a vars.(local.)inc.php fájlból lettek összevonva, és nem módosíthatók.", + "message": "Üzenet", + "message_size": "Üzenet mérete", + "nexthop": "Következő ugrás", + "no": "✕", + "no_active_bans": "Nincs aktív tiltás", + "no_new_rows": "Nincs több sor elérhető", + "no_record": "Nincs bejegyzés", + "oauth2_apps": "OAuth2 alkalmazások", + "oauth2_add_client": "OAuth2 kliens hozzáadása", + "oauth2_client_id": "Kliens azonosító", + "oauth2_client_secret": "Kliens titok", + "oauth2_info": "Az OAuth2 implementáció támogatja az \"Authorization Code\" engedélyezési típust és frissítési tokeneket ad ki.
\r\nA szerver automatikusan új frissítési tokeneket is kiad, miután egy frissítési token fel lett használva.

\r\n• Az alapértelmezett hatókör a profile. Csak postafiók-felhasználók hitelesíthetők az OAuth2-vel szemben. Ha a scope paraméter elmarad, az visszaesik a profile-ra.
\r\n• A state paramétert a kliensnek kötelező elküldenie az engedélyezési kérelem részeként.

\r\nAz OAuth2 API-hoz intézett kérések útvonalai:
\r\n
    \r\n
  • Engedélyezési végpont: /oauth/authorize
  • \r\n
  • Token végpont: /oauth/token
  • \r\n
  • Erőforrás oldal: /oauth/profile
  • \r\n
\r\nA kliens titok újragenerálása nem jár le a meglévő engedélyezési kódok lejáratával, de azok nem tudják megújítani a tokenjüket.

\r\nA kliens tokenek visszavonása az összes aktív munkamenet azonnali leállítását okozza. Minden kliensnek újra kell hitelesítenie magát.", + "oauth2_redirect_uri": "Átirányítási URI", + "oauth2_renew_secret": "Új kliens titok generálása", + "oauth2_revoke_tokens": "Minden kliens token visszavonása", + "optional": "opcionális", + "options": "Opciók", + "password": "Jelszó", + "password_length": "Jelszó hossza", + "password_policy": "Jelszó házirend", + "password_policy_chars": "Legalább egy betűkaraktert kell tartalmaznia", + "password_policy_length": "A jelszó minimális hossza %d", + "password_policy_lowerupper": "Kis- és nagybetűket kell tartalmaznia", + "password_policy_numbers": "Legalább egy számot kell tartalmaznia", + "password_policy_special_chars": "Speciális karaktereket kell tartalmaznia", + "password_repeat": "Megerősítő jelszó (ismétlés)", + "password_reset_info": "Ha nincs megadva helyreállítási e-mail cím, ez a funkció nem használható.", + "password_reset_settings": "Jelszó-helyreállítási beállítások", + "password_reset_tmpl_html": "HTML sablon", + "password_reset_tmpl_text": "Szöveges sablon", + "password_settings": "Jelszó beállítások", + "priority": "Prioritás", + "private_key": "Privát kulcs", + "quarantine": "Karantén", + "quarantine_bcc": "Az összes értesítés másolatának elküldése (BCC) erre a címzettnek:
Hagyja üresen a letiltáshoz. Aláíratlan, nem ellenőrzött levél. Csak belső kézbesítésre alkalmas.", + "quarantine_exclude_domains": "Tartományok és alias-tartományok kizárása", + "quarantine_max_age": "Maximális életkor napokban
Az értéknek legalább 1 napnak kell lennie.", + "quarantine_max_score": "Az értesítés elvetése, ha egy levél spam pontszáma magasabb ennél az értéknél:
Alapértelmezett értéke 9999.0", + "quarantine_max_size": "Maximális méret MiB-ban (a nagyobb elemeket elveti):
A 0 nem jelent korlátlant.", + "quarantine_notification_html": "Értesítő e-mail sablon:
Hagyja üresen az alapértelmezett sablon visszaállításához.", + "quarantine_notification_sender": "Értesítő e-mail feladója", + "quarantine_notification_subject": "Értesítő e-mail tárgya", + "quarantine_redirect": "Az összes értesítés átirányítása erre a címzettnek:
Hagyja üresen a letiltáshoz. Aláíratlan, nem ellenőrzött levél. Csak belső kézbesítésre alkalmas.", + "quarantine_release_format": "A feloldott elemek formátuma", + "quarantine_release_format_att": "Csatolmányként", + "quarantine_release_format_raw": "Eredeti, módosítatlan formában", + "quarantine_retention_size": "Megőrzések postafiókonként:
A 0 inaktívat jelent.", + "quicklink_text": "A gyorshivatkozások megjelenítése vagy elrejtése a bejelentkezési űrlap alatt", + "quota_notification_html": "Értesítő e-mail sablon:
Hagyja üresen az alapértelmezett sablon visszaállításához.", + "quota_notification_sender": "Kvóta értesítő e-mail feladója", + "quota_notification_subject": "Kvóta értesítő e-mail tárgya", + "quota_notifications": "Kvóta értesítések", + "quota_notifications_info": "A kvóta értesítéseket a felhasználók egyszer kapják meg, amikor a 80%-os határt, majd a 95%-os határt átlépik.", + "quota_notifications_vars": "{{percent}} a felhasználó aktuális kvótáját jelenti
{{username}} a postafiók neve", + "queue_unban": "tiltás feloldása", + "r_active": "Aktív korlátozások", + "r_inactive": "Inaktív korlátozások", + "r_info": "A szürkével/letiltva jelölt elemek az aktív korlátozások listáján a mailcow számára nem érvényes korlátozások, és nem mozgathatók. Az ismeretlen korlátozások a megjelenési sorrendben lesznek beállítva.
Új elemeket adhat hozzá a inc/vars.local.inc.php fájlban, hogy váltani tudja őket.", + "rate_name": "Arányszám neve", + "recipients": "Címzettek", + "refresh": "Frissítés", + "regen_api_key": "API kulcs újragenerálása", + "regex_maps": "Regex térképek", + "relay_from": "\"Feladó:\" cím", + "relay_rcpt": "\"Címzett:\" cím", + "relay_run": "Teszt futtatása", + "relayhosts": "Feladófüggő szállítások", + "relayhosts_hint": "Határozzon meg feladófüggő szállításokat, hogy kiválaszthassa őket egy tartomány konfigurációs párbeszédpanelén.
\r\n A szállítási szolgáltatás mindig \"smtp:\" és ezért megpróbálja a TLS-t, ha felajánlják. A becsomagolt TLS (SMTPS) nem támogatott. A felhasználók egyéni kimenő TLS-szabályzati beállításai figyelembe vételre kerülnek.
\r\n Érintik a kiválasztott tartományokat, beleértve az alias tartományokat is.", + "remove": "Eltávolítás", + "remove_row": "Sor eltávolítása", + "reset_default": "Visszaállítás alapértelmezettre", + "reset_limit": "Hash eltávolítása", + "reset_password_vars": "{{link}} A generált jelszó-helyreállítási link
{{username}} A jelszó-helyreállítást kérő felhasználó postafiók neve
{{username2}} A helyreállítási postafiók neve
{{date}} A jelszó-helyreállítási kérelem dátuma
{{token_lifetime}} A token élettartama percekben
{{hostname}} A mailcow hosztnév", + "restore_template": "Hagyja üresen az alapértelmezett sablon visszaállításához.", + "routing": "Útválasztás", + "rsetting_add_rule": "Szabály hozzáadása", + "rsetting_content": "Szabály tartalma", + "rsetting_desc": "Rövid leírás", + "rsetting_no_selection": "Kérjük, válasszon egy szabályt", + "rsetting_none": "Nincsenek elérhető szabályok", + "rsettings_insert_preset": "Példa előre beállított \"%s\" beillesztése", + "rsettings_preset_1": "Minden letiltása, kivéve a DKIM és az arányszám-korlátot a hitelesített felhasználók számára", + "rsettings_preset_2": "A Postmasterek spamet akarnak", + "rsettings_preset_3": "Csak bizonyos feladókat engedélyezzen egy postafiók számára (pl. csak belső postafiókként használva)", + "rsettings_preset_4": "Rspamd letiltása egy tartomány számára", + "rspamd_com_settings": "A beállítás neve automatikusan generálódik, kérjük, nézze meg a lenti példa-előrebeállításokat. További részletekért lásd a Rspamd dokumentációját", + "rspamd_global_filters": "Globális szűrőtérképek", + "rspamd_global_filters_agree": "Óvatos leszek!", + "rspamd_global_filters_info": "A globális szűrőtérképek különböző típusú globális tiltó- és engedélyezési listákat tartalmaznak.", + "rspamd_global_filters_regex": "A nevük elmagyarázza a céljukat. Minden tartalomnak érvényes reguláris kifejezést kell tartalmaznia \"/pattern/options\" formátumban (pl. /.+@domain\\.tld/i).
\r\n Bár alapvető ellenőrzések történnek minden regex soron, az Rspamd funkcionalitása megszakadhat, ha nem sikerül helyesen értelmeznie a szintaxist.
\r\n Az Rspamd megpróbálja elolvasni a térkép tartalmát, amikor az megváltozik. Ha problémákat tapasztal, indítsa újra az Rspamd-et, hogy kikényszerítse a térkép újratöltését.
A tiltólistára került elemek ki vannak zárva a karanténból.", + "rspamd_settings_map": "Rspamd beállítási térkép", + "sal_level": "Moo szint", + "service": "Szolgáltatás", + "service_id": "Szolgáltatás azonosító", + "sys_mails": "Rendszer e-mailek", + "task": "Feladat", + "transport_maps": "Szállítási térképek", + "transport_test_rcpt_info": "• Használja a null@hosted.mailcow.de címet a külföldi célra történő továbbítás teszteléséhez.", + "transports_hint": "• Egy szállítási térkép bejegyzés felülírja a feladófüggő szállítási térképet.
\r\n• Az MX-alapú szállítások előnyben részesítettek.
\r\n• A felhasználónkénti kimenő TLS-szabályzati beállítások figyelmen kívül hagyódnak, és csak a TLS-szabályzati térkép bejegyzései kényszeríthetik ki őket.
\r\n• A definiált szállításokhoz a szállítási szolgáltatás mindig \"smtp:\" és ezért megpróbálja a TLS-t, ha felajánlják. A becsomagolt TLS (SMTPS) nem támogatott.
\r\n• A \"/localhost$/\"-nek megfelelő címek mindig \"local:\"-on keresztül lesznek szállítva, ezért a \"*\" cél nem vonatkozik ezekre a címekre.
\r\n• A hitelesítő adatok meghatározásához egy példa következő ugráshoz \"[host]:25\", a Postfix mindig lekérdezi a \"host\"-ot, mielőtt a \"[host]:25\"-re keresne. Ez a viselkedés lehetetlenné teszi a \"host\" és a \"[host]:25\" egyidejű használatát.", + "ui_footer": "Lábléc (HTML engedélyezett)", + "ui_header_announcement": "Közlemények", + "ui_header_announcement_active": "Közlemény beállítása aktívra", + "ui_header_announcement_content": "Szöveg (HTML engedélyezett)", + "ui_header_announcement_help": "A közlemény minden bejelentkezett felhasználó számára látható, valamint a felhasználói felület bejelentkezési képernyőjén.", + "ui_header_announcement_select": "Válassza ki a közlemény típusát", + "ui_header_announcement_type": "Típus", + "ui_header_announcement_type_danger": "Nagyon fontos", + "ui_header_announcement_type_info": "Információ", + "ui_header_announcement_type_warning": "Fontos", + "ui_texts": "Felhasználói felület címkéi és szövegei", + "unban_pending": "tiltás feloldása függőben", + "unchanged_if_empty": "Ha nem változik, hagyja üresen", + "user_link": "Felhasználói-link", + "user_quicklink": "Gyorshivatkozás elrejtése a Felhasználói bejelentkezési oldalra", + "validate_license_now": "GUID érvényesítése a licenszszerverrel szemben", + "yes": "✓" }, "edit": { "active": "Aktív", "advanced_settings": "Haladó beállítások", "alias": "Alias szerkesztése", - "allow_from_smtp": "Kizárólag ezen IP-címek használhatnak SMTP-t", - "allow_from_smtp_info": "Leave empty to allow all senders.
IPv4/IPv6 addresses and networks.", + "allow_from_smtp": "Kizárólag ezen IP címek használhatnak SMTP-t", + "allow_from_smtp_info": "Hagyja üresen minden feladó engedélyezéséhez.
IPv4/IPv6 címek és hálózatok.", "allowed_protocols": "Engedélyezett protokollok", "app_name": "Applikáció neve", "app_passwd": "Applikáció jelszava", @@ -146,7 +312,127 @@ "description": "Leírás", "domain_quota": "Domain kvóta", "domains": "Domainek", - "edit_alias_domain": "Alias domain szerkesztése" + "edit_alias_domain": "Alias domain szerkesztése", + "acl": "ACL (Engedélyek)", + "admin": "Adminisztrátor szerkesztése", + "app_passwd_protocols": "Engedélyezett protokollok az alkalmazás jelszavához", + "automap": "Próbálja automatikusan feltérképezni a mappákat (\"Elküldött elemek\", \"Elküldött\" => \"Elküldött\" stb.)", + "bcc_dest_format": "A BCC-célpontnak egyetlen érvényes e-mail címnek kell lennie.
Ha több címre kell másolatot küldenie, hozzon létre egy aliast, és használja azt itt.", + "comment_info": "A privát megjegyzés nem látható a felhasználó számára, míg a nyilvános megjegyzés tooltip-ként jelenik meg, amikor a felhasználó áttekintésében a megjegyzésre mutat.", + "created_on": "Létrehozva", + "custom_attributes": "Egyéni attribútumok", + "delete1": "Törlés a forrásból, ha befejeződött", + "delete2": "Üzenetek törlése a célállomáson, amelyek nincsenek a forráson", + "delete2duplicates": "Duplikáltak törlése a célállomáson", + "delete_ays": "Erősítse meg a törlési folyamatot.", + "disable_login": "Bejelentkezés letiltása (a bejövő leveleket továbbra is elfogadja)", + "domain": "Domain szerkesztése", + "domain_admin": "Domain adminisztrátor szerkesztése", + "domain_footer": "Tartományszintű lábléc", + "domain_footer_html": "HTML lábléc", + "domain_footer_info": "A tartományszintű lábléceket a tartományon belüli címmel társított összes kimenő e-mailhez hozzáadják.
A következő változók használhatók a lábléchez:", + "domain_footer_info_vars": { + "auth_user": "{= auth_user =} - Hitelesített felhasználónév az MTA által megadott", + "from_user": "{= from_user =} - A boríték feladójának felhasználói része, pl. a \"moo@mailcow.tld\" esetén \"moo\"-t ad vissza", + "from_name": "{= from_name =} - A boríték feladójának neve, pl. a \"Mailcow <moo@mailcow.tld>\" esetén \"Mailcow\"-t ad vissza", + "from_addr": "{= from_addr =} - A boríték feladójának címe", + "from_domain": "{= from_domain =} - A boríték feladójának tartománya", + "custom": "{= foo =} - Ha a postafiók rendelkezik a \"foo\" egyéni attribútummal, amelynek értéke \"bar\", akkor \"bar\"-t ad vissza" + }, + "domain_footer_plain": "Egyszerű szöveges lábléc", + "domain_footer_skip_replies": "Lábléc figyelmen kívül hagyása válasz e-maileknél", + "dont_check_sender_acl": "Küldő ellenőrzés letiltása a(z) %s tartományhoz (+ alias tartományok)", + "encryption": "Titkosítás", + "exclude": "Objektumok kizárása (regex)", + "extended_sender_acl": "Külső feladói címek", + "extended_sender_acl_info": "Importálni kell egy DKIM tartomány kulcsot, ha elérhető.
\r\n Ne felejtse el hozzáadni ezt a szervert a megfelelő SPF TXT rekordhoz.
\r\n Amikor egy tartományt vagy alias tartományt ad hozzá ehhez a szerverhez, amely átfedésben van egy külső címmel, a külső cím eltávolításra kerül.
\r\n Használja a @domain.tld címet, hogy engedélyezze a küldést *@domain.tld néven.", + "force_pw_update": "Jelszófrissítés kényszerítése a következő bejelentkezéskor", + "force_pw_update_info": "Ez a felhasználó csak a(z) %s címre tud bejelentkezni. Az alkalmazás jelszavak használhatóak maradnak.", + "footer_exclude": "Kizárás a láblécből", + "full_name": "Teljes név", + "gal": "Globális címlista", + "gal_info": "A GAL tartalmazza a tartomány összes objektumát, és egyetlen felhasználó sem szerkesztheti. A Szabad/Foglalt információ a SOGo-ban hiányzik, ha le van tiltva! Indítsa újra a SOGo-t a változások alkalmazásához.", + "generate": "generál", + "grant_types": "Engedélyezési típusok", + "hostname": "Hosztnév", + "inactive": "Inaktív", + "kind": "Típus", + "last_modified": "Utoljára módosítva", + "lookup_mx": "A cél egy reguláris kifejezés, amely illeszkedik az MX névre (.*\\.google\\.com, hogy a google.com-ra végződő MX-en keresztül továbbítsa az összes levelet)", + "mailbox": "Postafiók szerkesztése", + "mailbox_quota_def": "Alapértelmezett postafiók kvóta", + "mailbox_relayhost_info": "A postafiókra és csak a közvetlen aliasokra vonatkozik, felülírja a tartományi továbbító hostot.", + "mailbox_rename": "Postafiók átnevezése", + "mailbox_rename_agree": "Készítettem biztonsági másolatot.", + "mailbox_rename_warning": "FONTOS! Hozzon létre biztonsági másolatot a postafiók átnevezése előtt.", + "mailbox_rename_alias": "Alias automatikus létrehozása", + "mailbox_rename_title": "Új helyi postafiók neve", + "max_aliases": "Max. aliasok", + "max_mailboxes": "Max. lehetséges postafiókok", + "max_quota": "Max. kvóta postafiókonként (MiB)", + "maxage": "Üzenetek maximális életkora napokban, amelyek lekérdezésre kerülnek a távolról
(0 = figyelmen kívül hagyás)", + "maxbytespersecond": "Max. bájt/másodperc
(0 = korlátlan)", + "mbox_rl_info": "Ez a sebességkorlátozás a SASL bejelentkezési névre vonatkozik, és illeszkedik minden, a bejelentkezett felhasználó által használt \"from\" címre. Egy postafiók sebességkorlátozása felülírja a tartományszintű sebességkorlátozást.", + "mins_interval": "Időköz (perc)", + "multiple_bookings": "Több foglalás", + "none_inherit": "Nincs / Örökölt", + "nexthop": "Következő ugrás", + "password": "Jelszó", + "password_recovery_email": "Jelszó-helyreállítási e-mail", + "password_repeat": "Megerősítő jelszó (ismétlés)", + "previous": "Előző oldal", + "private_comment": "Privát megjegyzés", + "public_comment": "Nyilvános megjegyzés", + "pushover": "Pushover", + "pushover_evaluate_x_prio": "Magas prioritású levelek továbbítása [X-Priority: 1]", + "pushover_info": "A push értesítési beállítások az összes tiszta (nem-spam) levélre vonatkoznak, amelyeket a %s címre kézbesítettek, beleértve az aliasokat is (megosztott, nem megosztott, címkézett).", + "pushover_only_x_prio": "Csak a magas prioritású leveleket vegye figyelembe [X-Priority: 1]", + "pushover_sender_array": "Csak a következő feladói e-mail címeket vegye figyelembe (vesszővel elválasztva)", + "pushover_sender_regex": "Feladók egyeztetése a következő regex-szel", + "pushover_text": "Értesítési szöveg", + "pushover_title": "Értesítési cím", + "pushover_sound": "Hang", + "pushover_vars": "Ha nincs feladói szűrő meghatározva, minden e-mail figyelembe vételre kerül.
A Regex szűrők, valamint a pontos feladói ellenőrzések egyénileg definiálhatók, és sorban lesznek figyelembe véve. Nem függenek egymástól.
Használható változók a szöveghez és a címhez (kérjük, vegye figyelembe az adatvédelmi szabályzatokat)", + "pushover_verify": "Hitelesítő adatok ellenőrzése", + "quota_mb": "Kvóta (MiB)", + "quota_warning_bcc": "Kvóta figyelmeztetés BCC", + "quota_warning_bcc_info": "A figyelmeztetések külön másolatként lesznek elküldve a következő címzetteknek. A tárgyat a megfelelő felhasználónévvel egészítik ki zárójelben, például: Quota warning (user@example.com).", + "ratelimit": "Arányszám-korlát", + "redirect_uri": "Átirányítási/Visszahívási URL", + "relay_all": "Az összes címzett továbbítása", + "relay_all_info": "↪ Ha úgy döntesz, hogy nem továbbítod az összes címzettet, akkor minden egyes címzett számára, akit továbbítani kell, létre kell hoznod egy (\"vak\") postafiókot.", + "relay_domain": "Továbbítsa ezt a tartományt", + "relay_transport_info": "
Információ
Definiálhatsz szállítási térképeket ehhez a tartományhoz egyedi célállomásra. Ha nincs beállítva, egy MX lekérdezés történik.", + "relay_unknown_only": "Csak a nem létező postafiókok továbbítása. A létező postafiókok helyben lesznek kézbesítve.", + "relayhost": "Feladófüggő szállítások", + "remove": "Eltávolítás", + "resource": "Erőforrás", + "save": "Módosítások mentése", + "scope": "Hatókör", + "sender_acl": "Engedélyezés küldésre mint", + "sender_acl_disabled": "A küldő ellenőrzése le van tiltva", + "sender_acl_info": "Ha az A postafiók felhasználója küldhet a B postafiók felhasználójaként, a feladói cím nem jelenik meg automatikusan választható \"from\" mezőként a SOGo-ban.
\r\n A B postafiók felhasználójának delegálást kell létrehoznia a SOGo-ban, hogy az A postafiók felhasználója kiválaszthassa a címét feladóként. A SOGo-ban egy postafiók delegálásához használja a menüt (három pont) a postafiók neve jobb oldalán a bal felső sarokban, a levélnézetben. Ez a viselkedés nem vonatkozik az alias címekre.", + "sieve_desc": "Rövid leírás", + "sieve_type": "Szűrő típusa", + "skipcrossduplicates": "Átugrani a duplikált üzeneteket a mappák között (aki előbb jön, előbb kapja)", + "sogo_access": "Közvetlen továbbítás a SOGo-ra", + "sogo_access_info": "A bejelentkezés után a felhasználó automatikusan átirányításra kerül a SOGo-ra.", + "sogo_visible": "Alias látható a SOGo-ban", + "sogo_visible_info": "Ez az opció csak azokra az objektumokra vonatkozik, amelyek megjeleníthetők a SOGo-ban (megosztott vagy nem megosztott alias címek, amelyek legalább egy helyi postafiókra mutatnak). Ha el van rejtve, egy alias nem jelenik meg választható feladóként a SOGo-ban.", + "spam_alias": "Időkorlátos alias címek létrehozása vagy módosítása", + "spam_filter": "Spam szűrő", + "spam_policy": "Elemek hozzáadása vagy eltávolítása a tiltó- vagy engedélyezési listán", + "spam_score": "Egyéni spam pontszám beállítása", + "subfolder2": "Szinkronizálás a célállomáson egy almappába
(üres = ne használjon almappát)", + "syncjob": "Szinkronizálási feladat szerkesztése", + "target_address": "Célcím(ek) (vesszővel elválasztva)", + "target_domain": "Cél domain", + "timeout1": "Időtúllépés a távoli állomáshoz való csatlakozáskor", + "timeout2": "Időtúllépés a helyi állomáshoz való csatlakozáskor", + "title": "Objektum szerkesztése", + "unchanged_if_empty": "Ha nem változik, hagyja üresen", + "username": "Felhasználónév", + "validate_save": "Érvényesítés és mentés" }, "footer": { "cancel": "Mégse", @@ -159,7 +445,9 @@ "restart_container": "Konténer újraindítása", "restart_container_info": "Fontos: A teljes újraindulás eltarthat egy ideig, kérjük várjon, amíg befejeződik!", "restart_now": "Újraindítás most", - "restarting_container": "Konténer újraindítása. Ez eltarthat egy darabig." + "restarting_container": "Konténer újraindítása. Ez eltarthat egy darabig.", + "hibp_check": "Ellenőrzés a haveibeenpwned.com-on", + "nothing_selected": "Nincs semmi kiválasztva" }, "header": { "administration": "Beállítások és részletek", @@ -170,7 +458,8 @@ "quarantine": "Karantén", "restart_netfilter": "Netfilter újraindítása", "restart_sogo": "SOGo újraindítása", - "user_settings": "Felhasználó beállításai" + "user_settings": "Felhasználó beállításai", + "mailcow_system": "Rendszer" }, "info": { "awaiting_tfa_confirmation": "TFA megerősítésre várakozás", @@ -182,7 +471,23 @@ "login": "Bejelentkezés", "mobileconfig_info": "A kért Apple kapcsolat profil letöltéséhez jelentkezzen be, mint postafiók-felhasználó.", "password": "Jelszó", - "username": "Felhasználónév" + "username": "Felhasználónév", + "back_to_mailcow": "Vissza a mailcow-hoz", + "fido2_webauthn": "FIDO2/WebAuthn bejelentkezés", + "forgot_password": "> Elfelejtett jelszó?", + "invalid_pass_reset_token": "A jelszó-helyreállítási token érvénytelen vagy lejárt.
Kérjen új jelszó-helyreállítási linket.", + "login_linkstext": "Nem a megfelelő bejelentkezés?", + "login_usertext": "Bejelentkezés felhasználóként", + "login_domainadmintext": "Bejelentkezés domain adminisztrátorként", + "login_admintext": "Bejelentkezés adminisztrátorként", + "login_user": "Felhasználói bejelentkezés", + "login_dadmin": "Domain-adminisztrátori bejelentkezés", + "login_admin": "Adminisztrátori bejelentkezés", + "new_password": "Új jelszó", + "new_password_confirm": "Új jelszó megerősítése", + "other_logins": "vagy bejelentkezés", + "reset_password": "Jelszó visszaállítása", + "request_reset_password": "Jelszó módosítás kérése" }, "mailbox": { "action": "Művelet", @@ -200,10 +505,10 @@ "add_resource": "Erőforrás hozzáadása", "add_tls_policy_map": "TLS irányelv-térkép hozzáadása", "address_rewriting": "Címátírás", - "alias": "Alias", + "alias": "Álnév", "alias_domain_backupmx": "Alias domain inaktív a továbbító domain részére", - "aliases": "Alias-ok", - "allow_from_smtp": "Kizárólag ezek az IP-címek használhatják az SMTP-t", + "aliases": "Álnevek", + "allow_from_smtp": "Kizárólag ezek az IP címek használhatják az SMTP-t", "allow_from_smtp_info": "Hagyja üresen minden feladó engedélyezéséhez.
IPv4/IPv6 címek és hálózatok.", "allowed_protocols": "Engedélyezett protokollok", "backup_mx": "Továbbító domain", @@ -221,7 +526,7 @@ "domain_admins": "Domain adminisztrátorok", "domain_aliases": "Domain alias-ok", "domain_quota": "Kvóta", - "domains": "Domain-ek", + "domains": "Domainek", "edit": "Szerkesztés", "empty": "Nincs találat", "enable_x": "Engedélyezés", @@ -277,7 +582,88 @@ "toggle_all": "Összes átváltása", "username": "Felhasználónév", "waiting": "Várakozás", - "weekly": "Hetente" + "weekly": "Hetente", + "add_alias_expand": "Alias kiterjesztése alias tartományokra", + "alias_domain_alias_hint": "Az aliasok nem vonatkoznak automatikusan a domain aliasokra. Egy my-alias@domain alias cím nem fedezi a my-alias@alias-domain címet (ahol az \"alias-domain\" a \"domain\" képzeletbeli alias tartománya).
Kérjük, használjon sieve szűrőt a levél külső postafiókba történő átirányításához (lásd a \"Szűrők\" fület vagy a SOGo -> Továbbító). Használja az \"Alias kiterjesztése alias tartományokra\" opciót a hiányzó aliasok automatikus hozzáadásához.", + "all_domains": "Minden tartomány", + "bcc_info": "A BCC térképek arra szolgálnak, hogy csendesen továbbítsák az összes üzenet másolatát egy másik címre. A címzett térkép típust akkor használják, ha a helyi célpont egy levél címzettjeként működik. A feladói térképek ugyanazon elv szerint működnek.
\r\n A helyi célpontot nem értesítik a sikertelen kézbesítésről.", + "bcc_map_type": "BCC típus", + "bcc_maps": "BCC térképek", + "bcc_rcpt_map": "Címzett térkép", + "bcc_sender_map": "Feladó térkép", + "bcc_to_rcpt": "Váltás címzett térkép típusra", + "bcc_to_sender": "Váltás feladó térkép típusra", + "bcc_type": "BCC típus", + "booking_null": "Mindig szabadként mutat", + "booking_0_short": "Mindig szabad", + "booking_custom": "Kemény korlát a foglalások egyéni számára", + "booking_custom_short": "Kemény korlát", + "booking_ltnull": "Korlátlan, de foglaltnak mutatja magát, ha le van foglalva", + "booking_lt0_short": "Lágy korlát", + "catch_all": "Catch-All", + "created_on": "Létrehozva", + "dkim_domains_selector": "Válogató", + "dkim_key_length": "DKIM kulcs hossza (bit)", + "domain_templates": "Domain sablonok", + "domain_quota_total": "Teljes domain kvóta", + "gal": "Globális címlista", + "goto_ham": "Tanulás ham-ként", + "goto_spam": "Tanulás spam-ként", + "iam": "Azonosítási szolgáltató", + "last_modified": "Utoljára módosítva", + "last_pw_change": "Utolsó jelszócsere", + "mailbox_defaults": "Alapértelmezett beállítások", + "mailbox_defaults_info": "Alapértelmezett beállítások meghatározása az új postafiókokhoz.", + "mailbox_templates": "Postafiók sablonok", + "max_aliases": "Max. aliasok", + "max_mailboxes": "Max. lehetséges postafiókok", + "max_quota": "Max. kvóta postafiókonként", + "no": "✕", + "open_logs": "Naplók megnyitása", + "q_add_header": "amikor a levélszemét mappába kerül", + "q_all": " amikor a levélszemét mappába kerül és elutasításkor", + "q_reject": "elutasításkor", + "quarantine_category": "Karantén értesítési kategória", + "recipient": "Címzett", + "recipient_map_info": "A címzett térképeket arra használják, hogy egy üzenet célcímét kicseréljék, mielőtt azt kézbesítenék.", + "recipient_map_new_info": "A címzett térkép célja érvényes e-mail címnek vagy tartománynévnek kell lennie.", + "recipient_map_old_info": "Egy címzett térkép eredeti céljának érvényes e-mail címnek vagy tartománynévnek kell lennie.", + "relay_all": "Az összes címzett továbbítása", + "relay_unknown": "Ismeretlen postafiókok továbbítása", + "sender": "Feladó", + "set_postfilter": "Megjelölés poszt-szűrőként", + "set_prefilter": "Megjelölés pre-szűrőként", + "sieve_info": "Több szűrőt is tárolhatsz felhasználónként, de egyszerre csak egy pre-szűrő és egy poszt-szűrő lehet aktív.
\r\nMinden szűrő a leírt sorrendben lesz feldolgozva. Sem a sikertelen szkript, sem a kiadott \"keep;\" parancs nem állítja le a további szkriptek feldolgozását. A globális sieve szkriptek változásai a Dovecot újraindítását váltják ki.

Globális sieve pre-szűrő • Pre-szűrő • Felhasználói szkriptek • Poszt-szűrő • Globális sieve poszt-szűrő", + "sieve_preset_1": "Levél eldobása valószínűleg veszélyes fájltípusokkal", + "sieve_preset_2": "Egy adott feladó e-mailjét mindig olvasottként jelölje meg", + "sieve_preset_3": "Csendesen elvetni, leállítani minden további sieve feldolgozást", + "sieve_preset_4": "Fájl az INBOX-ba, kihagyni a további feldolgozást a sieve szűrőkkel", + "sieve_preset_5": "Auto válaszadó (szabadság)", + "sieve_preset_6": "Levél elutasítása válasszal", + "sieve_preset_7": "Átirányítás és megtartás/eldobás", + "sieve_preset_8": "E-mail átirányítása egy adott feladótól, olvasottként jelölés és almappába rendezés", + "sieve_preset_header": "Kérjük, nézze meg az alábbi példa-előrebeállításokat. További részletekért lásd a Wikipedia-t.", + "sogo_visible": "Alias látható a SOGo-ban", + "sogo_visible_n": "Alias elrejtése a SOGo-ban", + "sogo_visible_y": "Alias megjelenítése a SOGo-ban", + "sender": "Feladó", + "syncjob_check_log": "Napló ellenőrzése", + "syncjob_last_run_result": "Utolsó futás eredménye", + "syncjob_EX_OK": "Siker", + "syncjob_EXIT_CONNECTION_FAILURE": "Kapcsolati probléma", + "syncjob_EXIT_TLS_FAILURE": "Probléma a titkosított kapcsolattal", + "syncjob_EXIT_AUTHENTICATION_FAILURE": "Hitelesítési probléma", + "syncjob_EXIT_OVERQUOTA": "A cél postafiók túllépte a kvótát", + "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Nem lehet csatlakozni a távoli szerverhez", + "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Hibás felhasználónév vagy jelszó", + "templates": "Sablonok", + "template": "Sablon", + "tls_map_policy": "Irányelv", + "tls_policy_maps": "TLS irányelv térképek", + "tls_policy_maps_enforced_tls": "Ezek az irányelvek felülírják a kimenő TLS szállítási szabályokat függetlenül a felhasználó TLS irányelvi beállításaitól. Ha nincs alább egyetlen irányelv sem, ezek a felhasználók az alapértelmezett értékeket alkalmazzák, amelyeket a smtp_tls_mandatory_protocols és a smtp_tls_mandatory_ciphers határoz meg.", + "tls_policy_maps_info": "Ez az irányelv térkép felülírja a kimenő TLS szállítási szabályokat függetlenül a felhasználó TLS irányelvi beállításaitól.
\r\n Kérjük, ellenőrizze a \"smtp_tls_policy_maps\" dokumentációját további információkért.", + "tls_policy_maps_long": "Kimenő TLS irányelv térkép felülírások", + "yes": "✓" }, "oauth2": { "access_denied": "Kérjük jelentkezzen be postafiók felhasználójával az OAuth2 használatához.", @@ -301,7 +687,7 @@ "medium_danger": "Közepes veszély", "neutral_danger": "Semleges", "notified": "Értesítve", - "qinfo": "A karantén-rendszer elmenti a visszautasított leveleket az adatbázisba, miközben a feladónak nem lesz az a benyomása, hogy a levelet kézbesítették.\r\n
\"Spamnek jelölés és törlés\" spam-ként jegyzi meg az üzenetet a Bayes-tétel segítségével, illetve fuzzy hash-eket számít, hogy hasonló üzenetek is spam-be kerüljenek a jövőben.\r\n
Több üzenet spamként való megjegyzése időigényes lehet.
Feketelistára vett levelek nem kerülnek karanténba.", + "qinfo": "A karantén-rendszer elmenti a visszautasított leveleket az adatbázisba, miközben a feladónak nem lesz az a benyomása, hogy a levelet kézbesítették.\r\n
\"Spamnek jelölés és törlés\" spam-ként jegyzi meg az üzenetet a Bayes-tétel segítségével, illetve fuzzy hash-eket számít, hogy hasonló üzenetek is spam-be kerüljenek a jövőben.\r\n
Több üzenet spamként való megjegyzése időigényes lehet.
Tiltólistára vett levelek nem kerülnek karanténba.", "qitem": "Tétel", "quarantine": "Karantén", "quick_actions": "Műveletek", @@ -324,10 +710,38 @@ "table_size_show_n": "%s tétel mutatása", "text_from_html_content": "Tartalom (konvertált html)", "text_plain_content": "Tartalom (sima szöveg)", - "toggle_all": "Összes átkapcsolása" + "toggle_all": "Összes átkapcsolása", + "check_hash": "Fájl hash keresése @ VT", + "confirm": "Megerősítés", + "deliver_inbox": "Kézbesítés a beérkező mappába", + "disabled_by_config": "A jelenlegi rendszerkonfiguráció letiltja a karantén funkcionalitást. Kérjük, állítsa be a \"megőrzéseket postafiókonként\" és a \"maximális méretet\" a karantén elemek számára.", + "info": "Információ", + "junk_folder": "Levélszemét mappa", + "qhandler_success": "A kérés sikeresen elküldve a rendszernek. Most már bezárhatja az ablakot.", + "qid": "Rspamd QID", + "rejected": "Elutasítva", + "release_body": "A levelét eml fájlként csatoltuk ehhez az üzenethez.", + "rewrite_subject": "Tárgy átírása", + "settings_info": "A karanténba helyezhető elemek maximális száma: %s
Maximális e-mail méret: %s MiB", + "spam": "Spam", + "quick_info_link": "Információs link megnyitása", + "type": "Típus" }, "queue": { - "queue_manager": "Queue Manager" + "queue_manager": "Queue Manager", + "delete": "Összes törlése", + "flush": "Üzenetsor ürítése", + "info": "A levelezési üzenetsor tartalmazza az összes kézbesítésre váró e-mailt. Ha egy e-mail hosszú ideig ragad az üzenetsorban, a rendszer automatikusan törli.
A megfelelő levél hibaüzenete tájékoztatást ad arról, miért nem lehetett a levelet kézbesíteni.", + "legend": "A levelezési üzenetsor műveleti funkciói:", + "ays": "Kérjük, erősítse meg, hogy törölni szeretné az összes elemet az aktuális üzenetsorból.", + "deliver_mail": "Kézbesítés", + "deliver_mail_legend": "Megpróbálja újra kézbesíteni a kiválasztott leveleket.", + "hold_mail": "Visszatartás", + "hold_mail_legend": "Visszatartja a kiválasztott leveleket. (Megakadályozza a további kézbesítési kísérleteket)", + "show_message": "Üzenet megjelenítése", + "unban": "üzenetsor tiltás feloldása", + "unhold_mail": "Visszatartás feloldása", + "unhold_mail_legend": "Kiadja a kiválasztott leveleket a kézbesítéshez. (Előzetes visszatartás szükséges)" }, "start": { "help": "Súgó panel megjelenítése/elrejtése", @@ -380,7 +794,49 @@ "resource_modified": "Postafiók %s módosításai mentve", "resource_removed": "Erőforrás %s eltávolítva", "saved_settings": "Beállítások mentve", - "upload_success": "File sikeresen feltöltve" + "upload_success": "File sikeresen feltöltve", + "acl_saved": "Az ACL a(z) %s objektumhoz mentve", + "bcc_deleted": "BCC térkép bejegyzések törölve: %s", + "bcc_edited": "BCC térkép bejegyzés %s szerkesztve", + "bcc_saved": "BCC térkép bejegyzés mentve", + "cors_headers_edited": "A CORS beállítások mentve", + "custom_login_modified": "A bejelentkezési testreszabás sikeresen mentve", + "domain_add_dkim_available": "Egy DKIM kulcs már létezett", + "dkim_duplicated": "A DKIM kulcs a(z) %s tartományhoz sikeresen átmásolva a(z) %s tartományba", + "domain_footer_modified": "A(z) %s tartományi lábléc módosításai mentve", + "f2b_banlist_refreshed": "A tiltólista azonosítója sikeresen frissítve.", + "f2b_modified": "A Fail2ban paraméterek módosításai mentve", + "forwarding_host_added": "A továbbító állomás %s hozzáadva", + "forwarding_host_removed": "A továbbító állomás %s eltávolítva", + "iam_test_connection": "Kapcsolat sikeres", + "ip_check_opt_in_modified": "Az IP ellenőrzés sikeresen mentve", + "nginx_reloaded": "Az Nginx újra lett töltve", + "password_policy_saved": "A jelszó házirend sikeresen mentve", + "password_changed_success": "A jelszó sikeresen megváltoztatva", + "pushover_settings_edited": "A Pushover beállítások sikeresen elmentve, kérjük, ellenőrizze a hitelesítő adatokat.", + "queue_command_success": "A sor parancs sikeresen befejeződött", + "recipient_map_entry_deleted": "A címzett térkép ID %s törölve", + "recipient_map_entry_saved": "A címzett térkép bejegyzés \"%s\" mentve", + "recovery_email_sent": "Helyreállítási e-mail elküldve a(z) %s címre", + "relayhost_added": "A térkép bejegyzés %s hozzáadva", + "relayhost_removed": "A térkép bejegyzés %s eltávolítva", + "reset_main_logo": "Visszaállítás alapértelmezett logóra", + "rl_saved": "Arányszám-korlát a(z) %s objektumhoz mentve", + "rspamd_ui_pw_set": "Rspamd UI jelszó sikeresen beállítva", + "settings_map_added": "Hozzáadott beállítási térkép bejegyzés", + "settings_map_removed": "Eltávolított beállítási térkép ID %s", + "sogo_profile_reset": "A SOGo profil a(z) %s felhasználóhoz visszaállítva", + "template_added": "Hozzáadott sablon %s", + "template_modified": "A(z) %s sablon módosításai mentve", + "template_removed": "A sablon ID %s törölve", + "tls_policy_map_entry_deleted": "TLS irányelv térkép ID %s törölve", + "tls_policy_map_entry_saved": "TLS irányelv térkép bejegyzés \"%s\" mentve", + "ui_texts": "A felhasználói felület szövegeinek módosításai mentve", + "verified_fido2_login": "FIDO2 bejelentkezés ellenőrizve", + "verified_totp_login": "TOTP bejelentkezés ellenőrizve", + "verified_webauthn_login": "WebAuthn bejelentkezés ellenőrizve", + "verified_yotp_login": "Yubico OTP bejelentkezés ellenőrizve", + "mailbox_renamed": "A postafiók átnevezve %s-ről %s-re" }, "user": { "action": "Művelet", @@ -449,15 +905,14 @@ "spam_score_reset": "Szerver szerinti alapértelmezésre visszaállítás", "spamfilter": "Spam szűrő", "spamfilter_behavior": "Osztályozás", - "spamfilter_bl": "Feketelista", - "spamfilter_bl_desc": "A feketelistán szereplő email címek mindig spam-ként lesznek kezelve és vissza lesznek utasítva. Joker karakter használható. A szűrő csak közvetlen aliasokra vonatkozik (alias egyetlen cél-postafiókkal), magára a postafiókra, illetve mindent elkapó aliasokra nem.", + "spamfilter_bl": "Tiltólista", + "spamfilter_bl_desc": "A tiltólistán szereplő email címek mindig spam-ként lesznek kezelve és vissza lesznek utasítva. Joker karakter használható. A szűrő csak közvetlen aliasokra vonatkozik (alias egyetlen cél-postafiókkal), magára a postafiókra, illetve mindent elkapó aliasokra nem.", "spamfilter_default_score": "Alapértelmezett értékek", "spamfilter_green": "Zöld: ez az üzenet nem spam", "spamfilter_hint": "Az első érték az alacsony spam pontszámot, a második a magas spam pontszámot jelöli.", "spamfilter_red": "Vörös: Ez az üzenet spam, a szerver el fogja vetni.", "spamfilter_table_action": "Művelet", "spamfilter_table_add": "Tétel hozzáadása", - "spamfilter_table_empty": "Nincs megjeleníthető adat", "spamfilter_table_remove": "eltávolítás", "spamfilter_table_rule": "Szabály", "spamfilter_wl": "Engedélyezőlista", @@ -482,15 +937,90 @@ "waiting": "Várakozás", "week": "hét", "weekly": "heti", - "weeks": "hét" + "weeks": "hét", + "aliases_also_send_as": "Küldhet még mint felhasználó", + "aliases_send_as_all": "Ne ellenőrizze a küldő hozzáférését a következő tartomány(ok) és annak alias tartományai számára", + "app_hint": "Az alkalmazás jelszavak alternatív jelszavak az IMAP, SMTP, CalDAV, CardDAV és EAS bejelentkezéshez. A felhasználónév változatlan marad. A SOGo webmail nem érhető el az alkalmazás jelszavakon keresztül.", + "allowed_protocols": "Engedélyezett protokollok", + "apple_connection_profile_complete": "Ez a kapcsolati profil tartalmazza az IMAP és SMTP paramétereket, valamint a CalDAV (naptárak) és CardDAV (névjegyek) útvonalakat egy Apple eszközhöz.", + "apple_connection_profile_mailonly": "Ez a kapcsolati profil csak IMAP és SMTP konfigurációs paramétereket tartalmaz egy Apple eszközhöz.", + "apple_connection_profile_with_app_password": "Új alkalmazás jelszó generálódik és hozzáadódik a profilhoz, így nem kell jelszót megadni az eszköz beállításakor. Kérjük, ne ossza meg a fájlt, mivel teljes hozzáférést biztosít a postafiókjához.", + "attribute": "Attribútum", + "authentication": "Hitelesítés", + "change_password_hint_app_passwords": "Fiókodnak %d alkalmazás jelszava van, amelyek nem lesznek megváltoztatva. Ezek kezeléséhez menj az Alkalmazás jelszavak fülre.", + "clear_recent_successful_connections": "Sikeres kapcsolatok törlése", + "created_on": "Létrehozva", + "direct_aliases_desc": "A közvetlen alias címeket érintik a spam szűrő és a TLS irányelv beállításai.", + "direct_protocol_access": "Ennek a postafiók felhasználónak közvetlen, külső hozzáférése van a következő protokollokhoz és alkalmazásokhoz. Ezt a beállítást az adminisztrátor vezérli. Az alkalmazás jelszavak létrehozhatók, hogy hozzáférést biztosítsanak az egyedi protokollokhoz és alkalmazásokhoz.
A \"Webmail\" gomb egységes bejelentkezést biztosít a SOGo-ra, és mindig elérhető.", + "eas_reset_help": "Sok esetben a eszköz gyorsítótárának visszaállítása segít egy sérült ActiveSync profil helyreállításában.
Figyelem: Minden elem újra letöltődik!", + "empty": "Nincs eredmény", + "from": "feladó", + "is_catch_all": "Catch-all a tartomány(ok)hoz", + "last_pw_change": "Utolsó jelszócsere", + "last_ui_login": "Utolsó UI bejelentkezés", + "login_history": "Bejelentkezési előzmények", + "mailbox": "Postafiók", + "mailbox_general": "Általános", + "mailbox_settings": "Beállítások", + "month": "hónap", + "months": "hónap", + "open_logs": "Naplók megnyitása", + "open_webmail_sso": "Webmail", + "overview": "Áttekintés", + "password_reset_info": "Ha nincs megadva e-mail a jelszó-helyreállításhoz, ez a funkció nem használható.", + "protocols": "Protokollok", + "pushover_evaluate_x_prio": "Magas prioritású levelek továbbítása [X-Priority: 1]", + "pushover_info": "A push értesítési beállítások az összes tiszta (nem-spam) levélre vonatkoznak, amelyeket a %s címre kézbesítettek, beleértve az aliasokat is (megosztott, nem megosztott, címkézett).", + "pushover_only_x_prio": "Csak a magas prioritású leveleket vegye figyelembe [X-Priority: 1]", + "pushover_sender_array": "A következő feladói e-mail címek figyelembe vétele (vesszővel elválasztva)", + "pushover_sender_regex": "Feladók egyeztetése a következő regex-szel", + "pushover_text": "Értesítési szöveg", + "pushover_title": "Értesítési cím", + "pushover_sound": "Hang", + "pushover_vars": "Ha nincs feladói szűrő meghatározva, minden e-mail figyelembe vételre kerül.
A Regex szűrők, valamint a pontos feladói ellenőrzések egyénileg definiálhatók, és sorban lesznek figyelembe véve. Nem függenek egymástól.
Használható változók a szöveghez és a címhez (kérjük, vegye figyelembe az adatvédelmi szabályzatokat)", + "pushover_verify": "Hitelesítő adatok ellenőrzése", + "pw_recovery_email": "Jelszó-helyreállítási e-mail", + "q_add_header": "Levélszemét mappa", + "q_all": "Összes kategória", + "q_reject": "Elutasítva", + "quarantine_category": "Karantén értesítési kategória", + "quarantine_category_info": "Az \"Elutasítva\" értesítési kategória magában foglalja azokat a leveleket, amelyeket elutasítottak, míg a \"Levélszemét mappa\" értesíti a felhasználót a levélszemét mappába helyezett levelekről.", + "recent_successful_connections": "Látott sikeres kapcsolatok", + "shared_aliases_desc": "A megosztott aliasokat nem érintik a felhasználóspecifikus beállítások, mint a spam szűrő vagy a titkosítási szabályzat. A megfelelő spam szűrőket csak egy adminisztrátor hozhatja létre tartományszintű szabályzatként.", + "sogo_profile_reset": "SOGo profil visszaállítása", + "sogo_profile_reset_help": "Ez tönkreteszi a felhasználó SOGo profilját, és visszavonhatatlanul törli az összes névjegy- és naptáradatot.", + "sogo_profile_reset_now": "Profil visszaállítása most", + "spamfilter_table_domain_policy": "n/a (tartományi szabályzat)", + "syncjob_check_log": "Napló ellenőrzése", + "syncjob_last_run_result": "Utolsó futás eredménye", + "syncjob_EX_OK": "Siker", + "syncjob_EXIT_CONNECTION_FAILURE": "Kapcsolati probléma", + "syncjob_EXIT_TLS_FAILURE": "Probléma a titkosított kapcsolattal", + "syncjob_EXIT_AUTHENTICATION_FAILURE": "Hitelesítési probléma", + "syncjob_EXIT_OVERQUOTA": "A cél postafiók túllépte a kvótát", + "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Nem lehet csatlakozni a távoli szerverhez", + "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Hibás felhasználónév vagy jelszó", + "text": "Szöveg", + "tfa_info": "A kétlépcsős hitelesítés segít megvédeni a fiókodat. Ha engedélyezed, alkalmazás jelszavakra lesz szükséged, hogy bejelentkezz olyan alkalmazásokba vagy szolgáltatásokba, amelyek nem támogatják a kétlépcsős hitelesítést (pl. levelező kliensek).", + "tls_policy_warning": "Figyelem: Ha titkosított levélátvitelt kényszerítesz ki, elveszíthetsz e-maileket.
Azok az üzenetek, amelyek nem felelnek meg a szabályzatnak, kemény hibával visszapattannak a levelezőrendszerből.
Ez az opció a fő e-mail címedre (bejelentkezési név), az alias tartományokból származó összes címre, valamint az alias címekre vonatkozik, amelyeknek csak ez az egy postafiók a célja.", + "value": "Érték", + "with_app_password": "alkalmazás jelszóval", + "year": "év", + "years": "év" }, "warning": { "cannot_delete_self": "Bejelentkezett felhasználó nem törölhető.", - "ip_invalid": "Érvénytelen IP-cím átugorva: %s", + "ip_invalid": "Érvénytelen IP cím átugorva: %s", "no_active_admin": "Utolsó aktív admin felhasználó nem deaktiválható.", "quota_exceeded_scope": "Domain kvóta átlépve: csak korlátok nélküli postafiókok hozhatók létre ebben a domain-ben.", - "session_token": "Űrlap-token érvénytelen: Tokenek nem egyeznek", - "session_ua": "Űrlap-token érvénytelen: User-Agent hitelesítési probléma" + "session_token": "Űrlaptoken érvénytelen: Tokenek nem egyeznek", + "session_ua": "Űrlaptoken érvénytelen: User-Agent hitelesítési probléma", + "domain_added_sogo_failed": "A tartomány hozzáadva, de a SOGo újraindítása sikertelen, kérjük, ellenőrizze a szerver naplókat.", + "dovecot_restart_failed": "A Dovecot újraindítása sikertelen, kérjük, ellenőrizze a naplókat", + "fuzzy_learn_error": "Fuzzy hash tanulási hiba: %s", + "hash_not_found": "A hash nem található vagy már törölve lett", + "is_not_primary_alias": "Nem elsődleges alias %s kihagyva", + "mailbox_renamed_alias": "A postafiók át lett nevezve, de az alias nem lett automatikusan létrehozva. Kérjük, hozza létre kézzel: %s" }, "acl": { "delimiter_action": "Elhatárolás", @@ -516,15 +1046,24 @@ "smtp_ip_access": "Az SMTP engedélyezett állomásainak módosítása", "sogo_profile_reset": "SOGo profil visszaállítása", "spam_alias": "Ideiglenes álnevek", - "spam_policy": "Fekete/Fehér lista", + "spam_policy": "Tiltó/engedélyezési lista", "spam_score": "Spam pontszám", "syncjobs": "Szinkronizálási feladatok", "tls_policy": "TLS szabályzat", "unlimited_quota": "Korlátlan kvóta a postafiókok számára", - "sogo_access": "A SOGo-hozzáférés kezelésének lehetővé tétele" + "sogo_access": "A SOGo-hozzáférés kezelésének lehetővé tétele", + "pw_reset": "Lehetővé teszi a mailcow felhasználói jelszavak visszaállítását" }, "diagnostics": { - "dns_records": "DNS bejegyzések" + "dns_records": "DNS bejegyzések", + "cname_from_a": "Az A/AAAA rekordból származó érték. Ez addig támogatott, amíg a rekord a megfelelő erőforrásra mutat.", + "dns_records_24hours": "Kérjük, vegye figyelembe, hogy a DNS-ben végrehajtott változtatások akár 24 órát is igénybe vehetnek, amíg a jelenlegi állapotuk helyesen megjelenik ezen az oldalon. Ez a célja, hogy könnyen láthassa, hogyan kell konfigurálnia a DNS rekordokat, és ellenőrizze, hogy az összes rekordja helyesen van-e tárolva a DNS-ben.", + "dns_records_data": "Helyes adatok", + "dns_records_docs": "Kérjük, konzultáljon a dokumentációval is.", + "dns_records_name": "Név", + "dns_records_status": "Jelenlegi állapot", + "dns_records_type": "Típus", + "optional": "Ez a rekord opcionális." }, "add": { "username": "Felhasználónév", @@ -588,6 +1127,15 @@ "alias_domain": "Alias domain", "alias_domain_info": "Csak érvényes tartománynevek (vesszővel elválasztva).", "app_name": "Alkalmazás neve", - "app_passwd_protocols": "Engedélyezett protokollok az alkalmazás jelszavához" + "app_passwd_protocols": "Engedélyezett protokollok az alkalmazás jelszavához", + "automap": "Próbálja automatikusan feltérképezni a mappákat (\"Elküldött elemek\", \"Elküldött\" => \"Elküldött\" stb.)", + "multiple_bookings": "Több foglalás", + "quota_mb": "Kvóta (MiB)", + "relay_all": "Az összes címzett továbbítása", + "relay_all_info": "↪ Ha úgy döntesz, hogy nem továbbítod az összes címzettet, akkor minden egyes címzett számára, akit továbbítani kell, létre kell hoznod egy (\"vak\") postafiókot.", + "relay_domain": "Továbbítsa ezt a tartományt", + "relay_transport_info": "
Információ
Definiálhatsz szállítási térképeket ehhez a tartományhoz egyedi célállomásra. Ha nincs beállítva, egy MX lekérdezés történik.", + "relay_unknown_only": "Csak a nem létező postafiókok továbbítása. A létező postafiókok helyben lesznek kézbesítve.", + "relayhost_wrapped_tls_info": "Kérjük, ne használjon TLS-be csomagolt portokat (többnyire a 465-ös porton használatosak).
\r\nHasználjon bármilyen nem csomagolt portot és adjon ki STARTTLS-t. A TLS kikényszerítésére egy TLS irányelv hozható létre a \"TLS irányelv térképek\" alatt." } } From 0997548d7f3e7aa004cbae3b1062332f53163c90 Mon Sep 17 00:00:00 2001 From: milkmaker Date: Fri, 29 Aug 2025 22:38:06 +0200 Subject: [PATCH 12/26] Translations update from Weblate (#6699) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Web] Updated lang.de-de.json Co-authored-by: Peter * [Web] Updated lang.en-gb.json Co-authored-by: Peter * [Web] Updated lang.hu-hu.json [Web] Language file updated by 'Cleanup translation files' addon Co-authored-by: Peter Co-authored-by: milkmaker * [Web] Updated lang.si-si.json Co-authored-by: Matjaž Tekavec --------- Co-authored-by: Peter Co-authored-by: Matjaž Tekavec --- data/web/lang/lang.de-de.json | 3 ++- data/web/lang/lang.en-gb.json | 2 +- data/web/lang/lang.hu-hu.json | 20 ++++++++++++-------- data/web/lang/lang.si-si.json | 22 +++++++++++++++++++--- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index 55fc11ab4..93b908d6c 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -408,7 +408,8 @@ "allowed_origins": "Access-Control-Allow-Origin", "logo_dark_label": "Invertiert für den Darkmode", "logo_normal_label": "Normal", - "user_link": "Nutzer-Link" + "user_link": "Nutzer-Link", + "filter": "Filter" }, "danger": { "access_denied": "Zugriff verweigert oder unvollständige/ungültige Daten", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 4ee5675be..0af0e59b0 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -711,7 +711,7 @@ "mta_sts": "MTA-STS", "mta_sts_info": "MTA-STS is a standard that enforces email delivery between mail servers to use TLS with valid certificates.
It is used when DANE is not possible due to missing or unsupported DNSSEC.
Note: If the receiving domain supports DANE with DNSSEC, DANE is always preferred – MTA-STS only acts as a fallback.", "mta_sts_version": "Version", - "mta_sts_version_info": "Defines the version of the MTA-STS standard – currently only STSv1 is valid." , + "mta_sts_version_info": "Defines the version of the MTA-STS standard – currently only STSv1 is valid.", "mta_sts_mode": "Mode", "mta_sts_mode_info": "There are three modes to choose from:
  • testing – policy is only monitored, violations have no impact.
  • enforce – policy is strictly enforced, connections without valid TLS are rejected.
  • none – policy is published but not applied.
", "mta_sts_max_age": "Max age", diff --git a/data/web/lang/lang.hu-hu.json b/data/web/lang/lang.hu-hu.json index 6ec3ed68a..2f78d5b21 100644 --- a/data/web/lang/lang.hu-hu.json +++ b/data/web/lang/lang.hu-hu.json @@ -9,7 +9,7 @@ "source": "Forrás", "spamfilter": "Spam szűrő", "subject": "Tárgy", - "sys_mails": "Rendszerüzenetek", + "sys_mails": "Rendszer e-mailek", "text": "Szöveg", "time": "Idő", "title": "Cím", @@ -274,7 +274,6 @@ "sal_level": "Moo szint", "service": "Szolgáltatás", "service_id": "Szolgáltatás azonosító", - "sys_mails": "Rendszer e-mailek", "task": "Feladat", "transport_maps": "Szállítási térképek", "transport_test_rcpt_info": "• Használja a null@hosted.mailcow.de címet a külföldi célra történő továbbítás teszteléséhez.", @@ -295,7 +294,8 @@ "user_link": "Felhasználói-link", "user_quicklink": "Gyorshivatkozás elrejtése a Felhasználói bejelentkezési oldalra", "validate_license_now": "GUID érvényesítése a licenszszerverrel szemben", - "yes": "✓" + "yes": "✓", + "success": "Siker" }, "edit": { "active": "Aktív", @@ -646,7 +646,6 @@ "sogo_visible": "Alias látható a SOGo-ban", "sogo_visible_n": "Alias elrejtése a SOGo-ban", "sogo_visible_y": "Alias megjelenítése a SOGo-ban", - "sender": "Feladó", "syncjob_check_log": "Napló ellenőrzése", "syncjob_last_run_result": "Utolsó futás eredménye", "syncjob_EX_OK": "Siker", @@ -1000,7 +999,6 @@ "syncjob_EXIT_OVERQUOTA": "A cél postafiók túllépte a kvótát", "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Nem lehet csatlakozni a távoli szerverhez", "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Hibás felhasználónév vagy jelszó", - "text": "Szöveg", "tfa_info": "A kétlépcsős hitelesítés segít megvédeni a fiókodat. Ha engedélyezed, alkalmazás jelszavakra lesz szükséged, hogy bejelentkezz olyan alkalmazásokba vagy szolgáltatásokba, amelyek nem támogatják a kétlépcsős hitelesítést (pl. levelező kliensek).", "tls_policy_warning": "Figyelem: Ha titkosított levélátvitelt kényszerítesz ki, elveszíthetsz e-maileket.
Azok az üzenetek, amelyek nem felelnek meg a szabályzatnak, kemény hibával visszapattannak a levelezőrendszerből.
Ez az opció a fő e-mail címedre (bejelentkezési név), az alias tartományokból származó összes címre, valamint az alias címekre vonatkozik, amelyeknek csak ez az egy postafiók a célja.", "value": "Érték", @@ -1019,8 +1017,7 @@ "dovecot_restart_failed": "A Dovecot újraindítása sikertelen, kérjük, ellenőrizze a naplókat", "fuzzy_learn_error": "Fuzzy hash tanulási hiba: %s", "hash_not_found": "A hash nem található vagy már törölve lett", - "is_not_primary_alias": "Nem elsődleges alias %s kihagyva", - "mailbox_renamed_alias": "A postafiók át lett nevezve, de az alias nem lett automatikusan létrehozva. Kérjük, hozza létre kézzel: %s" + "is_not_primary_alias": "Nem elsődleges alias %s kihagyva" }, "acl": { "delimiter_action": "Elhatárolás", @@ -1136,6 +1133,13 @@ "relay_domain": "Továbbítsa ezt a tartományt", "relay_transport_info": "
Információ
Definiálhatsz szállítási térképeket ehhez a tartományhoz egyedi célállomásra. Ha nincs beállítva, egy MX lekérdezés történik.", "relay_unknown_only": "Csak a nem létező postafiókok továbbítása. A létező postafiókok helyben lesznek kézbesítve.", - "relayhost_wrapped_tls_info": "Kérjük, ne használjon TLS-be csomagolt portokat (többnyire a 465-ös porton használatosak).
\r\nHasználjon bármilyen nem csomagolt portot és adjon ki STARTTLS-t. A TLS kikényszerítésére egy TLS irányelv hozható létre a \"TLS irányelv térképek\" alatt." + "relayhost_wrapped_tls_info": "Kérjük, ne használjon TLS-be csomagolt portokat (többnyire a 465-ös porton használatosak).
\r\nHasználjon bármilyen nem csomagolt portot és adjon ki STARTTLS-t. A TLS kikényszerítésére egy TLS irányelv hozható létre a \"TLS irányelv térképek\" alatt.", + "select": "Kérjük, válasszon...", + "select_domain": "Kérjük, először válasszon egy domaint", + "sieve_desc": "Rövid leírás", + "sieve_type": "Szűrő típusa", + "skipcrossduplicates": "Duplikált üzenetek átugrása mappák között (érkezési sorrendben)", + "subscribeall": "Feliratkozás minden mappára", + "syncjob": "Szinkronizálási feladat hozzáadása" } } diff --git a/data/web/lang/lang.si-si.json b/data/web/lang/lang.si-si.json index 35c4eaa96..56da00f74 100644 --- a/data/web/lang/lang.si-si.json +++ b/data/web/lang/lang.si-si.json @@ -550,7 +550,11 @@ "recovery_email_failed": "E-poštnega sporočila za obnovitev ni bilo mogoče poslati. Obrnite se na skrbnika.", "required_data_missing": "Manjkajo zahtevani podatki %s", "reset_token_limit_exceeded": "Omejitev žetonov za ponastavitev je bila presežena. Poskusite znova pozneje.", - "to_invalid": "Polje za prejemnika ne sme biti prazno" + "to_invalid": "Polje za prejemnika ne sme biti prazno", + "max_age_invalid": "Najvišja starost %s je neveljavna", + "mode_invalid": "Način %s ni veljaven", + "mx_invalid": "Zapis MX %s je neveljaven", + "version_invalid": "Različica %s je neveljavna" }, "debug": { "containers_info": "Informacije o vsebniku (containerju)", @@ -761,7 +765,18 @@ "mailbox_rename": "Preimenuj poštni predal", "mailbox_rename_agree": "Ustvaril/a sem varnostno kopijo.", "mailbox_rename_warning": "POMEMBNO! Pred preimenovanjem nabiralnika ustvarite varnostno kopijo.", - "sieve_desc": "Kratek opis" + "sieve_desc": "Kratek opis", + "mta_sts": "MTA-STS", + "mta_sts_info": "MTA-STS je standard, ki vsiljuje dostavo e-pošte med poštnimi strežniki z uporabo TLS z veljavnimi potrdili.
Uporablja se, kadar DANE ni mogoč zaradi manjkajočega ali nepodprtega DNSSEC.
Opomba: Če prejemna domena podpira DANE z DNSSEC, je DANE vedno prednost – MTA-STS deluje le kot rezervna možnost.", + "mta_sts_version": "Različica", + "mta_sts_version_info": "Določa različico standarda MTA-STS – trenutno je veljavna samo različica STSv1.", + "mta_sts_mode": "Način", + "mta_sts_mode_info": "Na voljo so trije načini:
  • testiranje – pravilnik se samo spremlja, kršitve nimajo vpliva.
  • uveljavljanje – pravilnik se strogo uveljavlja, povezave brez veljavnega TLS so zavrnjene.
  • brez – pravilnik je objavljen, vendar se ne uporablja.
", + "mta_sts_max_age": "Najvišja starost", + "mta_sts_max_age_info": "Čas v sekundah, ki ga lahko prejemni poštni strežniki shranijo v predpomnilnik, dokler se ne ponovno naloži.", + "mta_sts_mx": "MX strežnik", + "mta_sts_mx_info": "Omogoča pošiljanje samo na izrecno navedena imena gostiteljskih strežnikov poštnih strežnikov; pošiljajoči MTA preveri, ali se ime gostitelja DNS MX ujema s seznamom pravilnikov, in dovoljuje dostavo le z veljavnim potrdilom TLS (zaščita pred MITM).", + "mta_sts_mx_notice": "Določiti je mogoče več strežnikov MX (ločenih z vejicami)." }, "footer": { "restart_container_info": "Pomembno: Ugoden ponovni zagon lahko traja nekaj časa, zato počakajte, da se konča.", @@ -799,7 +814,8 @@ "other_logins": "ali se prijavite s/z", "reset_password": "Ponastavi geslo", "request_reset_password": "Zahteva za spremembo gesla", - "username": "Uporabniško ime" + "username": "Uporabniško ime", + "email": "E-poštni naslov" }, "mailbox": { "last_mail_login": "Zadnja prijava v e-pošto", From 5361a4a4ee0e3c9a6434b3728b00e3f9bcf34f1f Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Mon, 1 Sep 2025 12:32:27 +0200 Subject: [PATCH 13/26] updated sponsors in Readme.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 2aad841c2..40288f10e 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,6 @@ A big thank you to everyone supporting us on GitHub Sponsors—your contribution - ### 50$/Month Sponsors Date: Wed, 3 Sep 2025 08:14:14 +0200 Subject: [PATCH 14/26] update postscreen_access.cidr (#6703) --- data/conf/postfix/postscreen_access.cidr | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/data/conf/postfix/postscreen_access.cidr b/data/conf/postfix/postscreen_access.cidr index 1783620dd..35fc1a802 100644 --- a/data/conf/postfix/postscreen_access.cidr +++ b/data/conf/postfix/postscreen_access.cidr @@ -1,6 +1,6 @@ -# Whitelist generated by Postwhite v3.4 on Do 28. Aug 14:05:16 CEST 2025 +# Whitelist generated by Postwhite v3.4 on Mon Sep 1 00:23:07 UTC 2025 # https://github.com/stevejenkins/postwhite/ -# 2225 total rules +# 2165 total rules 2a00:1450:4000::/36 permit 2a01:111:f400::/48 permit 2a01:111:f403::/49 permit @@ -55,7 +55,7 @@ 8.40.222.0/23 permit 8.40.222.250/31 permit 12.130.86.238 permit -13.107.253.44 permit +13.107.246.40 permit 13.110.208.0/21 permit 13.110.209.0/24 permit 13.110.216.0/22 permit @@ -686,8 +686,6 @@ 82.165.159.45 permit 82.165.159.130 permit 82.165.159.131 permit -85.9.206.169 permit -85.9.210.45 permit 85.158.136.0/21 permit 85.215.255.39 permit 85.215.255.40 permit @@ -736,7 +734,6 @@ 87.248.117.205 permit 87.253.232.0/21 permit 89.22.108.0/24 permit -91.134.188.129 permit 91.198.2.0/24 permit 91.211.240.0/22 permit 94.236.119.0/26 permit @@ -1669,7 +1666,7 @@ 170.10.132.56/29 permit 170.10.132.64/29 permit 170.10.133.0/24 permit -172.217.0.0/19 permit +172.217.0.0/20 permit 172.217.32.0/20 permit 172.217.128.0/19 permit 172.217.160.0/20 permit @@ -1798,8 +1795,6 @@ 193.142.157.0/24 permit 193.142.157.191 permit 193.142.157.198 permit -193.201.168.38 permit -193.201.168.170/31 permit 194.19.134.0/25 permit 194.25.134.16/28 permit 194.25.134.80/28 permit From 34877ecf9c976f52ccff73311a1424021d4b2e68 Mon Sep 17 00:00:00 2001 From: DerLinkman Date: Wed, 3 Sep 2025 08:18:04 +0200 Subject: [PATCH 15/26] watchdog: added postfix-tlspol check (#6691) --- data/Dockerfiles/watchdog/watchdog.sh | 37 +++++++++++++++++++++++++++ docker-compose.yml | 1 + 2 files changed, 38 insertions(+) diff --git a/data/Dockerfiles/watchdog/watchdog.sh b/data/Dockerfiles/watchdog/watchdog.sh index a087ca5f1..558aaa197 100755 --- a/data/Dockerfiles/watchdog/watchdog.sh +++ b/data/Dockerfiles/watchdog/watchdog.sh @@ -450,6 +450,31 @@ postfix_checks() { return 1 } +postfix-tlspol_checks() { + err_count=0 + diff_c=0 + THRESHOLD=${POSTFIX_TLSPOL_THRESHOLD} + # Reduce error count by 2 after restarting an unhealthy container + trap "[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))" USR1 + while [ ${err_count} -lt ${THRESHOLD} ]; do + touch /tmp/postfix-tlspol-mailcow; echo "$(tail -50 /tmp/postfix-tlspol-mailcow)" > /tmp/postfix-tlspol-mailcow + host_ip=$(get_container_ip postfix-tlspol-mailcow) + err_c_cur=${err_count} + /usr/lib/nagios/plugins/check_tcp -4 -H ${host_ip} -p 8642 2>> /tmp/postfix-tlspol-mailcow 1>&2; err_count=$(( ${err_count} + $? )) + [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1 + [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} )) + progress "Postfix TLS Policy companion" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c} + if [[ $? == 10 ]]; then + diff_c=0 + sleep 1 + else + diff_c=0 + sleep $(( ( RANDOM % 60 ) + 20 )) + fi + done + return 1 +} + clamd_checks() { err_count=0 diff_c=0 @@ -927,6 +952,18 @@ PID=$! echo "Spawned mailq_checks with PID ${PID}" BACKGROUND_TASKS+=(${PID}) +( +while true; do + if ! postfix-tlspol_checks; then + log_msg "Postfix TLS Policy hit error limit" + echo postfix-tlspol-mailcow > /tmp/com_pipe + fi +done +) & +PID=$! +echo "Spawned postfix-tlspol_checks with PID ${PID}" +BACKGROUND_TASKS+=(${PID}) + ( while true; do if ! dovecot_checks; then diff --git a/docker-compose.yml b/docker-compose.yml index ce33e3d93..0501e43fa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -577,6 +577,7 @@ services: - MYSQL_REPLICATION_THRESHOLD=${MYSQL_REPLICATION_THRESHOLD:-1} - SOGO_THRESHOLD=${SOGO_THRESHOLD:-3} - POSTFIX_THRESHOLD=${POSTFIX_THRESHOLD:-8} + - POSTFIX_TLSPOL_THRESHOLD=${POSTFIX_TLSPOL_THRESHOLD:-8} - CLAMD_THRESHOLD=${CLAMD_THRESHOLD:-15} - DOVECOT_THRESHOLD=${DOVECOT_THRESHOLD:-12} - DOVECOT_REPL_THRESHOLD=${DOVECOT_REPL_THRESHOLD:-20} From 81775ab4d59c4ee3bf2fa113a3388097164a3ca5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 18:02:11 +0200 Subject: [PATCH 16/26] chore(deps): update actions/stale action to v10 (#6708) Signed-off-by: milkmaker Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/close_old_issues_and_prs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/close_old_issues_and_prs.yml b/.github/workflows/close_old_issues_and_prs.yml index af5fd807d..91870fd1d 100644 --- a/.github/workflows/close_old_issues_and_prs.yml +++ b/.github/workflows/close_old_issues_and_prs.yml @@ -14,7 +14,7 @@ jobs: pull-requests: write steps: - name: Mark/Close Stale Issues and Pull Requests 🗑️ - uses: actions/stale@v9.1.0 + uses: actions/stale@v10.0.0 with: repo-token: ${{ secrets.STALE_ACTION_PAT }} days-before-stale: 60 From 06db1d6a72ce65cd5e464eab7f2b1970da555b49 Mon Sep 17 00:00:00 2001 From: Dmitriy Alekseev <1865999+dragoangel@users.noreply.github.com> Date: Fri, 5 Sep 2025 03:37:59 +0200 Subject: [PATCH 17/26] [Rspamd] Do not increment rate limit for emails from user to himself (#6706) * [Rspamd] Do not increment rate limit for emails from user to himself * Lowercase username and recipient address for comparison Normalize username and recipient address comparison to lowercase. --- data/conf/rspamd/lua/rspamd.local.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua index 5fe66f75f..2bf328e5b 100644 --- a/data/conf/rspamd/lua/rspamd.local.lua +++ b/data/conf/rspamd/lua/rspamd.local.lua @@ -454,12 +454,18 @@ rspamd_config:register_symbol({ local redis_params = rspamd_parse_redis_server('dyn_rl') local rspamd_logger = require "rspamd_logger" local envfrom = task:get_from(1) + local envrcpt = task:get_recipients(1) or {} local uname = task:get_user() if not envfrom or not uname then return false end + local uname = uname:lower() + if #envrcpt == 1 and envrcpt[1].addr:lower() == uname then + return false + end + local env_from_domain = envfrom[1].domain:lower() -- get smtp from domain in lower case local function redis_cb_user(err, data) From f67c0530f56495d4b7a2c3b8816a8140c2f25586 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it <75116288+FreddleSpl0it@users.noreply.github.com> Date: Tue, 9 Sep 2025 10:37:54 +0200 Subject: [PATCH 18/26] [Rspamd][Web] Internal alias support --- data/conf/rspamd/dynmaps/settings.php | 38 ++++++++++++++++++++++++-- data/web/inc/functions.mailbox.inc.php | 28 ++++++++++++------- data/web/inc/init_db.inc.php | 1 + data/web/js/site/mailbox.js | 9 ++++++ data/web/lang/lang.de-de.json | 5 ++++ data/web/lang/lang.en-gb.json | 5 ++++ data/web/templates/edit/alias.twig | 7 ++++- data/web/templates/modals/mailbox.twig | 9 ++++-- 8 files changed, 86 insertions(+), 16 deletions(-) diff --git a/data/conf/rspamd/dynmaps/settings.php b/data/conf/rspamd/dynmaps/settings.php index 274e9da28..1b0e6b6e4 100644 --- a/data/conf/rspamd/dynmaps/settings.php +++ b/data/conf/rspamd/dynmaps/settings.php @@ -56,7 +56,7 @@ function normalize_email($email) { $email = explode('@', $email); $email[0] = str_replace('.', '', $email[0]); $email = implode('@', $email); - } + } $gm_alt = "@googlemail.com"; if (substr_compare($email, $gm_alt, -strlen($gm_alt)) == 0) { $email = explode('@', $email); @@ -114,7 +114,7 @@ function ucl_rcpts($object, $type) { $rcpt[] = str_replace('/', '\/', $row['address']); } // Aliases by alias domains - $stmt = $pdo->prepare("SELECT CONCAT(`local_part`, '@', `alias_domain`.`alias_domain`) AS `alias` FROM `mailbox` + $stmt = $pdo->prepare("SELECT CONCAT(`local_part`, '@', `alias_domain`.`alias_domain`) AS `alias` FROM `mailbox` LEFT OUTER JOIN `alias_domain` ON `mailbox`.`domain` = `alias_domain`.`target_domain` WHERE `mailbox`.`username` = :object"); $stmt->execute(array( @@ -184,7 +184,7 @@ while ($row = array_shift($rows)) { rcpt = ; prepare("SELECT `option`, `value` FROM `filterconf` + $stmt = $pdo->prepare("SELECT `option`, `value` FROM `filterconf` WHERE (`option` = 'highspamlevel' OR `option` = 'lowspamlevel') AND `object`= :object"); $stmt->execute(array(':object' => $row['object'])); @@ -468,4 +468,36 @@ while ($row = array_shift($rows)) { + +query("SELECT `id`, `address`, `domain` FROM `alias` WHERE `active` = '1' AND `internal` = '1'"); +$aliases = $stmt->fetchAll(PDO::FETCH_ASSOC); +while ($alias = array_shift($aliases)) { + // build allowed_domains regex and add target domain and alias domains + $stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain` WHERE `active` = '1' AND `target_domain` = :target_domain"); + $stmt->execute(array(':target_domain' => $alias['domain'])); + $allowed_domains = $stmt->fetchAll(PDO::FETCH_ASSOC); + $allowed_domains = array_map(function($item) { + return str_replace('.', '\.', $item['alias_domain']); + }, $allowed_domains); + $allowed_domains[] = str_replace('.', '\.', $alias['domain']); + $allowed_domains = implode('|', $allowed_domains); +?> + internal_alias_ { + priority = 10; + rcpt = ""; + from = "/^((?!.*@()).)*$/"; + apply "default" { + MAILCOW_INTERNAL_ALIAS = 9999.0; + } + symbols [ + "MAILCOW_INTERNAL_ALIAS" + ] + } + + } diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index a74d182cf..a0199fbdc 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -684,15 +684,16 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { return true; break; case 'alias': - $addresses = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['address'])); - $gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['goto'])); - $active = intval($_data['active']); - $sogo_visible = intval($_data['sogo_visible']); - $goto_null = intval($_data['goto_null']); - $goto_spam = intval($_data['goto_spam']); - $goto_ham = intval($_data['goto_ham']); + $addresses = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['address'])); + $gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['goto'])); + $internal = intval($_data['internal']); + $active = intval($_data['active']); + $sogo_visible = intval($_data['sogo_visible']); + $goto_null = intval($_data['goto_null']); + $goto_spam = intval($_data['goto_spam']); + $goto_ham = intval($_data['goto_ham']); $private_comment = $_data['private_comment']; - $public_comment = $_data['public_comment']; + $public_comment = $_data['public_comment']; if (strlen($private_comment) > 160 | strlen($public_comment) > 160){ $_SESSION['return'][] = array( 'type' => 'danger', @@ -842,8 +843,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ); continue; } - $stmt = $pdo->prepare("INSERT INTO `alias` (`address`, `public_comment`, `private_comment`, `goto`, `domain`, `sogo_visible`, `active`) - VALUES (:address, :public_comment, :private_comment, :goto, :domain, :sogo_visible, :active)"); + $stmt = $pdo->prepare("INSERT INTO `alias` (`address`, `public_comment`, `private_comment`, `goto`, `domain`, `sogo_visible`, `internal`, `active`) + VALUES (:address, :public_comment, :private_comment, :goto, :domain, :sogo_visible, :internal, :active)"); if (!filter_var($address, FILTER_VALIDATE_EMAIL) === true) { $stmt->execute(array( ':address' => '@'.$domain, @@ -853,6 +854,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ':goto' => $goto, ':domain' => $domain, ':sogo_visible' => $sogo_visible, + ':internal' => $internal, ':active' => $active )); } @@ -864,6 +866,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ':goto' => $goto, ':domain' => $domain, ':sogo_visible' => $sogo_visible, + ':internal' => $internal, ':active' => $active )); } @@ -2481,6 +2484,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { foreach ($ids as $id) { $is_now = mailbox('get', 'alias_details', $id); if (!empty($is_now)) { + $internal = (isset($_data['internal'])) ? intval($_data['internal']) : $is_now['internal']; $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active']; $sogo_visible = (isset($_data['sogo_visible'])) ? intval($_data['sogo_visible']) : $is_now['sogo_visible']; $goto_null = (isset($_data['goto_null'])) ? intval($_data['goto_null']) : 0; @@ -2666,6 +2670,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { `domain` = :domain, `goto` = :goto, `sogo_visible`= :sogo_visible, + `internal`= :internal, `active`= :active WHERE `id` = :id"); $stmt->execute(array( @@ -2675,6 +2680,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ':domain' => $domain, ':goto' => $goto, ':sogo_visible' => $sogo_visible, + ':internal' => $internal, ':active' => $active, ':id' => $is_now['id'] )); @@ -4700,6 +4706,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { `address`, `public_comment`, `private_comment`, + `internal`, `active`, `sogo_visible`, `created`, @@ -4730,6 +4737,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $aliasdata['goto'] = $row['goto']; $aliasdata['address'] = $row['address']; (!filter_var($aliasdata['address'], FILTER_VALIDATE_EMAIL)) ? $aliasdata['is_catch_all'] = 1 : $aliasdata['is_catch_all'] = 0; + $aliasdata['internal'] = $row['internal']; $aliasdata['active'] = $row['active']; $aliasdata['active_int'] = $row['active']; $aliasdata['sogo_visible'] = $row['sogo_visible']; diff --git a/data/web/inc/init_db.inc.php b/data/web/inc/init_db.inc.php index ecb87c380..1c4f0ebf2 100644 --- a/data/web/inc/init_db.inc.php +++ b/data/web/inc/init_db.inc.php @@ -184,6 +184,7 @@ function init_db_schema() "private_comment" => "TEXT", "public_comment" => "TEXT", "sogo_visible" => "TINYINT(1) NOT NULL DEFAULT '1'", + "internal" => "TINYINT(1) NOT NULL DEFAULT '0'", "active" => "TINYINT(1) NOT NULL DEFAULT '1'" ), "keys" => array( diff --git a/data/web/js/site/mailbox.js b/data/web/js/site/mailbox.js index 135ec764a..6a04eb241 100644 --- a/data/web/js/site/mailbox.js +++ b/data/web/js/site/mailbox.js @@ -1972,6 +1972,15 @@ jQuery(function($){ data: 'private_comment', defaultContent: '' }, + { + title: lang.internal, + data: 'internal', + defaultContent: '', + responsivePriority: 6, + render: function (data, type) { + return 1==data?'1':0==data&&'0'; + } + }, { title: lang.active, data: 'active', diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index 93b908d6c..b5f3f325d 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -71,6 +71,8 @@ "goto_spam": "Nachrichten als Spam lernen", "hostname": "Host", "inactive": "Inaktiv", + "internal": "Intern", + "internal_info": "Interne Aliasse sind nur von der eigenen Domäne oder Alias-Domänen erreichbar.", "kind": "Art", "mailbox_quota_def": "Standard-Quota einer Mailbox", "mailbox_quota_m": "Max. Speicherplatz pro Mailbox (MiB)", @@ -690,6 +692,8 @@ "grant_types": "Grant-types", "hostname": "Servername", "inactive": "Inaktiv", + "internal": "Intern", + "internal_info": "Interne Aliasse sind nur von der eigenen Domäne oder Alias-Domänen erreichbar.", "kind": "Art", "last_modified": "Zuletzt geändert", "lookup_mx": "Ziel mit MX vergleichen (Regex, etwa .*\\.google\\.com, um alle Ziele mit MX *google.com zu routen)", @@ -923,6 +927,7 @@ "in_use": "Prozentualer Gebrauch", "inactive": "Inaktiv", "insert_preset": "Beispiel \"%s\" laden", + "internal": "Intern", "kind": "Art", "last_mail_login": "Letzter Mail-Login", "last_modified": "Zuletzt geändert", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 0af0e59b0..d46e4606c 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -71,6 +71,8 @@ "goto_spam": "Learn as spam", "hostname": "Host", "inactive": "Inactive", + "internal": "Internal", + "internal_info": "Internal aliases are only accessible from the own domain or alias domains.", "kind": "Kind", "mailbox_quota_def": "Default mailbox quota", "mailbox_quota_m": "Max. quota per mailbox (MiB)", @@ -690,6 +692,8 @@ "grant_types": "Grant types", "hostname": "Hostname", "inactive": "Inactive", + "internal": "Internal", + "internal_info": "Internal aliases are only accessible from the own domain or alias domains.", "kind": "Kind", "last_modified": "Last modified", "lookup_mx": "Destination is a regular expression to match against MX name (.*\\.google\\.com to route all mail targeted to a MX ending in google.com over this hop)", @@ -928,6 +932,7 @@ "in_use": "In use (%)", "inactive": "Inactive", "insert_preset": "Insert example preset \"%s\"", + "internal": "Internal", "kind": "Kind", "last_mail_login": "Last mail login", "last_modified": "Last modified", diff --git a/data/web/templates/edit/alias.twig b/data/web/templates/edit/alias.twig index 48d19617b..64a6e706b 100644 --- a/data/web/templates/edit/alias.twig +++ b/data/web/templates/edit/alias.twig @@ -6,6 +6,7 @@
+ {% if not skip_sogo %} {% endif %} @@ -33,8 +34,12 @@
-

{{ lang.edit.sogo_visible_info }}

+ {{ lang.edit.sogo_visible_info }} {% endif %} +
+ +
+ {{ lang.edit.internal_info }}

diff --git a/data/web/templates/modals/mailbox.twig b/data/web/templates/modals/mailbox.twig index 0c164332b..1e8ee53fa 100644 --- a/data/web/templates/modals/mailbox.twig +++ b/data/web/templates/modals/mailbox.twig @@ -777,6 +777,7 @@