diff --git a/.github/workflows/close_old_issues_and_prs.yml b/.github/workflows/close_old_issues_and_prs.yml index bba04b0d1..e55b27068 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@v10.4.0 + uses: actions/stale@v10.2.0 with: repo-token: ${{ secrets.STALE_ACTION_PAT }} days-before-stale: 60 diff --git a/.github/workflows/image_builds.yml b/.github/workflows/image_builds.yml index aa56b0381..c8ec7ccae 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@v7 + - uses: actions/checkout@v6 - 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 8d6b2524d..548fabde6 100644 --- a/.github/workflows/pr_to_nightly.yml +++ b/.github/workflows/pr_to_nightly.yml @@ -8,11 +8,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v7 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Run the Action - uses: devops-infra/action-pull-request@v1.4.0 + uses: devops-infra/action-pull-request@v1.0.2 with: github_token: ${{ secrets.PRTONIGHTLY_ACTION_PAT }} title: Automatic PR to nightly from ${{ github.event.repository.updated_at}} diff --git a/.github/workflows/rebuild_backup_image.yml b/.github/workflows/rebuild_backup_image.yml index 4490afee1..b18d339ba 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@v7 + uses: actions/checkout@v6 - name: Set up QEMU uses: docker/setup-qemu-action@v4 diff --git a/.github/workflows/update_postscreen_access_list.yml b/.github/workflows/update_postscreen_access_list.yml index ed63281c7..066616aee 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@v7 + uses: actions/checkout@v6 - name: Generate postscreen_access.cidr run: | diff --git a/README.md b/README.md index 8844c7482..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 example.com) - local PARENT_DOMAIN=$(echo ${DOMAIN} | cut -d. -f2-) - - # Check if ADDITIONAL_SAN contains a wildcard for this parent domain - if [[ "${ADDITIONAL_SAN}" == *"*.${PARENT_DOMAIN}"* ]]; then - return 0 # Covered by wildcard - fi - - return 1 # Not covered -} diff --git a/data/Dockerfiles/dovecot/quarantine_notify.py b/data/Dockerfiles/dovecot/quarantine_notify.py index 5757cdf53..a681c1fda 100755 --- a/data/Dockerfiles/dovecot/quarantine_notify.py +++ b/data/Dockerfiles/dovecot/quarantine_notify.py @@ -47,7 +47,7 @@ try: if max_score == "": max_score = 9999.0 - def query_mysql(query, params = None, headers = True, update = False): + def query_mysql(query, headers = True, update = False): while True: try: cnx = MySQLdb.connect(user=os.environ.get('DBUSER'), password=os.environ.get('DBPASS'), database=os.environ.get('DBNAME'), charset="utf8mb4", collation="utf8mb4_general_ci") @@ -57,10 +57,7 @@ try: else: break cur = cnx.cursor() - if params: - cur.execute(query, params) - else: - cur.execute(query) + cur.execute(query) if not update: result = [] columns = tuple( [d[0] for d in cur.description] ) @@ -79,7 +76,7 @@ try: def notify_rcpt(rcpt, msg_count, quarantine_acl, category): if category == "add_header": category = "add header" - meta_query = query_mysql('SELECT `qhash`, id, subject, score, sender, created, action FROM quarantine WHERE notified = 0 AND rcpt = %s AND score < %s AND (action = %s OR "all" = %s)', (rcpt, max_score, category, category)) + meta_query = query_mysql('SELECT `qhash`, id, subject, score, sender, created, action FROM quarantine WHERE notified = 0 AND rcpt = "%s" AND score < %f AND (action = "%s" OR "all" = "%s")' % (rcpt, max_score, category, category)) print("%s: %d of %d messages qualify for notification" % (rcpt, len(meta_query), msg_count)) if len(meta_query) == 0: return @@ -133,7 +130,7 @@ try: server.sendmail(msg['From'], [str(redirect)] + [str(bcc)], text) server.quit() for res in meta_query: - query_mysql('UPDATE quarantine SET notified = 1 WHERE id = %s', (res['id'],), update = True) + query_mysql('UPDATE quarantine SET notified = 1 WHERE id = "%d"' % (res['id']), update = True) r.hset('Q_LAST_NOTIFIED', record['rcpt'], time_now) break except Exception as ex: @@ -141,7 +138,7 @@ try: print('%s' % (ex)) time.sleep(3) - records = query_mysql('SELECT IFNULL(user_acl.quarantine, 0) AS quarantine_acl, count(id) AS counter, rcpt FROM quarantine LEFT OUTER JOIN user_acl ON user_acl.username = rcpt WHERE notified = 0 AND score < %s AND rcpt in (SELECT username FROM mailbox) GROUP BY rcpt', (max_score,)) + records = query_mysql('SELECT IFNULL(user_acl.quarantine, 0) AS quarantine_acl, count(id) AS counter, rcpt FROM quarantine LEFT OUTER JOIN user_acl ON user_acl.username = rcpt WHERE notified = 0 AND score < %f AND rcpt in (SELECT username FROM mailbox) GROUP BY rcpt' % (max_score)) for record in records: attrs = '' @@ -159,7 +156,7 @@ try: except Exception as ex: print('Could not determine last notification for %s, assuming never' % (record['rcpt'])) last_notification = 0 - attrs_json = query_mysql('SELECT attributes FROM mailbox WHERE username = %s', (record['rcpt'],)) + attrs_json = query_mysql('SELECT attributes FROM mailbox WHERE username = "%s"' % (record['rcpt'])) attrs = attrs_json[0]['attributes'] if isinstance(attrs, str): # if attr is str then just load it diff --git a/data/Dockerfiles/nginx/Dockerfile b/data/Dockerfiles/nginx/Dockerfile index 65b34838e..7d2ce34f3 100644 --- a/data/Dockerfiles/nginx/Dockerfile +++ b/data/Dockerfiles/nginx/Dockerfile @@ -1,4 +1,4 @@ -FROM nginx:1.30.3-alpine +FROM nginx:alpine LABEL maintainer "The Infrastructure Company GmbH " ENV PIP_BREAK_SYSTEM_PACKAGES=1 diff --git a/data/Dockerfiles/phpfpm/Dockerfile b/data/Dockerfiles/phpfpm/Dockerfile index ca252163a..7917d7f7d 100644 --- a/data/Dockerfiles/phpfpm/Dockerfile +++ b/data/Dockerfiles/phpfpm/Dockerfile @@ -7,13 +7,13 @@ ARG APCU_PECL_VERSION=5.1.28 # renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced extractVersion=(?.*)$ ARG IMAGICK_PECL_VERSION=3.8.1 # renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced extractVersion=^v(?.*)$ -ARG MAILPARSE_PECL_VERSION=3.2.0 +ARG MAILPARSE_PECL_VERSION=3.1.9 # renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?.*)$ ARG MEMCACHED_PECL_VERSION=3.4.0 # renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=(?.*)$ ARG REDIS_PECL_VERSION=6.3.0 # renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced extractVersion=(?.*)$ -ARG COMPOSER_VERSION=2.10.2 +ARG COMPOSER_VERSION=2.9.5 RUN apk add -U --no-cache autoconf \ aspell-dev \ diff --git a/data/Dockerfiles/postfix/Dockerfile b/data/Dockerfiles/postfix/Dockerfile index cf0647692..994612ec4 100644 --- a/data/Dockerfiles/postfix/Dockerfile +++ b/data/Dockerfiles/postfix/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:trixie-slim +FROM debian:bookworm-slim LABEL maintainer="The Infrastructure Company GmbH " diff --git a/data/Dockerfiles/postfix/syslog-ng-redis_slave.conf b/data/Dockerfiles/postfix/syslog-ng-redis_slave.conf index bbc9420fe..8e15932a2 100644 --- a/data/Dockerfiles/postfix/syslog-ng-redis_slave.conf +++ b/data/Dockerfiles/postfix/syslog-ng-redis_slave.conf @@ -1,4 +1,4 @@ -@version: 4.8 +@version: 3.38 @include "scl.conf" options { chain_hostnames(off); @@ -7,7 +7,7 @@ options { dns_cache(no); use_fqdn(no); owner("root"); group("adm"); perm(0640); - stats(freq(0)); + stats_freq(0); bad_hostname("^gconfd$"); }; source s_src { diff --git a/data/Dockerfiles/postfix/syslog-ng.conf b/data/Dockerfiles/postfix/syslog-ng.conf index 8f09d04a4..fc7d1aa0f 100644 --- a/data/Dockerfiles/postfix/syslog-ng.conf +++ b/data/Dockerfiles/postfix/syslog-ng.conf @@ -1,4 +1,4 @@ -@version: 4.8 +@version: 3.38 @include "scl.conf" options { chain_hostnames(off); @@ -7,7 +7,7 @@ options { dns_cache(no); use_fqdn(no); owner("root"); group("adm"); perm(0640); - stats(freq(0)); + stats_freq(0); bad_hostname("^gconfd$"); }; source s_src { diff --git a/data/Dockerfiles/rspamd/Dockerfile b/data/Dockerfiles/rspamd/Dockerfile index d37d1226a..d0c710428 100644 --- a/data/Dockerfiles/rspamd/Dockerfile +++ b/data/Dockerfiles/rspamd/Dockerfile @@ -2,7 +2,7 @@ FROM debian:trixie-slim LABEL maintainer="The Infrastructure Company GmbH " ARG DEBIAN_FRONTEND=noninteractive -ARG RSPAMD_VER=rspamd_4.1.0-1~e2b0b18 +ARG RSPAMD_VER=rspamd_3.14.3-1~236eb65 ARG CODENAME=trixie ENV LC_ALL=C diff --git a/data/Dockerfiles/sogo/Dockerfile b/data/Dockerfiles/sogo/Dockerfile index b4b401e8c..d118b6492 100644 --- a/data/Dockerfiles/sogo/Dockerfile +++ b/data/Dockerfiles/sogo/Dockerfile @@ -1,6 +1,6 @@ # SOGo built from source to enable security patch application # Repository: https://github.com/Alinto/sogo -# Version: SOGo-5.12.9 +# Version: SOGo-5.12.4 # # Applied security patches: # - @@ -12,8 +12,8 @@ FROM debian:bookworm LABEL maintainer="The Infrastructure Company GmbH " ARG DEBIAN_FRONTEND=noninteractive -ARG SOGO_VERSION=SOGo-5.12.9 -ARG SOPE_VERSION=SOPE-5.12.9 +ARG SOGO_VERSION=SOGo-5.12.5 +ARG SOPE_VERSION=SOPE-5.12.5 # Security patches to apply (space-separated commit hashes) ARG SOGO_SECURITY_PATCHES="" # renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^(?.*)$ @@ -26,7 +26,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ git \ build-essential \ gobjc \ - pkg-config \ gnustep-make \ gnustep-base-runtime \ libgnustep-base-dev \ @@ -41,7 +40,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libcurl4-openssl-dev \ libzip-dev \ libytnef0-dev \ - libwbxml2-dev \ curl \ ca-certificates \ # Runtime dependencies @@ -70,7 +68,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libcurl4 \ libzip4 \ libytnef0 \ - libwbxml2-1 \ # Download gosu && dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')" \ && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" \ @@ -100,9 +97,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ && ./configure --disable-debug --disable-strip \ && make -j$(nproc) \ && make install \ - && cd /tmp/sogo/ActiveSync \ - && . /usr/share/GNUstep/Makefiles/GNUstep.sh \ - && make -j$(nproc) install \ && cd / \ && rm -rf /tmp/sogo \ # Strip binaries @@ -152,8 +146,8 @@ RUN echo "/usr/lib64" > /etc/ld.so.conf.d/sogo.conf \ # Create sogo user and group RUN groupadd -r -g 999 sogo \ && useradd -r -u 999 -g sogo -d /var/lib/sogo -s /bin/bash -c "SOGo Daemon" sogo \ - && mkdir -p /var/lib/sogo /var/run/sogo /var/log/sogo /var/spool/sogo \ - && chown -R sogo:sogo /var/lib/sogo /var/run/sogo /var/log/sogo /var/spool/sogo + && mkdir -p /var/lib/sogo /var/run/sogo /var/log/sogo \ + && chown -R sogo:sogo /var/lib/sogo /var/run/sogo /var/log/sogo # Create symlinks for SOGo binaries RUN ln -s /usr/local/sbin/sogod /usr/sbin/sogod \ diff --git a/data/Dockerfiles/unbound/Dockerfile b/data/Dockerfiles/unbound/Dockerfile index b1ec99e4f..7c4921384 100644 --- a/data/Dockerfiles/unbound/Dockerfile +++ b/data/Dockerfiles/unbound/Dockerfile @@ -2,14 +2,11 @@ FROM alpine:3.23 LABEL maintainer = "The Infrastructure Company GmbH " -# install unbound from alpine:edge to get security patches -RUN apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main unbound - -# install other packages from regular alpine stable repo RUN apk add --update --no-cache \ curl \ bind-tools \ coreutils \ + unbound \ bash \ openssl \ drill \ diff --git a/data/Dockerfiles/watchdog/Dockerfile b/data/Dockerfiles/watchdog/Dockerfile index 54854ea1a..831086733 100644 --- a/data/Dockerfiles/watchdog/Dockerfile +++ b/data/Dockerfiles/watchdog/Dockerfile @@ -37,6 +37,5 @@ RUN apk add --update \ 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 -COPY client.cnf /etc/my.cnf.d/client.cnf CMD ["/watchdog.sh"] diff --git a/data/Dockerfiles/watchdog/client.cnf b/data/Dockerfiles/watchdog/client.cnf deleted file mode 100644 index f078f3cbe..000000000 --- a/data/Dockerfiles/watchdog/client.cnf +++ /dev/null @@ -1,3 +0,0 @@ -[client] -ssl = false -ssl-verify-server-cert = false diff --git a/data/Dockerfiles/watchdog/watchdog.sh b/data/Dockerfiles/watchdog/watchdog.sh index 020f3f838..558aaa197 100755 --- a/data/Dockerfiles/watchdog/watchdog.sh +++ b/data/Dockerfiles/watchdog/watchdog.sh @@ -38,7 +38,7 @@ if [[ ! -p /tmp/com_pipe ]]; then fi # Wait for containers -while ! mariadb-admin status --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent; do +while ! mariadb-admin status --ssl=false --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent; do echo "Waiting for SQL..." sleep 2 done @@ -359,8 +359,8 @@ mysql_checks() { while [ ${err_count} -lt ${THRESHOLD} ]; do touch /tmp/mysql-mailcow; echo "$(tail -50 /tmp/mysql-mailcow)" > /tmp/mysql-mailcow err_c_cur=${err_count} - /usr/lib/nagios/plugins/check_mysql -f /etc/my.cnf.d/client.cnf -s /var/run/mysqld/mysqld.sock -u ${DBUSER} -p ${DBPASS} -d ${DBNAME} 2>> /tmp/mysql-mailcow 1>&2; err_count=$(( ${err_count} + $? )) - /usr/lib/nagios/plugins/check_mysql_query -f /etc/my.cnf.d/client.cnf -s /var/run/mysqld/mysqld.sock -u ${DBUSER} -p ${DBPASS} -d ${DBNAME} -q "SELECT COUNT(*) FROM information_schema.tables" 2>> /tmp/mysql-mailcow 1>&2; err_count=$(( ${err_count} + $? )) + /usr/lib/nagios/plugins/check_mysql -s /var/run/mysqld/mysqld.sock -u ${DBUSER} -p ${DBPASS} -d ${DBNAME} 2>> /tmp/mysql-mailcow 1>&2; err_count=$(( ${err_count} + $? )) + /usr/lib/nagios/plugins/check_mysql_query -s /var/run/mysqld/mysqld.sock -u ${DBUSER} -p ${DBPASS} -d ${DBNAME} -q "SELECT COUNT(*) FROM information_schema.tables" 2>> /tmp/mysql-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 "MySQL/MariaDB" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c} @@ -384,7 +384,7 @@ mysql_repl_checks() { while [ ${err_count} -lt ${THRESHOLD} ]; do touch /tmp/mysql_repl_checks; echo "$(tail -50 /tmp/mysql_repl_checks)" > /tmp/mysql_repl_checks err_c_cur=${err_count} - /usr/lib/nagios/plugins/check_mysql_slavestatus.sh -o /etc/my.cnf.d/client.cnf -S /var/run/mysqld/mysqld.sock -u root -p ${DBROOT} 2>> /tmp/mysql_repl_checks 1>&2; err_count=$(( ${err_count} + $? )) + /usr/lib/nagios/plugins/check_mysql_slavestatus.sh -S /var/run/mysqld/mysqld.sock -u root -p ${DBROOT} 2>> /tmp/mysql_repl_checks 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 "MySQL/MariaDB replication" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c} diff --git a/data/conf/postfix/main.cf b/data/conf/postfix/main.cf index 080be499a..f091cb3f9 100644 --- a/data/conf/postfix/main.cf +++ b/data/conf/postfix/main.cf @@ -37,7 +37,7 @@ postscreen_access_list = permit_mynetworks, cidr:/opt/postfix/conf/postscreen_access.cidr, tcp:127.0.0.1:10027 postscreen_bare_newline_enable = no -postscreen_denylist_action = drop +postscreen_blacklist_action = drop postscreen_cache_cleanup_interval = 24h postscreen_cache_map = proxy:btree:$data_directory/postscreen_cache postscreen_dnsbl_action = enforce @@ -107,6 +107,8 @@ smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch, reject_unknown_sender_domain smtpd_soft_error_limit = 3 smtpd_tls_auth_only = yes +smtpd_tls_dh1024_param_file = /etc/ssl/mail/dhparams.pem +smtpd_tls_eecdh_grade = auto smtpd_tls_exclude_ciphers = ECDHE-RSA-RC4-SHA, RC4, aNULL, DES-CBC3-SHA, ECDHE-RSA-DES-CBC3-SHA, EDH-RSA-DES-CBC3-SHA smtpd_tls_loglevel = 1 diff --git a/data/conf/postfix/master.cf b/data/conf/postfix/master.cf index fb49f2df2..d5114df28 100644 --- a/data/conf/postfix/master.cf +++ b/data/conf/postfix/master.cf @@ -29,6 +29,7 @@ smtps inet n - n - - smtpd # TLS protocol can be modified by setting submission_smtpd_tls_mandatory_protocols in extra.cf submission inet n - n - - smtpd -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject + -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_tls_mandatory_protocols=$submission_smtpd_tls_mandatory_protocols -o tls_preempt_cipherlist=yes @@ -37,6 +38,7 @@ submission inet n - n - - smtpd 10587 inet n - n - - smtpd -o smtpd_upstream_proxy_protocol=haproxy -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject + -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_tls_mandatory_protocols=$submission_smtpd_tls_mandatory_protocols -o tls_preempt_cipherlist=yes diff --git a/data/conf/postfix/postscreen_access.cidr b/data/conf/postfix/postscreen_access.cidr index 6fcedff95..de38fe39e 100644 --- a/data/conf/postfix/postscreen_access.cidr +++ b/data/conf/postfix/postscreen_access.cidr @@ -1,8 +1,7 @@ -# Whitelist generated by Postwhite v3.4 on Wed Jul 1 00:51:20 UTC 2026 +# Whitelist generated by Postwhite v3.4 on Sun Mar 1 00:29:01 UTC 2026 # https://github.com/stevejenkins/postwhite/ -# 2251 total rules +# 2174 total rules 2a00:1450:4000::/36 permit -2a00:1450:4864::/56 permit 2a01:111:f400::/48 permit 2a01:111:f403:2800::/53 permit 2a01:111:f403:8000::/51 permit @@ -32,11 +31,8 @@ 2a02:a60:0:5::/64 permit 2a0f:f640::/56 permit 2c0f:fb50:4000::/36 permit -2c0f:fb50:4864::/56 permit -2.207.151.32/27 permit 2.207.151.53 permit 2.207.217.30 permit -2.207.223.160/27 permit 3.64.237.68 permit 3.65.3.180 permit 3.70.123.177 permit @@ -56,8 +52,14 @@ 8.25.194.0/23 permit 8.25.196.0/23 permit 8.36.116.0/24 permit +8.39.54.0/23 permit +8.39.54.250/31 permit 8.39.144.0/24 permit +8.40.222.0/23 permit +8.40.222.250/31 permit 12.130.86.238 permit +13.107.213.51 permit +13.107.246.51 permit 13.108.16.0/20 permit 13.110.208.0/21 permit 13.110.209.0/24 permit @@ -67,6 +69,7 @@ 13.111.191.0/24 permit 13.216.7.111 permit 13.216.54.180 permit +13.247.164.219 permit 15.200.21.50 permit 15.200.44.248 permit 15.200.201.185 permit @@ -170,6 +173,7 @@ 34.215.104.144 permit 34.218.115.239 permit 34.225.212.172 permit +34.241.242.183 permit 35.83.148.184 permit 35.155.198.111 permit 35.158.23.94 permit @@ -193,6 +197,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 @@ -272,9 +277,9 @@ 50.56.130.221 permit 50.56.130.222 permit 50.112.246.219 permit -51.83.17.38 permit 52.1.14.157 permit 52.5.230.59 permit +52.6.74.205 permit 52.12.53.23 permit 52.13.214.179 permit 52.26.1.71 permit @@ -331,6 +336,7 @@ 54.244.54.130 permit 54.244.242.0/24 permit 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 @@ -362,7 +368,6 @@ 64.132.88.0/23 permit 64.132.92.0/24 permit 64.181.194.190 permit -64.181.213.254 permit 64.207.219.7 permit 64.207.219.8 permit 64.207.219.9 permit @@ -397,6 +402,7 @@ 65.110.161.77 permit 65.123.29.213 permit 65.123.29.220 permit +65.154.166.0/24 permit 65.212.180.36 permit 66.102.0.0/20 permit 66.119.150.192/26 permit @@ -447,11 +453,7 @@ 66.218.75.252/31 permit 66.218.75.254 permit 66.220.144.128/25 permit -66.220.144.178 permit -66.220.144.179 permit 66.220.155.0/24 permit -66.220.155.178 permit -66.220.155.179 permit 66.220.157.0/25 permit 66.231.80.0/20 permit 66.240.227.0/24 permit @@ -516,8 +518,6 @@ 69.162.98.0/24 permit 69.169.224.0/20 permit 69.171.232.0/24 permit -69.171.232.180 permit -69.171.232.181 permit 69.171.244.0/23 permit 70.42.149.35 permit 72.3.185.0/24 permit @@ -639,7 +639,6 @@ 77.238.189.148/30 permit 79.135.106.0/24 permit 79.135.107.0/24 permit -80.225.160.128/25 permit 81.169.146.243 permit 81.169.146.245 permit 81.169.146.246 permit @@ -658,9 +657,6 @@ 82.165.159.45 permit 82.165.159.130 permit 82.165.159.131 permit -84.8.68.0/25 permit -84.8.192.128/25 permit -84.8.224.128/25 permit 85.9.206.169 permit 85.9.210.45 permit 85.158.136.0/21 permit @@ -1210,6 +1206,9 @@ 99.78.197.208/28 permit 103.9.96.0/22 permit 103.28.42.0/24 permit +103.84.217.15 permit +103.84.217.238 permit +103.89.75.238 permit 103.151.192.0/23 permit 103.168.172.128/27 permit 103.237.104.0/22 permit @@ -1370,6 +1369,9 @@ 117.120.16.0/21 permit 119.42.242.52/31 permit 119.42.242.156 permit +121.244.91.48 permit +121.244.91.52 permit +122.15.156.182 permit 123.126.78.64/29 permit 124.108.96.24/31 permit 124.108.96.28/31 permit @@ -1406,20 +1408,6 @@ 129.146.88.28 permit 129.146.147.105 permit 129.146.236.58 permit -129.148.135.0/25 permit -129.148.148.0/25 permit -129.148.164.0/25 permit -129.148.180.0/25 permit -129.148.215.0/25 permit -129.149.6.0/25 permit -129.149.22.0/25 permit -129.149.38.0/25 permit -129.149.52.0/25 permit -129.149.68.0/25 permit -129.149.84.0/25 permit -129.149.100.0/25 permit -129.149.118.0/25 permit -129.149.126.0/25 permit 129.151.67.221 permit 129.153.62.216 permit 129.153.104.71 permit @@ -1432,19 +1420,16 @@ 129.159.22.159 permit 129.159.87.137 permit 129.213.195.191 permit -130.35.116.0/25 permit 130.61.9.72 permit 130.162.39.83 permit 130.248.172.0/24 permit 130.248.173.0/24 permit -131.186.12.0/25 permit 131.253.30.0/24 permit 131.253.121.0/26 permit 132.145.13.209 permit 132.226.26.225 permit 132.226.49.32 permit 132.226.56.24 permit -134.98.248.128/25 permit 134.128.64.0/19 permit 134.128.96.0/19 permit 134.170.27.8 permit @@ -1452,7 +1437,21 @@ 134.170.141.64/26 permit 134.170.143.0/24 permit 134.170.174.0/24 permit +135.84.80.0/24 permit +135.84.81.0/24 permit +135.84.82.0/24 permit +135.84.83.0/24 permit 135.84.216.0/22 permit +136.143.160.0/24 permit +136.143.161.0/24 permit +136.143.162.0/24 permit +136.143.176.0/24 permit +136.143.177.0/24 permit +136.143.178.49 permit +136.143.182.0/23 permit +136.143.184.0/24 permit +136.143.188.0/24 permit +136.143.190.0/23 permit 136.146.128.0/20 permit 136.147.128.0/20 permit 136.147.135.0/24 permit @@ -1461,10 +1460,6 @@ 136.147.182.0/24 permit 136.147.224.0/20 permit 136.179.50.206 permit -136.248.224.128/25 permit -136.248.232.128/25 permit -138.1.108.0/25 permit -138.1.170.0/24 permit 139.60.152.0/22 permit 139.138.35.44 permit 139.138.46.121 permit @@ -1472,7 +1467,7 @@ 139.138.46.219 permit 139.138.57.55 permit 139.138.58.119 permit -139.177.108.0/25 permit +139.167.79.86 permit 139.180.17.0/24 permit 140.238.148.191 permit 141.148.55.217 permit @@ -1511,9 +1506,6 @@ 146.88.28.0/24 permit 146.148.116.76 permit 147.154.32.0/25 permit -147.154.63.0/24 permit -147.154.126.0/24 permit -147.154.191.0/24 permit 147.243.1.47 permit 147.243.1.48 permit 147.243.1.153 permit @@ -1521,22 +1513,16 @@ 147.243.128.26 permit 148.105.0.0/16 permit 148.105.8.0/21 permit -148.116.32.128/25 permit 149.72.0.0/16 permit 149.72.234.184 permit 149.72.248.236 permit 149.97.173.180 permit -149.118.160.128/25 permit 150.136.21.199 permit -150.171.109.183 permit 150.230.98.160 permit 151.145.38.14 permit 152.67.105.195 permit 152.69.200.236 permit 152.70.155.126 permit -155.248.135.128/25 permit -155.248.140.0/25 permit -155.248.148.0/25 permit 155.248.208.51 permit 155.248.220.138 permit 155.248.234.149 permit @@ -1545,14 +1531,10 @@ 157.58.30.128/25 permit 157.58.196.96/29 permit 157.58.249.3 permit -157.137.32.128/25 permit -157.137.96.128/25 permit 157.151.208.65 permit 157.255.1.64/29 permit 158.101.211.207 permit 158.247.16.0/20 permit -158.247.100.0/25 permit -159.13.4.0/25 permit 159.92.154.0/24 permit 159.92.155.0/24 permit 159.92.157.0/24 permit @@ -1586,7 +1568,6 @@ 161.71.64.0/20 permit 162.88.4.0/23 permit 162.88.8.0/24 permit -162.88.24.0/23 permit 162.88.24.0/24 permit 162.88.25.0/24 permit 162.88.36.0/24 permit @@ -1604,13 +1585,10 @@ 164.152.23.32 permit 164.152.25.241 permit 164.177.132.168/30 permit -165.1.100.0/25 permit 165.173.128.0/24 permit -165.173.180.0/24 permit +165.173.180.1 permit 165.173.180.250/31 permit -165.173.182.0/24 permit 165.173.182.250/31 permit -165.173.189.205 permit 166.78.68.0/22 permit 166.78.68.221 permit 166.78.69.169 permit @@ -1629,12 +1607,9 @@ 167.89.75.126 permit 167.89.75.136 permit 167.89.75.164 permit +167.89.101.2 permit +167.89.101.192/28 permit 167.220.67.232/29 permit -168.107.248.128/25 permit -168.110.160.128/25 permit -168.110.248.128/25 permit -168.129.184.128/25 permit -168.129.248.128/25 permit 168.138.5.36 permit 168.138.73.51 permit 168.138.77.31 permit @@ -1643,6 +1618,18 @@ 168.245.12.252 permit 168.245.46.9 permit 168.245.127.231 permit +169.148.129.0/24 permit +169.148.131.0/24 permit +169.148.138.0/24 permit +169.148.142.10 permit +169.148.142.33 permit +169.148.144.0/25 permit +169.148.144.10 permit +169.148.146.0/23 permit +169.148.175.3 permit +169.148.179.3 permit +169.148.188.0/24 permit +169.148.188.182 permit 170.9.232.254 permit 170.10.128.0/24 permit 170.10.129.0/24 permit @@ -1657,7 +1644,6 @@ 173.203.81.39 permit 173.224.161.128/25 permit 173.224.165.0/26 permit -173.224.166.48/28 permit 174.36.84.8/29 permit 174.36.84.16/29 permit 174.36.84.32/29 permit @@ -1759,24 +1745,8 @@ 192.18.139.154 permit 192.18.145.36 permit 192.18.152.58 permit -192.22.32.128/25 permit -192.22.96.128/25 permit -192.22.160.128/25 permit -192.22.224.128/25 permit 192.28.128.0/18 permit -192.29.24.0/25 permit -192.29.44.0/25 permit -192.29.72.0/25 permit -192.29.88.0/25 permit 192.29.103.128/25 permit -192.29.134.0/25 permit -192.29.151.128/25 permit -192.29.172.0/25 permit -192.29.178.0/25 permit -192.29.200.0/25 permit -192.29.216.0/25 permit -192.29.232.0/25 permit -192.29.248.0/25 permit 192.30.252.0/22 permit 192.161.144.0/20 permit 192.162.87.0/24 permit @@ -1784,6 +1754,11 @@ 192.237.159.42 permit 192.237.159.43 permit 192.254.112.0/20 permit +192.254.112.60 permit +192.254.112.98/31 permit +192.254.113.10 permit +192.254.113.101 permit +192.254.114.176 permit 193.109.254.0/23 permit 193.122.128.100 permit 193.123.56.63 permit @@ -1849,7 +1824,16 @@ 199.16.156.0/22 permit 199.33.145.1 permit 199.33.145.32 permit +199.34.22.36 permit 199.59.148.0/22 permit +199.67.80.2 permit +199.67.80.20 permit +199.67.82.2 permit +199.67.82.20 permit +199.67.84.0/24 permit +199.67.86.0/24 permit +199.67.88.0/24 permit +199.67.90.0/24 permit 199.101.161.130 permit 199.101.162.0/25 permit 199.122.120.0/21 permit @@ -1905,6 +1889,8 @@ 204.92.114.187 permit 204.92.114.203 permit 204.92.114.204/31 permit +204.141.32.0/23 permit +204.141.42.0/23 permit 204.216.164.202 permit 204.220.160.0/21 permit 204.220.168.0/21 permit @@ -1941,7 +1927,6 @@ 207.211.30.128/25 permit 207.211.31.0/25 permit 207.211.41.113 permit -207.211.132.0/25 permit 207.218.90.0/24 permit 207.218.90.122 permit 207.250.68.0/24 permit @@ -1949,8 +1934,6 @@ 208.43.21.28/30 permit 208.43.21.64/29 permit 208.43.21.72/30 permit -208.56.9.224 permit -208.56.13.196 permit 208.64.132.0/22 permit 208.71.40.63 permit 208.71.40.64/31 permit @@ -1977,7 +1960,6 @@ 208.71.42.214 permit 208.72.249.240/29 permit 208.75.120.0/22 permit -208.76.62.0/23 permit 208.76.62.0/24 permit 208.76.63.0/24 permit 208.82.237.96/29 permit @@ -2138,7 +2120,6 @@ 216.136.168.80/28 permit 216.139.64.0/19 permit 216.145.221.0/24 permit -216.146.32.0/23 permit 216.146.32.0/24 permit 216.146.33.0/24 permit 216.198.0.0/18 permit @@ -2159,7 +2140,6 @@ 223.165.120.0/23 permit 2001:0868:0100:0600::/64 permit 2001:4860:4000::/36 permit -2001:4860:4864::/56 permit 2001:748:100:40::2:0/112 permit 2001:748:400:1300::3 permit 2001:748:400:1300::4 permit @@ -2177,13 +2157,10 @@ 2001:748:400:3301::3 permit 2001:748:400:3301::4 permit 2404:6800:4000::/36 permit -2404:6800:4864::/56 permit -2603:1061:14:1c2::1 permit 2607:13c0:0001:0000:0000:0000:0000:7000/116 permit 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 -2607:f8b0:4864::/56 permit 2620:109:c003:104::/64 permit 2620:109:c003:104::215 permit 2620:109:c006:104::/64 permit @@ -2195,7 +2172,8 @@ 2620:10d:c09c:400::8:1 permit 2620:119:50c0:207::/64 permit 2620:119:50c0:207::215 permit +2620:1ec:46::51 permit +2620:1ec:bdf::51 permit 2800:3f0:4000::/36 permit -2800:3f0:4864::/56 permit 49.12.4.251 permit # checks.mailcow.email 2a01:4f8:c17:7906::10 permit # checks.mailcow.email diff --git a/data/conf/rspamd/local.d/metadata_exporter.conf b/data/conf/rspamd/local.d/metadata_exporter.conf index cc85faacd..daaa79b4e 100644 --- a/data/conf/rspamd/local.d/metadata_exporter.conf +++ b/data/conf/rspamd/local.d/metadata_exporter.conf @@ -3,7 +3,8 @@ rules { backend = "http"; url = "http://nginx:9081/pipe.php"; selector = "reject_no_global_bl"; - formatter = "multipart"; + formatter = "default"; + meta_headers = true; } RLINFO { backend = "http"; @@ -15,7 +16,8 @@ rules { backend = "http"; url = "http://nginx:9081/pushover.php"; selector = "mailcow_rcpt"; - formatter = "multipart"; + formatter = "json"; + meta_headers = true; } } diff --git a/data/conf/rspamd/meta_exporter/pipe.php b/data/conf/rspamd/meta_exporter/pipe.php index 0a9ed59e2..003639b08 100644 --- a/data/conf/rspamd/meta_exporter/pipe.php +++ b/data/conf/rspamd/meta_exporter/pipe.php @@ -32,42 +32,47 @@ function parse_email($email) { $a = strrpos($email, '@'); return array('local' => substr($email, 0, $a), 'domain' => substr(substr($email, $a), 1)); } -// rspamd metadata_exporter (multipart formatter): -// - $_POST['metadata'] JSON with the rspamd metadata -// - $_FILES['message'] raw RFC822 message -if (empty($_POST['metadata']) || !isset($_FILES['message']) || $_FILES['message']['error'] !== UPLOAD_ERR_OK) { - error_log("QUARANTINE: missing multipart parts from rspamd" . PHP_EOL); - http_response_code(400); - exit; +if (!function_exists('getallheaders')) { + function getallheaders() { + if (!is_array($_SERVER)) { + return array(); + } + $headers = array(); + foreach ($_SERVER as $name => $value) { + if (substr($name, 0, 5) == 'HTTP_') { + $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; + } + } + return $headers; + } } -$meta = json_decode($_POST['metadata'], true); -if (!is_array($meta)) { - error_log("QUARANTINE: cannot decode metadata JSON" . PHP_EOL); - http_response_code(400); - exit; -} - -$raw_data_content = file_get_contents($_FILES['message']['tmp_name']); +$raw_data_content = file_get_contents('php://input'); $raw_data = mb_convert_encoding($raw_data_content, 'HTML-ENTITIES', "UTF-8"); -$raw_size = (int)$_FILES['message']['size']; +$headers = getallheaders(); -$qid = $meta['qid'] ?? 'unknown'; -$subject = iconv_mime_decode($meta['subject'] ?? ''); -$score = $meta['score'] ?? 0; -$rcpts = $meta['rcpt'] ?? array(); -$user = $meta['user'] ?? 'unknown'; -$ip = $meta['ip'] ?? 'unknown'; -$action = $meta['action'] ?? 'no action'; -$sender = $meta['from'] ?? ''; -$symbols = json_encode($meta['symbols'] ?? array()); -$fuzzy = json_encode(is_array($meta['fuzzy'] ?? null) ? $meta['fuzzy'] : array()); +$qid = $headers['X-Rspamd-Qid']; +$fuzzy = $headers['X-Rspamd-Fuzzy']; +$subject = iconv_mime_decode($headers['X-Rspamd-Subject']); +$score = $headers['X-Rspamd-Score']; +$rcpts = $headers['X-Rspamd-Rcpt']; +$user = $headers['X-Rspamd-User']; +$ip = $headers['X-Rspamd-Ip']; +$action = $headers['X-Rspamd-Action']; +$sender = $headers['X-Rspamd-From']; +$symbols = $headers['X-Rspamd-Symbols']; + +$raw_size = (int)$_SERVER['CONTENT_LENGTH']; if (empty($sender)) { error_log("QUARANTINE: Unknown sender, assuming empty-env-from@localhost" . PHP_EOL); $sender = 'empty-env-from@localhost'; } +if ($fuzzy == 'unknown') { + $fuzzy = '[]'; +} + try { $max_size = (int)$redis->Get('Q_MAX_SIZE'); if (($max_size * 1048576) < $raw_size) { @@ -89,7 +94,7 @@ catch (RedisException $e) { $rcpt_final_mailboxes = array(); // Loop through all rcpts -foreach ($rcpts as $rcpt) { +foreach (json_decode($rcpts, true) as $rcpt) { // Remove tag $rcpt = preg_replace('/^(.*?)\+.*(@.*)$/', '$1$2', $rcpt); diff --git a/data/conf/rspamd/meta_exporter/pushover.php b/data/conf/rspamd/meta_exporter/pushover.php index a2cd0995b..efe5fdd52 100644 --- a/data/conf/rspamd/meta_exporter/pushover.php +++ b/data/conf/rspamd/meta_exporter/pushover.php @@ -32,46 +32,50 @@ function parse_email($email) { $a = strrpos($email, '@'); return array('local' => substr($email, 0, $a), 'domain' => substr(substr($email, $a), 1)); } -// rspamd metadata_exporter (multipart formatter): metadata JSON arrives as $_POST['metadata']. -if (empty($_POST['metadata'])) { - error_log("NOTIFY: missing metadata part from rspamd" . PHP_EOL); - http_response_code(400); - exit; +if (!function_exists('getallheaders')) { + function getallheaders() { + if (!is_array($_SERVER)) { + return array(); + } + $headers = array(); + foreach ($_SERVER as $name => $value) { + if (substr($name, 0, 5) == 'HTTP_') { + $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; + } + } + return $headers; + } } -$meta = json_decode($_POST['metadata'], true); -if (!is_array($meta)) { - error_log("NOTIFY: cannot decode metadata JSON" . PHP_EOL); - http_response_code(400); - exit; -} +$headers = getallheaders(); +$json_body = json_decode(file_get_contents('php://input')); -$qid = $meta['qid'] ?? 'unknown'; -$rcpts = $meta['rcpt'] ?? array(); -$sender = $meta['from'] ?? ''; -$ip = $meta['ip'] ?? 'unknown'; -$subject = iconv_mime_decode($meta['subject'] ?? ''); -$messageid= $meta['message_id'] ?? ''; +$qid = $headers['X-Rspamd-Qid']; +$rcpts = $headers['X-Rspamd-Rcpt']; +$sender = $headers['X-Rspamd-From']; +$ip = $headers['X-Rspamd-Ip']; +$subject = iconv_mime_decode($headers['X-Rspamd-Subject']); +$messageid= $json_body->message_id; $priority = 0; -$symbols_array = $meta['symbols'] ?? array(); +$symbols_array = json_decode($headers['X-Rspamd-Symbols'], true); if (is_array($symbols_array)) { foreach ($symbols_array as $symbol) { - if (($symbol['name'] ?? null) == 'HAS_X_PRIO_ONE') { + if ($symbol['name'] == 'HAS_X_PRIO_ONE') { $priority = 1; break; } } } -$sender_address = $meta['header_from'][0] ?? ''; +$sender_address = $json_body->header_from[0]; $sender_name = '-'; if (preg_match('/(?.*?)<(?
.*?)>/i', $sender_address, $matches)) { $sender_address = $matches['address']; $sender_name = trim($matches['name'], '"\' '); } -$to_address = $meta['header_to'][0] ?? ''; +$to_address = $json_body->header_to[0]; $to_name = '-'; if (preg_match('/(?.*?)<(?
.*?)>/i', $to_address, $matches)) { $to_address = $matches['address']; @@ -81,7 +85,7 @@ if (preg_match('/(?.*?)<(?
.*?)>/i', $to_address, $matches)) { $rcpt_final_mailboxes = array(); // Loop through all rcpts -foreach ($rcpts as $rcpt) { +foreach (json_decode($rcpts, true) as $rcpt) { // Remove tag $rcpt = preg_replace('/^(.*?)\+.*(@.*)$/', '$1$2', $rcpt); diff --git a/data/web/api/openapi.yaml b/data/web/api/openapi.yaml index 77c58b609..cf54f6add 100644 --- a/data/web/api/openapi.yaml +++ b/data/web/api/openapi.yaml @@ -1072,7 +1072,6 @@ paths: password2: "*" quota: "3072" force_pw_update: "1" - force_tfa: "1" tls_enforce_in: "1" tls_enforce_out: "1" tags: ["tag1", "tag2"] @@ -1119,7 +1118,6 @@ paths: password2: atedismonsin quota: "3072" force_pw_update: "1" - force_tfa: "1" tls_enforce_in: "1" tls_enforce_out: "1" tags: ["tag1", "tag2"] @@ -1153,9 +1151,6 @@ paths: force_pw_update: description: forces the user to update its password on first login type: boolean - force_tfa: - description: force 2FA enrollment at login - type: boolean tls_enforce_in: description: force inbound email tls encryption type: boolean @@ -2515,7 +2510,7 @@ paths: description: >- Using this endpoint you can perform actions on quarantine items. It is possible to release emails from quarantine into to the inbox, or learn them as ham to improve Rspamd filtering. - You must provide the quarantine item IDs. You can get the IDs using the GET method. + You must provide the quarantine item IDs. You can get the IDs using the GET method. operationId: Edit mails in Quarantine requestBody: content: @@ -3419,7 +3414,6 @@ paths: - mailbox - active: "1" force_pw_update: "0" - force_tfa: "0" name: Full name password: "*" password2: "*" @@ -3470,7 +3464,6 @@ paths: attr: active: "1" force_pw_update: "0" - force_tfa: "0" name: Full name authsource: mailcow password: "" @@ -3494,9 +3487,6 @@ paths: force_pw_update: description: force user to change password on next login type: boolean - force_tfa: - description: force 2FA enrollment at login - type: boolean name: description: Full name of the mailbox user type: string @@ -4891,7 +4881,6 @@ paths: - active: "1" attributes: force_pw_update: "0" - force_tfa: "0" mailbox_format: "maildir:" quarantine_notification: never sogo_access: "1" @@ -5816,7 +5805,6 @@ paths: - active: "1" attributes: force_pw_update: "0" - force_tfa: "0" mailbox_format: "maildir:" quarantine_notification: never sogo_access: "1" diff --git a/data/web/inc/functions.auth.inc.php b/data/web/inc/functions.auth.inc.php index e5a303f9b..91a8c55fa 100644 --- a/data/web/inc/functions.auth.inc.php +++ b/data/web/inc/functions.auth.inc.php @@ -287,8 +287,6 @@ function user_login($user, $pass, $extra = null){ return false; } - $row['attributes'] = json_decode($row['attributes'], true); - // check for tfa authenticators $authenticators = get_tfa($user); if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0 && !$is_internal) { @@ -345,8 +343,6 @@ function user_login($user, $pass, $extra = null){ return false; } - $row['attributes'] = json_decode($row['attributes'], true); - // check for tfa authenticators $authenticators = get_tfa($user); if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0 && !$is_internal) { diff --git a/data/web/inc/functions.fwdhost.inc.php b/data/web/inc/functions.fwdhost.inc.php index 52c751591..d7ac2567c 100644 --- a/data/web/inc/functions.fwdhost.inc.php +++ b/data/web/inc/functions.fwdhost.inc.php @@ -108,14 +108,6 @@ function fwdhost($_action, $_data = null) { } break; case 'delete': - if ($_SESSION['mailcow_cc_role'] != "admin") { - $_SESSION['return'][] = array( - 'type' => 'danger', - 'log' => array(__FUNCTION__, $_action, $_data_log), - 'msg' => 'access_denied' - ); - return false; - } $hosts = (array)$_data['forwardinghost']; foreach ($hosts as $host) { try { diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index a9f17705d..a002ab41b 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -1111,21 +1111,10 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $relayhost = (isset($_data['relayhost'])) ? intval($_data['relayhost']) : 0; $quarantine_notification = (isset($_data['quarantine_notification'])) ? strval($_data['quarantine_notification']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification']); $quarantine_category = (isset($_data['quarantine_category'])) ? strval($_data['quarantine_category']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category']); - // Validate quarantine_category - if (!in_array($quarantine_category, array('add_header', 'reject', 'all'))) { - $_SESSION['return'][] = array( - 'type' => 'danger', - 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), - 'msg' => 'quarantine_category_invalid' - ); - return false; - } $quota_b = ($quota_m * 1048576); $attribute_hash = (!empty($_data['attribute_hash'])) ? $_data['attribute_hash'] : ''; if (in_array($authsource, array('keycloak', 'generic-oidc', 'ldap'))){ $force_pw_update = 0; - } - if ($authsource == 'generic-oidc'){ $force_tfa = 0; } $mailbox_attrs = json_encode( @@ -1742,15 +1731,6 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $attr["tagged_mail_handler"] = (!empty($_data['tagged_mail_handler'])) ? $_data['tagged_mail_handler'] : strval($MAILBOX_DEFAULT_ATTRIBUTES['tagged_mail_handler']); $attr["quarantine_notification"] = (!empty($_data['quarantine_notification'])) ? $_data['quarantine_notification'] : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification']); $attr["quarantine_category"] = (!empty($_data['quarantine_category'])) ? $_data['quarantine_category'] : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category']); - // Validate quarantine_category - if (!in_array($attr["quarantine_category"], array('add_header', 'reject', 'all'))) { - $_SESSION['return'][] = array( - 'type' => 'danger', - 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra), - 'msg' => 'quarantine_category_invalid' - ); - return false; - } $attr["rl_frame"] = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : "s"; $attr["rl_value"] = (!empty($_data['rl_value'])) ? $_data['rl_value'] : ""; $attr["force_pw_update"] = isset($_data['force_pw_update']) ? intval($_data['force_pw_update']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['force_pw_update']); @@ -2080,14 +2060,6 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { return false; } foreach ($usernames as $username) { - if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) { - $_SESSION['return'][] = array( - 'type' => 'danger', - 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), - 'msg' => 'access_denied' - ); - continue; - } if ($_data['spam_score'] == "default") { $stmt = $pdo->prepare("DELETE FROM `filterconf` WHERE `object` = :username AND (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')"); @@ -3154,8 +3126,6 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { } if (in_array($authsource, array('keycloak', 'generic-oidc', 'ldap'))){ $force_pw_update = 0; - } - if ($authsource == 'generic-oidc'){ $force_tfa = 0; } $pw_recovery_email = (isset($_data['pw_recovery_email']) && $authsource == 'mailcow') ? $_data['pw_recovery_email'] : $is_now['attributes']['recovery_email']; @@ -3505,6 +3475,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { // Track affected mailboxes for SOGo update $update_sogo_mailboxes[] = $username; } + return true; break; case 'mailbox_rename': $domain = $_data['domain']; @@ -3815,19 +3786,9 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $attr["tagged_mail_handler"] = (!empty($_data['tagged_mail_handler'])) ? $_data['tagged_mail_handler'] : $is_now['tagged_mail_handler']; $attr["quarantine_notification"] = (!empty($_data['quarantine_notification'])) ? $_data['quarantine_notification'] : $is_now['quarantine_notification']; $attr["quarantine_category"] = (!empty($_data['quarantine_category'])) ? $_data['quarantine_category'] : $is_now['quarantine_category']; - // Validate quarantine_category - if (!in_array($attr["quarantine_category"], array('add_header', 'reject', 'all'))) { - $_SESSION['return'][] = array( - 'type' => 'danger', - 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra), - 'msg' => 'quarantine_category_invalid' - ); - continue; - } $attr["rl_frame"] = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : $is_now['rl_frame']; $attr["rl_value"] = (!empty($_data['rl_value'])) ? $_data['rl_value'] : $is_now['rl_value']; $attr["force_pw_update"] = isset($_data['force_pw_update']) ? intval($_data['force_pw_update']) : $is_now['force_pw_update']; - $attr["force_tfa"] = isset($_data['force_tfa']) ? intval($_data['force_tfa']) : $is_now['force_tfa']; $attr["sogo_access"] = isset($_data['sogo_access']) ? intval($_data['sogo_access']) : $is_now['sogo_access']; $attr["active"] = isset($_data['active']) ? intval($_data['active']) : $is_now['active']; $attr["tls_enforce_in"] = isset($_data['tls_enforce_in']) ? intval($_data['tls_enforce_in']) : $is_now['tls_enforce_in']; @@ -6127,6 +6088,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { // Track affected mailboxes for SOGo update $update_sogo_mailboxes[] = $username; } + return true; break; case 'mailbox_templates': if ($_SESSION['mailcow_cc_role'] != "admin") { diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php index e5737b63c..d2ce6f3d0 100644 --- a/data/web/inc/header.inc.php +++ b/data/web/inc/header.inc.php @@ -89,7 +89,7 @@ $globalVariables = [ 'app_links' => $app_links, 'app_links_processed' => $app_links_processed, 'is_root_uri' => (parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) == '/'), - 'uri' => parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ?: '/', + 'uri' => $_SERVER['REQUEST_URI'], ]; foreach ($globalVariables as $globalVariableName => $globalVariableValue) { diff --git a/data/web/inc/twig.inc.php b/data/web/inc/twig.inc.php index c4d0669d9..a3bc02d92 100644 --- a/data/web/inc/twig.inc.php +++ b/data/web/inc/twig.inc.php @@ -13,9 +13,7 @@ $twig = new Environment($loader, [ // functions $twig->addFunction(new TwigFunction('query_string', function (array $params = []) { - $allowed = ['lang', 'mobileconfig']; - $filtered = array_intersect_key($_GET, array_flip($allowed)); - return http_build_query(array_merge($filtered, $params)); + return http_build_query(array_merge($_GET, $params)); })); $twig->addFunction(new TwigFunction('is_uri', function (string $uri, string $where = null) { diff --git a/data/web/inc/vars.inc.php b/data/web/inc/vars.inc.php index cec402a96..2f4a4b076 100644 --- a/data/web/inc/vars.inc.php +++ b/data/web/inc/vars.inc.php @@ -112,7 +112,6 @@ $AVAILABLE_LANGUAGES = array( 'sv-se' => 'Svenska (Swedish)', 'tr-tr' => 'Türkçe (Turkish)', 'uk-ua' => 'Українська (Ukrainian)', - 'uz-uz' => 'Oʻzbekcha (Uzbek)', 'vi-vn' => 'Tiếng Việt (Vietnamese)', 'zh-cn' => '简体中文 (Simplified Chinese)', 'zh-tw' => '繁體中文 (Traditional Chinese)', diff --git a/data/web/js/build/013-mailcow.js b/data/web/js/build/013-mailcow.js index e4893d7ac..d897f23ea 100644 --- a/data/web/js/build/013-mailcow.js +++ b/data/web/js/build/013-mailcow.js @@ -345,7 +345,7 @@ $(document).ready(function() { $('.main-logo-dark').addClass('d-none'); if ($('#rspamd_logo').length) $('#rspamd_logo').attr('src', '/img/rspamd_logo_dark.png'); if ($('#rspamd_logo_sm').length) $('#rspamd_logo_sm').attr('src', '/img/rspamd_logo_dark.png'); - localStorage.setItem('mailcow_theme', 'light'); + localStorage.setItem('theme', 'light'); }else{ $('head').append(''); $('#dark-mode-toggle').prop('checked', true); @@ -353,7 +353,7 @@ $(document).ready(function() { $('.main-logo-dark').removeClass('d-none'); if ($('#rspamd_logo').length) $('#rspamd_logo').attr('src', '/img/rspamd_logo_light.png'); if ($('#rspamd_logo_sm').length) $('#rspamd_logo_sm').attr('src', '/img/rspamd_logo_light.png'); - localStorage.setItem('mailcow_theme', 'dark'); + localStorage.setItem('theme', 'dark'); } } diff --git a/data/web/js/site/dashboard.js b/data/web/js/site/dashboard.js index aee361710..760e878f1 100644 --- a/data/web/js/site/dashboard.js +++ b/data/web/js/site/dashboard.js @@ -1128,11 +1128,6 @@ jQuery(function($){ item.ua = escapeHtml(item.ua); } item.ua = '' + item.ua + ''; - if (item.user == null) { - item.user = 'unknown'; - } else { - item.user = escapeHtml(item.user); - } if (item.service == "activesync") { item.service = 'ActiveSync'; } diff --git a/data/web/js/site/index.js b/data/web/js/site/index.js index 29b72f0d5..4c812a377 100644 --- a/data/web/js/site/index.js +++ b/data/web/js/site/index.js @@ -1,6 +1,5 @@ $(document).ready(function() { - var theme = localStorage.getItem("mailcow_theme"); - if (theme !== null) { - localStorage.setItem("mailcow_theme", theme); - } + var theme = localStorage.getItem("theme"); + localStorage.clear(); + localStorage.setItem("theme", theme); }); diff --git a/data/web/js/site/mailbox.js b/data/web/js/site/mailbox.js index 0a0192798..e8edb9940 100644 --- a/data/web/js/site/mailbox.js +++ b/data/web/js/site/mailbox.js @@ -424,11 +424,6 @@ $(document).ready(function() { } else { $('#force_pw_update').prop('checked', false); } - if (template.force_tfa == 1){ - $('#force_tfa').prop('checked', true); - } else { - $('#force_tfa').prop('checked', false); - } if (template.sogo_access == 1){ $('#sogo_access').prop('checked', true); } else { @@ -1247,7 +1242,6 @@ jQuery(function($){ item.attributes.eas_access = '' + (item.attributes.eas_access == 1 ? '1' : '0') + ''; item.attributes.dav_access = '' + (item.attributes.dav_access == 1 ? '1' : '0') + ''; item.attributes.sogo_access = '' + (item.attributes.sogo_access == 1 ? '1' : '0') + ''; - item.attributes.force_tfa = '' + (item.attributes.force_tfa == 1 ? '1' : '0') + ''; if (item.attributes.quarantine_notification === 'never') { item.attributes.quarantine_notification = lang.never; } else if (item.attributes.quarantine_notification === 'hourly') { @@ -1391,11 +1385,6 @@ jQuery(function($){ return 1==data?'':''; } }, - { - title: lang.force_tfa, - data: 'attributes.force_tfa', - defaultContent: '' - }, { title: lang_edit.ratelimit, data: 'attributes.ratelimit', diff --git a/data/web/js/site/quarantine.js b/data/web/js/site/quarantine.js index a9b7845bc..fbf4fe862 100644 --- a/data/web/js/site/quarantine.js +++ b/data/web/js/site/quarantine.js @@ -102,21 +102,18 @@ jQuery(function($){ { title: 'ID', data: 'id', - defaultContent: '', - render: $.fn.dataTable.render.text() + defaultContent: '' }, { title: lang.qid, data: 'qid', - defaultContent: '', - render: $.fn.dataTable.render.text() + defaultContent: '' }, { title: lang.sender, data: 'sender', className: 'senders-mw220', - defaultContent: '', - render: $.fn.dataTable.render.text() + defaultContent: '' }, { title: lang.subj, @@ -131,8 +128,7 @@ jQuery(function($){ { title: lang.rcpt, data: 'rcpt', - defaultContent: '', - render: $.fn.dataTable.render.text() + defaultContent: '' }, { title: lang.danger, @@ -230,18 +226,18 @@ jQuery(function($){ } if (typeof data.fuzzy_hashes === 'object' && data.fuzzy_hashes !== null && data.fuzzy_hashes.length !== 0) { $.each(data.fuzzy_hashes, function (index, value) { - $('#qid_detail_fuzzy').append('

' + escapeHtml(value) + '

'); + $('#qid_detail_fuzzy').append('

' + value + '

'); }); } else { $('#qid_detail_fuzzy').append('-'); } if (typeof data.score !== 'undefined' && typeof data.action !== 'undefined') { if (data.action == "add header") { - $('#qid_detail_score').append('' + escapeHtml(data.score) + ' - ' + lang.junk_folder + ''); + $('#qid_detail_score').append('' + data.score + ' - ' + lang.junk_folder + ''); } else if (data.action == "reject") { - $('#qid_detail_score').append('' + escapeHtml(data.score) + ' - ' + lang.rejected + ''); + $('#qid_detail_score').append('' + data.score + ' - ' + lang.rejected + ''); } else if (data.action == "rewrite subject") { - $('#qid_detail_score').append('' + escapeHtml(data.score) + ' - ' + lang.rewrite_subject + ''); + $('#qid_detail_score').append('' + data.score + ' - ' + lang.rewrite_subject + ''); } } if (typeof data.recipients !== 'undefined') { @@ -258,8 +254,8 @@ jQuery(function($){ qAtts.text(''); $.each(data.attachments, function(index, value) { qAtts.append( - '

' + escapeHtml(value[0]) + ' (' + escapeHtml(value[1]) + ')' + - ' - ' + lang.check_hash + '

' + '

' + value[0] + ' (' + value[1] + ')' + + ' - ' + lang.check_hash + '

' ); }); } diff --git a/data/web/js/site/queue.js b/data/web/js/site/queue.js index 9adc79b5f..26c15091d 100644 --- a/data/web/js/site/queue.js +++ b/data/web/js/site/queue.js @@ -48,13 +48,13 @@ jQuery(function($){ url: "/api/v1/get/mailq/all", dataSrc: function(data){ $.each(data, function (i, item) { - item.chkbox = ''; + item.chkbox = ''; rcpts = $.map(item.recipients, function(i) { return escapeHtml(i); }); item.recipients = rcpts.join('
'); item.action = ''; }); return data; @@ -79,14 +79,12 @@ jQuery(function($){ { title: 'QID', data: 'queue_id', - defaultContent: '', - render: $.fn.dataTable.render.text() + defaultContent: '' }, { title: 'Queue', data: 'queue_name', - defaultContent: '', - render: $.fn.dataTable.render.text() + defaultContent: '' }, { title: lang_admin.arrival_time, @@ -108,8 +106,7 @@ jQuery(function($){ { title: lang_admin.sender, data: 'sender', - defaultContent: '', - render: $.fn.dataTable.render.text() + defaultContent: '' }, { title: lang_admin.recipients, diff --git a/data/web/js/site/user.js b/data/web/js/site/user.js index 288e7abd2..5eecf2080 100644 --- a/data/web/js/site/user.js +++ b/data/web/js/site/user.js @@ -98,8 +98,8 @@ jQuery(function($){ var local_datetime = datetime.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"}); var service = '
' + item.service.toUpperCase() + '
'; var app_password = item.app_password ? ' ' + escapeHtml(item.app_password_name || "App") + '' : ''; - var real_rip = item.real_rip.startsWith("Web") ? escapeHtml(item.real_rip) : '' + escapeHtml(item.real_rip) + ""; - var ip_location = item.location ? ' ' : ''; + var real_rip = item.real_rip.startsWith("Web") ? item.real_rip : '' + item.real_rip + ""; + var ip_location = item.location ? ' ' : ''; var ip_data = real_rip + ip_location + app_password; $(".last-sasl-login").append(` diff --git a/data/web/lang/lang.az-az.json b/data/web/lang/lang.az-az.json deleted file mode 100644 index 958ed8e2a..000000000 --- a/data/web/lang/lang.az-az.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "acl": { - "login_as": "E-poçt qutusu istifadəçisi olaraq daxil ol", - "alias_domains": "Alternativ domenlər əlavə et", - "app_passwds": "Tətbiq parollarını idarə et", - "bcc_maps": "BCC yönləndirmə xəritələri", - "delimiter_action": "Ayırıcı əməliyyatı", - "domain_desc": "Domen təsvirini dəyiş", - "domain_relayhost": "Domen üçün relay serveri dəyiş", - "eas_reset": "EAS cihazlarını sıfırla", - "extend_sender_acl": "Göndərən ACL-ni xarici ünvanlarla genişləndirməyə icazə ver", - "filters": "Filtrlər", - "mailbox_relayhost": "E-poçt qutusu üçün relay serveri dəyiş", - "prohibited": "ACL tərəfindən məhdudlaşdırılıb", - "protocol_access": "Protokol girişini dəyiş" - } -} diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json index c19eb209b..487300fe9 100644 --- a/data/web/lang/lang.de-de.json +++ b/data/web/lang/lang.de-de.json @@ -150,7 +150,7 @@ "arrival_time": "Ankunftszeit (Serverzeit)", "authed_user": "Auth. Benutzer", "ays": "Soll der Vorgang wirklich ausgeführt werden?", - "ban_list_info": "Übersicht ausgesperrter Netzwerke: Netzwerk (verbleibende Bannzeit) - [Aktionen].
IPs, die zum Entsperren eingereiht werden, verlassen die Liste aktiver Banns nach wenigen Sekunden.
Rote Labels kennzeichnen aktive permanente Sperren durch Denylisting.", + "ban_list_info": "Übersicht ausgesperrter Netzwerke: Netzwerk (verbleibende Bannzeit) - [Aktionen].
IPs, die zum Entsperren eingereiht werden, verlassen die Liste aktiver Banns nach wenigen Sekunden.
Rote Labels sind Indikatoren für aktive Allowlist-Einträge.", "change_logo": "Logo ändern", "configuration": "Konfiguration", "convert_html_to_text": "Konvertiere HTML zu reinem Text", @@ -512,7 +512,6 @@ "pushover_credentials_missing": "Pushover Token und/oder Key fehlen", "pushover_key": "Pushover Key hat das falsche Format", "pushover_token": "Pushover Token hat das falsche Format", - "quarantine_category_invalid": "Quarantäne-Kategorie muss eine der folgenden sein: add_header, reject, all", "quota_not_0_not_numeric": "Speicherplatz muss numerisch und >= 0 sein", "recipient_map_entry_exists": "Eine Empfängerumschreibung für Objekt \"%s\" existiert bereits", "recovery_email_failed": "E-Mail zur Wiederherstellung konnte nicht gesendet werden. Bitte wenden Sie sich an Ihren Administrator.", @@ -1086,7 +1085,7 @@ "rspamd_result": "Rspamd-Ergebnis", "sender": "Sender (SMTP)", "sender_header": "Sender (\"From\"-Header)", - "settings_info": "Maximale Anzahl der zurückgehaltenen E-Mails (pro Mailbox): %s
Maximale Größe einer zu speichernden E-Mail: %s MiB", + "settings_info": "Maximale Anzahl der zurückgehaltenen E-Mails: %s
Maximale Größe einer zu speichernden E-Mail: %s MiB", "show_item": "Details", "spam": "Spam", "spam_score": "Bewertung", diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json index 873d7b98d..eb26e3fcf 100644 --- a/data/web/lang/lang.en-gb.json +++ b/data/web/lang/lang.en-gb.json @@ -513,7 +513,6 @@ "pushover_credentials_missing": "Pushover token and or key missing", "pushover_key": "Pushover key has a wrong format", "pushover_token": "Pushover token has a wrong format", - "quarantine_category_invalid": "Quarantine category must be one of: add_header, reject, all", "quota_not_0_not_numeric": "Quota must be numeric and >= 0", "recipient_map_entry_exists": "A Recipient map entry \"%s\" exists", "recovery_email_failed": "Could not send a recovery email. Please contact your administrator.", @@ -929,7 +928,6 @@ "filters": "Filters", "fname": "Full name", "force_pw_update": "Force password update at next login", - "force_tfa": "TFA", "gal": "Global Address List", "goto_ham": "Learn as ham", "goto_spam": "Learn as spam", @@ -1087,7 +1085,7 @@ "rspamd_result": "Rspamd result", "sender": "Sender (SMTP)", "sender_header": "Sender (\"From\" header)", - "settings_info": "Maximum amount of elements to be quarantined (per mailbox): %s
Maximum email size: %s MiB", + "settings_info": "Maximum amount of elements to be quarantined: %s
Maximum email size: %s MiB", "show_item": "Show item", "spam": "Spam", "spam_score": "Score", diff --git a/data/web/lang/lang.fr-fr.json b/data/web/lang/lang.fr-fr.json index 9ee916713..43c9c065a 100644 --- a/data/web/lang/lang.fr-fr.json +++ b/data/web/lang/lang.fr-fr.json @@ -111,8 +111,7 @@ "app_passwd_protocols": "Protocoles autorisés pour le mot de passe de l'application", "dry": "Simuler la synchronisation", "internal": "Interne", - "internal_info": "Les alias internes sont accessibles uniquement depuis le domaine ou les alias du domaine.", - "sender_allowed": "Autoriser l'envoi sous cet alias" + "internal_info": "Les alias internes sont accessibles uniquement depuis le domaine ou les alias du domaine." }, "admin": { "access": "Accès", @@ -557,9 +556,7 @@ "max_age_invalid": "L'âge maximum %s est invalide", "mode_invalid": "Le mode %s est invalide", "mx_invalid": "L'enregistrement MX %s est invalide", - "version_invalid": "La version %s est invalide", - "tfa_removal_blocked": "L’authentification à deux facteurs ne peut pas être supprimée, car elle est requise pour votre compte.", - "quarantine_category_invalid": "La catégorie de quarantaine doit être l’une des suivantes : add_header, reject, all\"" + "version_invalid": "La version %s est invalide" }, "debug": { "chart_this_server": "Graphique (ce serveur)", @@ -758,9 +755,7 @@ "mta_sts_info": "MTA-STS est un standard qui oblige la délivrance des courriels entre les serveurs de courriels à utiliser TLS avec des certificats valides.
Il est utilisé quand DANE n'est pas possible à cause d'un manque ou d'un non support de DNSSEC.
Note : Si le domaine du destinataire supporte DANE avec DNSSEC, DANE est toujours préféré – MTA-STS sert seulement en secours.", "mta_sts_mode_info": "Il y a trois modes parmi lesquels choisir :
  • testing – la politique est seulement surveillée, les violations n'ont pas d'impact.
  • enforce – la politique est appliquée strictement, les connexions sans TLS valide sont rejetées.
  • none – la politique est publiée mais non appliquée.
", "mta_sts_max_age_info": "Durée en secondes pendant laquelle les serveurs de courriel peuvent mettre en cache cette politique avant de revérifier.", - "mta_sts_mx_info": "Autoriser l'envoi uniquement aux noms d'hôtes des serveurs de courriels indiqués explicitement ; le MTA émetteur vérifie si le nom d'hôte DNS du MX correspond à la liste de la politique, et autorise la délivrance seulement avec un certificat TLS valide (protège contre le MITM).", - "sender_allowed": "Autoriser l'envoi sous cet alias", - "sender_allowed_info": "Si cette option est désactivée, cet alias peut uniquement recevoir des courriels. Utilisez les ACL d’expéditeur pour autoriser certaines boîtes aux lettres à envoyer des messages via cet alias." + "mta_sts_mx_info": "Autoriser l'envoi uniquement aux noms d'hôtes des serveurs de courriels indiqués explicitement ; le MTA émetteur vérifie si le nom d'hôte DNS du MX correspond à la liste de la politique, et autorise la délivrance seulement avec un certificat TLS valide (protège contre le MITM)." }, "footer": { "cancel": "Annuler", @@ -993,8 +988,7 @@ "recipient": "Destinataire", "open_logs": "Afficher les journaux", "iam": "Fournisseur d'identité", - "internal": "Interne", - "force_tfa": "TFA" + "internal": "Interne" }, "oauth2": { "access_denied": "Veuillez vous connecter en tant que propriétaire de la boîte de réception pour accorder l’accès via Oauth2.", @@ -1195,11 +1189,7 @@ "yubi_otp": "Authentification OTP Yubico", "authenticators": "Authentificateurs", "u2f_deprecated_important": "Veuillez enregistrer votre clé dans le panneau d'administration avec la nouvelle méthode WebAuthn.", - "u2f_deprecated": "Il semble que votre clé ait été enregistrée à l'aide de la méthode U2F obsolète. Nous allons désactiver l'authentification à deux facteurs pour vous et supprimer votre clé.", - "force_tfa": "Imposer l'authentification à deux facteurs lors de la connexion", - "force_tfa_info": "L’utilisateur doit configurer l’authentification à deux facteurs avant de pouvoir accéder à l’interface.", - "setup_title": "Authentification à deux facteurs requise", - "setup_required": "Votre compte nécessite l’authentification à deux facteurs. Veuillez configurer une méthode 2FA pour continuer." + "u2f_deprecated": "Il semble que votre clé ait été enregistrée à l'aide de la méthode U2F obsolète. Nous allons désactiver l'authentification à deux facteurs pour vous et supprimer votre clé." }, "fido2": { "set_fn": "Définir un nom", @@ -1388,8 +1378,7 @@ "forever": "Pour toujours", "spam_aliases_info": "Un alias de spam est une adresse de courriel temporaire qui peut être utilisée pour protéger les véritables adresses de courriel.
De manière optionnelle, une durée d'expiration peut être définie afin que l'alias soit automatiquement désactivé après la période définie, éliminant ainsi les adresses étant abusées ou ayant fuité.", "authentication": "Authentification", - "protocols": "Protocoles", - "pw_update_required": "Votre compte nécessite un changement de mot de passe. Veuillez définir un nouveau mot de passe pour continuer." + "protocols": "Protocoles" }, "warning": { "cannot_delete_self": "Impossible de supprimer l’utilisateur connecté", diff --git a/data/web/lang/lang.hu-hu.json b/data/web/lang/lang.hu-hu.json index ff49bc5ee..e51748c48 100644 --- a/data/web/lang/lang.hu-hu.json +++ b/data/web/lang/lang.hu-hu.json @@ -1144,8 +1144,7 @@ "subscribeall": "Feliratkozás minden mappára", "syncjob": "Szinkronizálási feladat hozzáadása", "internal": "Belső", - "internal_info": "Belső álnevek csak a saját domain vagy domain álnév számára elérhető.", - "sender_allowed": "Küldés engedélyezése ezzel az aliasszal" + "internal_info": "Belső álnevek csak a saját domain vagy domain álnév számára elérhető." }, "danger": { "access_denied": "Hozzáférés megtagatva vagy nem megfelelő űrlap adat", @@ -1246,21 +1245,6 @@ "pushover_key": "A pushover kulcs rossz formátumú", "pushover_token": "A Pushover token rossz formátumú", "quota_not_0_not_numeric": "A kvótának numerikusnak és >= 0-nak kell lennie.", - "recipient_map_entry_exists": "Létezik egy \"%s\" címzett-térkép bejegyzés", - "redis_error": "Redis hiba lépett fel: %s", - "relayhost_invalid": "A(z) %s elem érvénytelen a leképezésben.", - "release_send_failed": "Az üzenet felszabadítása sikertelen: %s", - "reset_f2b_regex": "A regex-szűrő időtúllépés miatt nem állt le. Próbálja újra, vagy várjon egy kicsit, és töltse újra az oldalt.", - "resource_invalid": "A(z) %s erőforrásnév érvénytelen", - "rl_timeframe": "Érvénytelen időkeret a lekérdezési korláthoz", - "rspamd_ui_pw_length": "A Rspamd UI jelszónak legalább 6 karakter hosszúnak kell lennie.", - "script_empty": "A szkript nem lehet üres", - "sender_acl_invalid": "A küldőhöz tartozó ACL-érték (%s) érvénytelen", - "set_acl_failed": "Az ACL beállítása meghiúsult", - "settings_map_invalid": "Érvénytelen beállítás-leképezési azonosító: %s", - "recovery_email_failed": "A helyreállítási email kiküldése sikertelen. Kérlek, lépj kapcsolatba az adminisztrátorral!", - "reset_token_limit_exceeded": "Túl sok visszaállítási kísérlet. Kérjük, várjon, mielőtt újra próbálkozna.", - "required_data_missing": "Hiányzik a(z) szükséges %s adat", - "tfa_removal_blocked": "A kétfaktoros hitelesítés nem távolítható el, mert elengedhetetlen a fiókod használatához." + "recipient_map_entry_exists": "Létezik egy \"%s\" címzett-térkép bejegyzés" } } diff --git a/data/web/lang/lang.lv-lv.json b/data/web/lang/lang.lv-lv.json index df1697282..fd29e594a 100644 --- a/data/web/lang/lang.lv-lv.json +++ b/data/web/lang/lang.lv-lv.json @@ -13,7 +13,7 @@ "domain_relayhost": "Mainīt domēna relayhost", "eas_reset": "EAS ierīču atiestatīšana", "extend_sender_acl": "Ļauj paplašināt sūtītāja ACL ar ārējām adresēm", - "login_as": "Pieteikties kā pastkastes lietotājam", + "login_as": "Pieteikšanās kā pastkastes lietotājam", "mailbox_relayhost": "Pasta kastītes relayhost maiņa", "prohibited": "Aizliegts ar ACL", "protocol_access": "Protokola piekļuves maiņa", @@ -91,12 +91,12 @@ "activate_api": "Aktivizēt API", "active": "Aktīvs", "add": "Pievienot", - "add_domain_admin": "Pievienot domēna pārvaldītāju", + "add_domain_admin": "Pievienot domēna administratoru", "add_forwarding_host": "Pievienot pāradresācijas hostu", "add_relayhost": "Pievienot Relayhost", "add_row": "Pievienot rindu", - "admin": "Pārvaldītājs", - "admin_details": "Labot informāciju par pārvaldītāju", + "admin": "Administrators", + "admin_details": "Labot administratora detaļas", "admin_domains": "Domēna uzdevumi", "api_allow_from": "Atļaut API piekļuvi no šīm IP", "api_key": "API atslēga", @@ -114,7 +114,7 @@ "dkim_keys": "ARC/DKIM atslēgas", "dkim_private_key": "Privāta atslēga", "domain": "Domēns", - "domain_admins": "Domēna pārvaldītāji", + "domain_admins": "Domēna administratori", "edit": "Labot", "empty": "Nav iznākuma", "f2b_ban_time": "Aizlieguma laiks (s)", @@ -188,14 +188,7 @@ "quarantine_max_score": "Atmest paziņojumu, ja e-pasta ziņojuma mēstuļu novērtējums ir augstāks par šo vērtību:
Noklusējums ir 9999.0", "options": "Iespējas", "password_reset_settings": "Paroļu atkopes iestatījumi", - "password_settings": "Paroļu iestatījumi", - "add_admin": "Pievienot pārvaldītāju", - "admins": "Pārvaldītāji", - "admins_ldap": "LDAP pārvaldītāji", - "admin_quicklink": "Paslēpt ātro saiti uz pārvaldītāju pieteikšanās lapu", - "domain_admin": "Domēna pārvaldītājs", - "domainadmin_quicklink": "Paslēpt ātro saiti uz domēna pārvaldītāju pieteikšanās lapu", - "user_quicklink": "Paslēpt ātro saiti uz lietotāju pieteikšanās lapu" + "password_settings": "Paroļu iestatījumi" }, "danger": { "access_denied": "Piekļuve liegta, vai nepareizi dati", @@ -251,10 +244,7 @@ "app_passwd_id_invalid": "Lietotnes paroles Id %s ir nederīgs", "img_dimensions_exceeded": "Attēls pārsniedz lielāko pieļaujamo attēla lielumu", "img_size_exceeded": "Attēls pārsniedz lielāko pieļaujamo datnes lielumu", - "version_invalid": "Versija %s ir nederīga", - "generic_server_error": "Atgadījās neparedzēta servera kļūda. Lūgums sazināties ar pārvaldītāju.", - "password_reset_na": "Paroļu atkope šobrīd nav pieejama. Lūgums sazināties ar pārvaldītāju.", - "recovery_email_failed": "Nevarēja nosūtīt atkopes e-pasta ziņojumu. Lūgums sazināties ar pārvaldītāju." + "version_invalid": "Versija %s ir nederīga" }, "diagnostics": { "cname_from_a": "Vērtība, kas iegūta no A/AAAA ieraksta. Tas tiek atbalstīts tik ilgi, kamēr ieraksts norāda uz pareizo resursu.", @@ -276,7 +266,7 @@ "delete2duplicates": "Izdzēst atkārtojošos vienumus galamērķī", "description": "Apraksts", "domain": "Labot domēnu", - "domain_admin": "Labot domēna pārvaldītāju", + "domain_admin": "Labot domēna administratoru", "domain_quota": "Domēna kvota", "domains": "Domēni", "dont_check_sender_acl": "Atspējot sūtītāju pārbaudi domēnam %s (+ aizstājdomēni)", @@ -339,8 +329,7 @@ "app_passwd": "Lietotnes parole", "mta_sts_version": "Versija", "mta_sts_version_info": "Norāda MTA-STS standarta versiju – pašreiz ir derīga tikai STSv1.", - "sender_acl_disabled": "Sūtītāja pārbaude ir atspējota", - "admin": "Labot pārvaldītāju" + "sender_acl_disabled": "Sūtītāja pārbaude ir atspējota" }, "footer": { "cancel": "Atcelt", @@ -373,14 +362,7 @@ "username": "Lietotājvārds", "fido2_webauthn": "FIDO/WebAuthn pieteikšanās", "mobileconfig_info": "Lūgums pieteikties kā pastkastes lietotājam, lai lejupielādētu pieprasīto Apple savienojuma profilu.", - "other_logins": "vai pieteikties ar", - "forgot_password": "> Aizmirsta parole?", - "login_linkstext": "Nepareiza pieteikšanās?", - "login_domainadmintext": "Pieteikties kā domēna pārvaldītājam", - "login_admintext": "Pieteikties kā pārvaldītājam", - "login_user": "Lietotu pieteikšanās", - "login_dadmin": "Domēna pārvaldītāju pieteikšanās", - "login_admin": "Pārvaldītāju pieteikšanās" + "other_logins": "vai pieslēgties ar" }, "mailbox": { "action": "Rīcība", @@ -415,7 +397,7 @@ "description": "Apraksts", "dkim_key_length": "DKIM atslēgas garums (bits)", "domain": "Domēns", - "domain_admins": "Domēna pārvaldītāji", + "domain_admins": "Domēna administratori", "domain_aliases": "Domēna aizstājvārdi", "domain_quota": "Kvota", "domain_quota_total": "Kopējais domēna ierobežojums", @@ -525,7 +507,7 @@ "imap_smtp_server_auth_info": "Lūgums izmantot pilnu e-pasta adresi un PLAIN autentificēšanās mehānismu.
\nPieteikšanās dati tiks šifrēti ar servera puses obligātu šifrēšanu." }, "success": { - "admin_modified": "Pārvaldītāja izmaiņas tika saglabātas", + "admin_modified": "Izmaiņas administrātoram ir saglabātas", "alias_added": "Aizstājadrese %s (%d) tika pievienota", "alias_domain_removed": "Aizstājdomēns %s tika noņemts", "alias_modified": "Aizstājadreses izmaiņas %s tika saglabātas", @@ -536,9 +518,9 @@ "dkim_added": "DKIM atslēga saglabāta", "dkim_removed": "DKIM atslēga %s ir noņemta", "domain_added": "Pievienots domēns %s", - "domain_admin_added": "Tika pievienots domēna pārvaldītājs %s", - "domain_admin_modified": "Domēna pārvaldītāja %s izmaiņas tika saglabātas", - "domain_admin_removed": "Tika noņemts domēna pārvaldītājs %s", + "domain_admin_added": "Domēna administrātors %s pievienots", + "domain_admin_modified": "Izmaiņas domēna administrātoram %s ir saglabātas", + "domain_admin_removed": "Domēna administrators %s tika noņemts", "domain_modified": "Izmaiņas domēnam %s ir saglabātas", "domain_removed": "Domēns %s ir noņemts", "eas_reset": "ActiveSync ierīces priekš lietotāja %s tika atiestatītas", @@ -566,9 +548,7 @@ "verified_yotp_login": "Apliecināta Yubico OTP pieteikšanās", "app_passwd_removed": "Noņemta lietotnes parole ar Id %s", "app_passwd_added": "Pievienota jauna lietotnes parole", - "f2b_banlist_refreshed": "Liegumu saraksta Id tika sekmīgi atsvaidzināts.", - "admin_added": "Tika pievienots pārvaldītājs %s", - "admin_removed": "Tika noņemts pārvaldītājs %s" + "f2b_banlist_refreshed": "Liegumu saraksta Id tika sekmīgi atsvaidzināts." }, "tfa": { "api_register": "%s izmanto Yubico Cloud API. Lūdzu iegūstiet API atslēgu priekš Jūsu atslēgashere", @@ -589,8 +569,7 @@ "waiting_usb_auth": "Gaida USB ierīci...

Lūdzu, tagad nospiežiet pogu uz Jūsu WebAuthn USB ierīces.", "waiting_usb_register": "Gaida USB ierīci...

Lūgums augstāk ievadīt savu paroli un apstiprināt reģistrēšanos ar USB ierīces pogas nospiešanu.", "yubi_otp": "Yubico OTP autentifikators", - "authenticators": "Autentificētāji", - "u2f_deprecated_important": "Lūgums reģistrēt savu atslēgu pārvaldības lapā ar jauno WebAuthn veidu." + "authenticators": "Autentificētāji" }, "user": { "action": "Rīcība", @@ -722,8 +701,7 @@ "warning": { "domain_added_sogo_failed": "Domēns pievienots, bet neizdevās pārsāknēt SOGO. Lūgums pārbaudīt servera žurnālus.", "dovecot_restart_failed": "Dovecot neizdevās pārsāknēties. Lūgums pārbaudīt žurnālus", - "is_not_primary_alias": "Izlaists aizstājvārds %s, kas nav galvenais", - "no_active_admin": "Nevar deaktivēt pēdējo aktīvo pārvaldītāju" + "is_not_primary_alias": "Izlaists aizstājvārds %s, kas nav galvenais" }, "oauth2": { "access_denied": "Lūgums pieteikties kā pastkastes īpašniekam, lai nodrošinātu piekļuvi ar OAuth2." diff --git a/data/web/lang/lang.nl-nl.json b/data/web/lang/lang.nl-nl.json index 6ed9e322a..7b341cecf 100644 --- a/data/web/lang/lang.nl-nl.json +++ b/data/web/lang/lang.nl-nl.json @@ -27,8 +27,7 @@ "tls_policy": "Versleutelingsbeleid", "unlimited_quota": "Onbeperkte quota voor mailboxen", "domain_desc": "Wijzig domeinbeschrijving", - "pw_reset": "Toegang om mailcow gebruikers wachtwoord te resetten", - "domain_relayhost": "Verander relayhost voor een domein" + "pw_reset": "Toegang om mailcow gebruikers wachtwoord te resetten" }, "add": { "activate_filter_warn": "Alle andere filters worden gedeactiveerd zolang deze geactiveerd is.", diff --git a/data/web/lang/lang.pl-pl.json b/data/web/lang/lang.pl-pl.json index de3557c03..758d0cb40 100644 --- a/data/web/lang/lang.pl-pl.json +++ b/data/web/lang/lang.pl-pl.json @@ -189,7 +189,7 @@ "api_info": "API jest w trakcie prac. Dokumentację można znaleźć pod adresem /api", "api_key": "klucz API", "api_read_only": "Dostęp tylko do odczytu", - "api_read_write": "Dostęp do odczytu i zapisu", + "api_read_write": "Dostęp tylko do odczytu", "api_skip_ip_check": "Pomiń sprawdzenie IP dla API", "app_hide": "Ukryj dla logowania", "app_links": "Linki aplikacji", @@ -1226,7 +1226,7 @@ "decimal": ".", "emptyTable": "Brak danych w tabeli", "expand_all": "Rozszerz wszystko", - "info": "Wyświetlanie od _START_ do _END_ z _TOTAL_ wpisów", + "info": "Wyświetlanie od START do END z TOTAL wpisów", "infoEmpty": "Wyświetlanie od 0 do 0 z 0 wpisów", "infoFiltered": "(filtrowane z _MAX_ suma wpisów)", "thousands": ",", diff --git a/data/web/lang/lang.pt-br.json b/data/web/lang/lang.pt-br.json index db3c8cac2..b01d97656 100644 --- a/data/web/lang/lang.pt-br.json +++ b/data/web/lang/lang.pt-br.json @@ -38,7 +38,7 @@ "add_domain_only": "Adicionar somente domínio", "add_domain_restart": "Adicionar domínio e reiniciar o SoGo", "alias_address": "Endereço (s) de alias", - "alias_address_info": "Endereço(s) de e-mail completo(s) ou @example.com, para capturar todas as mensagens de um domínio (separadas por vírgula). Apenas domínios do Mailcow.", + "alias_address_info": "Endereço/s de e-mail completo ou @example .com, para capturar todas as mensagens de um domínio (separadas por vírgula). somente domínios mailcow.", "alias_domain": "Domínio de alias", "alias_domain_info": "Somente nomes de domínio válidos (separados por vírgula).", "app_name": "Nome do aplicativo", @@ -111,8 +111,7 @@ "validation_success": "Validado com sucesso", "dry": "Simular sincronização", "internal": "Interno", - "internal_info": "Aliases internos são acessíveis apenas a partir do próprio domínio ou alias de domínio.", - "sender_allowed": "Permitir enviar como este alias" + "internal_info": "Aliases internos são acessíveis apenas a partir do próprio domínio ou alias de domínio." }, "admin": { "access": "Acesso", @@ -152,13 +151,13 @@ "arrival_time": "Hora de chegada (hora do servidor)", "authed_user": "Usuário autoritário", "ays": "Tem certeza de que deseja continuar?", - "ban_list_info": "Veja abaixo a lista de IPs banidos: rede (tempo restante do banimento) - [ações].
IPs na fila para serem desbanidos serão removidos da lista de banimentos ativos em alguns segundos.
Rótulos vermelhos indicam banimentos permanentes ativos na lista de bloqueio.", + "ban_list_info": "Veja uma lista de IPs banidos abaixo: rede (tempo restante de banimento) - [ações].
Os IPs na fila para serem desbanidos serão removidos da lista de banimentos ativos em alguns segundos.
Rótulos vermelhos indicam proibições permanentes ativas na lista negra.", "change_logo": "Alterar logotipo", "logo_normal_label": "Normal", "logo_dark_label": "Invertido para o modo escuro", "configuration": "Configuração", "convert_html_to_text": "Converter HTML em texto sem formatação", - "copy_to_clipboard": "Copiado para a área de transferência!", + "copy_to_clipboard": "Text copied to clipboard!", "cors_settings": "Configurações do CORS", "credentials_transport_warning": "Aviso: Adicionar uma nova entrada no mapa de transporte atualizará as credenciais de todas as entradas com uma coluna correspondente do próximo salto.", "customer_id": "ID do cliente", @@ -189,9 +188,9 @@ "excludes": "Exclui esses destinatários", "f2b_ban_time": "Tempo (s) de proibição", "f2b_ban_time_increment": "O tempo de banimento é incrementado com cada banimento", - "f2b_blacklist": "Redes/hosts na lista de bloqueio", + "f2b_blacklist": "Redes/hosts na lista negra", "f2b_filter": "Filtros Regex", - "f2b_list_info": "Um host ou rede na lista de bloqueio sempre terá prioridade sobre uma entidade na lista de permissões. As atualizações das listas levarão alguns segundos para serem aplicadas.", + "f2b_list_info": "Um host ou rede na lista negra sempre superará uma entidade na lista branca. As atualizações da lista levarão alguns segundos para serem aplicadas.", "f2b_manage_external": "Gerenciar Fail2Ban externamente", "f2b_manage_external_info": "O Fail2ban ainda manterá a lista de banimentos, mas não definirá ativamente regras para bloquear o tráfego. Use a lista de banimento gerada abaixo para bloquear externamente o tráfego.", "f2b_max_attempts": "Máximo de tentativas", @@ -201,7 +200,7 @@ "f2b_parameters": "Parâmetros do Fail2ban", "f2b_regex_info": "Registros considerados: SoGo, Postfix, Dovecot, PHP-FPM.", "f2b_retry_window": "Repita a (s) janela (s) para o máximo de tentativas", - "f2b_whitelist": "Redes/hosts na lista de permissões", + "f2b_whitelist": "Redes/hosts incluídos na lista branca", "filter_table": "Tabela de filtros", "forwarding_hosts": "Anfitriões de encaminhamento", "forwarding_hosts_add_hint": "Você pode especificar endereços IPv4/IPv6, redes em notação CIDR, nomes de host (que serão resolvidos para endereços IP) ou nomes de domínio (que serão resolvidos para endereços IP consultando registros SPF ou, na ausência deles, registros MX).", @@ -223,7 +222,7 @@ "includes": "Inclua esses destinatários", "ip_check": "Verificação de IP", "ip_check_disabled": "A verificação de IP está desativada. Você pode ativá-lo em
Sistema > Configuração > Opções > Personalizar", - "ip_check_opt_in": "Opte por usar o serviço de terceiros ipv4.mailcow.email e ipv6.mailcow.email para resolver endereços IP externos.", + "ip_check_opt_in": "Opte por usar o serviço de terceiros ipv4.mailcow.email. e ipv6.mailcow.email para resolver endereços IP externos.", "is_mx_based": "Baseado em MX", "last_applied": "Aplicado pela última vez", "license_info": "Uma licença não é necessária, mas ajuda no desenvolvimento.
Registre seu GUID aqui ou comprar suporte para sua instalação de mailcow.", @@ -245,7 +244,7 @@ "oauth2_add_client": "Adicionar cliente OAuth2", "oauth2_client_id": "ID do cliente", "oauth2_client_secret": "Segredo do cliente", - "oauth2_info": "A implementação do OAuth2 suporta o tipo de concessão \"Código de Autorização\" e emite tokens de atualização.
\nO servidor também emite automaticamente novos tokens de atualização após um token de atualização ter sido usado.
\nO escopo padrão é profile. Somente usuários de caixa de correio podem ser autenticados com o OAuth2. Se o parâmetro de escopo for omitido, o padrão será profile.
\nO parâmetro state deve ser enviado pelo cliente como parte da solicitação de autorização.

\nCaminhos para solicitações à API OAuth2:
\n\n
    \n
  • Ponto de extremidade de autorização: /oauth/authorize
  • \n
  • Endpoint do token: /oauth/token
  • \n
  • Página de recursos: /oauth/profile
  • \n
\n\nRegenerar o segredo do cliente não expirará os códigos de autorização existentes, mas impedirá a renovação do token.

\nA revogação dos tokens de cliente causará o encerramento imediato de todas as sessões ativas. Todos os clientes precisarão se autenticar novamente.", + "oauth2_info": "A implementação OAuth2 suporta o tipo de concessão \"Código de Autorização\" e emite tokens de atualização.
\nO servidor também emite automaticamente novos tokens de atualização, depois que um token de atualização foi usado.

\n• O escopo padrão é perfil. Somente usuários com caixa de e-mail podem ser autenticados contra o OAuth2. Se o parâmetro de escopo for omitido, ele voltará para perfil.
\nCaminhos para solicitações OAuth2 API:
\n
    \n
  • Endpoint de autorização: /oauth/authorize
  • \n
  • Endpoint token: /oauth/token
  • \n
  • Página de recursos: /oauth/profile
  • \n
\nRegenerar o segredo do cliente não expirará os códigos de autorização existentes, mas eles não renovarão seu token.

\nA revogação dos tokens do cliente causará o término imediato de todas as sessões ativas. Todos os clientes precisam se autenticar novamente.", "oauth2_redirect_uri": "URI de redirecionamento", "oauth2_renew_secret": "Gere um novo segredo de cliente", "oauth2_revoke_tokens": "Revogar todos os tokens do cliente", @@ -321,8 +320,8 @@ "rspamd_com_settings": "Um nome de configuração será gerado automaticamente, veja os exemplos de predefinições abaixo. Para obter mais detalhes, consulte a documentação do Rspamd", "rspamd_global_filters": "Mapas de filtro globais", "rspamd_global_filters_agree": "Eu vou ter cuidado!", - "rspamd_global_filters_info": "Os mapas de filtros globais contêm diferentes tipos de listas globais de bloqueio e de permissões.", - "rspamd_global_filters_regex": "Os nomes explicam sua finalidade. Todo o conteúdo deve conter uma expressão regular válida no formato \"/padrão/opções\" (por exemplo, /.[+@domain.tld](mailto:+@domain.tld)/i).
\nEmbora verificações básicas sejam executadas em cada linha de regex, a funcionalidade do Rspamd pode ser comprometida se ele não conseguir ler a sintaxe corretamente.
\nO Rspamd tentará ler o conteúdo do mapa quando ele for alterado. Se você tiver problemas, reinicie o Rspamd para forçar o recarregamento do mapa.
Elementos na lista de bloqueio são excluídos da quarentena.", + "rspamd_global_filters_info": "Os mapas de filtros globais contêm diferentes tipos de listas negras e brancas globais.", + "rspamd_global_filters_regex": "Seus nomes explicam seu propósito. Todo o conteúdo deve conter uma expressão regular válida no formato “/padrão/opções” (por exemplo, /. + @domain\\ .tld/i).
\r\n Embora verificações rudimentares estejam sendo executadas em cada linha de regex, a funcionalidade do Rspamd pode ser interrompida se não conseguir ler a sintaxe corretamente.
\r\n O Rspamd tentará ler o conteúdo do mapa quando alterado. Se você tiver problemas, reinicie o Rspamd para forçar o recarregamento do mapa.
Os elementos da lista negra são excluídos da quarentena.", "rspamd_settings_map": "Mapa de configurações do Rspamd", "sal_level": "Nível de humor", "save": "Salvar alterações", @@ -557,9 +556,7 @@ "mode_invalid": "Modo %s é inválido", "mx_invalid": "Registro MX %s é inválido", "required_data_missing": "Dados obrigatórios %s estão ausentes", - "version_invalid": "Versão %s é inválida", - "tfa_removal_blocked": "A autenticação de dois fatores não pode ser removida, pois é obrigatória para a sua conta.", - "quarantine_category_invalid": "A categoria da quarentena deve ser uma das seguintes: add_header, reject, all" + "version_invalid": "Versão %s é inválida" }, "datatables": { "collapse_all": "Recolher tudo", @@ -730,7 +727,7 @@ "pushover_verify": "Verifique as credenciais", "quota_mb": "Cota (MiB)", "quota_warning_bcc": "Aviso de cota BCC", - "quota_warning_bcc_info": "Os avisos serão enviados em cópias separadas para os seguintes destinatários. O assunto será precedido pelo nome de usuário correspondente entre colchetes, por exemplo: Aviso de cota (user@example.com).", + "quota_warning_bcc_info": "Os avisos serão enviados em cópias separadas para os seguintes destinatários. O assunto será sufixado pelo nome de usuário correspondente entre colchetes, por exemplo: Aviso de cota (user@example.com).", "ratelimit": "Limite de taxa", "redirect_uri": "URL de redirecionamento/retorno de chamada", "relay_all": "Retransmita todos os destinatários", @@ -749,17 +746,17 @@ "sieve_desc": "Breve descrição", "sieve_type": "Tipo de filtro", "skipcrossduplicates": "Ignore mensagens duplicadas entre pastas (primeiro a chegar, primeiro a ser servido)", - "sogo_access": "Encaminhamento direto para o SOGo", - "sogo_access_info": "Após o login, o usuário é automaticamente redirecionado para o SOGo.", + "sogo_access": "Encaminhamento direto para o SOGoo", + "sogo_access_info": "Depois de fazer login, o usuário é automaticamente redirecionado para o SOGo.", "sogo_visible": "O alias é visível no SoGo", "sogo_visible_info": "Essa opção afeta somente objetos, que podem ser exibidos no SoGo (endereços de alias compartilhados ou não compartilhados apontando para pelo menos uma mailbox local). Se estiver oculto, um alias não aparecerá como remetente selecionável no SoGo.", "spam_alias": "Crie ou altere endereços de alias com limite de tempo", "spam_filter": "Filtro de spam", - "spam_policy": "Adicionar ou remover itens da lista de permissões/bloqueio", + "spam_policy": "Adicionar ou remover itens da lista branca/negra", "spam_score": "Defina uma pontuação de spam personalizada", "subfolder2": "Sincronizar na subpasta no destino
(vazio = não usar subpasta)", "syncjob": "Editar tarefa de sincronização", - "target_address": "Ir para o(s) endereço(s) (separados por vírgula)", + "target_address": "Ir para endereço/es (separados por vírgula)", "target_domain": "Domínio de destino", "timeout1": "Tempo limite para conexão com o host remoto", "timeout2": "Tempo limite para conexão com o host local", @@ -784,9 +781,7 @@ "mta_sts_max_age_info": "Tempo em segundos que servidores de email de recepção podem armazenar esta política em cache até buscar novamente.", "mta_sts_mx": "Servidor MX", "mta_sts_mx_info": "Permite envio apenas para nomes de host de servidor de email explicitamente listados; o MTA de envio verifica se o nome do host DNS MX corresponde à lista de políticas e permite entrega apenas com certificado TLS válido (protege contra MITM).", - "mta_sts_mx_notice": "Múltiplos servidores MX podem ser especificados (separados por vírgulas).", - "sender_allowed": "Permitir enviar como este alias", - "sender_allowed_info": "Se desativado, este alias poderá apenas receber e-mails. Use a ACL de remetente para substituir essa configuração e conceder a caixas de correio específicas permissão para enviar." + "mta_sts_mx_notice": "Múltiplos servidores MX podem ser especificados (separados por vírgulas)." }, "fido2": { "confirm": "Confirme", @@ -807,7 +802,7 @@ "cancel": "Cancelar", "confirm_delete": "Confirme a exclusão", "delete_now": "Excluir agora", - "delete_these_items": "Por favor, confirme as alterações feitas no seguinte ID de objeto.", + "delete_these_items": "Confirme suas alterações no seguinte ID de objeto", "hibp_check": "Verifique em haveibeenpwned.com", "hibp_nok": "Combinado! Essa é uma senha potencialmente perigosa!", "hibp_ok": "Nenhuma combinação encontrada.", @@ -975,7 +970,7 @@ "recipient_map_new": "Novo destinatário", "recipient_map_new_info": "O destino do mapa do destinatário deve ser um endereço de e-mail válido ou um nome de domínio.", "recipient_map_old": "Destinatário original", - "recipient_map_old_info": "O destino original do mapa de destinatário deve ser um endereço de e-mail válido ou um nome de domínio.", + "recipient_map_old_info": "O destino original do mapa de um destinatário deve ser um endereço de e-mail válido ou um nome de domínio.", "recipient_maps": "Mapas de destinatários", "relay_all": "Retransmita todos os destinatários", "relay_unknown": "Retransmitir mailboxes desconhecidas", @@ -1066,7 +1061,7 @@ "notified": "Notificado", "qhandler_success": "Solicitação enviada com sucesso para o sistema. Agora você pode fechar a janela.", "qid": "Respand AID", - "qinfo": "O sistema de quarentena irá salvar no banco de dados os e-mails rejeitados (o remetente não terá a impressão de que o e-mail foi entregue), bem como os e-mails que são entregues como cópia na pasta de spam de uma mailbox.\n
“Aprender como spam e excluir” irá classificar a mensagem como spam por meio do Teorema de Bayes e também calcular hashes fuzzy para bloquear mensagens semelhantes no futuro.\n
Esteja ciente de que o aprendizado de múltiplas mensagens pode, dependendo do seu sistema, levar tempo.
Elementos na lista de bloqueio são excluídos da quarentena.", + "qinfo": "O sistema de quarentena salvará as mensagens rejeitadas no banco de dados (o remetente não terá a impressão de uma mensagem entregue), bem como as mensagens, que são entregues como cópia na pasta Lixo eletrônico de uma mailbox.\n
“Aprenda como spam e exclua” aprenderá uma mensagem como spam por meio do Teorema de Bayes e também calculará hashes difusos para negar mensagens semelhantes no futuro.\n
Esteja ciente de que aprender várias mensagens pode ser demorado, dependendo do seu sistema.
Os elementos da lista negra são excluídos da quarentena.", "qitem": "Item de quarentena", "quarantine": "Quarentena", "quick_actions": "Ações", @@ -1242,12 +1237,7 @@ "webauthn": "Autenticação WebAuthn", "waiting_usb_auth": "Aguardando o dispositivo USB...

Toque no botão no seu dispositivo USB agora.", "waiting_usb_register": "Aguardando o dispositivo USB...

Digite sua senha acima e confirme seu registro tocando no botão no seu dispositivo USB.", - "yubi_otp": "Autenticação Yubico OTP", - "force_tfa": "Forçar o cadastro de 2FA no login", - "force_tfa_info": "O usuário será obrigado a configurar a autenticação de dois fatores antes de acessar o painel.", - "setup_title": "Autenticação de Dois Fatores Obrigatória", - "setup_required": "Sua conta exige autenticação de dois fatores. Configure um método de 2FA para continuar.", - "cancel_setup": "Cancelar e sair" + "yubi_otp": "Autenticação Yubico OTP" }, "user": { "action": "Ação", @@ -1286,7 +1276,7 @@ "delete_ays": "Confirme o processo de exclusão.", "direct_aliases": "Endereços de alias diretos", "direct_aliases_desc": "Os endereços de alias diretos são afetados pelo filtro de spam e pelas configurações da política TLS.", - "direct_protocol_access": "Este usuário da mailbox possui acesso direto e externo aos seguintes protocolos e aplicações. Esta configuração é controlada pelo seu administrador. Senhas de aplicativo podem ser criadas para conceder acesso a protocolos e aplicações específicos.
O botão “Webmail” fornece login único (SSO) para o SOGo e está sempre disponível.", + "direct_protocol_access": "Esse usuário da mailbox tem acesso externo direto aos seguintes protocolos e aplicativos. Essa configuração é controlada pelo administrador. As senhas de aplicativos podem ser criadas para conceder acesso a protocolos e aplicativos individuais.
O botão “Login no webmail” fornece login único no SoGo e está sempre disponível.", "eas_reset": "Redefinir o cache do dispositivo ActiveSync", "eas_reset_help": "Em muitos casos, uma redefinição do cache do dispositivo ajudará a recuperar um perfil quebrado do ActiveSync.
Atenção: Todos os elementos serão baixados novamente!", "eas_reset_now": "Reinicie agora", @@ -1362,12 +1352,12 @@ "sogo_profile_reset": "Redefinir perfil SoGo", "sogo_profile_reset_help": "Isso destruirá o perfil SoGo de um usuário e excluirá todos os dados de contato e calendário irrecuperáveis.", "sogo_profile_reset_now": "Redefina o perfil agora", - "spam_aliases": "Aliases de e-mail de spam", + "spam_aliases": "Aliases de e-mail temporários", "spam_score_reset": "Redefinir para o padrão do servidor", "spamfilter": "Filtro de spam", "spamfilter_behavior": "Avaliação", - "spamfilter_bl": "Lista de bloqueio", - "spamfilter_bl_desc": "Endereços de e-mail na lista de bloqueio para sempre classificar como spam e rejeitados. E-mails rejeitados não serão copiados para a quarentena. Coringas podem ser utilizados. O filtro é aplicado apenas a aliases diretos (aliases com uma única mailbox de destino), excluindo aliases catch-all e a própria mailbox.", + "spamfilter_bl": "Lista negra", + "spamfilter_bl_desc": "Endereços de e-mail na lista negra para sempre serem classificados como spam e rejeitados. E-mails rejeitados não serão copiados para a quarentena. Podem ser usados curingas. Um filtro só é aplicado a aliases diretos (aliases com uma única caixa de correio de destino), excluindo aliases abrangentes e a própria mailbox.", "spamfilter_default_score": "Valores padrão", "spamfilter_green": "Verde: esta mensagem não é spam", "spamfilter_hint": "O primeiro valor descreve a “pontuação baixa de spam”, o segundo representa a “alta pontuação de spam”.", @@ -1378,8 +1368,8 @@ "spamfilter_table_empty": "Não há dados para exibir", "spamfilter_table_remove": "remover", "spamfilter_table_rule": "Regra", - "spamfilter_wl": "Lista de permissões", - "spamfilter_wl_desc": "Endereços de e-mail na lista de permissões são configurados para nunca serem classificados como spam. Coringas podem ser utilizados. O filtro é aplicado apenas a aliases diretos (aliases com uma única mailbox de destino), excluindo aliases catch-all e a própria mailbox.", + "spamfilter_wl": "Lista branca", + "spamfilter_wl_desc": "Os endereços de e-mail incluídos na lista branca são programados para nunca serem classificados como spam. Podem ser usados curingas. Um filtro só é aplicado a aliases diretos (aliases com uma única mailbox de destino), excluindo aliases abrangentes e a própria mailbox.", "spamfilter_yellow": "Amarelo: esta mensagem pode ser spam, será marcada como spam e movida para sua pasta de lixo eletrônico", "status": "Status", "sync_jobs": "Trabalhos de sincronização", @@ -1393,7 +1383,7 @@ "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Não é possível se conectar ao servidor remoto", "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Nome de usuário ou senha incorretos", "tag_handling": "Definir o tratamento para e-mails marcados", - "tag_help_example": "Exemplo de endereço de e-mail com tag: eu+Facebook@exemplo.org", + "tag_help_example": "Exemplo de um endereço de e-mail marcado: me +Facebook @example .org", "tag_help_explain": "Na subpasta: uma nova subpasta com o nome da tag será criada abaixo da CAIXA DE ENTRADA (“Caixa de entrada/Facebook”).
\r\nNo assunto: o nome das tags será anexado ao assunto do e-mail, por exemplo: “[Facebook] Minhas notícias”.", "tag_in_none": "Não faça nada", "tag_in_subfolder": "Na subpasta", @@ -1418,11 +1408,7 @@ "authentication": "Autenticação", "overview": "Visão geral", "protocols": "Protocolos", - "tfa_info": "A autenticação de dois fatores ajuda a proteger sua conta. Se você habilitá-la, precisará de senhas de aplicativo para fazer login em aplicativos ou serviços que não suportam autenticação de dois fatores (por exemplo, clientes de email).", - "expire_never": "Nunca expirar", - "forever": "Para sempre", - "pw_update_required": "Sua conta exige a alteração de senha. Defina uma nova senha para continuar.", - "spam_aliases_info": "Um alias de spam é um endereço de e-mail temporário que pode ser usado para proteger endereços de e-mail reais.
Opcionalmente, pode-se definir um tempo de expiração para que o alias seja automaticamente desativado após o período definido, descartando efetivamente endereços que tenham sido abusados ou vazados." + "tfa_info": "A autenticação de dois fatores ajuda a proteger sua conta. Se você habilitá-la, precisará de senhas de aplicativo para fazer login em aplicativos ou serviços que não suportam autenticação de dois fatores (por exemplo, clientes de email)." }, "warning": { "cannot_delete_self": "Não é possível excluir o usuário conectado", diff --git a/data/web/lang/lang.si-si.json b/data/web/lang/lang.si-si.json index 39d57eb31..5b7b85745 100644 --- a/data/web/lang/lang.si-si.json +++ b/data/web/lang/lang.si-si.json @@ -558,8 +558,7 @@ "mode_invalid": "Način %s ni veljaven", "mx_invalid": "Zapis MX %s je neveljaven", "version_invalid": "Različica %s je neveljavna", - "tfa_removal_blocked": "Dvofaktorske avtentikacije ni mogoče odstraniti, ker je obvezna za vaš račun.", - "quarantine_category_invalid": "Kategorija karantene mora biti ena od: add_header, reject, all" + "tfa_removal_blocked": "Dvofaktorske avtentikacije ni mogoče odstraniti, ker je obvezna za vaš račun." }, "debug": { "containers_info": "Informacije o zabojniku", @@ -1001,8 +1000,7 @@ "weekly": "Tedensko", "sieve_info": "Na uporabnika lahko shranite več filtrov, vendar je lahko hkrati aktiven le en predfilter in en postfilter.
\nVsak filter bo obdelan v opisanem vrstnem redu. Niti neuspešen skript niti izdan ukaz »keep;« ne bosta ustavila obdelave nadaljnjih skript. Spremembe globalnih skriptov sita bodo sprožile ponovni zagon Dovecota.

Globalni predfilter sita • Predfilter • Uporabniški skripti • Postfilter • Globalni postfilter sita", "tls_policy_maps_info": "Ta preslikava pravilnikov preglasi pravila odhodnega prenosa TLS neodvisno od uporabnikovih nastavitev pravilnikov TLS.
\n Za več informacij preverite dokumentacijo »smtp_tls_policy_maps«.", - "internal": "Notranje", - "force_tfa": "TFA" + "internal": "Notranje" }, "fido2": { "known_ids": "Znani ID-ji", diff --git a/data/web/lang/lang.uz-uz.json b/data/web/lang/lang.uz-uz.json deleted file mode 100644 index a8d2ecf82..000000000 --- a/data/web/lang/lang.uz-uz.json +++ /dev/null @@ -1,1440 +0,0 @@ -{ - "acl": { - "alias_domains": "Taxallus domenlarini qoʻshish", - "app_passwds": "Ilova parollarini boshqarish", - "bcc_maps": "BCC xaritalari", - "delimiter_action": "Ajratuvchi amali", - "domain_desc": "Domen tavsifini oʻzgartirish", - "domain_relayhost": "Domen uchun relay xostni oʻzgartirish", - "eas_reset": "EAS qurilmalarini tiklash", - "extend_sender_acl": "Tashqi manzillar yordamida joʻnatuvchi ACL ni kengaytirishga ruxsat berish", - "filters": "Filtrlar", - "login_as": "Pochta qutisi foydalanuvchisi sifatida kirish", - "mailbox_relayhost": "Pochta qutisi uchun relay xostni oʻzgartirish", - "prohibited": "ACL tomonidan taqiqlangan", - "protocol_access": "Protokolga kirishni oʻzgartirish", - "pushover": "Pushover", - "pw_reset": "mailcow foydalanuvchi parolini tiklashga ruxsat berish", - "quarantine": "Karantin amallari", - "quarantine_attachments": "Karantindagi ilovalar", - "quarantine_category": "Karantin bildirishnoma turkumini oʻzgartirish", - "quarantine_notification": "Karantin bildirishnomalarini oʻzgartirish", - "ratelimit": "Tezlik chegarasi", - "recipient_maps": "Qabul qiluvchi xaritalari", - "smtp_ip_access": "SMTP uchun ruxsat etilgan xostlarni oʻzgartirish", - "sogo_access": "SOGo kirishini boshqarishga ruxsat berish", - "sogo_profile_reset": "SOGo profilini tiklash", - "spam_alias": "Vaqtinchalik taxalluslar", - "spam_policy": "Qora roʻyxat/Oq roʻyxat", - "spam_score": "Spam bahosi", - "syncjobs": "Sinxronizatsiya vazifalari", - "tls_policy": "TLS siyosati", - "unlimited_quota": "Pochta qutilari uchun cheksiz kvota" - }, - "add": { - "activate_filter_warn": "Faol belgilansa, boshqa barcha filtrlar oʻchirib qoʻyiladi.", - "active": "Faol", - "add": "Qoʻshish", - "add_domain_only": "Faqat domen qoʻshish", - "add_domain_restart": "Domen qoʻshish va SOGoni qayta ishga tushirish", - "alias_address": "Taxallus manzil(lar)i", - "alias_address_info": "Toʻliq e-pochta manzil(lar)i yoki @example.com — domenga keladigan barcha xabarlarni qabul qilish uchun (vergul bilan ajratilgan). Faqat mailcow domenlari.", - "alias_domain": "Taxallus domeni", - "alias_domain_info": "Faqat haqiqiy domen nomlari (vergul bilan ajratilgan).", - "app_name": "Ilova nomi", - "app_password": "Ilova paroli qoʻshish", - "app_passwd_protocols": "Ilova paroli uchun ruxsat etilgan protokollar", - "automap": "Papkalarni avtomatik xaritalashga harakat qilish (\"Sent items\", \"Sent\" => \"Sent\" va h.k.)", - "backup_mx_options": "Relay sozlamalari", - "bcc_dest_format": "BCC manzili bitta haqiqiy e-pochta manzili boʻlishi kerak.
Agar bir nechta manzilga nusxa joʻnatish kerak boʻlsa, taxallus yarating va shu yerda ishlating.", - "comment_info": "Maxfiy izoh foydalanuvchiga koʻrinmaydi, ommaviy izoh esa foydalanuvchi koʻrinishida ustiga sichqoncha kelganda maslahat sifatida koʻrsatiladi", - "custom_params": "Maxsus parametrlar", - "custom_params_hint": "Toʻgʻri: --param=xy, notoʻgʻri: --param xy", - "delete1": "Tugatilgach manbadan oʻchirish", - "delete2": "Manbada boʻlmagan xabarlarni manzildan oʻchirish", - "delete2duplicates": "Manzildagi dublikatlarni oʻchirish", - "description": "Tavsif", - "destination": "Manzil", - "disable_login": "Kirishni taqiqlash (kiruvchi pochta hali ham qabul qilinadi)", - "domain": "Domen", - "domain_matches_hostname": "%s domeni xost nomiga mos keladi", - "domain_quota_m": "Domenning umumiy kvotasi (MiB)", - "dry": "Sinxronizatsiyani simulyatsiya qilish", - "enc_method": "Shifrlash usuli", - "exclude": "Obyektlarni istisno qilish (regex)", - "full_name": "Toʻliq ism", - "gal": "Global manzillar roʻyxati", - "gal_info": "GAL domenning barcha obyektlarini oʻz ichiga oladi va hech bir foydalanuvchi tomonidan tahrirlanmaydi. Oʻchirilsa, SOGodagi bandlik maʼlumotlari yoʻqoladi! Oʻzgarishlarni qoʻllash uchun SOGoni qayta ishga tushiring.", - "generate": "yaratish", - "goto_ham": "ham sifatida oʻrgatish", - "goto_null": "Xatni jimgina rad etish", - "goto_spam": "spam sifatida oʻrgatish", - "hostname": "Xost", - "inactive": "Nofaol", - "internal": "Ichki", - "internal_info": "Ichki taxalluslarga faqat oʻz domeni yoki taxallus domenlaridan kirish mumkin.", - "sender_allowed": "Ushbu taxallus orqali joʻnatishga ruxsat berish", - "kind": "Turi", - "mailbox_quota_def": "Standart pochta qutisi kvotasi", - "mailbox_quota_m": "Bitta pochta qutisining maks. kvotasi (MiB)", - "mailbox_username": "Foydalanuvchi nomi (e-pochta manzilining chap qismi)", - "max_aliases": "Mumkin boʻlgan maks. taxalluslar", - "max_mailboxes": "Mumkin boʻlgan maks. pochta qutilari", - "mins_interval": "Soʻrov oraligʻi (daqiqa)", - "multiple_bookings": "Bir nechta bandlovlar", - "nexthop": "Keyingi nuqta", - "password": "Parol", - "password_repeat": "Tasdiqlash paroli (takrorlang)", - "port": "Port", - "post_domain_add": "Yangi domen qoʻshilgandan keyin SOGo konteyneri (\"sogo-mailcow\") qayta ishga tushirilishi kerak!

Bundan tashqari, domenning DNS sozlamalarini koʻrib chiqing. DNS sozlamalari tasdiqlangach, yangi domeningiz (autoconfig.<domain>, autodiscover.<domain>) uchun sertifikatlarni avtomatik yaratish uchun \"acme-mailcow\" konteynerini qayta ishga tushiring.
Bu qadam ixtiyoriy va har 24 soatda qayta urinib koʻriladi.", - "private_comment": "Maxfiy izoh", - "public_comment": "Ommaviy izoh", - "quota_mb": "Kvota (MiB)", - "relay_all": "Barcha qabul qiluvchilarni relay qilish", - "relay_all_info": "↪ Agar barcha qabul qiluvchilarni relay qilmaslikni tanlasangiz, relay qilinishi kerak boʻlgan har bir qabul qiluvchi uchun (\"koʻr\") pochta qutisi qoʻshishingiz kerak boʻladi.", - "relay_domain": "Ushbu domenni relay qilish", - "relay_transport_info": "
Maʼlumot
Bu domen uchun maxsus manzilga transport xaritalarini belgilashingiz mumkin. Agar oʻrnatilmagan boʻlsa, MX qidiruvi amalga oshiriladi.", - "relay_unknown_only": "Faqat mavjud boʻlmagan pochta qutilarini relay qilish. Mavjud pochta qutilari mahalliy yetkazib beriladi.", - "relayhost_wrapped_tls_info": "Iltimos, TLS-oʻralgan portlardan foydalanmang (asosan 465-portda).
\r\nO'ralmagan istalgan portdan foydalaning va STARTTLS chiqaring. TLS ni majburlash uchun TLS siyosatini \"TLS siyosati xaritalari\"da yaratish mumkin.", - "select": "Iltimos, tanlang...", - "select_domain": "Avval domenni tanlang", - "sieve_desc": "Qisqa tavsif", - "sieve_type": "Filtr turi", - "skipcrossduplicates": "Papkalararo dublikat xabarlarni oʻtkazib yuborish (birinchi kelgan, birinchi xizmatlanadi)", - "subscribeall": "Barcha papkalarga obuna boʻlish", - "syncjob": "Sinxronizatsiya vazifasi qoʻshish", - "syncjob_hint": "Parollar oddiy matn sifatida saqlanishini unutmang!", - "tags": "Teglar", - "target_address": "Yoʻnaltirish manzillari", - "target_address_info": "Toʻliq e-pochta manzil(lar)i (vergul bilan ajratilgan).", - "target_domain": "Maqsad domen", - "timeout1": "Masofaviy xostga ulanish vaqtining tugashi", - "timeout2": "Mahalliy xostga ulanish vaqtining tugashi", - "username": "Foydalanuvchi nomi", - "validate": "Tekshirish", - "validation_success": "Muvaffaqiyatli tekshirildi" - }, - "admin": { - "access": "Kirish", - "action": "Amal", - "activate_api": "API ni faollashtirish", - "activate_send": "Joʻnatish tugmasini faollashtirish", - "active": "Faol", - "active_rspamd_settings_map": "Faol sozlamalar xaritasi", - "add": "Qoʻshish", - "add_admin": "Administrator qoʻshish", - "add_domain_admin": "Domen administratorini qoʻshish", - "add_forwarding_host": "Yoʻnaltirish xosti qoʻshish", - "add_relayhost": "Joʻnatuvchiga bogʻliq transport qoʻshish", - "add_relayhost_hint": "Autentifikatsiya maʼlumotlari, agar boʻlsa, oddiy matn sifatida saqlanishini unutmang.", - "add_row": "Satr qoʻshish", - "add_settings_rule": "Sozlamalar qoidasini qoʻshish", - "add_transport": "Transport qoʻshish", - "add_transports_hint": "Autentifikatsiya maʼlumotlari, agar boʻlsa, oddiy matn sifatida saqlanishini unutmang.", - "additional_rows": " ta qoʻshimcha satr qoʻshildi", - "admin": "Administrator", - "admin_details": "Administrator maʼlumotlarini tahrirlash", - "admin_domains": "Domen tayinlashlari", - "admins": "Administratorlar", - "admins_ldap": "LDAP administratorlari", - "admin_quicklink": "Admin kirish sahifasiga tezkor havolani yashirish", - "advanced_settings": "Kengaytirilgan sozlamalar", - "allowed_methods": "Access-Control-Allow-Methods", - "allowed_origins": "Access-Control-Allow-Origin", - "api_allow_from": "API kirishini ushbu IP / CIDR tarmoq belgilanishlaridan ruxsat berish", - "api_info": "API ishlab chiqilmoqda. Hujjatlarni /api manzilida topishingiz mumkin", - "api_key": "API kaliti", - "api_read_only": "Faqat oʻqish uchun kirish", - "api_read_write": "Oʻqish va yozish uchun kirish", - "api_skip_ip_check": "API uchun IP tekshiruvini oʻtkazib yuborish", - "app_hide": "Kirishda yashirish", - "app_links": "Ilova havolalari", - "app_name": "Ilova nomi", - "apps_name": "\"mailcow Apps\" nomi", - "arrival_time": "Kelish vaqti (server vaqti)", - "authed_user": "Avtorizatsiya qilingan foydalanuvchi", - "ays": "Davom etishni xohlayotganingizga ishonchingiz komilmi?", - "ban_list_info": "Quyida bloklangan IP roʻyxati keltirilgan: tarmoq (qolgan blok vaqti) - [amallar].
Blokdan chiqarishga navbatga qoʻyilgan IP lar bir necha soniya ichida faol bloklash roʻyxatidan olib tashlanadi.
Qizil yorliqlar qora roʻyxat orqali faol doimiy bloklarni bildiradi.", - "change_logo": "Logotipni oʻzgartirish", - "logo_normal_label": "Oddiy", - "logo_dark_label": "Qorongʻi rejim uchun teskari", - "configuration": "Konfiguratsiya", - "convert_html_to_text": "HTMLni oddiy matnga aylantirish", - "copy_to_clipboard": "Matn vaqtinchalik xotiraga koʻchirildi!", - "cors_settings": "CORS sozlamalari", - "credentials_transport_warning": "Diqqat: Yangi transport xaritasi yozuvi qoʻshish keyingi nuqta ustunlari mos keladigan barcha yozuvlar uchun maʼlumotlarni yangilaydi.", - "customer_id": "Mijoz ID", - "customize": "Sozlash", - "login_page": "Kirish sahifasi", - "destination": "Manzil", - "dkim_add_key": "ARC/DKIM kaliti qoʻshish", - "dkim_domains_selector": "Tanlovchi", - "dkim_domains_wo_keys": "Kalit yetishmaydigan domenlarni tanlash", - "dkim_from": "Kimdan", - "dkim_from_title": "Maʼlumotlarni koʻchirib olish uchun manba domen", - "dkim_key_length": "DKIM kalit uzunligi (bit)", - "dkim_key_missing": "Kalit yetishmaydi", - "dkim_key_unused": "Kalit ishlatilmagan", - "dkim_key_valid": "Kalit haqiqiy", - "dkim_keys": "ARC/DKIM kalitlari", - "dkim_overwrite_key": "Mavjud DKIM kalitini ustidan yozish", - "dkim_private_key": "Maxfiy kalit", - "dkim_to": "Kimga", - "dkim_to_title": "Maqsad domen(lar) — ustidan yoziladi", - "domain": "Domen", - "domain_admin": "Domen administratori", - "domain_admins": "Domen administratorlari", - "domainadmin_quicklink": "Domen admin kirish sahifasiga tezkor havolani yashirish", - "domain_s": "Domen(lar)", - "duplicate": "Nusxalash", - "duplicate_dkim": "DKIM yozuvini nusxalash", - "edit": "Tahrirlash", - "empty": "Natijalar yoʻq", - "excludes": "Ushbu qabul qiluvchilarni istisno qiladi", - "f2b_ban_time": "Bloklash vaqti (s)", - "f2b_ban_time_increment": "Har bir bloklashda blok vaqti ortadi", - "f2b_blacklist": "Qora roʻyxatdagi tarmoqlar/xostlar", - "f2b_filter": "Regex filtrlari", - "f2b_list_info": "Qora roʻyxatdagi xost yoki tarmoq har doim oq roʻyxat elementidan ustun keladi. Roʻyxat yangilanishlarini qoʻllash uchun bir necha soniya kerak boʻladi.", - "f2b_manage_external": "Fail2ban ni tashqi boshqarish", - "f2b_manage_external_info": "Fail2ban hali ham banlist ni saqlaydi, ammo trafikni bloklash uchun faol qoidalarni oʻrnatmaydi. Trafikni tashqi tomondan bloklash uchun quyida yaratilgan banlist dan foydalaning.", - "f2b_max_attempts": "Maks. urinishlar", - "f2b_max_ban_time": "Maks. bloklash vaqti (s)", - "f2b_netban_ipv4": "Blokni qoʻllash uchun IPv4 subtarmoq oʻlchami (8-32)", - "f2b_netban_ipv6": "Blokni qoʻllash uchun IPv6 subtarmoq oʻlchami (8-128)", - "f2b_parameters": "Fail2ban parametrlari", - "f2b_regex_info": "Eʼtiborga olinadigan jurnallar: SOGo, Postfix, Dovecot, PHP-FPM.", - "f2b_retry_window": "Maks. urinishlar uchun qayta urinish oynasi (s)", - "f2b_whitelist": "Oq roʻyxatdagi tarmoqlar/xostlar", - "filter": "Filtr", - "filter_table": "Filtr jadvali", - "force_sso_text": "Tashqi OIDC provayder sozlangan boʻlsa, bu variant standart mailcow kirish formalarini yashiradi va faqat Yagona kirish tugmasini koʻrsatadi", - "force_sso": "mailcow kirishini oʻchirib, faqat Yagona kirishni koʻrsatish", - "forwarding_hosts": "Yoʻnaltirish xostlari", - "forwarding_hosts_add_hint": "Siz IPv4/IPv6 manzillarini, CIDR yozuvidagi tarmoqlarni, xost nomlarini (IP manzillariga aylantiriladi) yoki domen nomlarini (SPF TXT yoki yoʻq boʻlsa MX yozuvlarini soʻrash orqali IP manzillariga aylantiriladi) belgilashingiz mumkin.", - "forwarding_hosts_hint": "Kiruvchi xabarlar bu yerda keltirilgan istalgan xostlardan shartsiz qabul qilinadi. Bu xostlar keyin DNSBL ga qarshi tekshirilmaydi yoki greylisting ga olinmaydi. Ulardan kelgan spam hech qachon rad etilmaydi, ammo ixtiyoriy ravishda Junk papkasiga joylashtirilishi mumkin. Buning eng keng tarqalgan ishlatilishi — mailcow serveringizga kiruvchi xatlarni yoʻnaltirish qoidasi oʻrnatilgan pochta serverlarini koʻrsatish.", - "from": "Kimdan", - "generate": "yaratish", - "guid": "GUID - noyob nusxa ID si", - "guid_and_license": "GUID va litsenziya", - "hash_remove_info": "Ratelimit hashini oʻchirish (agar mavjud boʻlsa) uning hisoblagichini butunlay tiklaydi.
\r\n Har bir hash alohida rang bilan koʻrsatiladi.", - "help_text": "Kirish maskasi ostidagi yordam matnini bekor qilish (HTML ruxsat etilgan)", - "host": "Xost", - "html": "HTML", - "iam": "Identifikatsiya provayderi", - "iam_attribute_field": "Atribut maydoni", - "iam_authorize_url": "Avtorizatsiya nuqtasi", - "iam_auth_flow": "Autentifikatsiya oqimi", - "iam_auth_flow_info": "Yagona kirish (SSO) uchun ishlatiladigan Authorization Code Flow (Keycloak da Standard Flow) qoʻshimcha ravishda, mailcow toʻgʻridan-toʻgʻri maʼlumotlar bilan Autentifikatsiya oqimini ham qoʻllab-quvvatlaydi. Mailpassword Flow Keycloak Admin REST API yordamida foydalanuvchi maʼlumotlarini tekshirishga harakat qiladi. mailcow Keycloakda xaritalangan mailcow_password atributidan xeshlangan parolni oladi.", - "iam_basedn": "Base DN", - "iam_client_id": "Mijoz ID", - "iam_client_secret": "Mijoz maxfiy soʻzi", - "iam_client_scopes": "Mijoz qamrovlari", - "iam_default_template": "Standart shablon", - "iam_default_template_description": "Agar foydalanuvchiga shablon tayinlanmagan boʻlsa, pochta qutisini yaratishda standart shablon ishlatiladi, lekin pochta qutisini yangilash uchun emas.", - "iam_description": "Autentifikatsiya uchun tashqi provayderni sozlash
Foydalanuvchi pochta qutilari atribut xaritalashi oʻrnatilgan boʻlsa, ular birinchi marta kirgan zahoti avtomatik yaratiladi.", - "iam_extra_permission": "Quyidagi sozlamalarning ishlashi uchun Keycloak dagi mailcow mijoziga Service account va view-users ruxsati kerak.", - "iam_host": "Xost", - "iam_host_info": "Bir yoki bir nechta LDAP xostni vergul bilan ajratib kiriting.", - "iam_import_users": "Foydalanuvchilarni import qilish", - "iam_login_provisioning": "Kirishda foydalanuvchilarni avto-yaratish", - "iam_mapping": "Atribut xaritalashi", - "iam_bindpass": "Bind paroli", - "iam_periodic_full_sync": "Davriy toʻliq sinxronizatsiya", - "iam_port": "Port", - "iam_realm": "Realm", - "iam_redirect_url": "Yoʻnaltirish URL", - "iam_rest_flow": "Mailpassword Flow", - "iam_server_url": "Server URL", - "iam_sso": "Yagona kirish (SSO)", - "iam_sync_interval": "Sinxronizatsiya / import oraligʻi (daqiqa)", - "iam_test_connection": "Ulanishni tekshirish", - "iam_token_url": "Token nuqtasi", - "iam_userinfo_url": "Foydalanuvchi maʼlumotlari nuqtasi", - "iam_username_field": "Foydalanuvchi nomi maydoni", - "iam_binddn": "Bind DN", - "iam_use_ssl": "SSL dan foydalanish", - "iam_use_ssl_info": "SSL yoqilsa va port 389 ga oʻrnatilgan boʻlsa, u avtomatik ravishda 636 ga oʻzgartiriladi.", - "iam_use_tls": "StartTLS dan foydalanish", - "iam_use_tls_info": "TLS yoqilsa, LDAP serveringiz uchun standart portni (389) ishlatishingiz kerak. SSL portlari ishlatilmaydi.", - "iam_version": "Versiya", - "ignore_ssl_error": "SSL xatolarini eʼtiborsiz qoldirish", - "import": "Import", - "import_private_key": "Maxfiy kalitni import qilish", - "in_use_by": "Kim ishlatadi", - "inactive": "Nofaol", - "include_exclude": "Kiritish/Istisno qilish", - "include_exclude_info": "Standart holatda — tanlovsiz — barcha pochta qutilariga murojaat qilinadi", - "includes": "Ushbu qabul qiluvchilarni kiritish", - "ip_check": "IP tekshiruvi", - "ip_check_disabled": "IP tekshiruvi oʻchirilgan. Uni quyidagi joydan yoqishingiz mumkin:
Tizim > Konfiguratsiya > Variantlar > Sozlash", - "ip_check_opt_in": "Tashqi IP manzillarni aniqlash uchun ipv4.mailcow.email va ipv6.mailcow.email uchinchi tomon xizmatidan foydalanishga rozilik.", - "is_mx_based": "MX asosida", - "last_applied": "Oxirgi qoʻllanilgan", - "license_info": "Litsenziya talab qilinmaydi, ammo bu loyihaning rivojlanishiga yordam beradi.
GUID ni bu yerda roʻyxatdan oʻtkazing yoki mailcow oʻrnatmangiz uchun yordam sotib oling.", - "link": "Havola", - "loading": "Iltimos, kuting...", - "login_time": "Kirish vaqti", - "logo_info": "Tasviringiz yuqori navigatsiya paneli uchun 40px balandlikka, bosh sahifa uchun maks. 250px kenglikka oʻlchanadi. Masshtablanadigan grafika tavsiya etiladi.", - "lookup_mx": "Manzil — MX nomiga mos keladigan muntazam ifoda (.*\\.google\\.com — google.com bilan tugaydigan MX ga yoʻnaltirilgan barcha pochtani ushbu nuqta orqali yoʻnaltirish uchun)", - "main_name": "\"mailcow UI\" nomi", - "merged_vars_hint": "Kulrang satrlar vars.(local.)inc.php dan birlashtirilgan va oʻzgartirib boʻlmaydi.", - "message": "Xabar", - "message_size": "Xabar oʻlchami", - "nexthop": "Keyingi nuqta", - "needs_restart": "qayta ishga tushirish kerak", - "no": "✕", - "no_active_bans": "Faol bloklar yoʻq", - "no_new_rows": "Boshqa satrlar mavjud emas", - "no_record": "Yozuv yoʻq", - "oauth2_apps": "OAuth2 ilovalari", - "oauth2_add_client": "OAuth2 mijozini qoʻshish", - "oauth2_client_id": "Mijoz ID", - "oauth2_client_secret": "Mijoz maxfiy soʻzi", - "oauth2_info": "OAuth2 amalga oshirilishi \"Authorization Code\" grant turini qoʻllab-quvvatlaydi va refresh tokenlarini chiqaradi.
\r\nServer shuningdek refresh token ishlatilgandan keyin avtomatik ravishda yangi refresh tokenlarini chiqaradi.

\r\n• Standart qamrov — profile. Faqat pochta qutisi foydalanuvchilari OAuth2 ga qarshi autentifikatsiya qilinishi mumkin. Agar scope parametri tashlab ketilgan boʻlsa, u profile ga qaytadi.
\r\n• state parametri mijoz tomonidan avtorizatsiya soʻrovining bir qismi sifatida yuborilishi shart.

\r\nOAuth2 API ga soʻrovlar uchun yoʻllar:
\r\n
    \r\n
  • Avtorizatsiya nuqtasi: /oauth/authorize
  • \r\n
  • Token nuqtasi: /oauth/token
  • \r\n
  • Resurs sahifasi: /oauth/profile
  • \r\n
\r\nMijoz maxfiy soʻzini qayta yaratish mavjud avtorizatsiya kodlarini muddati tugashiga olib kelmaydi, lekin ular tokenni yangilashda muvaffaqiyatsiz boʻladi.

\r\nMijoz tokenlarini bekor qilish barcha faol sessiyalarning darhol tugashiga olib keladi. Barcha mijozlar qayta autentifikatsiya qilishlari kerak.", - "oauth2_redirect_uri": "Yoʻnaltirish URI", - "oauth2_renew_secret": "Yangi mijoz maxfiy soʻzini yaratish", - "oauth2_revoke_tokens": "Barcha mijoz tokenlarini bekor qilish", - "optional": "ixtiyoriy", - "options": "Variantlar", - "password": "Parol", - "password_length": "Parol uzunligi", - "password_policy": "Parol siyosati", - "password_policy_chars": "Kamida bitta alifbo belgisini oʻz ichiga olishi kerak", - "password_policy_length": "Minimal parol uzunligi %d", - "password_policy_lowerupper": "Kichik va katta harflarni oʻz ichiga olishi kerak", - "password_policy_numbers": "Kamida bitta raqamni oʻz ichiga olishi kerak", - "password_policy_special_chars": "Maxsus belgilarni oʻz ichiga olishi kerak", - "password_repeat": "Tasdiqlash paroli (takrorlang)", - "password_reset_info": "Agar tiklash uchun e-pochta kiritilmagan boʻlsa, bu funksiyadan foydalanib boʻlmaydi.", - "password_reset_settings": "Parolni tiklash sozlamalari", - "password_reset_tmpl_html": "HTML shablon", - "password_reset_tmpl_text": "Matnli shablon", - "password_settings": "Parol sozlamalari", - "priority": "Muhimlik darajasi", - "private_key": "Maxfiy kalit", - "quarantine": "Karantin", - "quarantine_bcc": "Barcha bildirishnomalarning nusxasini (BCC) ushbu qabul qiluvchiga yuborish:
Oʻchirish uchun boʻsh qoldiring. Imzolanmagan, tekshirilmagan xat. Faqat ichki yetkazib berilishi kerak.", - "quarantine_exclude_domains": "Domenlar va taxallus domenlarini istisno qilish", - "quarantine_max_age": "Maksimal yosh (kunlarda)
Qiymat 1 kun yoki undan koʻp boʻlishi kerak.", - "quarantine_max_score": "Agar xatning spam bahosi ushbu qiymatdan yuqori boʻlsa, bildirishnomani rad etish:
Standart 9999.0", - "quarantine_max_size": "Maksimal oʻlcham (MiB) (kattaroq elementlar rad etiladi):
0 cheksizlikni bildirmaydi.", - "quarantine_notification_html": "Bildirishnoma e-pochta shabloni:
Standart shablonni tiklash uchun boʻsh qoldiring.", - "quarantine_notification_sender": "Bildirishnoma e-pochta joʻnatuvchisi", - "quarantine_notification_subject": "Bildirishnoma e-pochta mavzusi", - "quarantine_redirect": "Barcha bildirishnomalarni ushbu qabul qiluvchiga yoʻnaltirish:
Oʻchirish uchun boʻsh qoldiring. Imzolanmagan, tekshirilmagan xat. Faqat ichki yetkazib berilishi kerak.", - "quarantine_release_format": "Chiqarilgan elementlar formati", - "quarantine_release_format_att": "Ilova sifatida", - "quarantine_release_format_raw": "Oʻzgartirilmagan asl nusxa", - "quarantine_retention_size": "Pochta qutisi uchun saqlash:
0 — nofaolligini bildiradi.", - "quicklink_text": "Boshqa kirish sahifalariga tezkor havolalarni kirish formasi ostida koʻrsatish yoki yashirish", - "quota_notification_html": "Bildirishnoma e-pochta shabloni:
Standart shablonni tiklash uchun boʻsh qoldiring.", - "quota_notification_sender": "Bildirishnoma e-pochta joʻnatuvchisi", - "quota_notification_subject": "Bildirishnoma e-pochta mavzusi", - "quota_notifications": "Kvota bildirishnomalari", - "quota_notifications_info": "Kvota bildirishnomalari foydalanuvchilarga foydalanish 80% va 95% ga yetganda bir martadan yuboriladi.", - "quota_notifications_vars": "{{percent}} — foydalanuvchining joriy kvotasi
{{username}} — pochta qutisi nomi", - "queue_unban": "blokdan chiqarish", - "r_active": "Faol cheklovlar", - "r_inactive": "Nofaol cheklovlar", - "r_info": "Faol cheklovlar roʻyxatidagi kulrang/oʻchirilgan elementlar mailcow uchun haqiqiy cheklovlar sifatida tanilmaydi va koʻchirib boʻlmaydi. Nomaʼlum cheklovlar baribir koʻrinish tartibida oʻrnatiladi.
inc/vars.local.inc.php da yangi elementlarni qoʻshib, ularni almashtirishingiz mumkin.", - "rate_name": "Tezlik nomi", - "recipients": "Qabul qiluvchilar", - "refresh": "Yangilash", - "regen_api_key": "API kalitini qayta yaratish", - "regex_maps": "Regex xaritalari", - "relay_from": "\"From:\" manzili", - "relay_rcpt": "\"To:\" manzili", - "relay_run": "Sinovni ishga tushirish", - "relayhosts": "Joʻnatuvchiga bogʻliq transportlar", - "relayhosts_hint": "Domen konfiguratsiya muloqotida tanlash mumkin boʻlgan joʻnatuvchiga bogʻliq transportlarni belgilang.
\r\n Transport xizmati har doim \"smtp:\" va shuning uchun taklif qilinganda TLS ga harakat qiladi. Oʻralgan TLS (SMTPS) qoʻllab-quvvatlanmaydi. Foydalanuvchining individual chiquvchi TLS siyosati sozlamasi eʼtiborga olinadi.
\r\n Taxallus domenlari bilan birga tanlangan domenlarga taʼsir qiladi.", - "remove": "Olib tashlash", - "remove_row": "Satrni olib tashlash", - "reset_default": "Standartga qaytarish", - "reset_limit": "Hash ni olib tashlash", - "reset_password_vars": "{{link}} Yaratilgan parolni tiklash havolasi
{{username}} Parolni tiklashni soʻragan foydalanuvchining pochta qutisi nomi
{{username2}} Tiklash uchun pochta qutisi nomi
{{date}} Parolni tiklash soʻrovi qilingan sana
{{token_lifetime}} Daqiqalardagi token muddati
{{hostname}} mailcow xost nomi", - "restore_template": "Standart shablonni tiklash uchun boʻsh qoldiring.", - "routing": "Yoʻnaltirish", - "rsetting_add_rule": "Qoida qoʻshish", - "rsetting_content": "Qoida mazmuni", - "rsetting_desc": "Qisqa tavsif", - "rsetting_no_selection": "Iltimos, qoidani tanlang", - "rsetting_none": "Qoidalar mavjud emas", - "rsettings_insert_preset": "Misol presetini kiritish \"%s\"", - "rsettings_preset_1": "Autentifikatsiya qilingan foydalanuvchilar uchun DKIM va tezlik chegarasidan boshqa hamma narsani oʻchirib qoʻyish", - "rsettings_preset_2": "Postmasterlar spamni xohlaydi", - "rsettings_preset_3": "Pochta qutisi uchun faqat maxsus joʻnatuvchilarga ruxsat berish (yaʼni, faqat ichki pochta qutisi sifatida ishlatish)", - "rsettings_preset_4": "Domen uchun Rspamd ni oʻchirish", - "rspamd_com_settings": "Sozlama nomi avtomatik yaratiladi, quyidagi misol presetlariga qarang. Batafsil maʼlumot uchun Rspamd hujjatlariga qarang", - "rspamd_global_filters": "Global filtr xaritalari", - "rspamd_global_filters_agree": "Ehtiyot boʻlaman!", - "rspamd_global_filters_info": "Global filtr xaritalari turli xil global rad etish va ruxsat berish roʻyxatlarini oʻz ichiga oladi.", - "rspamd_global_filters_regex": "Ularning nomlari ularning maqsadini tushuntiradi. Barcha mazmun \"/pattern/options\" formatidagi haqiqiy muntazam ifodalarni oʻz ichiga olishi kerak (masalan, /.+@domain\\.tld/i).
\r\n Har bir regex satriga oddiy tekshiruvlar bajariladi, ammo agar Rspamd sintaksisni toʻgʻri oʻqiy olmasa, uning funksionalligi buzilishi mumkin.
\r\n Rspamd oʻzgarganda xarita mazmunini oʻqishga harakat qiladi. Agar muammolarga duch kelsangiz, xarita qayta yuklanishi uchun Rspamd ni qayta ishga tushiring.
Qora roʻyxatdagi elementlar karantindan istisno qilinadi.", - "rspamd_settings_map": "Rspamd sozlamalar xaritasi", - "sal_level": "Moo darajasi", - "save": "Oʻzgarishlarni saqlash", - "search_domain_da": "Domenlarni qidirish", - "send": "Joʻnatish", - "sender": "Joʻnatuvchi", - "service": "Xizmat", - "service_id": "Xizmat ID", - "source": "Manba", - "spamfilter": "Spam filtri", - "subject": "Mavzu", - "success": "Muvaffaqiyatli", - "sys_mails": "Tizim xatlari", - "task": "Vazifa", - "text": "Matn", - "time": "Vaqt", - "title": "Sarlavha", - "title_name": "\"mailcow UI\" veb-sayt sarlavhasi", - "to_top": "Yuqoriga qaytish", - "transport_dest_format": "Regex yoki sintaksis: example.org, .example.org, *, box@example.org (bir nechta qiymatlarni vergul bilan ajratish mumkin)", - "transport_maps": "Transport xaritalari", - "transport_test_rcpt_info": "• Tashqi manzilga relay qilishni sinash uchun null@hosted.mailcow.de dan foydalaning.", - "transports_hint": "• Transport xaritasi yozuvi joʻnatuvchiga bogʻliq transport xaritasidan ustun.
\r\n• MX asosidagi transportlar afzalroq ishlatiladi.
\r\n• Foydalanuvchi boʻyicha chiquvchi TLS siyosati sozlamalari eʼtiborga olinmaydi va faqat TLS siyosati xaritasi yozuvlari orqali majburlanishi mumkin.
\r\n• Belgilangan transportlar uchun transport xizmati har doim \"smtp:\" va shuning uchun taklif qilinganda TLS ga harakat qiladi. Oʻralgan TLS (SMTPS) qoʻllab-quvvatlanmaydi.
\r\n• \"/localhost$/\" ga mos keladigan manzillar har doim \"local:\" orqali tashiladi, shuning uchun \"*\" manzili bu manzillarga qoʻllanmaydi.
\r\n• Misol uchun keyingi nuqta \"[host]:25\" uchun maʼlumotlarni aniqlash uchun, Postfix har doim \"[host]:25\" ni qidirishdan oldin \"host\" ni soʻraydi. Bu xatti-harakat \"host\" va \"[host]:25\" ni bir vaqtning oʻzida ishlatishni imkonsiz qiladi.", - "ui_footer": "Pastki qism (HTML ruxsat etilgan)", - "ui_header_announcement": "Eʼlonlar", - "ui_header_announcement_active": "Eʼlonni faollashtirish", - "ui_header_announcement_content": "Matn (HTML ruxsat etilgan)", - "ui_header_announcement_help": "Eʼlon barcha tizimga kirgan foydalanuvchilarga va UI ning kirish ekranida koʻrinadi.", - "ui_header_announcement_select": "Eʼlon turini tanlang", - "ui_header_announcement_type": "Tur", - "ui_header_announcement_type_danger": "Juda muhim", - "ui_header_announcement_type_info": "Maʼlumot", - "ui_header_announcement_type_warning": "Muhim", - "ui_texts": "UI yorliqlari va matnlari", - "unban_pending": "blokdan chiqarish kutilmoqda", - "unchanged_if_empty": "Oʻzgartirilmagan boʻlsa, boʻsh qoldiring", - "upload": "Yuklash", - "username": "Foydalanuvchi nomi", - "user_link": "Foydalanuvchi havolasi", - "user_quicklink": "Foydalanuvchi kirish sahifasiga tezkor havolani yashirish", - "validate_license_now": "GUID ni litsenziya serveriga qarshi tekshirish", - "verify": "Tasdiqlash", - "yes": "✓" - }, - "danger": { - "access_denied": "Kirish rad etildi yoki noma'lum forma ma'lumotlari", - "tfa_removal_blocked": "Ikki faktorli autentifikatsiyani olib tashlab boʻlmaydi, chunki u sizning hisobingiz uchun talab qilinadi.", - "alias_domain_invalid": "%s taxallus domeni noto'g'ri", - "alias_empty": "Taxallus manzili boʻsh boʻlmasligi kerak", - "alias_goto_identical": "Taxallus va yoʻnaltirish manzili bir xil boʻlmasligi kerak", - "alias_invalid": "%s taxallus manzili noto'g'ri", - "aliasd_targetd_identical": "Taxallus domeni maqsad domeniga teng boʻlmasligi kerak: %s", - "aliases_in_use": "Maks. taxalluslar %d dan katta yoki teng boʻlishi kerak", - "app_name_empty": "Ilova nomi boʻsh boʻlolmaydi", - "app_passwd_id_invalid": "Ilova paroli ID %s noto'g'ri", - "authsource_in_use": "Identifikatsiya provayderini oʻzgartirib yoki oʻchirib boʻlmaydi, chunki u hozirda bir yoki bir nechta foydalanuvchilar tomonidan ishlatilmoqda.", - "bcc_empty": "BCC manzili boʻsh boʻlolmaydi", - "bcc_exists": "%s turi uchun %s BCC xaritasi mavjud", - "bcc_must_be_email": "BCC manzili %s haqiqiy e-pochta manzili emas", - "comment_too_long": "Izoh juda uzun, maks. 160 ta belgiga ruxsat berilgan", - "cors_invalid_method": "Noto'g'ri Allow-Method belgilangan", - "cors_invalid_origin": "Noto'g'ri Allow-Origin belgilangan", - "defquota_empty": "Bitta pochta qutisi uchun standart kvota 0 boʻlmasligi kerak.", - "demo_mode_enabled": "Demo rejim yoqilgan", - "description_invalid": "%s uchun resurs tavsifi noto'g'ri", - "dkim_domain_or_sel_exists": "\"%s\" uchun DKIM kaliti mavjud va u ustidan yozilmaydi", - "dkim_domain_or_sel_invalid": "DKIM domeni yoki tanlovchi noto'g'ri: %s", - "domain_cannot_match_hostname": "Domen xost nomiga mos kelishi mumkin emas", - "domain_exists": "%s domeni allaqachon mavjud", - "domain_invalid": "Domen nomi boʻsh yoki noto'g'ri", - "domain_not_empty": "Boʻsh boʻlmagan %s domenini olib tashlab boʻlmaydi", - "domain_not_found": "%s domeni topilmadi", - "domain_quota_m_in_use": "Domen kvotasi %s MiB dan katta yoki teng boʻlishi kerak", - "extended_sender_acl_denied": "Tashqi joʻnatuvchi manzillarini oʻrnatish uchun ACL yetishmayapti", - "extra_acl_invalid": "Tashqi joʻnatuvchi manzili \"%s\" noto'g'ri", - "extra_acl_invalid_domain": "Tashqi joʻnatuvchi \"%s\" noto'g'ri domendan foydalanmoqda", - "fido2_verification_failed": "FIDO2 tekshiruvi muvaffaqiyatsiz: %s", - "file_open_error": "Faylni yozish uchun ochib boʻlmadi", - "filter_type": "Notoʻgʻri filtr turi", - "from_invalid": "Joʻnatuvchi boʻsh boʻlmasligi kerak", - "generic_server_error": "Kutilmagan server xatosi yuz berdi. Iltimos, administratoringiz bilan bogʻlaning.", - "global_filter_write_error": "Filtr faylini yozib boʻlmadi: %s", - "global_map_invalid": "Global xarita ID %s noto'g'ri", - "global_map_write_error": "Global xarita ID %s ni yozib boʻlmadi: %s", - "goto_empty": "Taxallus manzili kamida bitta haqiqiy yoʻnaltirish manzilini oʻz ichiga olishi kerak", - "goto_invalid": "Yoʻnaltirish manzili %s noto'g'ri", - "ham_learn_error": "Ham oʻrgatish xatosi: %s", - "iam_test_connection": "Ulanish muvaffaqiyatsiz", - "imagick_exception": "Xato: Tasvirni oʻqishda Imagick istisnosi", - "img_dimensions_exceeded": "Tasvir maksimal tasvir oʻlchamidan oshib ketdi", - "img_invalid": "Tasvir faylini tekshirib boʻlmadi", - "img_size_exceeded": "Tasvir maksimal fayl oʻlchamidan oshib ketdi", - "img_tmp_missing": "Tasvir faylini tekshirib boʻlmadi: Vaqtinchalik fayl topilmadi", - "invalid_bcc_map_type": "Noto'g'ri BCC xarita turi", - "invalid_destination": "Manzil formati \"%s\" noto'g'ri", - "invalid_filter_type": "Noto'g'ri filtr turi", - "invalid_host": "Noto'g'ri xost belgilangan: %s", - "invalid_mime_type": "Noto'g'ri MIME turi", - "invalid_nexthop": "Keyingi nuqta formati noto'g'ri", - "invalid_nexthop_authenticated": "Keyingi nuqta boshqa maʼlumotlar bilan mavjud, iltimos avval bu keyingi nuqta uchun mavjud maʼlumotlarni yangilang.", - "invalid_recipient_map_new": "Yangi qabul qiluvchi noto'g'ri belgilangan: %s", - "invalid_recipient_map_old": "Asl qabul qiluvchi noto'g'ri belgilangan: %s", - "invalid_reset_token": "Noto'g'ri tiklash tokeni", - "ip_list_empty": "Ruxsat etilgan IP roʻyxati boʻsh boʻlolmaydi", - "is_alias": "%s allaqachon taxallus manzili sifatida tanilgan", - "is_alias_or_mailbox": "%s allaqachon taxallus, pochta qutisi yoki taxallus domenidan kengaytirilgan taxallus manzili sifatida tanilgan.", - "is_spam_alias": "%s allaqachon vaqtinchalik taxallus manzili (spam taxallus manzili) sifatida tanilgan", - "last_key": "Oxirgi kalitni oʻchirib boʻlmaydi, iltimos uning oʻrniga TFA ni oʻchiring.", - "login_failed": "Kirish muvaffaqiyatsiz", - "mailbox_defquota_exceeds_mailbox_maxquota": "Standart kvota maksimal kvota chegarasidan oshib ketdi", - "mailbox_invalid": "Pochta qutisi nomi noto'g'ri", - "mailbox_quota_exceeded": "Kvota domen chegarasidan oshib ketdi (maks. %d MiB)", - "mailbox_quota_exceeds_domain_quota": "Maks. kvota domen kvota chegarasidan oshib ketdi", - "mailbox_quota_left_exceeded": "Yetarli joy qolmadi (qolgan joy: %d MiB)", - "mailboxes_in_use": "Maks. pochta qutilari %d dan katta yoki teng boʻlishi kerak", - "malformed_username": "Noto'g'ri shakldagi foydalanuvchi nomi", - "map_content_empty": "Xarita mazmuni boʻsh boʻlolmaydi", - "max_age_invalid": "Maks. yosh %s noto'g'ri", - "max_alias_exceeded": "Maks. taxalluslar oshib ketdi", - "max_mailbox_exceeded": "Maks. pochta qutilari oshib ketdi (%d / %d)", - "max_quota_in_use": "Pochta qutisi kvotasi %d MiB dan katta yoki teng boʻlishi kerak", - "maxquota_empty": "Bitta pochta qutisi uchun maks. kvota 0 boʻlmasligi kerak.", - "mode_invalid": "Rejim %s noto'g'ri", - "mx_invalid": "MX yozuvi %s noto'g'ri", - "mysql_error": "MySQL xatosi: %s", - "network_host_invalid": "Noto'g'ri tarmoq yoki xost: %s", - "next_hop_interferes": "%s keyingi nuqta %s bilan tortishuvga kirishadi", - "next_hop_interferes_any": "Mavjud keyingi nuqta %s bilan tortishuvga kirishadi", - "nginx_reload_failed": "Nginx qayta yuklash muvaffaqiyatsiz: %s", - "no_user_defined": "Foydalanuvchi belgilanmagan", - "object_exists": "%s obyekti allaqachon mavjud", - "object_is_not_numeric": "%s qiymati raqamli emas", - "password_complexity": "Parol siyosatga mos kelmaydi", - "password_empty": "Parol boʻsh boʻlmasligi kerak", - "password_mismatch": "Tasdiqlash paroli mos kelmadi", - "password_reset_invalid_user": "Pochta qutisi topilmadi yoki tiklash uchun e-pochta oʻrnatilmagan", - "password_reset_na": "Parolni tiklash hozirda mavjud emas. Iltimos, administratoringiz bilan bogʻlaning.", - "policy_list_from_exists": "Berilgan nomli yozuv mavjud", - "policy_list_from_invalid": "Yozuv noto'g'ri formatga ega", - "private_key_error": "Maxfiy kalit xatosi: %s", - "pushover_credentials_missing": "Pushover tokeni va/yoki kaliti yetishmayapti", - "pushover_key": "Pushover kaliti notoʻgʻri formatga ega", - "pushover_token": "Pushover tokeni notoʻgʻri formatga ega", - "quarantine_category_invalid": "Karantin turkumi quyidagilardan biri boʻlishi kerak: add_header, reject, all", - "quota_not_0_not_numeric": "Kvota raqamli va >= 0 boʻlishi kerak", - "recipient_map_entry_exists": "Qabul qiluvchi xaritasi yozuvi \"%s\" mavjud", - "recovery_email_failed": "Tiklash e-pochtasini yuborib boʻlmadi. Iltimos, administratoringiz bilan bogʻlaning.", - "redis_error": "Redis xatosi: %s", - "relayhost_invalid": "Xarita yozuvi %s noto'g'ri", - "release_send_failed": "Xabarni chiqarib boʻlmadi: %s", - "required_data_missing": "Talab qilinadigan ma'lumotlar %s yetishmayapti", - "reset_f2b_regex": "Regex filtrini oʻz vaqtida tiklab boʻlmadi, iltimos qaytadan urinib koʻring yoki bir necha soniya kuting va sahifani qayta yuklang.", - "reset_token_limit_exceeded": "Tiklash tokeni chegarasi oshib ketdi. Iltimos, keyinroq urinib koʻring.", - "resource_invalid": "Resurs nomi %s noto'g'ri", - "rl_timeframe": "Tezlik chegarasi vaqt oraligʻi noto'g'ri", - "rspamd_ui_pw_length": "Rspamd UI paroli kamida 6 ta belgi uzunlikda boʻlishi kerak", - "script_empty": "Skript boʻsh boʻlolmaydi", - "sender_acl_invalid": "Joʻnatuvchi ACL qiymati %s noto'g'ri", - "set_acl_failed": "ACL ni oʻrnatib boʻlmadi", - "settings_map_invalid": "Sozlamalar xaritasi ID %s noto'g'ri", - "sieve_error": "Sieve tahlilchisi xatosi: %s", - "spam_learn_error": "Spam oʻrgatish xatosi: %s", - "subject_empty": "Mavzu boʻsh boʻlmasligi kerak", - "target_domain_invalid": "Maqsad domen %s noto'g'ri", - "targetd_not_found": "Maqsad domen %s topilmadi", - "targetd_relay_domain": "Maqsad domen %s relay domen", - "template_exists": "%s shabloni allaqachon mavjud", - "template_id_invalid": "Shablon ID %s noto'g'ri", - "template_name_invalid": "Shablon nomi noto'g'ri", - "temp_error": "Vaqtinchalik xato", - "text_empty": "Matn boʻsh boʻlmasligi kerak", - "tfa_token_invalid": "TFA tokeni noto'g'ri", - "tls_policy_map_dest_invalid": "Siyosat manzili noto'g'ri", - "tls_policy_map_entry_exists": "TLS siyosati xaritasi yozuvi \"%s\" mavjud", - "tls_policy_map_parameter_invalid": "Siyosat parametri noto'g'ri", - "to_invalid": "Qabul qiluvchi boʻsh boʻlmasligi kerak", - "totp_verification_failed": "TOTP tekshiruvi muvaffaqiyatsiz", - "transport_dest_exists": "Transport manzili \"%s\" mavjud", - "webauthn_verification_failed": "WebAuthn tekshiruvi muvaffaqiyatsiz: %s", - "webauthn_authenticator_failed": "Tanlangan autentifikator topilmadi", - "webauthn_publickey_failed": "Tanlangan autentifikator uchun ochiq kalit saqlanmagan", - "webauthn_username_failed": "Tanlangan autentifikator boshqa hisobga tegishli", - "unknown": "Noma'lum xato yuz berdi", - "unknown_tfa_method": "Noma'lum TFA usuli", - "unlimited_quota_acl": "Cheksiz kvota ACL tomonidan taqiqlangan", - "username_invalid": "Foydalanuvchi nomi %s ishlatib boʻlmaydi", - "validity_missing": "Iltimos, amal qilish muddatini tayinlang", - "value_missing": "Iltimos, barcha qiymatlarni kiriting", - "version_invalid": "Versiya %s noto'g'ri", - "yotp_verification_failed": "Yubico OTP tekshiruvi muvaffaqiyatsiz: %s" - }, - "datatables": { - "collapse_all": "Hammasini yigʻish", - "decimal": ".", - "emptyTable": "Jadvalda ma'lumot mavjud emas", - "expand_all": "Hammasini kengaytirish", - "info": "_TOTAL_ tadan _START_ dan _END_ gacha koʻrsatilmoqda", - "infoEmpty": "0 tadan 0 dan 0 gacha koʻrsatilmoqda", - "infoFiltered": "(jami _MAX_ tadan filtrlangan)", - "infoPostFix": "", - "thousands": ",", - "lengthMenu": "_MENU_ ta yozuvni koʻrsatish", - "loadingRecords": "Yuklanmoqda...", - "processing": "Iltimos, kuting...", - "search": "Qidirish:", - "zeroRecords": "Mos keladigan yozuvlar topilmadi", - "paginate": { - "first": "Birinchi", - "last": "Oxirgi", - "next": "Keyingi", - "previous": "Oldingi" - }, - "aria": { - "sortAscending": ": ustunni oʻsish boʻyicha saralash uchun faollashtiring", - "sortDescending": ": ustunni kamayish boʻyicha saralash uchun faollashtiring" - } - }, - "debug": { - "architecture": "Arxitektura", - "chart_this_server": "Diagramma (bu server)", - "containers_info": "Konteyner ma'lumotlari", - "container_running": "Ishlamoqda", - "container_disabled": "Konteyner toʻxtatilgan yoki oʻchirilgan", - "container_stopped": "Toʻxtatilgan", - "cores": "Yadrolar", - "current_time": "Tizim vaqti", - "disk_usage": "Disk foydalanish", - "docs": "Hujjatlar", - "error_show_ip": "Ommaviy IP manzillarini aniqlab boʻlmadi", - "external_logs": "Tashqi jurnallar", - "history_all_servers": "Tarix (barcha serverlar)", - "in_memory_logs": "Xotiradagi jurnallar", - "last_modified": "Oxirgi oʻzgartirilgan", - "log_info": "

mailcow xotiradagi jurnallar Redis roʻyxatlarida toʻplanadi va har daqiqada hammomilik kamaytirish uchun LOG_LINES (%d) ga qisqartiriladi.\r\n
Xotiradagi jurnallar doimiy boʻlishi mumkin emas. Xotirada jurnal yurituvchi barcha ilovalar ham Docker daemoniga, demak standart jurnal yuritish drayveriga ham yozadi.\r\n
Xotiradagi jurnal turi konteynerlar bilan kichik muammolarni nosozliklarni bartaraf etish uchun ishlatilishi kerak.

\r\n

Tashqi jurnallar berilgan ilovaning API si orqali toʻplanadi.

\r\n

Statik jurnallar asosan faollik jurnallaridir, ular Dockerd ga yozilmaydi, lekin baribir doimiy boʻlishi kerak (API jurnallaridan tashqari).

", - "login_time": "Vaqt", - "logs": "Jurnallar", - "memory": "Xotira", - "online_users": "Onlayn foydalanuvchilar", - "restart_container": "Qayta ishga tushirish", - "service": "Xizmat", - "show_ip": "Ommaviy IP ni koʻrsatish", - "size": "Oʻlcham", - "started_at": "Boshlangan vaqt", - "started_on": "Boshlangan sana", - "static_logs": "Statik jurnallar", - "success": "Muvaffaqiyatli", - "system_containers": "Tizim va konteynerlar", - "timezone": "Vaqt mintaqasi", - "uptime": "Ishlash vaqti", - "update_available": "Yangilanish mavjud", - "no_update_available": "Tizim oxirgi versiyada", - "update_failed": "Yangilanishni tekshirib boʻlmadi", - "username": "Foydalanuvchi nomi", - "wip": "Hozir ishlab chiqilmoqda" - }, - "diagnostics": { - "cname_from_a": "Qiymat A/AAAA yozuvidan olingan. Yozuv toʻgʻri resursga ishora qilsa, bu qoʻllab-quvvatlanadi.", - "dns_records": "DNS yozuvlari", - "dns_records_24hours": "DNS ga kiritilgan oʻzgarishlar ushbu sahifada toʻgʻri aks ettirilishi uchun 24 soatgacha vaqt ketishi mumkinligini hisobga oling. Bu DNS yozuvlaringizni qanday sozlash kerakligini osongina koʻrish va barcha yozuvlaringiz DNS da toʻgʻri saqlanganligini tekshirish uchun moʻljallangan.", - "dns_records_data": "Toʻgʻri ma'lumot", - "dns_records_docs": "Iltimos, hujjatlarga ham murojaat qiling.", - "dns_records_name": "Nomi", - "dns_records_status": "Joriy holat", - "dns_records_type": "Tur", - "optional": "Bu yozuv ixtiyoriy." - }, - "edit": { - "acl": "ACL (Ruxsat)", - "active": "Faol", - "admin": "Administratorni tahrirlash", - "advanced_settings": "Kengaytirilgan sozlamalar", - "alias": "Taxallusni tahrirlash", - "allow_from_smtp": "Faqat ushbu IP larga SMTP dan foydalanishga ruxsat berish", - "allow_from_smtp_info": "Barcha joʻnatuvchilarga ruxsat berish uchun boʻsh qoldiring.
IPv4/IPv6 manzillari va tarmoqlari.", - "allowed_protocols": "Toʻgʻridan-toʻgʻri foydalanuvchi kirishi uchun ruxsat etilgan protokollar (ilova paroli protokollariga taʼsir qilmaydi)", - "app_name": "Ilova nomi", - "app_passwd": "Ilova paroli", - "app_passwd_protocols": "Ilova paroli uchun ruxsat etilgan protokollar", - "automap": "Papkalarni avtomatik xaritalashga harakat qilish (\"Sent items\", \"Sent\" => \"Sent\" va h.k.)", - "backup_mx_options": "Relay sozlamalari", - "bcc_dest_format": "BCC manzili bitta haqiqiy e-pochta manzili boʻlishi kerak.
Agar bir nechta manzilga nusxa joʻnatish kerak boʻlsa, taxallus yarating va shu yerda ishlating.", - "client_id": "Mijoz ID", - "client_secret": "Mijoz maxfiy soʻzi", - "comment_info": "Maxfiy izoh foydalanuvchiga koʻrinmaydi, ommaviy izoh esa foydalanuvchi koʻrinishida ustiga sichqoncha kelganda maslahat sifatida koʻrsatiladi", - "created_on": "Yaratilgan sana", - "custom_attributes": "Maxsus atributlar", - "delete1": "Tugatilgach manbadan oʻchirish", - "delete2": "Manbada boʻlmagan xabarlarni manzildan oʻchirish", - "delete2duplicates": "Manzildagi dublikatlarni oʻchirish", - "delete_ays": "Iltimos, oʻchirish jarayonini tasdiqlang.", - "description": "Tavsif", - "disable_login": "Kirishni taqiqlash (kiruvchi pochta hali ham qabul qilinadi)", - "domain": "Domenni tahrirlash", - "domain_admin": "Domen administratorini tahrirlash", - "domain_footer": "Domen boʻyicha pastki qism", - "domain_footer_html": "HTML pastki qism", - "domain_footer_info": "Domen boʻyicha pastki qismlar ushbu domendagi manzilga bog'liq barcha chiquvchi xatlarga qoʻshiladi.
Pastki qism uchun quyidagi oʻzgaruvchilarni ishlatish mumkin:", - "domain_footer_info_vars": { - "auth_user": "{= auth_user =} - MTA tomonidan belgilangan autentifikatsiya qilingan foydalanuvchi nomi", - "from_user": "{= from_user =} - Konvertning Kimdan qismi, masalan \"moo@mailcow.tld\" uchun \"moo\" qaytaradi", - "from_name": "{= from_name =} - Konvertning Kimdan ismi, masalan \"Mailcow <moo@mailcow.tld>\" uchun \"Mailcow\" qaytaradi", - "from_addr": "{= from_addr =} - Konvertning Kimdan manzili qismi", - "from_domain": "{= from_domain =} - Konvertning Kimdan domeni qismi", - "custom": "{= foo =} - Agar pochta qutisida \"bar\" qiymatli \"foo\" maxsus atributi boʻlsa \"bar\" qaytaradi" - }, - "domain_footer_plain": "PLAIN pastki qism", - "domain_footer_skip_replies": "Javob xatlarida pastki qismni e'tiborsiz qoldirish", - "domain_quota": "Domen kvotasi", - "domains": "Domenlar", - "dont_check_sender_acl": "%s domeni uchun joʻnatuvchi tekshiruvini oʻchirish (+ taxallus domenlari)", - "edit_alias_domain": "Taxallus domenini tahrirlash", - "encryption": "Shifrlash", - "exclude": "Obyektlarni istisno qilish (regex)", - "extended_sender_acl": "Tashqi joʻnatuvchi manzillari", - "extended_sender_acl_info": "DKIM domen kaliti mavjud boʻlsa, import qilinishi kerak.
\r\n Ushbu serverni mos SPF TXT yozuviga qoʻshishni unutmang.
\r\n Ushbu serverga tashqi manzil bilan ust-ust tushadigan domen yoki taxallus domeni qoʻshilganda, tashqi manzil olib tashlanadi.
\r\n *@domain.tld sifatida joʻnatishga ruxsat berish uchun @domain.tld dan foydalaning.", - "force_pw_update": "Keyingi kirishda parolni majburiy yangilash", - "force_pw_update_info": "Bu foydalanuvchi faqat %s ga kira oladi. Ilova parollari ishlash holatida qoladi.", - "footer_exclude": "Pastki qismdan istisno qilish", - "full_name": "Toʻliq ism", - "gal": "Global manzillar roʻyxati", - "gal_info": "GAL domenning barcha obyektlarini oʻz ichiga oladi va hech bir foydalanuvchi tomonidan tahrirlanmaydi. Oʻchirilsa, SOGodagi bandlik maʼlumotlari yoʻqoladi! Oʻzgarishlarni qoʻllash uchun SOGoni qayta ishga tushiring.", - "generate": "yaratish", - "grant_types": "Grant turlari", - "hostname": "Xost nomi", - "inactive": "Nofaol", - "internal": "Ichki", - "internal_info": "Ichki taxalluslarga faqat oʻz domeni yoki taxallus domenlaridan kirish mumkin.", - "sender_allowed": "Ushbu taxallus orqali joʻnatishga ruxsat berish", - "sender_allowed_info": "Oʻchirilgan boʻlsa, bu taxallus faqat xat qabul qilishi mumkin. Maxsus pochta qutilariga joʻnatishga ruxsat berish uchun joʻnatuvchi ACL dan foydalaning.", - "kind": "Turi", - "last_modified": "Oxirgi oʻzgartirilgan", - "lookup_mx": "Manzil — MX nomiga mos keladigan muntazam ifoda (.*\\.google\\.com — google.com bilan tugaydigan MX ga yoʻnaltirilgan barcha pochtani ushbu nuqta orqali yoʻnaltirish uchun)", - "mailbox": "Pochta qutisini tahrirlash", - "mailbox_quota_def": "Standart pochta qutisi kvotasi", - "mailbox_relayhost_info": "Faqat pochta qutisi va to'g'ridan-to'g'ri taxalluslarga qoʻllaniladi, domen relay xostini bekor qiladi.", - "mailbox_rename": "Pochta qutisini qayta nomlash", - "mailbox_rename_agree": "Men zaxira nusxasini yaratdim.", - "mailbox_rename_warning": "MUHIM! Pochta qutisini qayta nomlashdan oldin zaxira nusxasi yarating.", - "mailbox_rename_alias": "Taxallusni avtomatik yaratish", - "mailbox_rename_title": "Yangi mahalliy pochta qutisi nomi", - "max_aliases": "Maks. taxalluslar", - "max_mailboxes": "Mumkin boʻlgan maks. pochta qutilari", - "max_quota": "Bitta pochta qutisining maks. kvotasi (MiB)", - "maxage": "Masofadan soʻraladigan xabarlarning maksimal yoshi (kunlarda)
(0 = yoshni e'tiborsiz qoldirish)", - "maxbytespersecond": "Maks. soniyaga bayt
(0 = cheksiz)", - "mbox_rl_info": "Bu tezlik chegarasi SASL kirish nomiga qoʻllaniladi, u kirgan foydalanuvchi tomonidan ishlatiladigan har qanday \"from\" manziliga mos keladi. Pochta qutisi tezlik chegarasi domen boʻyicha tezlik chegarasini bekor qiladi.", - "mins_interval": "Oraliq (daqiqa)", - "mta_sts": "MTA-STS", - "mta_sts_info": "MTA-STS — pochta serverlari oʻrtasida xat yetkazib berishni haqiqiy sertifikatli TLS dan foydalanishga majburlovchi standart.
U DNSSEC mavjud emasligi yoki qoʻllab-quvvatlanmasligi sababli DANE imkoni boʻlmaganda ishlatiladi.
Eslatma: Agar qabul qiluvchi domen DNSSEC bilan DANE ni qoʻllab-quvvatlasa, DANE har doim afzal koʻriladi — MTA-STS faqat zaxira sifatida ishlaydi.", - "mta_sts_version": "Versiya", - "mta_sts_version_info": "MTA-STS standartining versiyasini belgilaydi — hozirda faqat STSv1 haqiqiy.", - "mta_sts_mode": "Rejim", - "mta_sts_mode_info": "Tanlash uchun uchta rejim mavjud:
  • testing — siyosat faqat kuzatiladi, buzilishlar taʼsir koʻrsatmaydi.
  • enforce — siyosat qatʼiy qoʻllaniladi, haqiqiy TLS siz ulanishlar rad etiladi.
  • none — siyosat eʼlon qilinadi, ammo qoʻllanilmaydi.
", - "mta_sts_max_age": "Maks. yosh", - "mta_sts_max_age_info": "Qabul qiluvchi pochta serverlari ushbu siyosatni qayta olishdan oldin keshlashi mumkin boʻlgan vaqt (soniyalarda).", - "mta_sts_mx": "MX server", - "mta_sts_mx_info": "Faqat aniq sanab oʻtilgan pochta server xost nomlariga joʻnatishga ruxsat beradi; joʻnatuvchi MTA DNS MX xost nomi siyosat roʻyxatiga mos kelishini tekshiradi va faqat haqiqiy TLS sertifikati bilan yetkazib berishga ruxsat beradi (MITM ga qarshi himoya qiladi).", - "mta_sts_mx_notice": "Bir nechta MX serverlar belgilanishi mumkin (vergul bilan ajratilgan).", - "multiple_bookings": "Bir nechta bandlovlar", - "none_inherit": "Hech biri / Meros qilib olish", - "nexthop": "Keyingi nuqta", - "password": "Parol", - "password_recovery_email": "Parolni tiklash e-pochtasi", - "password_repeat": "Tasdiqlash paroli (takrorlang)", - "previous": "Oldingi sahifa", - "private_comment": "Maxfiy izoh", - "public_comment": "Ommaviy izoh", - "pushover": "Pushover", - "pushover_evaluate_x_prio": "Yuqori muhimlikdagi xatni eskalatsiya qilish [X-Priority: 1]", - "pushover_info": "Push bildirishnoma sozlamalari %s ga taxalluslar bilan birga (umumiy, umumiy boʻlmagan, teglangan) yetkazib beriladigan barcha toza (spam boʻlmagan) xatlarga qoʻllaniladi.", - "pushover_only_x_prio": "Faqat yuqori muhimlikdagi xatlarni koʻrib chiqish [X-Priority: 1]", - "pushover_sender_array": "Faqat quyidagi joʻnatuvchi e-pochta manzillarini koʻrib chiqish (vergul bilan ajratilgan)", - "pushover_sender_regex": "Quyidagi joʻnatuvchi regexini koʻrib chiqish", - "pushover_text": "Bildirishnoma matni", - "pushover_title": "Bildirishnoma sarlavhasi", - "pushover_sound": "Tovush", - "pushover_vars": "Joʻnatuvchi filtri belgilanmagan boʻlsa, barcha xatlar koʻrib chiqiladi.
Regex filtrlari va aniq joʻnatuvchi tekshiruvlari alohida belgilanishi mumkin va ketma-ket koʻrib chiqiladi. Ular bir-biriga bogʻliq emas.
Matn va sarlavha uchun ishlatiladigan oʻzgaruvchilar (ma'lumotlarni himoya qilish siyosatiga e'tibor bering)", - "pushover_verify": "Maʼlumotlarni tekshirish", - "quota_mb": "Kvota (MiB)", - "quota_warning_bcc": "Kvota ogohlantirishi BCC", - "quota_warning_bcc_info": "Ogohlantirishlar alohida nusxa sifatida quyidagi qabul qiluvchilarga yuboriladi. Mavzu mos foydalanuvchi nomi bilan qavs ichida qoʻshib qoʻyiladi, masalan: Kvota ogohlantirishi (user@example.com).", - "ratelimit": "Tezlik chegarasi", - "redirect_uri": "Yoʻnaltirish/Qaytarish URL", - "relay_all": "Barcha qabul qiluvchilarni relay qilish", - "relay_all_info": "↪ Agar barcha qabul qiluvchilarni relay qilmaslikni tanlasangiz, relay qilinishi kerak boʻlgan har bir qabul qiluvchi uchun (\"koʻr\") pochta qutisi qoʻshishingiz kerak boʻladi.", - "relay_domain": "Ushbu domenni relay qilish", - "relay_transport_info": "
Maʼlumot
Bu domen uchun maxsus manzilga transport xaritalarini belgilashingiz mumkin. Agar oʻrnatilmagan boʻlsa, MX qidiruvi amalga oshiriladi.", - "relay_unknown_only": "Faqat mavjud boʻlmagan pochta qutilarini relay qilish. Mavjud pochta qutilari mahalliy yetkazib beriladi.", - "relayhost": "Joʻnatuvchiga bogʻliq transportlar", - "remove": "Olib tashlash", - "resource": "Resurs", - "save": "Oʻzgarishlarni saqlash", - "scope": "Qamrov", - "sender_acl": "Quyidagi sifatida joʻnatishga ruxsat berish", - "sender_acl_disabled": "Joʻnatuvchi tekshiruvi oʻchirilgan", - "sender_acl_info": "Agar A pochta qutisi foydalanuvchisi B pochta qutisi foydalanuvchisi sifatida joʻnatishga ruxsat etilgan boʻlsa, joʻnatuvchi manzili SOGo da tanlanadigan \"from\" maydoni sifatida avtomatik koʻrsatilmaydi.
\r\n B pochta qutisi foydalanuvchisi A pochta qutisi foydalanuvchisi oʻz manzilini joʻnatuvchi sifatida tanlay olishi uchun SOGo da delegatsiya yaratishi kerak. SOGo da pochta qutisini delegatsiya qilish uchun pochta koʻrinishida yuqori chap qismdagi pochta qutisi nomingiz oʻng tomonidagi menyudan (uch nuqta) foydalaning. Bu xatti-harakat taxallus manzillariga qoʻllanmaydi.", - "sieve_desc": "Qisqa tavsif", - "sieve_type": "Filtr turi", - "skipcrossduplicates": "Papkalararo dublikat xabarlarni oʻtkazib yuborish (birinchi kelgan, birinchi xizmatlanadi)", - "sogo_access": "SOGo ga toʻgʻridan-toʻgʻri yoʻnaltirish", - "sogo_access_info": "Tizimga kirgandan keyin foydalanuvchi avtomatik ravishda SOGo ga yoʻnaltiriladi.", - "sogo_visible": "Taxallus SOGo da koʻrinadi", - "sogo_visible_info": "Bu variant faqat SOGo da koʻrsatilishi mumkin boʻlgan obyektlarga taʼsir qiladi (kamida bitta mahalliy pochta qutisiga ishora qiluvchi umumiy yoki umumiy boʻlmagan taxallus manzillari). Yashirilgan boʻlsa, taxallus SOGo da tanlanadigan joʻnatuvchi sifatida koʻrinmaydi.", - "spam_alias": "Vaqt cheklangan taxallus manzillarini yaratish yoki oʻzgartirish", - "spam_filter": "Spam filtri", - "spam_policy": "Elementlarni ruxsat etilgan/qora roʻyxatga qoʻshish yoki olib tashlash", - "spam_score": "Maxsus spam bahosini oʻrnatish", - "subfolder2": "Manzilning subpapkasiga sinxronizatsiya qilish
(boʻsh = subpapkadan foydalanmang)", - "syncjob": "Sinxronizatsiya vazifasini tahrirlash", - "target_address": "Yoʻnaltirish manzil(lar)i (vergul bilan ajratilgan)", - "target_domain": "Maqsad domen", - "timeout1": "Masofaviy xostga ulanish vaqtining tugashi", - "timeout2": "Mahalliy xostga ulanish vaqtining tugashi", - "title": "Obyektni tahrirlash", - "unchanged_if_empty": "Oʻzgartirilmagan boʻlsa, boʻsh qoldiring", - "username": "Foydalanuvchi nomi", - "validate_save": "Tekshirish va saqlash" - }, - "fido2": { - "confirm": "Tasdiqlash", - "fido2_auth": "FIDO2 bilan kirish", - "fido2_success": "Qurilma muvaffaqiyatli roʻyxatdan oʻtkazildi", - "fido2_validation_failed": "Tekshirish muvaffaqiyatsiz", - "fn": "Doʻstona nom", - "known_ids": "Maʼlum ID lar", - "none": "Oʻchirilgan", - "register_status": "Roʻyxatga olish holati", - "rename": "Qayta nomlash", - "set_fido2": "FIDO2 qurilmasini roʻyxatdan oʻtkazish", - "set_fido2_touchid": "Apple M1 da Touch ID ni roʻyxatdan oʻtkazish", - "set_fn": "Doʻstona nomni oʻrnatish", - "start_fido2_validation": "FIDO2 tekshiruvini boshlash" - }, - "footer": { - "cancel": "Bekor qilish", - "confirm_delete": "Oʻchirishni tasdiqlash", - "delete_now": "Hozir oʻchirish", - "delete_these_items": "Iltimos, quyidagi obyekt ID siga oʻzgarishlaringizni tasdiqlang", - "hibp_check": "haveibeenpwned.com ga qarshi tekshirish", - "hibp_nok": "Mos keldi! Bu xavfli parol boʻlishi mumkin!", - "hibp_ok": "Mos kelmadi.", - "loading": "Iltimos, kuting...", - "nothing_selected": "Hech narsa tanlanmadi", - "restart_container": "Konteynerni qayta ishga tushirish", - "restart_container_info": "Muhim: Yumshoq qayta ishga tushirish biroz vaqt olishi mumkin, iltimos uning tugashini kuting.", - "restart_now": "Hozir qayta ishga tushirish", - "restarting_container": "Konteyner qayta ishga tushirilmoqda, bu biroz vaqt olishi mumkin" - }, - "header": { - "administration": "Konfiguratsiya va tafsilotlar", - "apps": "Ilovalar", - "debug": "Maʼlumot", - "email": "E-pochta", - "mailcow_system": "Tizim", - "mailcow_config": "Konfiguratsiya", - "quarantine": "Karantin", - "restart_netfilter": "Netfilterni qayta ishga tushirish", - "restart_sogo": "SOGoni qayta ishga tushirish", - "user_settings": "Foydalanuvchi sozlamalari" - }, - "info": { - "awaiting_tfa_confirmation": "TFA tasdiqlanishi kutilmoqda", - "no_action": "Amal qoʻllanib boʻlmaydi", - "session_expires": "Sessiyangiz taxminan 15 soniyadan keyin tugaydi" - }, - "login": { - "back_to_mailcow": "mailcow ga qaytish", - "delayed": "Kirish %s soniyaga kechiktirildi.", - "fido2_webauthn": "FIDO2/WebAuthn kirish", - "forgot_password": "> Parolni unutdingizmi?", - "invalid_pass_reset_token": "Parolni tiklash tokeni noto'g'ri yoki muddati tugagan.
Iltimos, yangi parolni tiklash havolasini soʻrang.", - "login": "Kirish", - "login_linkstext": "Toʻgʻri kirish emasmi?", - "login_usertext": "Foydalanuvchi sifatida kirish", - "login_domainadmintext": "Domen administratori sifatida kirish", - "login_admintext": "Administrator sifatida kirish", - "login_user": "Foydalanuvchi kirishi", - "login_dadmin": "Domen-administratori kirishi", - "login_admin": "Administrator kirishi", - "mobileconfig_info": "Soʻralgan Apple ulanish profilini yuklab olish uchun pochta qutisi foydalanuvchisi sifatida kiring.", - "new_password": "Yangi parol", - "new_password_confirm": "Yangi parolni tasdiqlang", - "other_logins": "yoki quyidagi orqali kiring", - "password": "Parol", - "reset_password": "Parolni tiklash", - "request_reset_password": "Parol oʻzgartirishni soʻrash", - "username": "Foydalanuvchi nomi", - "email": "E-pochta manzili" - }, - "mailbox": { - "action": "Amal", - "activate": "Faollashtirish", - "active": "Faol", - "add": "Qoʻshish", - "add_alias": "Taxallus qoʻshish", - "add_alias_expand": "Taxallusni taxallus domenlari boʻylab kengaytirish", - "add_bcc_entry": "BCC xaritasi qoʻshish", - "add_domain": "Domen qoʻshish", - "add_domain_alias": "Domen taxallusini qoʻshish", - "add_domain_record_first": "Iltimos, avval domen qoʻshing", - "add_filter": "Filtr qoʻshish", - "add_mailbox": "Pochta qutisi qoʻshish", - "add_recipient_map_entry": "Qabul qiluvchi xaritasini qoʻshish", - "add_resource": "Resurs qoʻshish", - "add_template": "Shablon qoʻshish", - "add_tls_policy_map": "TLS siyosati xaritasini qoʻshish", - "address_rewriting": "Manzilni qayta yozish", - "alias": "Taxallus", - "alias_domain_alias_hint": "Taxalluslar domen taxalluslariga avtomatik qoʻllanilmaydi. my-alias@domain taxallus manzili my-alias@alias-domain manzilini qoplamaydi (bu yerda \"alias-domain\" — \"domain\" uchun tasavvur qilingan taxallus domeni).
Tashqi pochta qutisiga xatni yoʻnaltirish uchun sieve filtridan foydalaning (\"Filtrlar\" yorligʻiga qarang yoki SOGo -> Forwarder dan foydalaning). Yoʻq taxalluslarni avtomatik qoʻshish uchun \"Taxallusni taxallus domenlari boʻylab kengaytirish\" dan foydalaning.", - "alias_domain_backupmx": "Relay domeni uchun taxallus domeni nofaol", - "aliases": "Taxalluslar", - "all_domains": "Barcha domenlar", - "allow_from_smtp": "Faqat ushbu IP larga SMTP dan foydalanishga ruxsat berish", - "allow_from_smtp_info": "Barcha joʻnatuvchilarga ruxsat berish uchun boʻsh qoldiring.
IPv4/IPv6 manzillari va tarmoqlari.", - "allowed_protocols": "Ruxsat etilgan protokollar", - "backup_mx": "Relay domeni", - "bcc": "BCC", - "bcc_destination": "BCC manzili", - "bcc_destinations": "BCC manzili", - "bcc_info": "BCC xaritalari barcha xabarlarning nusxalarini boshqa manzilga jimgina yoʻnaltirish uchun ishlatiladi. Qabul qiluvchi xaritasi turi yozuvi mahalliy manzil xatning qabul qiluvchisi sifatida ishlaganda ishlatiladi. Joʻnatuvchi xaritalari ham xuddi shu tamoyilga muvofiq ishlaydi.
\r\n Mahalliy manzilga yetkazib berish muvaffaqiyatsiz boʻlsa, xabar berilmaydi.", - "bcc_local_dest": "Mahalliy manzil", - "bcc_map": "BCC xaritasi", - "bcc_map_type": "BCC turi", - "bcc_maps": "BCC xaritalari", - "bcc_rcpt_map": "Qabul qiluvchi xaritasi", - "bcc_sender_map": "Joʻnatuvchi xaritasi", - "bcc_to_rcpt": "Qabul qiluvchi xaritasi turiga oʻtish", - "bcc_to_sender": "Joʻnatuvchi xaritasi turiga oʻtish", - "bcc_type": "BCC turi", - "booking_null": "Doimo boʻsh sifatida koʻrsatish", - "booking_0_short": "Doimo boʻsh", - "booking_custom": "Maxsus bandlovlar soni bilan qatʼiy cheklash", - "booking_custom_short": "Qatʼiy chegara", - "booking_ltnull": "Cheksiz, lekin bandlangan boʻlsa band sifatida koʻrsatish", - "booking_lt0_short": "Yumshoq chegara", - "catch_all": "Hammasini-qabul qilish", - "created_on": "Yaratilgan sana", - "daily": "Kunlik", - "deactivate": "Oʻchirish", - "description": "Tavsif", - "disable_login": "Kirishni taqiqlash (kiruvchi pochta hali ham qabul qilinadi)", - "disable_x": "Oʻchirish", - "dkim_domains_selector": "Tanlovchi", - "dkim_key_length": "DKIM kalit uzunligi (bit)", - "domain": "Domen", - "domain_admins": "Domen administratorlari", - "domain_aliases": "Domen taxalluslari", - "domain_templates": "Domen shablonlari", - "domain_quota": "Kvota", - "domain_quota_total": "Umumiy domen kvotasi", - "domains": "Domenlar", - "edit": "Tahrirlash", - "empty": "Natijalar yoʻq", - "enable_x": "Yoqish", - "excludes": "Istisnolar", - "filter_table": "Filtr jadvali", - "filters": "Filtrlar", - "fname": "Toʻliq ism", - "force_pw_update": "Keyingi kirishda parolni majburiy yangilash", - "gal": "Global manzillar roʻyxati", - "goto_ham": "ham sifatida oʻrgatish", - "goto_spam": "spam sifatida oʻrgatish", - "hourly": "Soatlik", - "iam": "Identifikatsiya provayderi", - "in_use": "Foydalanilmoqda (%)", - "inactive": "Nofaol", - "insert_preset": "Misol presetini kiritish \"%s\"", - "internal": "Ichki", - "kind": "Turi", - "last_mail_login": "Oxirgi pochta kirishi", - "last_modified": "Oxirgi oʻzgartirilgan", - "last_pw_change": "Oxirgi parol oʻzgarishi", - "last_run": "Oxirgi ishga tushirilgan", - "last_run_reset": "Keyingisini rejalashtirish", - "mailbox": "Pochta qutisi", - "mailbox_defaults": "Standart sozlamalar", - "mailbox_defaults_info": "Yangi pochta qutilari uchun standart sozlamalarni belgilang.", - "mailbox_defquota": "Standart pochta qutisi oʻlchami", - "mailbox_templates": "Pochta qutisi shablonlari", - "mailbox_quota": "Pochta qutisining maks. oʻlchami", - "mailboxes": "Pochta qutilari", - "max_aliases": "Maks. taxalluslar", - "max_mailboxes": "Mumkin boʻlgan maks. pochta qutilari", - "max_quota": "Bitta pochta qutisining maks. kvotasi", - "mins_interval": "Oraliq (daqiqa)", - "msg_num": "Xabar #", - "multiple_bookings": "Bir nechta bandlovlar", - "never": "Hech qachon", - "no": "✕", - "no_record": "%s obyekti uchun yozuv yoʻq", - "no_record_single": "Yozuv yoʻq", - "open_logs": "Jurnallarni ochish", - "owner": "Egasi", - "private_comment": "Maxfiy izoh", - "public_comment": "Ommaviy izoh", - "q_add_header": "Junk papkasiga koʻchirilganda", - "q_all": " Junk papkasiga koʻchirilganda va rad etilganda", - "q_reject": "rad etilganda", - "quarantine_category": "Karantin bildirishnoma turkumi", - "quarantine_notification": "Karantin bildirishnomalari", - "quick_actions": "Amallar", - "recipient": "Qabul qiluvchi", - "recipient_map": "Qabul qiluvchi xaritasi", - "recipient_map_info": "Qabul qiluvchi xaritalari xabar yetkazib berilishidan oldin manzilni almashtirish uchun ishlatiladi.", - "recipient_map_new": "Yangi qabul qiluvchi", - "recipient_map_new_info": "Qabul qiluvchi xaritasi manzili haqiqiy e-pochta manzili yoki domen nomi boʻlishi kerak.", - "recipient_map_old": "Asl qabul qiluvchi", - "recipient_map_old_info": "Qabul qiluvchi xaritasining asl manzili haqiqiy e-pochta manzili yoki domen nomi boʻlishi kerak.", - "recipient_maps": "Qabul qiluvchi xaritalari", - "relay_all": "Barcha qabul qiluvchilarni relay qilish", - "relay_unknown": "Nomaʼlum pochta qutilarini relay qilish", - "remove": "Olib tashlash", - "resources": "Resurslar", - "running": "Ishlamoqda", - "sender": "Joʻnatuvchi", - "set_postfilter": "Postfiltr sifatida belgilash", - "set_prefilter": "Prefiltr sifatida belgilash", - "sieve_info": "Bitta foydalanuvchi uchun bir nechta filtrlarni saqlash mumkin, lekin bir vaqtning oʻzida faqat bitta prefiltr va bitta postfiltr faol boʻlishi mumkin.
\r\nHar bir filtr tasvirlangan tartibda qayta ishlanadi. Muvaffaqiyatsiz skript ham, chiqarilgan \"keep;\" ham keyingi skriptlarning qayta ishlanishini toʻxtatmaydi. Global sieve skriptlariga oʻzgartirishlar Dovecot ni qayta ishga tushirishni keltirib chiqaradi.

Global sieve prefilter • Prefilter • Foydalanuvchi skriptlari • Postfilter • Global sieve postfilter", - "sieve_preset_1": "Xavfli boʻlishi mumkin boʻlgan fayl turlari bilan xatlarni rad etish", - "sieve_preset_2": "Aniq joʻnatuvchining xatini har doim oʻqilgan deb belgilash", - "sieve_preset_3": "Jimgina rad etish, keyingi sieve qayta ishlashini toʻxtatish", - "sieve_preset_4": "INBOX ga joylash, sieve filtrlari tomonidan keyingi qayta ishlashni oʻtkazib yuborish", - "sieve_preset_5": "Avto-javob (taʼtil)", - "sieve_preset_6": "Javob bilan xatni rad etish", - "sieve_preset_7": "Yoʻnaltirish va saqlash/tashlash", - "sieve_preset_8": "Aniq joʻnatuvchining xatini yoʻnaltirish, oʻqilgan deb belgilash va subpapkaga saralash", - "sieve_preset_header": "Iltimos, quyidagi misol presetlariga qarang. Batafsil maʼlumot uchun Wikipediaga qarang.", - "sogo_visible": "Taxallus SOGo da koʻrinadi", - "sogo_visible_n": "Taxallusni SOGo da yashirish", - "sogo_visible_y": "Taxallusni SOGo da koʻrsatish", - "spam_aliases": "Vaqt. taxallus", - "stats": "Statistika", - "status": "Holat", - "sync_jobs": "Sinxronizatsiya vazifalari", - "syncjob_check_log": "Jurnalni tekshirish", - "syncjob_last_run_result": "Oxirgi ishga tushirilgan natija", - "syncjob_EX_OK": "Muvaffaqiyatli", - "syncjob_EXIT_CONNECTION_FAILURE": "Ulanish muammosi", - "syncjob_EXIT_TLS_FAILURE": "Shifrlangan ulanish bilan muammo", - "syncjob_EXIT_AUTHENTICATION_FAILURE": "Autentifikatsiya muammosi", - "syncjob_EXIT_OVERQUOTA": "Maqsad pochta qutisi kvotadan oshib ketdi", - "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Masofaviy serverga ulanib boʻlmadi", - "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Notoʻgʻri foydalanuvchi nomi yoki parol", - "table_size": "Jadval oʻlchami", - "table_size_show_n": "%s ta element koʻrsatish", - "target_address": "Yoʻnaltirish manzili", - "target_domain": "Maqsad domen", - "templates": "Shablonlar", - "template": "Shablon", - "tls_enforce_in": "Kiruvchi TLS ni majburlash", - "tls_enforce_out": "Chiquvchi TLS ni majburlash", - "tls_map_dest": "Manzil", - "tls_map_dest_info": "Misollar: example.org, .example.org, [mail.example.org]:25", - "tls_map_parameters": "Parametrlar", - "tls_map_parameters_info": "Boʻsh yoki parametrlar, masalan: protocols=!SSLv2 ciphers=medium exclude=3DES", - "tls_map_policy": "Siyosat", - "tls_policy_maps": "TLS siyosati xaritalari", - "tls_policy_maps_enforced_tls": "Bu siyosatlar chiquvchi TLS ulanishlarini majburlovchi pochta qutisi foydalanuvchilari uchun ham xatti-harakatni bekor qiladi. Agar quyida siyosat boʻlmasa, bu foydalanuvchilar smtp_tls_mandatory_protocols va smtp_tls_mandatory_ciphers sifatida belgilangan standart qiymatlarni qoʻllaydi.", - "tls_policy_maps_info": "Bu siyosat xaritasi foydalanuvchining TLS siyosati sozlamalaridan mustaqil ravishda chiquvchi TLS transport qoidalarini bekor qiladi.
\r\n Batafsil maʼlumot uchun \"smtp_tls_policy_maps\" hujjatlarini tekshiring.", - "tls_policy_maps_long": "Chiquvchi TLS siyosati xaritasi bekor qilishlari", - "toggle_all": "Hammasini almashtirish", - "username": "Foydalanuvchi nomi", - "waiting": "Kutilmoqda", - "weekly": "Haftalik", - "yes": "✓" - }, - "oauth2": { - "access_denied": "OAuth2 orqali kirishga ruxsat berish uchun pochta qutisi egasi sifatida kiring.", - "authorize_app": "Ilovaga ruxsat berish", - "deny": "Rad etish", - "permit": "Ilovaga ruxsat berish", - "profile": "Profil", - "profile_desc": "Shaxsiy maʼlumotlarni koʻrish: foydalanuvchi nomi, toʻliq ism, yaratilgan, oʻzgartirilgan, faol", - "scope_ask_permission": "Ilova quyidagi ruxsatlarni soʻradi" - }, - "quarantine": { - "action": "Amal", - "atts": "Ilovalar", - "check_hash": "VT da fayl hashini qidirish", - "confirm": "Tasdiqlash", - "confirm_delete": "Ushbu elementni oʻchirishni tasdiqlang.", - "danger": "Xavf", - "deliver_inbox": "Inbox ga yetkazib berish", - "disabled_by_config": "Joriy tizim konfiguratsiyasi karantin funksiyasini oʻchirib qoʻyadi. Iltimos, karantin elementlari uchun \"pochta qutisi boʻyicha saqlash\" va \"maksimal oʻlcham\"ni oʻrnating.", - "download_eml": "Yuklab olish (.eml)", - "empty": "Natijalar yoʻq", - "high_danger": "Yuqori", - "info": "Maʼlumot", - "junk_folder": "Junk papkasi", - "learn_spam_delete": "Spam sifatida oʻrgatish va oʻchirish", - "low_danger": "Past", - "medium_danger": "Oʻrtacha", - "neutral_danger": "Neytral", - "notified": "Xabar berildi", - "qhandler_success": "Soʻrov tizimga muvaffaqiyatli yuborildi. Endi oynani yopishingiz mumkin.", - "qid": "Rspamd QID", - "qinfo": "Karantin tizimi rad etilgan xatni (joʻnatuvchiga xat yetkazib berilgandek taassurot bermay) hamda pochta qutisining Junk papkasiga nusxa sifatida yetkazib berilgan xatni maʼlumotlar bazasiga saqlaydi.\r\n
\"Spam sifatida oʻrgatish va oʻchirish\" xabarni Bayesian teoremasi orqali spam sifatida oʻrgatadi va kelajakda oʻxshash xabarlarni rad etish uchun fuzzy hashlarni hisoblaydi.\r\n
Bir nechta xabarlarni oʻrgatish — tizimingizga qarab — vaqt talab qilishi mumkinligini unutmang.
Qora roʻyxatdagi elementlar karantindan istisno qilinadi.", - "qitem": "Karantin elementi", - "quarantine": "Karantin", - "quick_actions": "Amallar", - "quick_delete_link": "Tezkor oʻchirish havolasini ochish", - "quick_info_link": "Maʼlumot havolasini ochish", - "quick_release_link": "Tezkor chiqarish havolasini ochish", - "rcpt": "Qabul qiluvchi", - "received": "Qabul qilingan", - "recipients": "Qabul qiluvchilar", - "refresh": "Yangilash", - "rejected": "Rad etilgan", - "release": "Chiqarish", - "release_body": "Xabaringizni ushbu xabarga eml fayl sifatida ilova qildik.", - "release_subject": "Potensial xavfli karantin elementi %s", - "remove": "Olib tashlash", - "rewrite_subject": "Mavzuni qayta yozish", - "rspamd_result": "Rspamd natijasi", - "sender": "Joʻnatuvchi (SMTP)", - "sender_header": "Joʻnatuvchi (\"From\" sarlavhasi)", - "settings_info": "Karantinga olinadigan maksimal elementlar soni: %s
Maksimal e-pochta oʻlchami: %s MiB", - "show_item": "Elementni koʻrsatish", - "spam": "Spam", - "spam_score": "Baho", - "subj": "Mavzu", - "table_size": "Jadval oʻlchami", - "table_size_show_n": "%s ta element koʻrsatish", - "text_from_html_content": "Mazmun (oʻzgartirilgan html)", - "text_plain_content": "Mazmun (text/plain)", - "toggle_all": "Hammasini almashtirish", - "type": "Tur" - }, - "queue": { - "delete": "Hammasini oʻchirish", - "flush": "Navbatni tozalash", - "info": "Pochta navbati yetkazib berilishini kutayotgan barcha xatlarni oʻz ichiga oladi. Agar e-pochta uzoq vaqt davomida pochta navbatida tursa, u tizim tomonidan avtomatik ravishda oʻchiriladi.
Tegishli xatning xato xabari xat nima uchun yetkazib berilmaganligi haqida maʼlumot beradi.", - "legend": "Pochta navbati amallari funksiyalari:", - "ays": "Iltimos, joriy navbatdagi barcha elementlarni oʻchirishni tasdiqlang.", - "deliver_mail": "Yetkazib berish", - "deliver_mail_legend": "Tanlangan xatlarni qayta yetkazib berishga harakat qiladi.", - "hold_mail": "Ushlab turish", - "hold_mail_legend": "Tanlangan xatlarni ushlab turadi. (Keyingi yetkazib berish urinishlarining oldini oladi)", - "queue_manager": "Navbat menejeri", - "show_message": "Xabarni koʻrsatish", - "unban": "navbatdan blokdan chiqarish", - "unhold_mail": "Ushlab turishni bekor qilish", - "unhold_mail_legend": "Tanlangan xatlarni yetkazib berish uchun chiqaradi. (Avval ushlab turish talab qilinadi)" - }, - "ratelimit": { - "disabled": "Oʻchirilgan", - "second": "xabarlar / soniya", - "minute": "xabarlar / daqiqa", - "hour": "xabarlar / soat", - "day": "xabarlar / kun" - }, - "start": { - "help": "Yordam panelini koʻrsatish/yashirish", - "imap_smtp_server_auth_info": "Iltimos, toʻliq e-pochta manzilingiz va PLAIN autentifikatsiya mexanizmidan foydalaning.
\r\nKirish maʼlumotlaringiz server tomonidagi majburiy shifrlash orqali shifrlanadi." - }, - "success": { - "acl_saved": "%s obyekti uchun ACL saqlandi", - "admin_added": "Administrator %s qoʻshildi", - "admin_api_modified": "API ga oʻzgarishlar saqlandi", - "admin_modified": "Administrator oʻzgarishlari saqlandi", - "admin_removed": "Administrator %s olib tashlandi", - "alias_added": "Taxallus manzili %s (%d) qoʻshildi", - "alias_domain_removed": "Taxallus domeni %s olib tashlandi", - "alias_modified": "Taxallus manzili %s ga oʻzgarishlar saqlandi", - "alias_removed": "Taxallus %s olib tashlandi", - "aliasd_added": "Taxallus domeni %s qoʻshildi", - "aliasd_modified": "Taxallus domeni %s ga oʻzgarishlar saqlandi", - "app_links": "Ilova havolalariga oʻzgarishlar saqlandi", - "app_passwd_added": "Yangi ilova paroli qoʻshildi", - "app_passwd_removed": "Ilova paroli ID %s olib tashlandi", - "bcc_deleted": "BCC xaritasi yozuvlari oʻchirildi: %s", - "bcc_edited": "BCC xaritasi yozuvi %s tahrirlandi", - "bcc_saved": "BCC xaritasi yozuvi saqlandi", - "cors_headers_edited": "CORS sozlamalari saqlandi", - "custom_login_modified": "Kirishni sozlash muvaffaqiyatli saqlandi", - "db_init_complete": "Maʼlumotlar bazasini ishga tushirish tugadi", - "delete_filter": "Filtr ID %s oʻchirildi", - "delete_filters": "Filtrlar oʻchirildi: %s", - "deleted_syncjob": "Sinxronizatsiya vazifasi ID %s oʻchirildi", - "deleted_syncjobs": "Sinxronizatsiya vazifalari oʻchirildi: %s", - "dkim_added": "DKIM kaliti %s saqlandi", - "domain_add_dkim_available": "DKIM kaliti allaqachon mavjud edi", - "dkim_duplicated": "%s domeni uchun DKIM kaliti %s ga nusxalandi", - "dkim_removed": "DKIM kaliti %s olib tashlandi", - "domain_added": "Domen %s qoʻshildi", - "domain_admin_added": "Domen administratori %s qoʻshildi", - "domain_admin_modified": "Domen administratori %s ga oʻzgarishlar saqlandi", - "domain_admin_removed": "Domen administratori %s olib tashlandi", - "domain_footer_modified": "Domen pastki qismi %s ga oʻzgarishlar saqlandi", - "domain_modified": "Domen %s ga oʻzgarishlar saqlandi", - "domain_removed": "Domen %s olib tashlandi", - "dovecot_restart_success": "Dovecot muvaffaqiyatli qayta ishga tushirildi", - "eas_reset": "%s foydalanuvchisi uchun ActiveSync qurilmalari tiklandi", - "f2b_banlist_refreshed": "Banlist ID muvaffaqiyatli yangilandi.", - "f2b_modified": "Fail2ban parametrlariga oʻzgarishlar saqlandi", - "forwarding_host_added": "Yoʻnaltirish xosti %s qoʻshildi", - "forwarding_host_removed": "Yoʻnaltirish xosti %s olib tashlandi", - "global_filter_written": "Filtr faylga muvaffaqiyatli yozildi", - "hash_deleted": "Hash oʻchirildi", - "iam_test_connection": "Ulanish muvaffaqiyatli", - "ip_check_opt_in_modified": "IP tekshiruvi muvaffaqiyatli saqlandi", - "item_deleted": "Element %s muvaffaqiyatli oʻchirildi", - "item_released": "Element %s chiqarildi", - "items_deleted": "Element %s muvaffaqiyatli oʻchirildi", - "items_released": "Tanlangan elementlar chiqarildi", - "learned_ham": "ID %s ham sifatida muvaffaqiyatli oʻrgatildi", - "license_modified": "Litsenziyaga oʻzgarishlar saqlandi", - "logged_in_as": "%s sifatida tizimga kirildi", - "mailbox_added": "Pochta qutisi %s qoʻshildi", - "mailbox_modified": "Pochta qutisi %s ga oʻzgarishlar saqlandi", - "mailbox_removed": "Pochta qutisi %s olib tashlandi", - "mailbox_renamed": "Pochta qutisi %s dan %s ga qayta nomlandi", - "nginx_reloaded": "Nginx qayta yuklandi", - "object_modified": "Obyekt %s ga oʻzgarishlar saqlandi", - "password_policy_saved": "Parol siyosati muvaffaqiyatli saqlandi", - "password_changed_success": "Parol muvaffaqiyatli oʻzgartirildi", - "pushover_settings_edited": "Pushover sozlamalari muvaffaqiyatli oʻrnatildi, iltimos maʼlumotlarni tekshiring.", - "qlearn_spam": "Xabar ID %s spam sifatida oʻrgatildi va oʻchirildi", - "queue_command_success": "Navbat buyrugʻi muvaffaqiyatli yakunlandi", - "recipient_map_entry_deleted": "Qabul qiluvchi xaritasi ID %s oʻchirildi", - "recipient_map_entry_saved": "Qabul qiluvchi xaritasi yozuvi \"%s\" saqlandi", - "recovery_email_sent": "Tiklash e-pochtasi %s ga yuborildi", - "relayhost_added": "Xarita yozuvi %s qoʻshildi", - "relayhost_removed": "Xarita yozuvi %s olib tashlandi", - "reset_main_logo": "Standart logotipga qaytarildi", - "resource_added": "Resurs %s qoʻshildi", - "resource_modified": "Pochta qutisi %s ga oʻzgarishlar saqlandi", - "resource_removed": "Resurs %s olib tashlandi", - "rl_saved": "%s obyekti uchun tezlik chegarasi saqlandi", - "rspamd_ui_pw_set": "Rspamd UI paroli muvaffaqiyatli oʻrnatildi", - "saved_settings": "Sozlamalar saqlandi", - "settings_map_added": "Sozlamalar xaritasi yozuvi qoʻshildi", - "settings_map_removed": "Sozlamalar xaritasi ID %s olib tashlandi", - "sogo_profile_reset": "%s foydalanuvchisi uchun SOGo profili tiklandi", - "template_added": "Shablon %s qoʻshildi", - "template_modified": "Shablon %s ga oʻzgarishlar saqlandi", - "template_removed": "Shablon ID %s oʻchirildi", - "tls_policy_map_entry_deleted": "TLS siyosati xaritasi ID %s oʻchirildi", - "tls_policy_map_entry_saved": "TLS siyosati xaritasi yozuvi \"%s\" saqlandi", - "ui_texts": "UI matnlariga oʻzgarishlar saqlandi", - "upload_success": "Fayl muvaffaqiyatli yuklandi", - "verified_fido2_login": "FIDO2 kirishi tasdiqlandi", - "verified_totp_login": "TOTP kirishi tasdiqlandi", - "verified_webauthn_login": "WebAuthn kirishi tasdiqlandi", - "verified_yotp_login": "Yubico OTP kirishi tasdiqlandi" - }, - "tfa": { - "authenticators": "Autentifikatorlar", - "api_register": "%s Yubico Cloud API dan foydalanadi. Iltimos, kalitingiz uchun API kalitini bu yerdan oling", - "confirm": "Tasdiqlash", - "confirm_totp_token": "Iltimos, yaratilgan tokenni kiritib oʻzgarishlaringizni tasdiqlang", - "delete_tfa": "TFA ni oʻchirish", - "disable_tfa": "Keyingi muvaffaqiyatli kirishgacha TFA ni oʻchirish", - "force_tfa": "Kirishda 2FA roʻyxatdan oʻtkazishni majburlash", - "force_tfa_info": "Foydalanuvchidan panelga kirishdan oldin ikki faktorli autentifikatsiyani sozlash talab qilinadi.", - "setup_title": "Ikki faktorli autentifikatsiya talab qilinadi", - "setup_required": "Hisobingiz ikki faktorli autentifikatsiyani talab qiladi. Davom etish uchun 2FA usulini sozlang.", - "cancel_setup": "Bekor qilish va chiqish", - "enter_qr_code": "Agar qurilmangiz QR kodlarni skanerlay olmasa, TOTP kodingiz", - "error_code": "Xato kodi", - "init_webauthn": "Ishga tushirilmoqda, iltimos kuting...", - "key_id": "Qurilmangiz uchun identifikator", - "key_id_totp": "Kalitingiz uchun identifikator", - "none": "Oʻchirish", - "reload_retry": "- (xato davom etsa, brauzerni qayta yuklang)", - "scan_qr_code": "Iltimos, quyidagi kodni autentifikator ilovangiz bilan skanerlang yoki kodni qoʻlda kiriting.", - "select": "Iltimos, tanlang", - "set_tfa": "Ikki faktorli autentifikatsiya usulini oʻrnatish", - "start_webauthn_validation": "Tekshiruvni boshlash", - "tfa": "Ikki faktorli autentifikatsiya", - "tfa_token_invalid": "TFA tokeni noto'g'ri", - "totp": "Vaqt asosidagi OTP (Google Authenticator, Authy va h.k.)", - "u2f_deprecated": "Sizning kalitingiz eskirgan U2F usulidan foydalanib roʻyxatdan oʻtkazilganga oʻxshaydi. Biz siz uchun ikki faktorli autentifikatsiyani oʻchirib qoʻyamiz va kalitingizni oʻchiramiz.", - "u2f_deprecated_important": "Iltimos, kalitingizni admin panelida yangi WebAuthn usuli bilan roʻyxatdan oʻtkazing.", - "webauthn": "WebAuthn autentifikatsiya", - "waiting_usb_auth": "USB qurilmasi kutilmoqda...

Iltimos, hozir USB qurilmangizdagi tugmani bosing.", - "waiting_usb_register": "USB qurilmasi kutilmoqda...

Iltimos, yuqorida parolingizni kiriting va USB qurilmangizdagi tugmani bosib roʻyxatga olinishingizni tasdiqlang.", - "yubi_otp": "Yubico OTP autentifikatsiya" - }, - "user": { - "action": "Amal", - "active": "Faol", - "active_sieve": "Faol filtr", - "advanced_settings": "Kengaytirilgan sozlamalar", - "alias": "Taxallus", - "alias_create_random": "Tasodifiy taxallus yaratish", - "alias_extend_all": "Taxalluslarni 1 soatga uzaytirish", - "alias_full_date": "d.m.Y, H:i:s T", - "alias_remove_all": "Barcha taxalluslarni olib tashlash", - "alias_select_validity": "Amal qilish muddati", - "alias_time_left": "Qolgan vaqt", - "alias_valid_until": "Amal qiladi (gacha)", - "aliases_also_send_as": "Foydalanuvchi sifatida ham joʻnatishga ruxsat berilgan", - "aliases_send_as_all": "Quyidagi domen(lar) va ularning taxallus domenlari uchun joʻnatuvchi kirishini tekshirmaslik", - "app_hint": "Ilova parollari sizning IMAP, SMTP, CalDAV, CardDAV va EAS kirishi uchun muqobil parollardir. Foydalanuvchi nomi oʻzgarmaydi. SOGo webmail ilova parollari orqali mavjud emas.", - "allowed_protocols": "Ruxsat etilgan protokollar", - "app_name": "Ilova nomi", - "app_passwds": "Ilova parollari", - "apple_connection_profile": "Apple ulanish profili", - "apple_connection_profile_complete": "Bu ulanish profili Apple qurilmasi uchun IMAP va SMTP parametrlari hamda CalDAV (kalendarlar) va CardDAV (kontaktlar) yoʻllarini oʻz ichiga oladi.", - "apple_connection_profile_mailonly": "Bu ulanish profili Apple qurilmasi uchun IMAP va SMTP konfiguratsiya parametrlarini oʻz ichiga oladi.", - "apple_connection_profile_with_app_password": "Yangi ilova paroli yaratiladi va profilga qoʻshiladi, shunda qurilmangizni sozlashda parol kiritish kerak boʻlmaydi. Iltimos, faylni ulashmang, chunki u pochta qutingizga toʻliq kirish huquqini beradi.", - "attribute": "Atribut", - "authentication": "Autentifikatsiya", - "change_password": "Parolni oʻzgartirish", - "change_password_hint_app_passwords": "Hisobingizda %d ta ilova paroli mavjud va ular oʻzgartirilmaydi. Ularni boshqarish uchun Ilova parollari yorligʻiga oʻting.", - "clear_recent_successful_connections": "Koʻrilgan muvaffaqiyatli ulanishlarni tozalash", - "client_configuration": "E-pochta mijozlari va smartfonlar uchun konfiguratsiya qoʻllanmalarini koʻrsatish", - "create_app_passwd": "Ilova paroli yaratish", - "create_syncjob": "Yangi sinxronizatsiya vazifasi yaratish", - "created_on": "Yaratilgan sana", - "daily": "Kunlik", - "day": "kun", - "description": "Tavsif", - "delete_ays": "Iltimos, oʻchirish jarayonini tasdiqlang.", - "direct_aliases": "Toʻgʻridan-toʻgʻri taxallus manzillari", - "direct_aliases_desc": "Toʻgʻridan-toʻgʻri taxallus manzillariga spam filtri va TLS siyosati sozlamalari taʼsir qiladi.", - "direct_protocol_access": "Bu pochta qutisi foydalanuvchisi quyidagi protokollar va ilovalarga toʻgʻridan-toʻgʻri, tashqi kirishga ega. Bu sozlama administratoringiz tomonidan boshqariladi. Maxsus protokollar va ilovalarga kirishga ruxsat berish uchun ilova parollarini yaratish mumkin.
\"Webmail\" tugmasi SOGo ga yagona kirish (SSO) imkonini beradi va doimo mavjud.", - "eas_reset": "ActiveSync qurilma keshini tiklash", - "eas_reset_help": "Koʻp hollarda qurilma keshini tiklash buzilgan ActiveSync profilini tiklashga yordam beradi.
Diqqat: Barcha elementlar qayta yuklab olinadi!", - "eas_reset_now": "Hozir tiklash", - "edit": "Tahrirlash", - "email": "E-pochta", - "email_and_dav": "E-pochta, kalendarlar va kontaktlar", - "empty": "Natijalar yoʻq", - "encryption": "Shifrlash", - "excludes": "Istisnolar", - "expire_in": "Tugaydi", - "expire_never": "Hech qachon tugamasin", - "fido2_webauthn": "FIDO2/WebAuthn", - "forever": "Abadiy", - "force_pw_update": "Guruh dasturi xizmatlariga kirish uchun siz yangi parol oʻrnatishingiz kerak.", - "from": "dan", - "generate": "yaratish", - "hour": "soat", - "hourly": "Soatlik", - "hours": "soat", - "in_use": "Foydalanilmoqda", - "interval": "Oraliq", - "is_catch_all": "Domen(lar) uchun Hammasini-qabul qilish", - "last_mail_login": "Oxirgi pochta kirishi", - "last_pw_change": "Oxirgi parol oʻzgarishi", - "last_run": "Oxirgi ishga tushirilgan", - "last_ui_login": "Oxirgi UI kirishi", - "loading": "Yuklanmoqda...", - "login_history": "Kirish tarixi", - "mailbox": "Pochta qutisi", - "mailbox_details": "Tafsilotlar", - "mailbox_general": "Umumiy", - "mailbox_settings": "Sozlamalar", - "messages": "xabarlar", - "month": "oy", - "months": "oy", - "never": "Hech qachon", - "new_password": "Yangi parol", - "new_password_repeat": "Tasdiqlash paroli (takrorlang)", - "no_active_filter": "Faol filtr mavjud emas", - "no_last_login": "Oxirgi UI kirishi haqida maʼlumot yoʻq", - "no_record": "Yozuv yoʻq", - "open_logs": "Jurnallarni ochish", - "open_webmail_sso": "Webmail", - "overview": "Umumiy koʻrinish", - "password": "Parol", - "password_now": "Joriy parol (oʻzgarishlarni tasdiqlang)", - "pw_update_required": "Hisobingiz parol oʻzgartirishni talab qiladi. Davom etish uchun yangi parolni oʻrnating.", - "password_repeat": "Parol (takrorlang)", - "password_reset_info": "Agar parolni tiklash uchun e-pochta kiritilmagan boʻlsa, bu funksiyadan foydalanib boʻlmaydi.", - "protocols": "Protokollar", - "pushover_evaluate_x_prio": "Yuqori muhimlikdagi xatni eskalatsiya qilish [X-Priority: 1]", - "pushover_info": "Push bildirishnoma sozlamalari %s ga taxalluslar bilan birga (umumiy, umumiy boʻlmagan, teglangan) yetkazib beriladigan barcha toza (spam boʻlmagan) xatlarga qoʻllaniladi.", - "pushover_only_x_prio": "Faqat yuqori muhimlikdagi xatlarni koʻrib chiqish [X-Priority: 1]", - "pushover_sender_array": "Quyidagi joʻnatuvchi e-pochta manzillarini koʻrib chiqish (vergul bilan ajratilgan)", - "pushover_sender_regex": "Joʻnatuvchilarni quyidagi regex orqali mos kelishini tekshirish", - "pushover_text": "Bildirishnoma matni", - "pushover_title": "Bildirishnoma sarlavhasi", - "pushover_sound": "Tovush", - "pushover_vars": "Joʻnatuvchi filtri belgilanmagan boʻlsa, barcha xatlar koʻrib chiqiladi.
Regex filtrlari va aniq joʻnatuvchi tekshiruvlari alohida belgilanishi mumkin va ketma-ket koʻrib chiqiladi. Ular bir-biriga bogʻliq emas.
Matn va sarlavha uchun ishlatiladigan oʻzgaruvchilar (ma'lumotlarni himoya qilish siyosatiga e'tibor bering)", - "pushover_verify": "Maʼlumotlarni tekshirish", - "pw_recovery_email": "Parolni tiklash e-pochtasi", - "q_add_header": "Junk papkasi", - "q_all": "Barcha turkumlar", - "q_reject": "Rad etilgan", - "quarantine_category": "Karantin bildirishnoma turkumi", - "quarantine_category_info": "\"Rad etilgan\" bildirishnoma turkumi rad etilgan xatlarni oʻz ichiga oladi, \"Junk papkasi\" esa Junk papkasiga joylashtirilgan xatlar haqida foydalanuvchini xabardor qiladi.", - "quarantine_notification": "Karantin bildirishnomalari", - "quarantine_notification_info": "Bildirishnoma yuborilgandan keyin elementlar \"xabar berildi\" deb belgilanadi va bu element uchun keyingi bildirishnomalar yuborilmaydi.", - "recent_successful_connections": "Koʻrilgan muvaffaqiyatli ulanishlar", - "remove": "Olib tashlash", - "running": "Ishlamoqda", - "save": "Oʻzgarishlarni saqlash", - "save_changes": "Oʻzgarishlarni saqlash", - "sender_acl_disabled": "Joʻnatuvchi tekshiruvi oʻchirilgan", - "shared_aliases": "Umumiy taxallus manzillari", - "shared_aliases_desc": "Umumiy taxalluslarga foydalanuvchining maxsus sozlamalari (spam filtri yoki shifrlash siyosati kabi) taʼsir qilmaydi. Mos spam filtrlarini faqat administrator domen boʻyicha siyosat sifatida sozlashi mumkin.", - "show_sieve_filters": "Faol foydalanuvchi sieve filtrini koʻrsatish", - "sogo_profile_reset": "SOGo profilini tiklash", - "sogo_profile_reset_help": "Bu foydalanuvchining SOGo profilini yoʻq qiladi va barcha kontakt va kalendar maʼlumotlarini qaytarib boʻlmas tarzda oʻchiradi.", - "sogo_profile_reset_now": "Profilni hozir tiklash", - "spam_aliases": "Spam e-pochta taxalluslari", - "spam_aliases_info": "Spam taxallusi — bu haqiqiy e-pochta manzillarini himoya qilish uchun ishlatilishi mumkin boʻlgan vaqtinchalik e-pochta manzilidir.
Ixtiyoriy ravishda muddat tugash vaqtini belgilash mumkin, shunda taxallus belgilangan davrdan keyin avtomatik oʻchirib qoʻyiladi, suiisteʼmol qilingan yoki tarqalib ketgan manzillarni samarali tarzda chiqarib tashlaydi.", - "spam_score_reset": "Server standartiga qaytarish", - "spamfilter": "Spam filtri", - "spamfilter_behavior": "Baholash", - "spamfilter_bl": "Qora roʻyxat", - "spamfilter_bl_desc": "Qora roʻyxatdagi e-pochta manzillari har doim spam sifatida tasniflanadi va rad etiladi. Rad etilgan xat karantinga nusxalanmaydi. Joker belgilar ishlatilishi mumkin. Filtr faqat toʻgʻridan-toʻgʻri taxalluslarga (bitta maqsad pochta qutisiga ega taxalluslarga) qoʻllaniladi, hammasini-qabul qilish taxalluslari va pochta qutisining oʻzi istisno qilinadi.", - "spamfilter_default_score": "Standart qiymatlar", - "spamfilter_green": "Yashil: bu xabar spam emas", - "spamfilter_hint": "Birinchi qiymat \"past spam bahosi\"ni tavsiflaydi, ikkinchisi \"yuqori spam bahosi\"ni ifodalaydi.", - "spamfilter_red": "Qizil: bu xabar spam va server tomonidan rad etiladi", - "spamfilter_table_action": "Amal", - "spamfilter_table_add": "Element qoʻshish", - "spamfilter_table_domain_policy": "n/a (domen siyosati)", - "spamfilter_table_empty": "Koʻrsatish uchun ma'lumot yoʻq", - "spamfilter_table_remove": "olib tashlash", - "spamfilter_table_rule": "Qoida", - "spamfilter_wl": "Oq roʻyxat", - "spamfilter_wl_desc": "Oq roʻyxatdagi e-pochta manzillari hech qachon spam sifatida tasniflanmaydi. Joker belgilar ishlatilishi mumkin. Filtr faqat toʻgʻridan-toʻgʻri taxalluslarga (bitta maqsad pochta qutisiga ega taxalluslarga) qoʻllaniladi, hammasini-qabul qilish taxalluslari va pochta qutisining oʻzi istisno qilinadi.", - "spamfilter_yellow": "Sariq: bu xabar spam boʻlishi mumkin, spam sifatida belgilanadi va Junk papkangizga koʻchiriladi", - "status": "Holat", - "sync_jobs": "Sinxronizatsiya vazifalari", - "syncjob_check_log": "Jurnalni tekshirish", - "syncjob_last_run_result": "Oxirgi ishga tushirilgan natija", - "syncjob_EX_OK": "Muvaffaqiyatli", - "syncjob_EXIT_CONNECTION_FAILURE": "Ulanish muammosi", - "syncjob_EXIT_TLS_FAILURE": "Shifrlangan ulanish bilan muammo", - "syncjob_EXIT_AUTHENTICATION_FAILURE": "Autentifikatsiya muammosi", - "syncjob_EXIT_OVERQUOTA": "Maqsad pochta qutisi kvotadan oshib ketdi", - "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Masofaviy serverga ulanib boʻlmadi", - "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Notoʻgʻri foydalanuvchi nomi yoki parol", - "tag_handling": "Teglangan xat uchun ishlovni oʻrnatish", - "tag_help_example": "Teglangan e-pochta manzili misoli: me+Facebook@example.org", - "tag_help_explain": "Subpapkada: tegga qarab nomlangan yangi subpapka INBOX ostida yaratiladi (\"INBOX/Facebook\").
\r\nMavzuda: teg nomi xatning mavzusiga oldindan qoʻshiladi, misol: \"[Facebook] Mening yangiliklarim\".", - "tag_in_none": "Hech narsa qilmaslik", - "tag_in_subfolder": "Subpapkada", - "tag_in_subject": "Mavzuda", - "text": "Matn", - "tfa_info": "Ikki faktorli autentifikatsiya hisobingizni himoya qilishga yordam beradi. Uni yoqsangiz, ikki faktorli autentifikatsiyani qoʻllab-quvvatlamaydigan ilovalar yoki xizmatlarga (masalan, pochta mijozlari) kirish uchun ilova parollari kerak boʻladi.", - "title": "Sarlavha", - "tls_enforce_in": "Kiruvchi TLS ni majburlash", - "tls_enforce_out": "Chiquvchi TLS ni majburlash", - "tls_policy": "Shifrlash siyosati", - "tls_policy_warning": "Diqqat: Agar shifrlangan pochta transferini majburlashga qaror qilsangiz, e-pochtalarni yoʻqotishingiz mumkin.
Siyosatga mos kelmaydigan xabarlar pochta tizimi tomonidan qatʼiy muvaffaqiyatsizlik bilan qaytariladi.
Bu variant sizning asosiy e-pochta manzilingiz (kirish nomingiz), taxallus domenlaridan olingan barcha manzillar va faqat ushbu pochta qutisi maqsad sifatida boʻlgan taxallus manzillariga qoʻllaniladi.", - "user_settings": "Foydalanuvchi sozlamalari", - "username": "Foydalanuvchi nomi", - "value": "Qiymat", - "verify": "Tasdiqlash", - "waiting": "Kutilmoqda", - "week": "hafta", - "weekly": "Haftalik", - "weeks": "hafta", - "with_app_password": "ilova paroli bilan", - "year": "yil", - "years": "yil" - }, - "warning": { - "cannot_delete_self": "Tizimga kirgan foydalanuvchini oʻchirib boʻlmaydi", - "domain_added_sogo_failed": "Domen qoʻshildi, ammo SOGoni qayta ishga tushirib boʻlmadi, iltimos server jurnallaringizni tekshiring.", - "dovecot_restart_failed": "Dovecot qayta ishga tushirib boʻlmadi, iltimos jurnallarni tekshiring", - "fuzzy_learn_error": "Fuzzy hash oʻrgatish xatosi: %s", - "hash_not_found": "Hash topilmadi yoki allaqachon oʻchirilgan", - "ip_invalid": "Notoʻgʻri IP oʻtkazib yuborildi: %s", - "is_not_primary_alias": "Asosiy boʻlmagan taxallus oʻtkazib yuborildi: %s", - "no_active_admin": "Oxirgi faol administratorni oʻchirib boʻlmaydi", - "quota_exceeded_scope": "Domen kvotasi oshib ketdi: Bu domen doirasida faqat cheksiz pochta qutilari yaratilishi mumkin.", - "session_token": "Forma tokeni noto'g'ri: Token mos kelmadi", - "session_ua": "Forma tokeni noto'g'ri: User-Agent tekshiruvi xatosi" - } -} diff --git a/data/web/lang/lang.vi-vn.json b/data/web/lang/lang.vi-vn.json index 42813fd25..523b5dca9 100644 --- a/data/web/lang/lang.vi-vn.json +++ b/data/web/lang/lang.vi-vn.json @@ -268,10 +268,10 @@ "includes": "Bao gồm những người nhận này", "ip_check": "Kiểm tra IP", "ip_check_disabled": "Kiểm tra IP đã bị vô hiệu hóa. Bạn có thể bật nó trong
Hệ thống > Cấu hình > Tùy chọn > Tùy chỉnh", - "ip_check_opt_in": "Đăng ký tham gia sử dụng dịch vụ bên thứ ba dùng ipv4.mailcow.emailipv6.mailcow.email để phân giải địa chỉ IP bên ngoài.", + "ip_check_opt_in": "Chọn tham gia sử dụng dịch vụ bên thứ ba ipv4.mailcow.emailipv6.mailcow.email để phân giải địa chỉ IP bên ngoài.", "is_mx_based": "Dựa trên MX", "last_applied": "Áp dụng lần cuối", - "license_info": "Giấy phép tuy không bắt buộc nhưng giúp phát triển thêm.
Đăng ký GUID của bạn tại đây hoặc mua hỗ trợ cho cài đặt mailcow của bạn.", + "license_info": "Giấy phép không bắt buộc nhưng giúp phát triển thêm.
Đăng ký GUID của bạn tại đây hoặc mua hỗ trợ cho cài đặt mailcow của bạn.", "link": "Liên kết", "loading": "Vui lòng đợi...", "login_time": "Thời gian đăng nhập", @@ -556,9 +556,7 @@ "validity_missing": "Vui lòng gán thời hạn hiệu lực", "value_missing": "Vui lòng cung cấp tất cả các giá trị", "version_invalid": "Phiên bản %s không hợp lệ", - "yotp_verification_failed": "Xác thực Yubico OTP thất bại: %s", - "tfa_removal_blocked": "Xác thực hai yếu tố không thể bị xóa vì đây là yêu cầu bắt buộc đối với tài khoản của bạn.", - "quarantine_category_invalid": "Danh mục cách ly phải là một trong các loại sau : add_header, reject, all." + "yotp_verification_failed": "Xác thực Yubico OTP thất bại: %s" }, "datatables": { "collapse_all": "Thu gọn tất cả", @@ -581,9 +579,7 @@ "aria": { "sortAscending": ": kích hoạt để sắp xếp cột tăng dần", "sortDescending": ": kích hoạt để sắp xếp cột giảm dần" - }, - "decimal": ".", - "thousands": "," + } }, "debug": { "architecture": "Kiến trúc", @@ -697,19 +693,6 @@ "internal_info": "Bí danh nội bộ chỉ có thể truy cập từ tên miền sở hữu hoặc tên miền bí danh.", "kind": "Loại", "last_modified": "Sửa đổi lần cuối", - "lookup_mx": "Đích là một biểu thức chính quy để khớp với tên MX (.*.google.com để định tuyến tất cả thư nhắm đến MX kết thúc bằng google.com qua bước nhảy này)", - "sender_allowed": "Cho phép gửi đi bằng bí danh", - "sender_allowed_info": "Nếu bị vô hiệu hóa, bí danh này chỉ có thể nhận thư. Sử dụng ACL của người gửi để ghi đè và cấp quyền gửi cho các hộp thư cụ thể.", - "mailbox": "Chỉnh sửa hộp thư", - "mailbox_quota_def": "Hạn mức hộp thư mặc định", - "mailbox_relayhost_info": "Chỉ áp dụng cho hộp thư và các bí danh trực tiếp, thao tác này sẽ ghi đè lên máy chủ chuyển tiếp tên miền.", - "mailbox_rename": "Đổi tên hộp thư", - "mailbox_rename_agree": "Tôi đã tạo bản sao lưu.", - "mailbox_rename_warning": "QUAN TRỌNG! Hãy tạo bản sao lưu trước khi đổi tên hộp thư.", - "mailbox_rename_alias": "Tạo tự động bí danh", - "mailbox_rename_title": "Tên mới của hộp thư cục bộ", - "max_aliases": "Số lượng Bí danh tối đa", - "max_mailboxes": "Số lượng hộp thư tối đa có thể có", - "max_quota": "Dung lượng tối đa cho mỗi hộp thư (MiB)" + "lookup_mx": "Đích là một biểu thức chính quy để khớp với tên MX (.*.google.com để định tuyến tất cả thư nhắm đến MX kết thúc bằng google.com qua bước nhảy này)" } } diff --git a/data/web/mobileconfig.php b/data/web/mobileconfig.php index c57c48857..7c0ead7f5 100644 --- a/data/web/mobileconfig.php +++ b/data/web/mobileconfig.php @@ -65,7 +65,6 @@ if (isset($_GET['app_password'])) { $attr['protocols'][] = 'dav_access'; } app_passwd("add", $attr); - $password = htmlspecialchars($password, ENT_NOQUOTES); } else { $app_password = false; } diff --git a/data/web/templates/base.twig b/data/web/templates/base.twig index 9e20b08a5..4290edaef 100644 --- a/data/web/templates/base.twig +++ b/data/web/templates/base.twig @@ -11,8 +11,8 @@