Browse Source

Merge remote-tracking branch 'origin/staging' into nightly

FreddleSpl0it 1 year ago
parent
commit
57bc03b878
91 changed files with 3112 additions and 1413 deletions
  1. 37 0
      .github/workflows/check_if_support_labeled.yml
  2. 1 1
      .github/workflows/check_prs_if_on_staging.yml
  3. 1 1
      .github/workflows/rebuild_backup_image.yml
  4. 16 14
      CONTRIBUTING.md
  5. 4 6
      data/Dockerfiles/acme/Dockerfile
  6. 8 0
      data/Dockerfiles/acme/acme.sh
  7. 1 1
      data/Dockerfiles/backup/Dockerfile
  8. 2 2
      data/Dockerfiles/clamd/Dockerfile
  9. 2 2
      data/Dockerfiles/dockerapi/Dockerfile
  10. 2 2
      data/Dockerfiles/dockerapi/modules/DockerApi.py
  11. 6 5
      data/Dockerfiles/dovecot/Dockerfile
  12. 53 3
      data/Dockerfiles/dovecot/docker-entrypoint.sh
  13. 7 0
      data/Dockerfiles/dovecot/optimize-fts.sh
  14. 1 1
      data/Dockerfiles/dovecot/sa-rules.sh
  15. 1 1
      data/Dockerfiles/netfilter/Dockerfile
  16. 25 18
      data/Dockerfiles/netfilter/main.py
  17. 5 2
      data/Dockerfiles/netfilter/modules/Logger.py
  18. 2 0
      data/Dockerfiles/netfilter/modules/NFTables.py
  19. 1 1
      data/Dockerfiles/olefy/Dockerfile
  20. 1 0
      data/Dockerfiles/phpfpm/docker-entrypoint.sh
  21. 2 2
      data/Dockerfiles/postfix/Dockerfile
  22. 0 6
      data/Dockerfiles/postfix/postfix.sh
  23. 1 1
      data/Dockerfiles/postfix/syslog-ng-redis_slave.conf
  24. 1 1
      data/Dockerfiles/postfix/syslog-ng.conf
  25. 12 9
      data/Dockerfiles/rspamd/Dockerfile
  26. 0 632
      data/Dockerfiles/rspamd/metadata_exporter.lua
  27. 1 1
      data/Dockerfiles/sogo/Dockerfile
  28. 15 1
      data/Dockerfiles/solr/solr.sh
  29. 3 4
      data/Dockerfiles/unbound/Dockerfile
  30. 5 28
      data/Dockerfiles/unbound/healthcheck.sh
  31. 1 1
      data/Dockerfiles/watchdog/Dockerfile
  32. 2 3
      data/conf/dovecot/dovecot.conf
  33. 1 1
      data/conf/postfix/anonymize_headers.pcre
  34. 10 10
      data/conf/postfix/main.cf
  35. 0 1
      data/conf/postfix/master.cf
  36. 53 149
      data/conf/postfix/postscreen_access.cidr
  37. 23 2
      data/conf/rspamd/dynmaps/footer.php
  38. 5 1
      data/conf/rspamd/local.d/composites.conf
  39. 1 0
      data/conf/rspamd/local.d/options.inc
  40. 0 16
      data/conf/rspamd/local.d/rbl.conf
  41. 0 40
      data/conf/rspamd/local.d/rbl_group.conf
  42. 14 0
      data/conf/rspamd/lua/rspamd.local.lua
  43. 4 0
      data/conf/sogo/sogo.conf
  44. 7 3
      data/web/debug.php
  45. 2 1
      data/web/edit.php
  46. 7 0
      data/web/inc/ajax/container_ctrl.php
  47. 4 4
      data/web/inc/functions.inc.php
  48. 46 20
      data/web/inc/functions.mailbox.inc.php
  49. 13 8
      data/web/inc/functions.rspamd.inc.php
  50. 0 1
      data/web/inc/header.inc.php
  51. 3 2
      data/web/inc/init_db.inc.php
  52. 1 1
      data/web/inc/presets/sieve/sieve_1.yml
  53. 2 0
      data/web/inc/vars.inc.php
  54. 1 7
      data/web/js/site/debug.js
  55. 8 4
      data/web/js/site/mailbox.js
  56. 1 1
      data/web/js/site/user.js
  57. 1 1
      data/web/lang/lang.cs-cz.json
  58. 1 1
      data/web/lang/lang.da-dk.json
  59. 2 2
      data/web/lang/lang.de-de.json
  60. 2 2
      data/web/lang/lang.en-gb.json
  61. 3 1
      data/web/lang/lang.es-es.json
  62. 293 169
      data/web/lang/lang.fr-fr.json
  63. 187 4
      data/web/lang/lang.hu-hu.json
  64. 19 9
      data/web/lang/lang.it-it.json
  65. 354 0
      data/web/lang/lang.lt-lt.json
  66. 142 88
      data/web/lang/lang.lv-lv.json
  67. 326 0
      data/web/lang/lang.nb-no.json
  68. 6 6
      data/web/lang/lang.nl-nl.json
  69. 44 40
      data/web/lang/lang.pt-br.json
  70. 7 7
      data/web/lang/lang.pt-pt.json
  71. 1 1
      data/web/lang/lang.ro-ro.json
  72. 4 2
      data/web/lang/lang.ru-ru.json
  73. 1 1
      data/web/lang/lang.si-si.json
  74. 1 1
      data/web/lang/lang.sk-sk.json
  75. 2 2
      data/web/lang/lang.sv-se.json
  76. 1161 5
      data/web/lang/lang.tr-tr.json
  77. 3 3
      data/web/lang/lang.uk-ua.json
  78. 15 7
      data/web/lang/lang.zh-cn.json
  79. 17 12
      data/web/lang/lang.zh-tw.json
  80. 0 1
      data/web/templates/base.twig
  81. 16 2
      data/web/templates/edit/domain.twig
  82. 6 0
      data/web/templates/modals/mailbox.twig
  83. 16 15
      docker-compose.yml
  84. 7 0
      generate_config.sh
  85. 2 2
      helper-scripts/backup_and_restore.sh
  86. 0 3
      helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml
  87. 0 1
      helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml
  88. 1 2
      helper-scripts/docker-compose.override.yml.d/EXTERNAL_MYSQL_SOCKET/docker-compose.override.yml
  89. 0 1
      helper-scripts/docker-compose.override.yml.d/HAPROXY/docker-compose.override.yml
  90. 34 1
      helper-scripts/nextcloud.sh
  91. 13 0
      update.sh

+ 37 - 0
.github/workflows/check_if_support_labeled.yml

@@ -0,0 +1,37 @@
+name: Check if labeled support, if so send message and close issue
+on:
+  issues:
+    types:
+      - labeled
+jobs:
+  add-comment:
+    if: github.event.label.name == 'support'
+    runs-on: ubuntu-latest
+    permissions:
+      issues: write
+    steps:
+      - name: Add comment
+        run: gh issue comment "$NUMBER" --body "$BODY"
+        env:
+          GH_TOKEN: ${{ secrets.SUPPORTISSUES_ACTION_PAT }}
+          GH_REPO: ${{ github.repository }}
+          NUMBER: ${{ github.event.issue.number }}
+          BODY: |
+              **THIS IS A AUTOMATED MESSAGE!**
+
+              It seems your issue is not a bug.
+              Therefore we highly advise you to get support!
+              
+              You can get support either by:
+              - ordering a paid [support contract at Servercow](https://www.servercow.de/mailcow?lang=en#support/) (Directly from the developers) or
+              - using the [community forum](https://community.mailcow.email) (**Based on volunteers! NO guaranteed answer**) or
+              - using the [Telegram support channel](https://t.me/mailcow) (**Based on volunteers! NO guaranteed answer**)
+
+              This issue will be closed. If you think your reported issue is not a support case feel free to comment above and if so the issue will reopened.
+
+      - name: Close issue
+        env:
+          GH_TOKEN: ${{ secrets.SUPPORTISSUES_ACTION_PAT }}
+          GH_REPO: ${{ github.repository }}
+          NUMBER: ${{ github.event.issue.number }}
+        run: gh issue close "$NUMBER" -r "not planned"

+ 1 - 1
.github/workflows/check_prs_if_on_staging.yml

@@ -10,7 +10,7 @@ jobs:
     if: github.event.pull_request.base.ref != 'staging' #check if the target branch is not staging
     steps:
       - name: Send message
-        uses: thollander/actions-comment-pull-request@v2.4.3
+        uses: thollander/actions-comment-pull-request@v2.5.0
         with:
           GITHUB_TOKEN: ${{ secrets.CHECKIFPRISSTAGING_ACTION_PAT }}
           message: |

+ 1 - 1
.github/workflows/rebuild_backup_image.yml

@@ -26,7 +26,7 @@ jobs:
           password: ${{ secrets.BACKUPIMAGEBUILD_ACTION_DOCKERHUB_TOKEN }}
 
       - name: Build and push
-        uses: docker/build-push-action@v5
+        uses: docker/build-push-action@v6
         with:
           context: .
           platforms: linux/amd64,linux/arm64

+ 16 - 14
CONTRIBUTING.md

@@ -1,31 +1,33 @@
-# Contribution Guidelines (Last modified on 18th December 2023)
+# Contribution Guidelines (Last modified on 27th June 2024)
 
 First of all, thank you for wanting to provide a bugfix or a new feature for the mailcow community, it's because of your help that the project can continue to grow!
 
-## Pull Requests (Last modified on 18th December 2023)
+## Pull Requests (Last modified on 27th June 2024)
 
 However, please note the following regarding pull requests:
 
 1. **ALWAYS** create your PR using the staging branch of your locally cloned mailcow instance, as the pull request will end up in said staging branch of mailcow once approved. Ideally, you should simply create a new branch for your pull request that is named after the type of your PR (e.g. `feat/` for function updates or `fix/` for bug fixes) and the actual content (e.g. `sogo-6.0.0` for an update from SOGo to version 6 or `html-escape` for a fix that includes escaping HTML in mailcow).
-2. Please **keep** this pull request branch **clean** and free of commits that have nothing to do with the changes you have made (e.g. commits from other users from other branches). *If you make changes to the `update.sh` script or other scripts that trigger a commit, there is usually a developer mode for clean working in this case.
-3. **Test your changes before you commit them as a pull request.** <ins>If possible</ins>, write a small **test log** or demonstrate the functionality with a **screenshot or GIF**. *We will of course also test your pull request ourselves, but proof from you will save us the question of whether you have tested your own changes yourself.*
-4. Please **ALWAYS** create the actual pull request against the staging branch and **NEVER** directly against the master branch. *If you forget to do this, our moobot will remind you to switch the branch to staging.*
-5. Wait for a merge commit: It may happen that we do not accept your pull request immediately or sometimes not at all for various reasons. Please do not be disappointed if this is the case. We always endeavor to incorporate any meaningful changes from the community into the mailcow project.
-6. If you are planning larger and therefore more complex pull requests, it would be advisable to first announce this in a separate issue and then start implementing it after the idea has been accepted in order to avoid unnecessary frustration and effort!
+2. **ALWAYS** report/request issues/features in the english language, even though mailcow is a german based company. This is done to allow other GitHub users to reply to your issues/requests too which did not speak german or other languages besides english.
+3. Please **keep** this pull request branch **clean** and free of commits that have nothing to do with the changes you have made (e.g. commits from other users from other branches). *If you make changes to the `update.sh` script or other scripts that trigger a commit, there is usually a developer mode for clean working in this case.
+4. **Test your changes before you commit them as a pull request.** <ins>If possible</ins>, write a small **test log** or demonstrate the functionality with a **screenshot or GIF**. *We will of course also test your pull request ourselves, but proof from you will save us the question of whether you have tested your own changes yourself.*
+5. Please **ALWAYS** create the actual pull request against the staging branch and **NEVER** directly against the master branch. *If you forget to do this, our moobot will remind you to switch the branch to staging.*
+6. Wait for a merge commit: It may happen that we do not accept your pull request immediately or sometimes not at all for various reasons. Please do not be disappointed if this is the case. We always endeavor to incorporate any meaningful changes from the community into the mailcow project.
+7. If you are planning larger and therefore more complex pull requests, it would be advisable to first announce this in a separate issue and then start implementing it after the idea has been accepted in order to avoid unnecessary frustration and effort!
 
 ---
 
-## Issue Reporting (Last modified on 18th December 2023)
+## Issue Reporting (Last modified on 27th June 2024)
 
 If you plan to report a issue within mailcow please read and understand the following rules:
 
 1. **ONLY** use the issue tracker for bug reports or improvement requests and NOT for support questions. For support questions you can either contact the [mailcow community on Telegram](https://docs.mailcow.email/#community-support-and-chat) or the mailcow team directly in exchange for a [support fee](https://docs.mailcow.email/#commercial-support).
 2. **ONLY** report an error if you have the **necessary know-how (at least the basics)** for the administration of an e-mail server and the usage of Docker. mailcow is a complex and fully-fledged e-mail server including groupware components on a Docker basement and it requires a bit of technical know-how for debugging and operating.
-3. **ONLY** report bugs that are contained in the latest mailcow release series. *The definition of the latest release series includes the last major patch (e.g. 2023-12) and all minor patches (revisions) below it (e.g. 2023-12a, b, c etc.).* New issue reports published starting from January 1, 2024 must meet this criterion, as versions below the latest releases are no longer supported by us.
-4. When reporting a problem, please be as detailed as possible and include even the smallest changes to your mailcow installation. Simply fill out the corresponding bug report form in detail and accurately to minimize possible questions.
-5. **Before you open an issue/feature request**, please first check whether a similar request already exists in the mailcow tracker on GitHub. If so, please include yourself in this request.
-6. When you create a issue/feature request: Please note that the creation does <ins>**not guarantee an instant implementation or fix by the mailcow team or the community**</ins>.
-7. Please **ALWAYS** anonymize any sensitive information in your bug report or feature request before submitting it.
+3. **ALWAYS** report/request issues/features in the english language, even though mailcow is a german based company. This is done to allow other GitHub users to reply to your issues/requests too which did not speak german or other languages besides english.
+4. **ONLY** report bugs that are contained in the latest mailcow release series. *The definition of the latest release series includes the last major patch (e.g. 2023-12) and all minor patches (revisions) below it (e.g. 2023-12a, b, c etc.).* New issue reports published starting from January 1, 2024 must meet this criterion, as versions below the latest releases are no longer supported by us.
+5. When reporting a problem, please be as detailed as possible and include even the smallest changes to your mailcow installation. Simply fill out the corresponding bug report form in detail and accurately to minimize possible questions.
+6. **Before you open an issue/feature request**, please first check whether a similar request already exists in the mailcow tracker on GitHub. If so, please include yourself in this request.
+7. When you create a issue/feature request: Please note that the creation does <ins>**not guarantee an instant implementation or fix by the mailcow team or the community**</ins>.
+8. Please **ALWAYS** anonymize any sensitive information in your bug report or feature request before submitting it.
 
 ### Quick guide to reporting problems:
 1. Read your logs; follow them to see what the reason for your problem is.
@@ -36,4 +38,4 @@ If you plan to report a issue within mailcow please read and understand the foll
 6. [Create an issue](https://github.com/mailcow/mailcow-dockerized/issues/new/choose) over at our GitHub repository if you think your problem might be a bug or a missing feature you badly need. But please make sure, that you include **all the logs** and a full description to your problem.
 7. Ask your questions in our community-driven [support channels](https://docs.mailcow.email/#community-support-and-chat).
 
-## When creating an issue/feature request or a pull request, you will be asked to confirm these guidelines.
+## When creating an issue/feature request or a pull request, you will be asked to confirm these guidelines.

+ 4 - 6
data/Dockerfiles/acme/Dockerfile

@@ -1,8 +1,8 @@
-FROM alpine:3.18
+FROM alpine:3.20
+
+LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
-LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
 
-ARG PIP_BREAK_SYSTEM_PACKAGES=1
 RUN apk upgrade --no-cache \
   && apk add --update --no-cache \
   bash \
@@ -15,9 +15,7 @@ RUN apk upgrade --no-cache \
   tini \
   tzdata \
   python3 \
-  py3-pip \
-  && pip3 install --upgrade pip \
-  && pip3 install acme-tiny
+  acme-tiny --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/
 
 COPY acme.sh /srv/acme.sh
 COPY functions.sh /srv/functions.sh

+ 8 - 0
data/Dockerfiles/acme/acme.sh

@@ -33,6 +33,10 @@ if [[ "${ONLY_MAILCOW_HOSTNAME}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
   ONLY_MAILCOW_HOSTNAME=y
 fi
 
+if [[ "${AUTODISCOVER_SAN}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+  AUTODISCOVER_SAN=y
+fi
+
 # Request individual certificate for every domain
 if [[ "${ENABLE_SSL_SNI}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
   ENABLE_SSL_SNI=y
@@ -211,7 +215,11 @@ while true; do
       ADDITIONAL_SAN_ARR+=($i)
     fi
   done
+
+  if [[ ${AUTODISCOVER_SAN} == "y" ]]; then
+  # Fetch certs for autoconfig and autodiscover subdomains
   ADDITIONAL_WC_ARR+=('autodiscover' 'autoconfig')
+  fi
 
   if [[ ${SKIP_IP_CHECK} != "y" ]]; then
   # Start IP detection

+ 1 - 1
data/Dockerfiles/backup/Dockerfile

@@ -1,3 +1,3 @@
-FROM debian:bullseye-slim
+FROM debian:bookworm-slim
 
 RUN apt update && apt install pigz

+ 2 - 2
data/Dockerfiles/clamd/Dockerfile

@@ -1,6 +1,6 @@
-FROM alpine:3.19
+FROM alpine:3.20
 
-LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
+LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 RUN apk upgrade --no-cache \
   && apk add --update --no-cache \

+ 2 - 2
data/Dockerfiles/dockerapi/Dockerfile

@@ -1,6 +1,6 @@
-FROM alpine:3.19
+FROM alpine:3.20
 
-LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
+LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 ARG PIP_BREAK_SYSTEM_PACKAGES=1
 WORKDIR /app

+ 2 - 2
data/Dockerfiles/dockerapi/modules/DockerApi.py

@@ -358,8 +358,8 @@ class DockerApi:
         for line in cmd_response.split("\n"):
           if '$2$' in line:
             hash = line.strip()
-            hash_out = re.search('\$2\$.+$', hash).group(0)
-            rspamd_passphrase_hash = re.sub('[^0-9a-zA-Z\$]+', '', hash_out.rstrip())
+            hash_out = re.search(r'\$2\$.+$', hash).group(0)
+            rspamd_passphrase_hash = re.sub(r'[^0-9a-zA-Z\$]+', '', hash_out.rstrip())
             rspamd_password_filename = "/etc/rspamd/override.d/worker-controller-password.inc"
             cmd = '''/bin/echo 'enable_password = "%s";' > %s && cat %s''' % (rspamd_passphrase_hash, rspamd_password_filename, rspamd_password_filename)
             cmd_response = self.exec_cmd_container(container, cmd, user="_rspamd")

+ 6 - 5
data/Dockerfiles/dovecot/Dockerfile

@@ -1,5 +1,5 @@
-FROM alpine:3.19
-LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
+FROM alpine:3.20
+LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 # renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^(?<version>.*)$
 ARG GOSU_VERSION=1.16
@@ -23,6 +23,7 @@ RUN addgroup -g 5000 vmail \
   envsubst \
   ca-certificates \
   curl \
+  coreutils \
   jq \
   lua \
   lua-cjson \
@@ -65,7 +66,7 @@ RUN addgroup -g 5000 vmail \
   perl-package-stash-xs \
   perl-par-packer \
   perl-parse-recdescent \
-  perl-lockfile-simple --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/ \
+  perl-lockfile-simple \
   libproc \
   perl-readonly \
   perl-regexp-common \
@@ -107,13 +108,12 @@ RUN addgroup -g 5000 vmail \
   dovecot-pigeonhole-plugin \
   dovecot-pop3d \
   dovecot-fts-solr \
+  dovecot-fts-flatcurve \
   && arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) \
   && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$arch" \
   && chmod +x /usr/local/bin/gosu \
   && gosu nobody true
 
-#RUN cpan LockFile::Simple
-
 COPY trim_logs.sh /usr/local/bin/trim_logs.sh
 COPY clean_q_aged.sh /usr/local/bin/clean_q_aged.sh
 COPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf
@@ -132,6 +132,7 @@ COPY stop-supervisor.sh /usr/local/sbin/stop-supervisor.sh
 COPY quarantine_notify.py /usr/local/bin/quarantine_notify.py
 COPY quota_notify.py /usr/local/bin/quota_notify.py
 COPY repl_health.sh /usr/local/bin/repl_health.sh
+COPY optimize-fts.sh /usr/local/bin/optimize-fts.sh
 
 ENTRYPOINT ["/docker-entrypoint.sh"]
 CMD exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf

+ 53 - 3
data/Dockerfiles/dovecot/docker-entrypoint.sh

@@ -29,6 +29,7 @@ ${REDIS_CMDLINE} SET DOVECOT_REPL_HEALTH 1 > /dev/null
 # Create missing directories
 [[ ! -d /etc/dovecot/sql/ ]] && mkdir -p /etc/dovecot/sql/
 [[ ! -d /etc/dovecot/auth/ ]] && mkdir -p /etc/dovecot/auth/
+[[ ! -d /etc/dovecot/conf.d/ ]] && mkdir -p /etc/dovecot/conf.d/
 [[ ! -d /var/vmail/_garbage ]] && mkdir -p /var/vmail/_garbage
 [[ ! -d /var/vmail/sieve ]] && mkdir -p /var/vmail/sieve
 [[ ! -d /etc/sogo ]] && mkdir -p /etc/sogo
@@ -109,7 +110,14 @@ EOF
 
 echo -n ${ACL_ANYONE} > /etc/dovecot/acl_anyone
 
-if [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+if [[ "${FLATCURVE_EXPERIMENTAL}" =~ ^([yY][eE][sS]|[yY]) ]]; then
+echo -e "\e[33mActivating Flatcurve as FTS Backend...\e[0m"
+echo -e "\e[33mDepending on your previous setup a full reindex might be needed... \e[0m"
+echo -e "\e[34mVisit https://docs.mailcow.email/manual-guides/Dovecot/u_e-dovecot-fts/#fts-related-dovecot-commands to learn how to reindex\e[0m"
+echo -n 'quota acl zlib mail_crypt mail_crypt_acl mail_log notify fts fts_flatcurve listescape replication' > /etc/dovecot/mail_plugins
+echo -n 'quota imap_quota imap_acl acl zlib imap_zlib imap_sieve mail_crypt mail_crypt_acl notify mail_log fts fts_flatcurve listescape replication' > /etc/dovecot/mail_plugins_imap
+echo -n 'quota sieve acl zlib mail_crypt mail_crypt_acl fts fts_flatcurve notify listescape replication' > /etc/dovecot/mail_plugins_lmtp
+elif [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
 echo -n 'quota acl zlib mail_crypt mail_crypt_acl mail_log notify listescape replication' > /etc/dovecot/mail_plugins
 echo -n 'quota imap_quota imap_acl acl zlib imap_zlib imap_sieve mail_crypt mail_crypt_acl notify listescape replication mail_log' > /etc/dovecot/mail_plugins_imap
 echo -n 'quota sieve acl zlib mail_crypt mail_crypt_acl notify listescape replication' > /etc/dovecot/mail_plugins_lmtp
@@ -128,6 +136,48 @@ user_query = SELECT CONCAT(JSON_UNQUOTE(JSON_VALUE(attributes, '$.mailbox_format
 iterate_query = SELECT username FROM mailbox WHERE active = '1' OR active = '2';
 EOF
 
+
+# Temporarily set FTS depending on user choice inside mailcow.conf. Will be removed as soon as Solr is dropped
+if [[ "${FLATCURVE_EXPERIMENTAL}" =~ ^([yY][eE][sS]|[yY])$ ]]; then
+cat <<EOF > /etc/dovecot/conf.d/fts.conf
+# Autogenerated by mailcow
+plugin {
+    fts_autoindex = yes
+    fts_autoindex_exclude = \Junk
+    fts_autoindex_exclude2 = \Trash
+    fts = flatcurve
+
+    # These are not flatcurve settings, but required for Dovecot FTS. See
+    # Dovecot FTS Configuration link above for further information.
+    fts_languages = en es de
+    fts_tokenizer_generic = algorithm=simple
+    fts_tokenizers = generic email-address
+
+    # OPTIONAL: Recommended default FTS core configuration
+    fts_filters = normalizer-icu snowball stopwords
+    fts_filters_en = lowercase snowball english-possessive stopwords
+}
+EOF
+elif [[ ! "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])$ ]]; then
+cat <<EOF > /etc/dovecot/conf.d/fts.conf
+# Autogenerated by mailcow
+plugin {
+  fts = solr
+  fts_autoindex = yes
+  fts_autoindex_exclude = \Junk
+  fts_autoindex_exclude2 = \Trash
+  fts_solr = url=http://solr:8983/solr/dovecot-fts/
+
+  fts_tokenizers = generic email-address
+  fts_tokenizer_generic = algorithm=simple
+
+  fts_filters = normalizer-icu snowball stopwords
+  fts_filters_en = lowercase snowball english-possessive stopwords
+}
+EOF
+fi
+
+
 # Migrate old sieve_after file
 [[ -f /etc/dovecot/sieve_after ]] && mv /etc/dovecot/sieve_after /etc/dovecot/global_sieve_after
 # Create global sieve scripts
@@ -218,7 +268,6 @@ mail_replica = tcp:${MAILCOW_REPLICA_IP}:${DOVEADM_REPLICA_PORT}
 EOF
 fi
 
-
 # 401 is user dovecot
 if [[ ! -s /mail_crypt/ecprivkey.pem || ! -s /mail_crypt/ecpubkey.pem ]]; then
 	openssl ecparam -name prime256v1 -genkey | openssl pkey -out /mail_crypt/ecprivkey.pem
@@ -262,7 +311,8 @@ chmod +x /usr/lib/dovecot/sieve/rspamd-pipe-ham \
   /usr/local/bin/maildir_gc.sh \
   /usr/local/sbin/stop-supervisor.sh \
   /usr/local/bin/quota_notify.py \
-  /usr/local/bin/repl_health.sh
+  /usr/local/bin/repl_health.sh \
+  /usr/local/bin/optimize-fts.sh
 
 # Prepare environment file for cronjobs
 printenv | sed 's/^\(.*\)$/export \1/g' > /source_env.sh

+ 7 - 0
data/Dockerfiles/dovecot/optimize-fts.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+if [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ && ! "${FLATCURVE_EXPERIMENTAL}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+    exit 0
+else
+    doveadm fts optimize -A
+fi

+ 1 - 1
data/Dockerfiles/dovecot/sa-rules.sh

@@ -11,7 +11,7 @@ else
 fi
 
 # Deploy
-curl --connect-timeout 15 --retry 10 --max-time 30 http://www.spamassassin.heinlein-support.de/$(dig txt 1.4.3.spamassassin.heinlein-support.de +short | tr -d '"' | tr -dc '0-9').tar.gz --output /tmp/sa-rules-heinlein.tar.gz
+curl --connect-timeout 15 --retry 10 --max-time 30 https://www.spamassassin.heinlein-support.de/$(dig txt 1.4.3.spamassassin.heinlein-support.de +short | tr -d '"' | tr -dc '0-9').tar.gz --output /tmp/sa-rules-heinlein.tar.gz
 if gzip -t /tmp/sa-rules-heinlein.tar.gz; then
   tar xfvz /tmp/sa-rules-heinlein.tar.gz -C /tmp/sa-rules-heinlein
   cat /tmp/sa-rules-heinlein/*cf > /etc/rspamd/custom/sa-rules

+ 1 - 1
data/Dockerfiles/netfilter/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.19
+FROM alpine:3.20
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 WORKDIR /app

+ 25 - 18
data/Dockerfiles/netfilter/main.py

@@ -80,16 +80,16 @@ def refreshF2bregex():
   global exit_code
   if not r.get('F2B_REGEX'):
     f2bregex = {}
-    f2bregex[1] = 'mailcow UI: Invalid password for .+ by ([0-9a-f\.:]+)'
-    f2bregex[2] = 'Rspamd UI: Invalid password by ([0-9a-f\.:]+)'
-    f2bregex[3] = 'warning: .*\[([0-9a-f\.:]+)\]: SASL .+ authentication failed: (?!.*Connection lost to authentication server).+'
-    f2bregex[4] = 'warning: non-SMTP command from .*\[([0-9a-f\.:]+)]:.+'
-    f2bregex[5] = 'NOQUEUE: reject: RCPT from \[([0-9a-f\.:]+)].+Protocol error.+'
-    f2bregex[6] = '-login: Disconnected.+ \(auth failed, .+\): user=.*, method=.+, rip=([0-9a-f\.:]+),'
-    f2bregex[7] = '-login: Aborted login.+ \(auth failed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
-    f2bregex[8] = '-login: Aborted login.+ \(tried to use disallowed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
-    f2bregex[9] = 'SOGo.+ Login from \'([0-9a-f\.:]+)\' for user .+ might not have worked'
-    f2bregex[10] = '([0-9a-f\.:]+) \"GET \/SOGo\/.* HTTP.+\" 403 .+'
+    f2bregex[1] = r'mailcow UI: Invalid password for .+ by ([0-9a-f\.:]+)'
+    f2bregex[2] = r'Rspamd UI: Invalid password by ([0-9a-f\.:]+)'
+    f2bregex[3] = r'warning: .*\[([0-9a-f\.:]+)\]: SASL .+ authentication failed: (?!.*Connection lost to authentication server).+'
+    f2bregex[4] = r'warning: non-SMTP command from .*\[([0-9a-f\.:]+)]:.+'
+    f2bregex[5] = r'NOQUEUE: reject: RCPT from \[([0-9a-f\.:]+)].+Protocol error.+'
+    f2bregex[6] = r'-login: Disconnected.+ \(auth failed, .+\): user=.*, method=.+, rip=([0-9a-f\.:]+),'
+    f2bregex[7] = r'-login: Aborted login.+ \(auth failed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
+    f2bregex[8] = r'-login: Aborted login.+ \(tried to use disallowed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
+    f2bregex[9] = r'SOGo.+ Login from \'([0-9a-f\.:]+)\' for user .+ might not have worked'
+    f2bregex[10] = r'([0-9a-f\.:]+) \"GET \/SOGo\/.* HTTP.+\" 403 .+'
     r.set('F2B_REGEX', json.dumps(f2bregex, ensure_ascii=False))
   else:
     try:
@@ -114,8 +114,6 @@ def ban(address):
   global lock
 
   refreshF2boptions()
-  BAN_TIME = int(f2boptions['ban_time'])
-  BAN_TIME_INCREMENT = bool(f2boptions['ban_time_increment'])
   MAX_ATTEMPTS = int(f2boptions['max_attempts'])
   RETRY_WINDOW = int(f2boptions['retry_window'])
   NETBAN_IPV4 = '/' + str(f2boptions['netban_ipv4'])
@@ -150,7 +148,7 @@ def ban(address):
 
   if bans[net]['attempts'] >= MAX_ATTEMPTS:
     cur_time = int(round(time.time()))
-    NET_BAN_TIME = BAN_TIME if not BAN_TIME_INCREMENT else BAN_TIME * 2 ** bans[net]['ban_counter']
+    NET_BAN_TIME = calcNetBanTime(bans[net]['ban_counter'])
     logger.logCrit('Banning %s for %d minutes' % (net, NET_BAN_TIME / 60 ))
     if type(ip) is ipaddress.IPv4Address and int(f2boptions['manage_external']) != 1:
       with lock:
@@ -277,12 +275,11 @@ def snat6(snat_target):
       tables.snat6(snat_target, os.getenv('IPV6_NETWORK', 'fd4d:6169:6c63:6f77::/64'))
 
 def autopurge():
+  global f2boptions
+
   while not quit_now:
     time.sleep(10)
     refreshF2boptions()
-    BAN_TIME = int(f2boptions['ban_time'])
-    MAX_BAN_TIME = int(f2boptions['max_ban_time'])
-    BAN_TIME_INCREMENT = bool(f2boptions['ban_time_increment'])
     MAX_ATTEMPTS = int(f2boptions['max_attempts'])
     QUEUE_UNBAN = r.hgetall('F2B_QUEUE_UNBAN')
     if QUEUE_UNBAN:
@@ -290,9 +287,9 @@ def autopurge():
         unban(str(net))
     for net in bans.copy():
       if bans[net]['attempts'] >= MAX_ATTEMPTS:
-        NET_BAN_TIME = BAN_TIME if not BAN_TIME_INCREMENT else BAN_TIME * 2 ** bans[net]['ban_counter']
+        NET_BAN_TIME = calcNetBanTime(bans[net]['ban_counter'])
         TIME_SINCE_LAST_ATTEMPT = time.time() - bans[net]['last_attempt']
-        if TIME_SINCE_LAST_ATTEMPT > NET_BAN_TIME or TIME_SINCE_LAST_ATTEMPT > MAX_BAN_TIME:
+        if TIME_SINCE_LAST_ATTEMPT > NET_BAN_TIME:
           unban(net)
 
 def mailcowChainOrder():
@@ -306,6 +303,16 @@ def mailcowChainOrder():
       if quit_now: return
       quit_now, exit_code = tables.checkIPv6ChainOrder()
 
+def calcNetBanTime(ban_counter):
+  global f2boptions
+
+  BAN_TIME = int(f2boptions['ban_time'])
+  MAX_BAN_TIME = int(f2boptions['max_ban_time'])
+  BAN_TIME_INCREMENT = bool(f2boptions['ban_time_increment'])
+  NET_BAN_TIME = BAN_TIME if not BAN_TIME_INCREMENT else BAN_TIME * 2 ** ban_counter
+  NET_BAN_TIME = max([BAN_TIME, min([NET_BAN_TIME, MAX_BAN_TIME])])
+  return NET_BAN_TIME
+
 def isIpNetwork(address):
   try:
     ipaddress.ip_network(address, False)

+ 5 - 2
data/Dockerfiles/netfilter/modules/Logger.py

@@ -13,9 +13,12 @@ class Logger:
     tolog['time'] = int(round(time.time()))
     tolog['priority'] = priority
     tolog['message'] = message
-    if self.r is not None:
-      self.r.lpush('NETFILTER_LOG', json.dumps(tolog, ensure_ascii=False))
     print(message)
+    if self.r is not None:
+      try:
+        self.r.lpush('NETFILTER_LOG', json.dumps(tolog, ensure_ascii=False))
+      except Exception as ex:
+        print('Failed logging to redis: %s'  % (ex))
 
   def logWarn(self, message):
     self.log('warn', message)

+ 2 - 0
data/Dockerfiles/netfilter/modules/NFTables.py

@@ -452,6 +452,8 @@ class NFTables:
           continue
 
         rule = _object["rule"]["expr"][0]["match"]
+        if not "payload" in rule["left"]:
+          continue
         left_opt = rule["left"]["payload"]
         if not left_opt["protocol"] == _family:
           continue

+ 1 - 1
data/Dockerfiles/olefy/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.19
+FROM alpine:3.20
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 ARG PIP_BREAK_SYSTEM_PACKAGES=1

+ 1 - 0
data/Dockerfiles/phpfpm/docker-entrypoint.sh

@@ -24,6 +24,7 @@ done
 CONTAINER_ID=
 until [[ ! -z "${CONTAINER_ID}" ]] && [[ "${CONTAINER_ID}" =~ ^[[:alnum:]]*$ ]]; do
   CONTAINER_ID=$(curl --silent --insecure https://dockerapi/containers/json | jq -r ".[] | {name: .Config.Labels[\"com.docker.compose.service\"], project: .Config.Labels[\"com.docker.compose.project\"], id: .Id}" 2> /dev/null | jq -rc "select( .name | tostring | contains(\"mysql-mailcow\")) | select( .project | tostring | contains(\"${COMPOSE_PROJECT_NAME,,}\")) | .id" 2> /dev/null)
+  echo "Could not get mysql-mailcow container id... trying again"
   sleep 2
 done
 echo "MySQL @ ${CONTAINER_ID}"

+ 2 - 2
data/Dockerfiles/postfix/Dockerfile

@@ -1,5 +1,5 @@
-FROM debian:bullseye-slim
-LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
+FROM debian:bookworm-slim
+LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 ARG DEBIAN_FRONTEND=noninteractive
 ENV LC_ALL C

+ 0 - 6
data/Dockerfiles/postfix/postfix.sh

@@ -415,12 +415,6 @@ postscreen_dnsbl_sites = wl.mailspike.net=127.0.0.[18;19;20]*-2
   b.barracudacentral.org=127.0.0.2*7
   bl.mailspike.net=127.0.0.2*5
   bl.mailspike.net=127.0.0.[10;11;12]*4
-  dnsbl.sorbs.net=127.0.0.10*8
-  dnsbl.sorbs.net=127.0.0.5*6
-  dnsbl.sorbs.net=127.0.0.7*3
-  dnsbl.sorbs.net=127.0.0.8*2
-  dnsbl.sorbs.net=127.0.0.6*2
-  dnsbl.sorbs.net=127.0.0.9*2
 EOF
 fi
 DNSBL_CONFIG=$(grep -v '^#' /opt/postfix/conf/dns_blocklists.cf | grep '\S')

+ 1 - 1
data/Dockerfiles/postfix/syslog-ng-redis_slave.conf

@@ -1,4 +1,4 @@
-@version: 3.28
+@version: 3.38
 @include "scl.conf"
 options {
   chain_hostnames(off);

+ 1 - 1
data/Dockerfiles/postfix/syslog-ng.conf

@@ -1,4 +1,4 @@
-@version: 3.28
+@version: 3.38
 @include "scl.conf"
 options {
   chain_hostnames(off);

+ 12 - 9
data/Dockerfiles/rspamd/Dockerfile

@@ -1,8 +1,9 @@
-FROM debian:bookworm-slim
+FROM debian:bullseye-slim
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 ARG DEBIAN_FRONTEND=noninteractive
-ARG CODENAME=bookworm
+ARG RSPAMD_VER=rspamd_3.7.5-2~8c86c1676   
+ARG CODENAME=bullseye
 ENV LC_ALL C
 
 RUN apt-get update && apt-get install -y --no-install-recommends \
@@ -11,12 +12,15 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
   gnupg2 \
   apt-transport-https \
   dnsutils \
-  netcat-traditional \
-  && apt-key adv --fetch-keys https://rspamd.com/apt-stable/gpg.key \
-  && echo "deb https://rspamd.com/apt-stable/ $CODENAME main" > /etc/apt/sources.list.d/rspamd.list \
-  && apt-get update \
-  && apt-get --no-install-recommends -y install rspamd redis-tools procps nano \
-  && rm -rf /var/lib/apt/lists/* \
+  netcat \
+  wget \
+  redis-tools \ 
+  procps \ 
+  nano \
+  && arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) \
+  && wget -P /tmp https://rspamd.com/apt-stable/pool/main/r/rspamd/${RSPAMD_VER}~${CODENAME}_${arch}.deb\
+  && apt install -y /tmp/${RSPAMD_VER}~${CODENAME}_${arch}.deb \
+  && rm -rf /var/lib/apt/lists/* /tmp/*\
   && apt-get autoremove --purge \
   && apt-get clean \
   && mkdir -p /run/rspamd \
@@ -25,7 +29,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
   && sed -i 's/#analysis_keyword_table > 0/analysis_cat_table.macro_exist == "M"/g' /usr/share/rspamd/lualib/lua_scanners/oletools.lua
 
 COPY settings.conf /etc/rspamd/settings.conf
-COPY metadata_exporter.lua /usr/share/rspamd/plugins/metadata_exporter.lua
 COPY set_worker_password.sh /set_worker_password.sh
 COPY docker-entrypoint.sh /docker-entrypoint.sh
 

+ 0 - 632
data/Dockerfiles/rspamd/metadata_exporter.lua

@@ -1,632 +0,0 @@
---[[
-Copyright (c) 2016, Andrew Lewis <nerf@judo.za.org>
-Copyright (c) 2016, Vsevolod Stakhov <vsevolod@highsecure.ru>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-]]--
-
-if confighelp then
-  return
-end
-
--- A plugin that pushes metadata (or whole messages) to external services
-
-local redis_params
-local lua_util = require "lua_util"
-local rspamd_http = require "rspamd_http"
-local rspamd_util = require "rspamd_util"
-local rspamd_logger = require "rspamd_logger"
-local ucl = require "ucl"
-local E = {}
-local N = 'metadata_exporter'
-
-local settings = {
-  pusher_enabled = {},
-  pusher_format = {},
-  pusher_select = {},
-  mime_type = 'text/plain',
-  defer = false,
-  mail_from = '',
-  mail_to = 'postmaster@localhost',
-  helo = 'rspamd',
-  email_template = [[From: "Rspamd" <$mail_from>
-To: $mail_to
-Subject: Spam alert
-Date: $date
-MIME-Version: 1.0
-Message-ID: <$our_message_id>
-Content-type: text/plain; charset=utf-8
-Content-Transfer-Encoding: 8bit
-
-Authenticated username: $user
-IP: $ip
-Queue ID: $qid
-SMTP FROM: $from
-SMTP RCPT: $rcpt
-MIME From: $header_from
-MIME To: $header_to
-MIME Date: $header_date
-Subject: $header_subject
-Message-ID: $message_id
-Action: $action
-Score: $score
-Symbols: $symbols]],
-}
-
-local function get_general_metadata(task, flatten, no_content)
-  local r = {}
-  local ip = task:get_from_ip()
-  if ip and ip:is_valid() then
-    r.ip = tostring(ip)
-  else
-    r.ip = 'unknown'
-  end
-  r.user = task:get_user() or 'unknown'
-  r.qid = task:get_queue_id() or 'unknown'
-  r.subject = task:get_subject() or 'unknown'
-  r.action = task:get_metric_action('default')
-
-  local s = task:get_metric_score('default')[1]
-  r.score = flatten and string.format('%.2f', s) or s
-
-  local fuzzy = task:get_mempool():get_variable("fuzzy_hashes", "fstrings")
-  if fuzzy and #fuzzy > 0 then
-    local fz = {}
-    for _,h in ipairs(fuzzy) do
-      table.insert(fz, h)
-    end
-    if not flatten then
-      r.fuzzy = fz
-    else
-      r.fuzzy = table.concat(fz, ', ')
-    end
-  else
-    r.fuzzy = 'unknown'
-  end
-
-  local rcpt = task:get_recipients('smtp')
-  if rcpt then
-    local l = {}
-    for _, a in ipairs(rcpt) do
-      table.insert(l, a['addr'])
-    end
-    if not flatten then
-      r.rcpt = l
-    else
-      r.rcpt = table.concat(l, ', ')
-    end
-  else
-    r.rcpt = 'unknown'
-  end
-  local from = task:get_from('smtp')
-  if ((from or E)[1] or E).addr then
-    r.from = from[1].addr
-  else
-    r.from = 'unknown'
-  end
-  local syminf = task:get_symbols_all()
-  if flatten then
-    local l = {}
-    for _, sym in ipairs(syminf) do
-      local txt
-      if sym.options then
-        local topt = table.concat(sym.options, ', ')
-        txt = sym.name .. '(' .. string.format('%.2f', sym.score) .. ')' .. ' [' .. topt .. ']'
-      else
-        txt = sym.name .. '(' .. string.format('%.2f', sym.score) .. ')'
-      end
-      table.insert(l, txt)
-    end
-    r.symbols = table.concat(l, '\n\t')
-  else
-    r.symbols = syminf
-  end
-  local function process_header(name)
-    local hdr = task:get_header_full(name)
-    if hdr then
-      local l = {}
-      for _, h in ipairs(hdr) do
-        table.insert(l, h.decoded)
-      end
-      if not flatten then
-        return l
-      else
-        return table.concat(l, '\n')
-      end
-    else
-      return 'unknown'
-    end
-  end
-  if not no_content then
-    r.header_from = process_header('from')
-    r.header_to = process_header('to')
-    r.header_subject = process_header('subject')
-    r.header_date = process_header('date')
-    r.message_id = task:get_message_id()
-  end
-  return r
-end
-
-local formatters = {
-  default = function(task)
-    return task:get_content(), {}
-  end,
-  email_alert = function(task, rule, extra)
-    local meta = get_general_metadata(task, true)
-    local display_emails = {}
-    local mail_targets = {}
-    meta.mail_from = rule.mail_from or settings.mail_from
-    local mail_rcpt = rule.mail_to or settings.mail_to
-    if type(mail_rcpt) ~= 'table' then
-      table.insert(display_emails, string.format('<%s>', mail_rcpt))
-      table.insert(mail_targets, mail_rcpt)
-    else
-      for _, e in ipairs(mail_rcpt) do
-        table.insert(display_emails, string.format('<%s>', e))
-        table.insert(mail_targets, mail_rcpt)
-      end
-    end
-    if rule.email_alert_sender then
-      local x = task:get_from('smtp')
-      if x and string.len(x[1].addr) > 0 then
-        table.insert(mail_targets, x)
-        table.insert(display_emails, string.format('<%s>', x[1].addr))
-      end
-    end
-    if rule.email_alert_user then
-      local x = task:get_user()
-      if x then
-        table.insert(mail_targets, x)
-        table.insert(display_emails, string.format('<%s>', x))
-      end
-    end
-    if rule.email_alert_recipients then
-      local x = task:get_recipients('smtp')
-      if x then
-        for _, e in ipairs(x) do
-          if string.len(e.addr) > 0 then
-            table.insert(mail_targets, e.addr)
-            table.insert(display_emails, string.format('<%s>', e.addr))
-          end
-        end
-      end
-    end
-    meta.mail_to = table.concat(display_emails, ', ')
-    meta.our_message_id = rspamd_util.random_hex(12) .. '@rspamd'
-    meta.date = rspamd_util.time_to_string(rspamd_util.get_time())
-    return lua_util.template(rule.email_template or settings.email_template, meta), { mail_targets = mail_targets}
-  end,
-  json = function(task)
-    return ucl.to_format(get_general_metadata(task), 'json-compact')
-  end
-}
-
-local function is_spam(action)
-  return (action == 'reject' or action == 'add header' or action == 'rewrite subject')
-end
-
-local selectors = {
-  default = function(task)
-    return true
-  end,
-  is_spam = function(task)
-    local action = task:get_metric_action('default')
-    return is_spam(action)
-  end,
-  is_spam_authed = function(task)
-    if not task:get_user() then
-      return false
-    end
-    local action = task:get_metric_action('default')
-    return is_spam(action)
-  end,
-  is_reject = function(task)
-    local action = task:get_metric_action('default')
-    return (action == 'reject')
-  end,
-  is_reject_authed = function(task)
-    if not task:get_user() then
-      return false
-    end
-    local action = task:get_metric_action('default')
-    return (action == 'reject')
-  end,
-}
-
-local function maybe_defer(task, rule)
-  if rule.defer then
-    rspamd_logger.warnx(task, 'deferring message')
-    task:set_pre_result('soft reject', 'deferred', N)
-  end
-end
-
-local pushers = {
-  redis_pubsub = function(task, formatted, rule)
-    local _,ret,upstream
-    local function redis_pub_cb(err)
-      if err then
-        rspamd_logger.errx(task, 'got error %s when publishing on server %s',
-            err, upstream:get_addr())
-        return maybe_defer(task, rule)
-      end
-      return true
-    end
-    ret,_,upstream = rspamd_redis_make_request(task,
-      redis_params, -- connect params
-      nil, -- hash key
-      true, -- is write
-      redis_pub_cb, --callback
-      'PUBLISH', -- command
-      {rule.channel, formatted} -- arguments
-    )
-    if not ret then
-      rspamd_logger.errx(task, 'error connecting to redis')
-      maybe_defer(task, rule)
-    end
-  end,
-  http = function(task, formatted, rule)
-    local function http_callback(err, code)
-      if err then
-        rspamd_logger.errx(task, 'got error %s in http callback', err)
-        return maybe_defer(task, rule)
-      end
-      if code ~= 200 then
-        rspamd_logger.errx(task, 'got unexpected http status: %s', code)
-        return maybe_defer(task, rule)
-      end
-      return true
-    end
-    local hdrs = {}
-    if rule.meta_headers then
-      local gm = get_general_metadata(task, false, true)
-      local pfx = rule.meta_header_prefix or 'X-Rspamd-'
-      for k, v in pairs(gm) do
-        if type(v) == 'table' then
-          hdrs[pfx .. k] = ucl.to_format(v, 'json-compact')
-        else
-          hdrs[pfx .. k] = v
-        end
-      end
-    end
-    rspamd_http.request({
-      task=task,
-      url=rule.url,
-      body=formatted,
-      callback=http_callback,
-      mime_type=rule.mime_type or settings.mime_type,
-      headers=hdrs,
-    })
-  end,
-  send_mail = function(task, formatted, rule, extra)
-    local lua_smtp = require "lua_smtp"
-    local function sendmail_cb(ret, err)
-      if not ret then
-        rspamd_logger.errx(task, 'SMTP export error: %s', err)
-        maybe_defer(task, rule)
-      end
-    end
-
-    lua_smtp.sendmail({
-      task = task,
-      host = rule.smtp,
-      port = rule.smtp_port or settings.smtp_port or 25,
-      from = rule.mail_from or settings.mail_from,
-      recipients = extra.mail_targets or rule.mail_to or settings.mail_to,
-      helo = rule.helo or settings.helo,
-      timeout = rule.timeout or settings.timeout,
-    }, formatted, sendmail_cb)
-  end,
-}
-
-local opts = rspamd_config:get_all_opt(N)
-if not opts then return end
-local process_settings = {
-  select = function(val)
-    selectors.custom = assert(load(val))()
-  end,
-  format = function(val)
-    formatters.custom = assert(load(val))()
-  end,
-  push = function(val)
-    pushers.custom = assert(load(val))()
-  end,
-  custom_push = function(val)
-    if type(val) == 'table' then
-      for k, v in pairs(val) do
-        pushers[k] = assert(load(v))()
-      end
-    end
-  end,
-  custom_select = function(val)
-    if type(val) == 'table' then
-      for k, v in pairs(val) do
-        selectors[k] = assert(load(v))()
-      end
-    end
-  end,
-  custom_format = function(val)
-    if type(val) == 'table' then
-      for k, v in pairs(val) do
-        formatters[k] = assert(load(v))()
-      end
-    end
-  end,
-  pusher_enabled = function(val)
-    if type(val) == 'string' then
-      if pushers[val] then
-        settings.pusher_enabled[val] = true
-      else
-        rspamd_logger.errx(rspamd_config, 'Pusher type: %s is invalid', val)
-      end
-    elseif type(val) == 'table' then
-      for _, v in ipairs(val) do
-        if pushers[v] then
-          settings.pusher_enabled[v] = true
-        else
-          rspamd_logger.errx(rspamd_config, 'Pusher type: %s is invalid', val)
-        end
-      end
-    end
-  end,
-}
-for k, v in pairs(opts) do
-  local f = process_settings[k]
-  if f then
-    f(opts[k])
-  else
-    settings[k] = v
-  end
-end
-if type(settings.rules) ~= 'table' then
-  -- Legacy config
-  settings.rules = {}
-  if not next(settings.pusher_enabled) then
-    if pushers.custom then
-      rspamd_logger.infox(rspamd_config, 'Custom pusher implicitly enabled')
-      settings.pusher_enabled.custom = true
-    else
-      -- Check legacy options
-      if settings.url then
-        rspamd_logger.warnx(rspamd_config, 'HTTP pusher implicitly enabled')
-        settings.pusher_enabled.http = true
-      end
-      if settings.channel then
-        rspamd_logger.warnx(rspamd_config, 'Redis Pubsub pusher implicitly enabled')
-        settings.pusher_enabled.redis_pubsub = true
-      end
-      if settings.smtp and settings.mail_to then
-        rspamd_logger.warnx(rspamd_config, 'SMTP pusher implicitly enabled')
-        settings.pusher_enabled.send_mail = true
-      end
-    end
-  end
-  if not next(settings.pusher_enabled) then
-    rspamd_logger.errx(rspamd_config, 'No push backend enabled')
-    return
-  end
-  if settings.formatter then
-    settings.format = formatters[settings.formatter]
-    if not settings.format then
-      rspamd_logger.errx(rspamd_config, 'No such formatter: %s', settings.formatter)
-      return
-    end
-  end
-  if settings.selector then
-    settings.select = selectors[settings.selector]
-    if not settings.select then
-      rspamd_logger.errx(rspamd_config, 'No such selector: %s', settings.selector)
-      return
-    end
-  end
-  for k in pairs(settings.pusher_enabled) do
-    local formatter = settings.pusher_format[k]
-    local selector = settings.pusher_select[k]
-    if not formatter then
-      settings.pusher_format[k] = settings.formatter or 'default'
-      rspamd_logger.infox(rspamd_config, 'Using default formatter for %s pusher', k)
-    else
-      if not formatters[formatter] then
-        rspamd_logger.errx(rspamd_config, 'No such formatter: %s - disabling %s', formatter, k)
-        settings.pusher_enabled.k = nil
-      end
-    end
-    if not selector then
-      settings.pusher_select[k] = settings.selector or 'default'
-      rspamd_logger.infox(rspamd_config, 'Using default selector for %s pusher', k)
-    else
-      if not selectors[selector] then
-        rspamd_logger.errx(rspamd_config, 'No such selector: %s - disabling %s', selector, k)
-        settings.pusher_enabled.k = nil
-      end
-    end
-  end
-  if settings.pusher_enabled.redis_pubsub then
-    redis_params = rspamd_parse_redis_server(N)
-    if not redis_params then
-      rspamd_logger.errx(rspamd_config, 'No redis servers are specified')
-      settings.pusher_enabled.redis_pubsub = nil
-    else
-      local r = {}
-      r.backend = 'redis_pubsub'
-      r.channel = settings.channel
-      r.defer = settings.defer
-      r.selector = settings.pusher_select.redis_pubsub
-      r.formatter = settings.pusher_format.redis_pubsub
-      settings.rules[r.backend:upper()] = r
-    end
-  end
-  if settings.pusher_enabled.http then
-    if not settings.url then
-      rspamd_logger.errx(rspamd_config, 'No URL is specified')
-      settings.pusher_enabled.http = nil
-    else
-      local r = {}
-      r.backend = 'http'
-      r.url = settings.url
-      r.mime_type = settings.mime_type
-      r.defer = settings.defer
-      r.selector = settings.pusher_select.http
-      r.formatter = settings.pusher_format.http
-      settings.rules[r.backend:upper()] = r
-    end
-  end
-  if settings.pusher_enabled.send_mail then
-    if not (settings.mail_to and settings.smtp) then
-      rspamd_logger.errx(rspamd_config, 'No mail_to and/or smtp setting is specified')
-      settings.pusher_enabled.send_mail = nil
-    else
-      local r = {}
-      r.backend = 'send_mail'
-      r.mail_to = settings.mail_to
-      r.mail_from = settings.mail_from
-      r.helo = settings.hello
-      r.smtp = settings.smtp
-      r.smtp_port = settings.smtp_port
-      r.email_template = settings.email_template
-      r.defer = settings.defer
-      r.selector = settings.pusher_select.send_mail
-      r.formatter = settings.pusher_format.send_mail
-      settings.rules[r.backend:upper()] = r
-    end
-  end
-  if not next(settings.pusher_enabled) then
-    rspamd_logger.errx(rspamd_config, 'No push backend enabled')
-    return
-  end
-elseif not next(settings.rules) then
-  lua_util.debugm(N, rspamd_config, 'No rules enabled')
-  return
-end
-if not settings.rules or not next(settings.rules) then
-  rspamd_logger.errx(rspamd_config, 'No rules enabled')
-  return
-end
-local backend_required_elements = {
-  http = {
-    'url',
-  },
-  smtp = {
-    'mail_to',
-    'smtp',
-  },
-  redis_pubsub = {
-    'channel',
-  },
-}
-local check_element = {
-  selector = function(k, v)
-    if not selectors[v] then
-      rspamd_logger.errx(rspamd_config, 'Rule %s has invalid selector %s', k, v)
-      return false
-    else
-      return true
-    end
-  end,
-  formatter = function(k, v)
-    if not formatters[v] then
-      rspamd_logger.errx(rspamd_config, 'Rule %s has invalid formatter %s', k, v)
-      return false
-    else
-      return true
-    end
-  end,
-}
-local backend_check = {
-  default = function(k, rule)
-    local reqset = backend_required_elements[rule.backend]
-    if reqset then
-      for _, e in ipairs(reqset) do
-        if not rule[e] then
-          rspamd_logger.errx(rspamd_config, 'Rule %s misses required setting %s', k, e)
-          settings.rules[k] = nil
-        end
-      end
-    end
-    for sett, v in pairs(rule) do
-      local f = check_element[sett]
-      if f then
-        if not f(sett, v) then
-          settings.rules[k] = nil
-        end
-      end
-    end
-  end,
-}
-backend_check.redis_pubsub = function(k, rule)
-  if not redis_params then
-    redis_params = rspamd_parse_redis_server(N)
-  end
-  if not redis_params then
-    rspamd_logger.errx(rspamd_config, 'No redis servers are specified')
-    settings.rules[k] = nil
-  else
-    backend_check.default(k, rule)
-  end
-end
-setmetatable(backend_check, {
-  __index = function()
-    return backend_check.default
-  end,
-})
-for k, v in pairs(settings.rules) do
-  if type(v) == 'table' then
-    local backend = v.backend
-    if not backend then
-      rspamd_logger.errx(rspamd_config, 'Rule %s has no backend', k)
-      settings.rules[k] = nil
-    elseif not pushers[backend] then
-      rspamd_logger.errx(rspamd_config, 'Rule %s has invalid backend %s', k, backend)
-      settings.rules[k] = nil
-    else
-      local f = backend_check[backend]
-      f(k, v)
-    end
-  else
-    rspamd_logger.errx(rspamd_config, 'Rule %s has bad type: %s', k, type(v))
-    settings.rules[k] = nil
-  end
-end
-
-local function gen_exporter(rule)
-  return function (task)
-    if task:has_flag('skip') then return end
-    local selector = rule.selector or 'default'
-    local selected = selectors[selector](task)
-    if selected then
-      lua_util.debugm(N, task, 'Message selected for processing')
-      local formatter = rule.formatter or 'default'
-      local formatted, extra = formatters[formatter](task, rule)
-      if formatted then
-        pushers[rule.backend](task, formatted, rule, extra)
-      else
-        lua_util.debugm(N, task, 'Formatter [%s] returned non-truthy value [%s]', formatter, formatted)
-      end
-    else
-      lua_util.debugm(N, task, 'Selector [%s] returned non-truthy value [%s]', selector, selected)
-    end
-  end
-end
-
-if not next(settings.rules) then
-  rspamd_logger.errx(rspamd_config, 'No rules enabled')
-  lua_util.disable_module(N, "config")
-end
-for k, r in pairs(settings.rules) do
-  rspamd_config:register_symbol({
-    name = 'EXPORT_METADATA_' .. k,
-    type = 'idempotent',
-    callback = gen_exporter(r),
-    priority = 10,
-    flags = 'empty,explicit_disable,ignore_passthrough',
-  })
-end

+ 1 - 1
data/Dockerfiles/sogo/Dockerfile

@@ -1,5 +1,5 @@
 FROM debian:bullseye-slim
-LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
+LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 ARG DEBIAN_FRONTEND=noninteractive
 ARG DEBIAN_VERSION=bullseye

+ 15 - 1
data/Dockerfiles/solr/solr.sh

@@ -1,7 +1,15 @@
 #!/bin/bash
 
-if [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+if [[ "${FLATCURVE_EXPERIMENTAL}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+  echo "FLATCURVE_EXPERIMENTAL=y, skipping Solr but enabling Flatcurve as FTS for Dovecot!"
+  echo "Solr will be removed in the future!"
+  sleep 365d
+  exit 0
+elif [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
   echo "SKIP_SOLR=y, skipping Solr..."
+  echo "HINT: You could try the newer FTS Backend Flatcurve, which is currently in experimental state..."
+  echo "Simply set FLATCURVE_EXPERIMENTAL=y inside your mailcow.conf and restart the stack afterwards!"
+  echo "Solr will be removed in the future!"
   sleep 365d
   exit 0
 fi
@@ -57,5 +65,11 @@ if [[ "${1}" == "--bootstrap" ]]; then
   exit 0
 fi
 
+echo "Starting up Solr..."
+echo -e "\e[31mSolr is deprecated! You can try the new FTS System now by enabling FLATCURVE_EXPERIMENTAL=y inside mailcow.conf and restarting the stack\e[0m"
+echo -e "\e[31mSolr will be removed completely soon!\e[0m"
+
+sleep 15
+
 exec gosu solr solr-foreground
 

+ 3 - 4
data/Dockerfiles/unbound/Dockerfile

@@ -1,11 +1,10 @@
-FROM alpine:3.18
+FROM alpine:3.20
 
-LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
+LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 RUN apk add --update --no-cache \
 	curl \
 	bind-tools \
-	netcat-openbsd \
 	unbound \
 	bash \
 	openssl \
@@ -20,7 +19,7 @@ EXPOSE 53/udp 53/tcp
 
 COPY docker-entrypoint.sh /docker-entrypoint.sh
 
-# healthcheck (dig, ping, nc)
+# healthcheck (dig, ping)
 COPY healthcheck.sh /healthcheck.sh
 RUN chmod +x /healthcheck.sh
 HEALTHCHECK --interval=30s --timeout=30s CMD [ "/healthcheck.sh" ]

+ 5 - 28
data/Dockerfiles/unbound/healthcheck.sh

@@ -5,9 +5,13 @@ if [[ "${SKIP_UNBOUND_HEALTHCHECK}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
     SKIP_UNBOUND_HEALTHCHECK=y
 fi
 
+# Reset logfile
+echo "$(date +"%Y-%m-%d %H:%M:%S"): Starting health check - logs can be found in /var/log/healthcheck.log"
+echo "$(date +"%Y-%m-%d %H:%M:%S"): Starting health check" > /var/log/healthcheck.log
+
 # Declare log function for logfile inside container
 function log_to_file() {
-    echo "$(date +"%Y-%m-%d %H:%M:%S"): $1" > /var/log/healthcheck.log
+    echo "$(date +"%Y-%m-%d %H:%M:%S"): $1" >> /var/log/healthcheck.log
 }
 
 # General Ping function to check general pingability
@@ -50,27 +54,6 @@ function check_dns() {
     
 }
 
-# Simple Netcat Check to connect to common webports
-function check_netcat() {
-    declare -a domains=("mailcow.email" "github.com" "hub.docker.com")
-    declare -a ports=("80" "443")
-
-    for domain in "${domains[@]}" ; do
-        for port in "${ports[@]}" ; do
-            nc -z -w 2 $domain $port
-            if [ $? -ne 0 ]; then
-                log_to_file "Healthcheck: Could not reach $domain on Port $port... Gave up!"
-                log_to_file "Please check your internet connection or firewall rules to fix this error."
-                return 1
-            fi
-        done
-    done
-
-    log_to_file "Healthcheck: Netcat Checks WORKING properly!"
-    return 0
-
-}
-
 if [[ ${SKIP_UNBOUND_HEALTHCHECK} == "y" ]]; then
     log_to_file "Healthcheck: ALL CHECKS WERE SKIPPED! Unbound is healthy!"
     exit 0
@@ -89,11 +72,5 @@ if [ $? -ne 0 ]; then
     exit 1
 fi
 
-check_netcat
-
-if [ $? -ne 0 ]; then
-    exit 1
-fi
-
 log_to_file "Healthcheck: ALL CHECKS WERE SUCCESSFUL! Unbound is healthy!"
 exit 0

+ 1 - 1
data/Dockerfiles/watchdog/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.18
+FROM alpine:3.20
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 # Installation

+ 2 - 3
data/conf/dovecot/dovecot.conf

@@ -10,6 +10,7 @@
 auth_mechanisms = plain login
 #mail_debug = yes
 #auth_debug = yes
+#log_debug = category=fts-flatcurve # Activate Logging for Flatcurve FTS Searchings
 log_path = syslog
 disable_plaintext_auth = yes
 # Uncomment on NFS share
@@ -194,9 +195,6 @@ plugin {
   acl_shared_dict = file:/var/vmail/shared-mailboxes.db
   acl = vfile
   acl_user = %u
-  fts = solr
-  fts_autoindex = yes
-  fts_solr = url=http://solr:8983/solr/dovecot-fts/
   quota = dict:Userquota::proxy::sqlquota
   quota_rule2 = Trash:storage=+100%%
   sieve = /var/vmail/sieve/%u.sieve
@@ -304,6 +302,7 @@ replication_dsync_parameters = -d -l 30 -U -n INBOX
 !include_try /etc/dovecot/sogo_trusted_ip.conf
 !include_try /etc/dovecot/extra.conf
 !include_try /etc/dovecot/shared_namespace.conf
+!include_try /etc/dovecot/conf.d/fts.conf
 # </Includes>
 default_client_limit = 10400
 default_vsz_limit = 1024 M

+ 1 - 1
data/conf/postfix/anonymize_headers.pcre

@@ -1,6 +1,6 @@
 if /^\s*Received:.*Authenticated sender.*\(Postcow\)/
 #/^Received: from .*? \([\w-.]* \[.*?\]\)\s+\(Authenticated sender: (.+)\)\s+by.+\(Postcow\) with (E?SMTPS?A?) id ([A-F0-9]+).+;.*?/
-/^Received: from .*? \([\w-.]* \[.*?\]\)(.*|\n.*)\(Authenticated sender: (.+)\)\s+by.+\(Postcow\) with (.*)/
+/^Received: from .*? \([\w\-.]* \[.*?\]\)(.*|\n.*)\(Authenticated sender: (.+)\)\s+by.+\(Postcow\) with (.*)/
   REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with $3
 endif
 if /^\s*Received: from.* \(.*dovecot-mailcow.*mailcow-network.*\).*\(Postcow\)/

+ 10 - 10
data/conf/postfix/main.cf

@@ -114,14 +114,14 @@ smtpd_tls_loglevel = 1
 
 # Mandatory protocols and ciphers are used when a connections is enforced to use TLS
 # Does _not_ apply to enforced incoming TLS settings per mailbox
-smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
-lmtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_mandatory_protocols = >=TLSv1.2
+lmtp_tls_mandatory_protocols = >=TLSv1.2
+smtpd_tls_mandatory_protocols = >=TLSv1.2
 smtpd_tls_mandatory_ciphers = high
 
-smtp_tls_protocols = !SSLv2, !SSLv3
-lmtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
-smtpd_tls_protocols = !SSLv2, !SSLv3
+smtp_tls_protocols = >=TLSv1.2
+lmtp_tls_protocols = >=TLSv1.2
+smtpd_tls_protocols = >=TLSv1.2
 
 smtpd_tls_security_level = may
 tls_preempt_cipherlist = yes
@@ -163,12 +163,12 @@ transport_maps = pcre:/opt/postfix/conf/custom_transport.pcre,
   proxy:mysql:/opt/postfix/conf/sql/mysql_transport_maps.cf
 smtp_sasl_auth_soft_bounce = no
 postscreen_discard_ehlo_keywords = silent-discard, dsn, chunking
-smtpd_discard_ehlo_keywords = chunking
-compatibility_level = 2
+smtpd_discard_ehlo_keywords = chunking, silent-discard
+compatibility_level = 3.7
 smtputf8_enable = no
 # Define protocols for SMTPS and submission service
-submission_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
-smtps_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+submission_smtpd_tls_mandatory_protocols = >=TLSv1.2
+smtps_smtpd_tls_mandatory_protocols = >=TLSv1.2
 parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,qmqpd_authorized_clients
 
 # DO NOT EDIT ANYTHING BELOW #

+ 0 - 1
data/conf/postfix/master.cf

@@ -4,7 +4,6 @@ smtp       inet  n       -       n       -       1       postscreen
   -o postscreen_upstream_proxy_protocol=haproxy
   -o syslog_name=haproxy
 smtpd      pass  -       -       n       -       -       smtpd
-  -o smtpd_helo_restrictions=permit_mynetworks,reject_non_fqdn_helo_hostname
   -o smtpd_sasl_auth_enable=no
   -o smtpd_sender_restrictions=permit_mynetworks,reject_unlisted_sender,reject_unknown_sender_domain
 

+ 53 - 149
data/conf/postfix/postscreen_access.cidr

@@ -1,6 +1,6 @@
-# Whitelist generated by Postwhite v3.4 on Thu Feb  1 00:13:50 UTC 2024
+# Whitelist generated by Postwhite v3.4 on Mon Jul  1 00:16:55 UTC 2024
 # https://github.com/stevejenkins/postwhite/
-# 2089 total rules
+# 1993 total rules
 2a00:1450:4000::/36	permit
 2a01:111:f400::/48	permit
 2a01:111:f403:8000::/50	permit
@@ -13,40 +13,41 @@
 2.207.151.53	permit
 3.70.123.177	permit
 3.93.157.0/24	permit
+3.94.40.108	permit
 3.129.120.190	permit
-3.137.16.58	permit
 3.210.190.0/24	permit
 8.20.114.31	permit
 8.25.194.0/23	permit
 8.25.196.0/23	permit
 8.39.54.0/23	permit
 8.40.222.0/23	permit
+10.162.0.0/16	permit
 12.130.86.238	permit
-13.70.32.43	permit
 13.72.50.45	permit
-13.74.143.28	permit
-13.78.233.182	permit
-13.92.31.129	permit
 13.110.208.0/21	permit
 13.110.209.0/24	permit
 13.110.216.0/22	permit
 13.110.224.0/20	permit
 13.111.0.0/16	permit
+13.111.191.0/24	permit
 15.200.21.50	permit
 15.200.44.248	permit
 15.200.201.185	permit
+17.41.0.0/16	permit
 17.57.155.0/24	permit
 17.57.156.0/24	permit
 17.58.0.0/16	permit
+17.142.0.0/15	permit
 18.156.89.250	permit
 18.157.243.190	permit
 18.194.95.56	permit
 18.198.96.88	permit
 18.208.124.128/25	permit
 18.216.232.154	permit
-18.234.1.244	permit
 18.236.40.242	permit
+18.236.56.161	permit
 20.51.6.32/30	permit
+20.51.98.61	permit
 20.52.52.2	permit
 20.52.128.133	permit
 20.59.80.4/30	permit
@@ -64,10 +65,9 @@
 20.107.239.64/30	permit
 20.112.250.133	permit
 20.118.139.208/30	permit
-20.185.213.160/27	permit
-20.185.213.224/27	permit
+20.141.10.196	permit
+20.185.213.0/24	permit
 20.185.214.0/27	permit
-20.185.214.2	permit
 20.185.214.32/27	permit
 20.185.214.64/27	permit
 20.231.239.246	permit
@@ -91,23 +91,23 @@
 27.123.204.172	permit
 27.123.204.188/30	permit
 27.123.204.192	permit
-27.123.206.0/24	permit
 27.123.206.50/31	permit
 27.123.206.56/29	permit
 27.123.206.76/30	permit
 27.123.206.80/28	permit
 31.25.48.222	permit
 34.195.217.107	permit
-34.202.239.6	permit
 34.212.163.75	permit
 34.215.104.144	permit
+34.218.116.3	permit
 34.225.212.172	permit
-34.247.168.44	permit
 35.161.32.253	permit
 35.167.93.243	permit
 35.176.132.251	permit
 35.190.247.0/24	permit
 35.191.0.0/16	permit
+35.205.92.9	permit
+35.242.169.159	permit
 37.218.248.47	permit
 37.218.249.47	permit
 37.218.251.62	permit
@@ -119,10 +119,9 @@
 40.112.65.63	permit
 43.228.184.0/22	permit
 44.206.138.57	permit
-44.209.42.157	permit
 44.236.56.93	permit
 44.238.220.251	permit
-46.19.168.0/23	permit
+46.19.170.16	permit
 46.226.48.0/21	permit
 46.228.36.37	permit
 46.228.36.38/31	permit
@@ -162,7 +161,6 @@
 46.228.38.144/29	permit
 46.228.38.152/31	permit
 46.228.38.154	permit
-46.228.39.0/24	permit
 46.228.39.64/27	permit
 46.228.39.96/30	permit
 46.228.39.100/30	permit
@@ -183,29 +181,27 @@
 50.18.125.237	permit
 50.18.126.162	permit
 50.31.32.0/19	permit
-50.56.130.220	permit
-50.56.130.221	permit
-51.137.58.21	permit
-51.140.75.55	permit
-51.144.100.179	permit
+50.56.130.220/30	permit
+52.1.14.157	permit
 52.5.230.59	permit
 52.27.5.72	permit
 52.27.28.47	permit
 52.28.63.81	permit
 52.36.138.31	permit
 52.37.142.146	permit
+52.50.24.208	permit
 52.58.216.183	permit
 52.59.143.3	permit
 52.60.41.5	permit
 52.60.115.116	permit
 52.61.91.9	permit
 52.71.0.205	permit
-52.82.172.0/22	permit
 52.94.124.0/28	permit
 52.95.48.152/29	permit
 52.95.49.88/29	permit
 52.96.91.34	permit
 52.96.111.82	permit
+52.96.172.98	permit
 52.96.214.50	permit
 52.96.222.194	permit
 52.96.222.226	permit
@@ -215,8 +211,6 @@
 52.100.0.0/14	permit
 52.103.0.0/17	permit
 52.119.213.144/28	permit
-52.160.39.140	permit
-52.165.175.144	permit
 52.185.106.240/28	permit
 52.200.59.0/24	permit
 52.205.61.79	permit
@@ -227,37 +221,33 @@
 52.222.75.85	permit
 52.222.89.228	permit
 52.234.172.96/28	permit
+52.235.253.128	permit
 52.236.28.240/28	permit
 52.244.206.214	permit
 52.247.53.144	permit
 52.250.107.196	permit
 52.250.126.174	permit
 54.90.148.255	permit
+54.165.19.38	permit
 54.172.97.247	permit
 54.174.52.0/24	permit
-54.174.53.128/30	permit
 54.174.57.0/24	permit
 54.174.59.0/24	permit
 54.174.60.0/23	permit
 54.174.63.0/24	permit
 54.186.193.102	permit
 54.191.223.56	permit
-54.194.61.95	permit
-54.195.113.45	permit
 54.213.20.246	permit
 54.214.39.184	permit
-54.216.77.168	permit
-54.221.227.204	permit
 54.240.0.0/18	permit
 54.240.64.0/19	permit
 54.240.96.0/19	permit
 54.241.16.209	permit
 54.244.54.130	permit
 54.244.242.0/24	permit
-54.246.232.180	permit
 54.255.61.23	permit
 62.13.128.0/24	permit
-62.13.128.150	permit
+62.13.128.196	permit
 62.13.129.128/25	permit
 62.13.136.0/22	permit
 62.13.140.0/22	permit
@@ -265,14 +255,13 @@
 62.13.148.0/23	permit
 62.13.150.0/23	permit
 62.13.152.0/23	permit
+62.13.159.196	permit
 62.17.146.128/26	permit
 62.179.121.0/24	permit
 62.201.172.0/27	permit
 62.201.172.32/27	permit
 62.253.227.114	permit
-63.32.13.159	permit
 63.80.14.0/23	permit
-63.111.28.137	permit
 63.128.21.0/24	permit
 63.143.57.128/25	permit
 63.143.59.128/25	permit
@@ -285,24 +274,9 @@
 64.79.155.193	permit
 64.79.155.205	permit
 64.79.155.206	permit
-64.89.44.85	permit
-64.89.45.80	permit
-64.89.45.194	permit
-64.89.45.196	permit
 64.127.115.252	permit
 64.132.88.0/23	permit
 64.132.92.0/24	permit
-64.147.123.17	permit
-64.147.123.18	permit
-64.147.123.19	permit
-64.147.123.20	permit
-64.147.123.21	permit
-64.147.123.24	permit
-64.147.123.25	permit
-64.147.123.26	permit
-64.147.123.27	permit
-64.147.123.28	permit
-64.147.123.29	permit
 64.147.123.128/27	permit
 64.207.219.7	permit
 64.207.219.8	permit
@@ -360,23 +334,8 @@
 65.154.166.0/24	permit
 65.212.180.36	permit
 66.102.0.0/20	permit
-66.111.4.25	permit
-66.111.4.26	permit
-66.111.4.27	permit
-66.111.4.28	permit
-66.111.4.29	permit
-66.111.4.221	permit
-66.111.4.222	permit
-66.111.4.224	permit
-66.111.4.225	permit
-66.111.4.229	permit
-66.111.4.230	permit
 66.119.150.192/26	permit
-66.135.202.0/27	permit
-66.135.215.0/24	permit
-66.135.222.1	permit
 66.162.193.226/31	permit
-66.163.184.0/21	permit
 66.163.184.0/24	permit
 66.163.185.0/24	permit
 66.163.186.0/24	permit
@@ -389,7 +348,6 @@
 66.196.80.112/28	permit
 66.196.80.144/29	permit
 66.196.80.193	permit
-66.196.81.0/24	permit
 66.196.81.104/29	permit
 66.196.81.112/29	permit
 66.196.81.120	permit
@@ -432,12 +390,10 @@
 66.249.80.0/20	permit
 67.23.31.6	permit
 67.72.99.26	permit
-67.195.22.0/24	permit
 67.195.22.113	permit
 67.195.22.116/30	permit
 67.195.23.144/30	permit
 67.195.23.148	permit
-67.195.60.0/24	permit
 67.195.60.45	permit
 67.195.60.46/31	permit
 67.195.60.48/31	permit
@@ -445,7 +401,6 @@
 67.195.60.146	permit
 67.195.60.155	permit
 67.195.60.156	permit
-67.195.87.0/24	permit
 67.195.87.64	permit
 67.195.87.81	permit
 67.195.87.82/31	permit
@@ -470,7 +425,6 @@
 67.228.37.4/30	permit
 67.231.145.42	permit
 67.231.153.30	permit
-68.142.230.0/24	permit
 68.142.230.64/31	permit
 68.142.230.69	permit
 68.142.230.70/31	permit
@@ -498,7 +452,6 @@
 70.37.151.128/25	permit
 70.42.149.0/24	permit
 70.42.149.35	permit
-72.3.237.64/28	permit
 72.14.192.0/18	permit
 72.21.192.0/19	permit
 72.21.217.142	permit
@@ -529,7 +482,6 @@
 72.30.237.180/30	permit
 72.30.237.184/31	permit
 72.30.237.204/30	permit
-72.30.238.0/23	permit
 72.30.238.116/30	permit
 72.30.238.120/31	permit
 72.30.238.128	permit
@@ -560,12 +512,7 @@
 72.30.239.228/31	permit
 72.30.239.244/30	permit
 72.30.239.248/31	permit
-72.34.168.76	permit
-72.34.168.80	permit
-72.34.168.85	permit
-72.34.168.86	permit
 72.52.72.32/28	permit
-74.6.128.0/21	permit
 74.6.128.0/24	permit
 74.6.129.0/24	permit
 74.6.130.0/24	permit
@@ -600,7 +547,6 @@
 75.2.70.75	permit
 76.223.128.0/19	permit
 76.223.176.0/20	permit
-77.238.176.0/22	permit
 77.238.176.0/24	permit
 77.238.177.0/24	permit
 77.238.178.0/24	permit
@@ -642,8 +588,6 @@
 84.116.50.0/23	permit
 85.158.136.0/21	permit
 86.61.88.25	permit
-87.198.219.130	permit
-87.198.219.153	permit
 87.238.80.0/21	permit
 87.248.103.12	permit
 87.248.103.21	permit
@@ -683,6 +627,7 @@
 87.253.232.0/21	permit
 89.22.108.0/24	permit
 91.211.240.0/22	permit
+94.169.2.0/23	permit
 94.245.112.0/27	permit
 94.245.112.10/31	permit
 95.131.104.0/21	permit
@@ -696,7 +641,6 @@
 98.136.44.181	permit
 98.136.44.182/31	permit
 98.136.44.184	permit
-98.136.164.0/24	permit
 98.136.164.36/31	permit
 98.136.164.64/29	permit
 98.136.164.72/30	permit
@@ -704,7 +648,6 @@
 98.136.164.78	permit
 98.136.172.32/30	permit
 98.136.172.36/31	permit
-98.136.185.0/24	permit
 98.136.185.29	permit
 98.136.185.42/31	permit
 98.136.185.46	permit
@@ -739,7 +682,6 @@
 98.136.215.184	permit
 98.136.215.208/30	permit
 98.136.215.212/31	permit
-98.136.217.0/24	permit
 98.136.217.1	permit
 98.136.217.2	permit
 98.136.217.3	permit
@@ -749,14 +691,12 @@
 98.136.217.12/30	permit
 98.136.217.16/30	permit
 98.136.217.20/30	permit
-98.136.218.0/24	permit
 98.136.218.39	permit
 98.136.218.40/29	permit
 98.136.218.48/28	permit
 98.136.218.67	permit
 98.136.218.68/30	permit
 98.136.218.72/30	permit
-98.137.12.0/24	permit
 98.137.12.48/30	permit
 98.137.12.52/31	permit
 98.137.12.54	permit
@@ -794,7 +734,6 @@
 98.137.13.132	permit
 98.137.13.137	permit
 98.137.13.138	permit
-98.137.64.0/21	permit
 98.137.64.0/24	permit
 98.137.65.0/24	permit
 98.137.66.0/24	permit
@@ -818,7 +757,6 @@
 98.138.83.176/31	permit
 98.138.83.179	permit
 98.138.83.180/31	permit
-98.138.84.0/22	permit
 98.138.84.37	permit
 98.138.84.38/31	permit
 98.138.84.40/29	permit
@@ -859,7 +797,6 @@
 98.138.87.148/31	permit
 98.138.87.192/30	permit
 98.138.87.196/31	permit
-98.138.88.0/22	permit
 98.138.88.105	permit
 98.138.88.106	permit
 98.138.88.128/30	permit
@@ -899,7 +836,6 @@
 98.138.91.2/31	permit
 98.138.91.4/31	permit
 98.138.91.6	permit
-98.138.100.0/23	permit
 98.138.100.220/30	permit
 98.138.100.224/30	permit
 98.138.100.228/31	permit
@@ -909,7 +845,6 @@
 98.138.104.100	permit
 98.138.104.112/30	permit
 98.138.104.116	permit
-98.138.120.0/24	permit
 98.138.120.36/30	permit
 98.138.120.48/28	permit
 98.138.197.46/31	permit
@@ -1002,12 +937,10 @@
 98.138.213.238/31	permit
 98.138.213.240/31	permit
 98.138.213.242	permit
-98.138.215.0/24	permit
 98.138.215.12/30	permit
 98.138.215.16/28	permit
 98.138.217.216/30	permit
 98.138.217.220/31	permit
-98.138.226.0/24	permit
 98.138.226.30/31	permit
 98.138.226.56/29	permit
 98.138.226.64/30	permit
@@ -1033,21 +966,18 @@
 98.138.227.108/31	permit
 98.138.227.128/30	permit
 98.138.227.132/31	permit
-98.138.229.0/24	permit
 98.138.229.24/29	permit
 98.138.229.32/31	permit
 98.138.229.122/31	permit
 98.138.229.138/31	permit
 98.138.229.154/31	permit
 98.138.229.170/31	permit
-98.139.164.0/24	permit
 98.139.164.96/30	permit
 98.139.164.100/30	permit
 98.139.164.104/29	permit
 98.139.164.112/30	permit
 98.139.172.112/30	permit
 98.139.172.116/31	permit
-98.139.175.0/24	permit
 98.139.175.65	permit
 98.139.175.66/31	permit
 98.139.175.68/30	permit
@@ -1072,10 +1002,8 @@
 98.139.210.196/31	permit
 98.139.210.202/31	permit
 98.139.210.204/30	permit
-98.139.211.0/24	permit
 98.139.211.160/30	permit
 98.139.211.192/28	permit
-98.139.212.0/23	permit
 98.139.212.160/28	permit
 98.139.212.176/29	permit
 98.139.212.184/30	permit
@@ -1090,7 +1018,6 @@
 98.139.214.155	permit
 98.139.214.156/30	permit
 98.139.214.221	permit
-98.139.215.0/24	permit
 98.139.215.228/31	permit
 98.139.215.230	permit
 98.139.215.248/30	permit
@@ -1149,14 +1076,12 @@
 98.139.220.243	permit
 98.139.220.245	permit
 98.139.220.253	permit
-98.139.221.0/24	permit
 98.139.221.43	permit
 98.139.221.60/30	permit
 98.139.221.156/30	permit
 98.139.221.232/30	permit
 98.139.221.236/31	permit
 98.139.221.250	permit
-98.139.244.0/24	permit
 98.139.244.47	permit
 98.139.244.49	permit
 98.139.244.50/31	permit
@@ -1211,7 +1136,6 @@
 104.47.108.0/23	permit
 104.130.96.0/28	permit
 104.130.122.0/23	permit
-104.214.25.77	permit
 106.10.144.64/27	permit
 106.10.144.100/31	permit
 106.10.144.103	permit
@@ -1237,7 +1161,6 @@
 106.10.146.52/31	permit
 106.10.146.224/30	permit
 106.10.146.228/31	permit
-106.10.148.0/24	permit
 106.10.148.48/30	permit
 106.10.148.52/31	permit
 106.10.148.68/30	permit
@@ -1250,7 +1173,6 @@
 106.10.149.30	permit
 106.10.149.160/30	permit
 106.10.149.164/31	permit
-106.10.150.0/23	permit
 106.10.150.23	permit
 106.10.150.24/30	permit
 106.10.150.28/31	permit
@@ -1289,7 +1211,6 @@
 106.10.151.250/31	permit
 106.10.151.252/31	permit
 106.10.151.254	permit
-106.10.167.0/24	permit
 106.10.167.72	permit
 106.10.167.128/27	permit
 106.10.167.160/28	permit
@@ -1311,7 +1232,6 @@
 106.10.174.120/30	permit
 106.10.174.154/31	permit
 106.10.174.156/30	permit
-106.10.176.0/24	permit
 106.10.176.32/29	permit
 106.10.176.48	permit
 106.10.176.112	permit
@@ -1330,7 +1250,6 @@
 106.10.196.43	permit
 106.10.196.44/30	permit
 106.10.196.48	permit
-106.10.240.0/22	permit
 106.10.240.0/24	permit
 106.10.241.0/24	permit
 106.10.242.0/24	permit
@@ -1338,6 +1257,7 @@
 106.10.244.0/24	permit
 106.39.212.64/29	permit
 106.50.16.0/28	permit
+107.20.210.250	permit
 108.174.0.0/24	permit
 108.174.0.215	permit
 108.174.3.0/24	permit
@@ -1348,6 +1268,7 @@
 108.175.30.45	permit
 108.177.8.0/21	permit
 108.177.96.0/19	permit
+108.179.144.0/20	permit
 109.237.142.0/24	permit
 111.221.23.128/25	permit
 111.221.26.0/27	permit
@@ -1356,7 +1277,6 @@
 111.221.112.0/21	permit
 112.19.199.64/29	permit
 112.19.242.64/29	permit
-116.214.12.0/24	permit
 116.214.12.47	permit
 116.214.12.48/31	permit
 116.214.12.56/31	permit
@@ -1375,7 +1295,6 @@
 121.244.91.48	permit
 122.15.156.182	permit
 123.126.78.64/29	permit
-124.108.96.0/24	permit
 124.108.96.24/31	permit
 124.108.96.28/31	permit
 124.108.96.70/31	permit
@@ -1447,6 +1366,7 @@
 136.147.176.0/20	permit
 136.147.176.0/24	permit
 136.147.182.0/24	permit
+136.147.224.0/20	permit
 136.179.50.206	permit
 138.91.172.26	permit
 139.60.152.0/22	permit
@@ -1459,6 +1379,12 @@
 139.180.17.0/24	permit
 141.148.159.229	permit
 141.193.32.0/23	permit
+141.193.184.32/27	permit
+141.193.184.64/26	permit
+141.193.184.128/25	permit
+141.193.185.32/27	permit
+141.193.185.64/26	permit
+141.193.185.128/25	permit
 143.55.224.0/21	permit
 143.55.232.0/22	permit
 143.55.236.0/22	permit
@@ -1472,8 +1398,7 @@
 144.178.38.0/24	permit
 145.253.228.160/29	permit
 145.253.239.128/29	permit
-146.20.14.105	permit
-146.20.14.107	permit
+146.20.14.104/30	permit
 146.20.112.0/26	permit
 146.20.113.0/24	permit
 146.20.191.0/24	permit
@@ -1488,6 +1413,7 @@
 148.105.0.0/16	permit
 148.105.8.0/21	permit
 149.72.0.0/16	permit
+149.72.223.204	permit
 149.72.248.236	permit
 149.97.173.180	permit
 150.230.98.160	permit
@@ -1503,7 +1429,6 @@
 157.55.61.0/24	permit
 157.55.157.128/25	permit
 157.55.225.0/25	permit
-157.55.254.216	permit
 157.56.24.0/25	permit
 157.56.120.128/26	permit
 157.56.232.0/21	permit
@@ -1545,13 +1470,11 @@
 161.71.64.0/20	permit
 162.247.216.0/22	permit
 163.47.180.0/22	permit
-163.47.180.0/23	permit
 163.114.130.16	permit
 163.114.132.120	permit
-164.177.132.168	permit
-164.177.132.169	permit
-164.177.132.170	permit
-164.177.132.171	permit
+163.114.134.16	permit
+163.114.135.16	permit
+164.177.132.168/30	permit
 165.173.128.0/24	permit
 166.78.68.0/22	permit
 166.78.68.221	permit
@@ -1572,8 +1495,6 @@
 167.89.75.164	permit
 167.89.101.2	permit
 167.89.101.192/28	permit
-167.216.129.210	permit
-167.216.131.180	permit
 167.220.67.232/29	permit
 168.138.5.36	permit
 168.138.73.51	permit
@@ -1585,6 +1506,7 @@
 169.148.131.0/24	permit
 169.148.142.10	permit
 169.148.144.0/25	permit
+169.148.144.10	permit
 170.10.68.0/22	permit
 170.10.128.0/24	permit
 170.10.129.0/24	permit
@@ -1622,14 +1544,14 @@
 182.50.76.0/22	permit
 182.50.78.64/28	permit
 183.240.219.64/29	permit
-185.4.120.0/23	permit
-185.4.122.0/24	permit
+185.4.120.0/22	permit
 185.12.80.0/22	permit
 185.58.84.93	permit
 185.80.93.204	permit
 185.80.93.227	permit
 185.80.95.31	permit
 185.90.20.0/22	permit
+185.138.56.128/25	permit
 185.189.236.0/22	permit
 185.211.120.0/22	permit
 185.250.236.0/22	permit
@@ -1646,7 +1568,6 @@
 188.125.68.184	permit
 188.125.68.186	permit
 188.125.68.192	permit
-188.125.69.0/24	permit
 188.125.69.105	permit
 188.125.69.110	permit
 188.125.69.112	permit
@@ -1689,9 +1610,6 @@
 192.0.64.0/18	permit
 192.18.139.154	permit
 192.30.252.0/22	permit
-192.64.236.0/24	permit
-192.64.237.0/24	permit
-192.64.238.0/24	permit
 192.161.144.0/20	permit
 192.162.87.0/24	permit
 192.237.158.0/23	permit
@@ -1707,7 +1625,6 @@
 193.122.128.100	permit
 193.123.56.63	permit
 194.19.134.0/25	permit
-194.64.234.128/27	permit
 194.64.234.129	permit
 194.106.220.0/23	permit
 194.113.24.0/22	permit
@@ -1733,6 +1650,9 @@
 198.61.254.231	permit
 198.178.234.57	permit
 198.244.48.0/20	permit
+198.244.59.30	permit
+198.244.59.33	permit
+198.244.59.35	permit
 198.244.60.0/22	permit
 198.245.80.0/20	permit
 198.245.81.0/24	permit
@@ -1744,7 +1664,9 @@
 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
@@ -1772,7 +1694,6 @@
 203.188.194.251	permit
 203.188.195.240/30	permit
 203.188.195.244/31	permit
-203.188.197.0/24	permit
 203.188.197.193	permit
 203.188.197.194/31	permit
 203.188.197.196/30	permit
@@ -1782,7 +1703,6 @@
 203.188.197.216/29	permit
 203.188.197.232/29	permit
 203.188.197.240/29	permit
-203.188.200.0/24	permit
 203.188.200.56/31	permit
 203.188.200.58	permit
 203.188.200.60/30	permit
@@ -1798,17 +1718,14 @@
 203.209.230.76/31	permit
 204.11.168.0/21	permit
 204.13.11.48/29	permit
-204.13.11.48/30	permit
 204.14.232.0/21	permit
 204.14.232.64/28	permit
 204.14.234.64/28	permit
-204.29.186.0/23	permit
 204.75.142.0/24	permit
 204.79.197.212	permit
 204.92.114.187	permit
 204.92.114.203	permit
 204.92.114.204/31	permit
-204.132.224.66	permit
 204.141.32.0/23	permit
 204.141.42.0/23	permit
 204.220.160.0/20	permit
@@ -1829,6 +1746,7 @@
 205.251.233.36	permit
 206.25.247.143	permit
 206.25.247.155	permit
+206.55.144.0/20	permit
 206.165.246.80/29	permit
 206.191.224.0/19	permit
 206.246.157.1	permit
@@ -1846,14 +1764,12 @@
 207.46.132.128/27	permit
 207.46.198.0/25	permit
 207.46.200.0/27	permit
-207.46.225.107	permit
 207.58.147.64/28	permit
 207.67.38.0/24	permit
 207.67.98.192/27	permit
 207.68.176.0/26	permit
 207.68.176.96/27	permit
-207.97.204.96	permit
-207.97.204.97	permit
+207.97.204.96/29	permit
 207.126.144.0/20	permit
 207.171.160.0/19	permit
 207.211.30.64/26	permit
@@ -1867,11 +1783,7 @@
 208.43.21.28/30	permit
 208.43.21.64/29	permit
 208.43.21.72/30	permit
-208.46.212.80	permit
-208.46.212.208/31	permit
-208.46.212.210	permit
 208.64.132.0/22	permit
-208.71.40.0/24	permit
 208.71.40.63	permit
 208.71.40.64/31	permit
 208.71.40.174/31	permit
@@ -1890,18 +1802,15 @@
 208.71.41.172/31	permit
 208.71.41.188/30	permit
 208.71.41.192/31	permit
-208.71.42.0/24	permit
 208.71.42.190/31	permit
 208.71.42.192/28	permit
 208.71.42.208/30	permit
 208.71.42.212/31	permit
 208.71.42.214	permit
 208.72.249.240/29	permit
-208.74.204.0/22	permit
+208.74.204.5	permit
 208.74.204.9	permit
 208.75.120.0/22	permit
-208.75.121.246	permit
-208.75.122.246	permit
 208.82.237.96/29	permit
 208.82.237.104/31	permit
 208.82.238.96/29	permit
@@ -1920,10 +1829,8 @@
 209.67.98.46	permit
 209.67.98.59	permit
 209.85.128.0/17	permit
-212.82.96.0/24	permit
 212.82.96.32/27	permit
 212.82.96.64/29	permit
-212.82.98.0/24	permit
 212.82.98.32/29	permit
 212.82.98.64/27	permit
 212.82.98.96/30	permit
@@ -2005,7 +1912,6 @@
 216.17.150.251	permit
 216.22.15.224/27	permit
 216.24.224.0/20	permit
-216.39.60.0/23	permit
 216.39.60.154/31	permit
 216.39.60.156/30	permit
 216.39.60.160/30	permit
@@ -2023,14 +1929,12 @@
 216.39.61.170	permit
 216.39.61.175	permit
 216.39.61.238/31	permit
-216.39.62.0/24	permit
 216.39.62.32/28	permit
 216.39.62.48/29	permit
 216.39.62.56/30	permit
 216.39.62.60/31	permit
 216.39.62.136/29	permit
 216.39.62.144/31	permit
-216.46.168.0/24	permit
 216.58.192.0/19	permit
 216.66.217.240/29	permit
 216.71.138.33	permit
@@ -2043,12 +1947,8 @@
 216.98.158.0/24	permit
 216.99.5.67	permit
 216.99.5.68	permit
-216.109.114.0/24	permit
 216.109.114.32/27	permit
 216.109.114.64/29	permit
-216.113.160.0/24	permit
-216.113.172.0/25	permit
-216.113.175.0/24	permit
 216.128.126.97	permit
 216.136.162.65	permit
 216.136.162.120/29	permit
@@ -2079,6 +1979,8 @@
 2603:1030:20e:3::23c	permit
 2603:1030:b:3::152	permit
 2603:1030:c02:8::14	permit
+2607:13c0:0001:0000:0000:0000:0000:7000/116	permit
+2607:13c0:0002:0000:0000:0000:0000:1000/116	permit
 2607:f8b0:4000::/36	permit
 2620:109:c003:104::/64	permit
 2620:109:c003:104::215	permit
@@ -2087,6 +1989,8 @@
 2620:109:c00d:104::/64	permit
 2620:10d:c090:400::8:1	permit
 2620:10d:c091:400::8:1	permit
+2620:10d:c09b:400::8:1	permit
+2620:10d:c09c:400::8:1	permit
 2620:119:50c0:207::/64	permit
 2620:119:50c0:207::215	permit
 2800:3f0:4000::/36	permit

+ 23 - 2
data/conf/rspamd/dynmaps/footer.php

@@ -56,21 +56,42 @@ $empty_footer = json_encode(array(
 error_log("FOOTER: checking for domain " . $domain . ", user " . $username . " and address " . $from . PHP_EOL);
 
 try {
-  $stmt = $pdo->prepare("SELECT `plain`, `html`, `mbox_exclude`, `skip_replies` FROM `domain_wide_footer` 
+  // try get $target_domain if $domain is an alias_domain
+  $stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain` 
+    WHERE `alias_domain` = :alias_domain");
+  $stmt->execute(array(
+    ':alias_domain' => $domain
+  ));
+  $alias_domain = $stmt->fetch(PDO::FETCH_ASSOC);
+  if (!$alias_domain) {
+    $target_domain = $domain;
+  } else {
+    $target_domain = $alias_domain['target_domain'];
+  }
+
+  // get footer associated with the domain
+  $stmt = $pdo->prepare("SELECT `plain`, `html`, `mbox_exclude`, `alias_domain_exclude`, `skip_replies` FROM `domain_wide_footer` 
     WHERE `domain` = :domain");
   $stmt->execute(array(
-    ':domain' => $domain
+    ':domain' => $target_domain
   ));
   $footer = $stmt->fetch(PDO::FETCH_ASSOC);
+
+  // check if the sender is excluded
   if (in_array($from, json_decode($footer['mbox_exclude']))){
     $footer = false;
   }
+  if (in_array($domain, json_decode($footer['alias_domain_exclude']))){
+    $footer = false;
+  }
   if (empty($footer)){
     echo $empty_footer;
     exit;
   }
   error_log("FOOTER: " . json_encode($footer) . PHP_EOL);
 
+  // footer will be applied
+  // get custom mailbox attributes to insert into the footer
   $stmt = $pdo->prepare("SELECT `custom_attributes` FROM `mailbox` WHERE `username` = :username");
   $stmt->execute(array(
     ':username' => $username

+ 5 - 1
data/conf/rspamd/local.d/composites.conf

@@ -21,6 +21,10 @@ FREEMAIL_TO_UNDISC_RCPT {
 SOGO_CONTACT_EXCLUDE {
   expression = "(-WHITELISTED_FWD_HOST | -g+:policies) & ^SOGO_CONTACT & !DMARC_POLICY_ALLOW";
 }
+# Remove MAILCOW_WHITE symbol for senders with broken policy recieved not from fwd hosts
+MAILCOW_WHITE_EXCLUDE {
+  expression = "^MAILCOW_WHITE & (-DMARC_POLICY_REJECT | -DMARC_POLICY_QUARANTINE | -R_SPF_PERMFAIL) & !WHITELISTED_FWD_HOST";
+}
 # Spoofed header from and broken policy (excluding sieve host, rspamd host, whitelisted senders, authenticated senders and forward hosts)
 SPOOFED_UNAUTH {
   expression = "!MAILCOW_AUTH & !MAILCOW_WHITE & !RSPAMD_HOST & !SIEVE_HOST & MAILCOW_DOMAIN_HEADER_FROM & !WHITELISTED_FWD_HOST & -g+:policies";
@@ -103,4 +107,4 @@ CLAMD_JS_MALWARE {
   expression = "CLAM_SECI_JS & !MAILCOW_WHITE";
   description = "JS malware found, Securite JS malware Flag set through ClamAV";
   score = 8;
-}
+}

+ 1 - 0
data/conf/rspamd/local.d/options.inc

@@ -6,3 +6,4 @@ disable_monitoring = true;
 # In case a task times out (like DNS lookup), soft reject the message
 # instead of silently accepting the message without further processing.
 soft_reject_on_timeout = true;
+local_addrs = /etc/rspamd/custom/mailcow_networks.map;

+ 0 - 16
data/conf/rspamd/local.d/rbl.conf

@@ -1,20 +1,4 @@
 rbls {
-  sorbs { 
-    symbol = "RBL_SORBS"; 
-    rbl = "dnsbl.sorbs.net";  
-    returncodes { 
-      # http:// www.sorbs.net/general/using.shtml 
-      RBL_SORBS_HTTP = "127.0.0.2"; 
-      RBL_SORBS_SOCKS = "127.0.0.3";  
-      RBL_SORBS_MISC = "127.0.0.4"; 
-      RBL_SORBS_SMTP = "127.0.0.5"; 
-      RBL_SORBS_RECENT = "127.0.0.6"; 
-      RBL_SORBS_WEB = "127.0.0.7";  
-      RBL_SORBS_DUL = "127.0.0.10"; 
-      RBL_SORBS_BLOCK = "127.0.0.8";  
-      RBL_SORBS_ZOMBIE = "127.0.0.9"; 
-    } 
-  }
   interserver_ip {
     symbol = "RBL_INTERSERVER_IP";
     rbl = "rbl.interserver.net";

+ 0 - 40
data/conf/rspamd/local.d/rbl_group.conf

@@ -5,46 +5,6 @@ symbols = {
   "RBL_UCEPROTECT_LEVEL2" {
     score = 1.5;
   }
-  "RBL_SORBS" { 
-    score = 0.0;  
-    description = "Unrecognised result from SORBS RBL"; 
-  } 
-  "RBL_SORBS_HTTP" {  
-    score = 2.5;  
-    description = "List of Open HTTP Proxy Servers."; 
-  } 
-  "RBL_SORBS_SOCKS" { 
-    score = 2.5;  
-    description = "List of Open SOCKS Proxy Servers.";  
-  } 
-  "RBL_SORBS_MISC" {  
-    score = 1.0;  
-    description = "List of open Proxy Servers not listed in the SOCKS or HTTP lists.";  
-  } 
-  "RBL_SORBS_SMTP" {  
-    score = 4.0;  
-    description = "List of Open SMTP relay servers."; 
-  } 
-  "RBL_SORBS_RECENT" {  
-    score = 2.0;  
-    description = "List of hosts that have been noted as sending spam/UCE/UBE to the admins of SORBS within the last 28 days (includes new.spam.dnsbl.sorbs.net)."; 
-  } 
-  "RBL_SORBS_WEB" { 
-    score = 2.0;  
-    description = "List of web (WWW) servers which have spammer abusable vulnerabilities (e.g. FormMail scripts)";  
-  } 
-  "RBL_SORBS_DUL" { 
-    score = 2.0;  
-    description = "Dynamic IP Address ranges (NOT a Dial Up list!)";  
-  } 
-  "RBL_SORBS_BLOCK" { 
-    score = 0.5;  
-    description = "List of hosts demanding that they never be tested by SORBS.";  
-  } 
-  "RBL_SORBS_ZOMBIE" {  
-    score = 2.0;  
-    description = "List of networks hijacked from their original owners, some of which have already used for spamming.";  
-  }
   "RECEIVED_SPAMHAUS_XBL" {
     weight = 0.0;
     description = "Received address is listed in ZEN XBL";

+ 14 - 0
data/conf/rspamd/lua/rspamd.local.lua

@@ -621,10 +621,24 @@ rspamd_config:register_symbol({
                   local nct = string.format('%s: %s/%s; charset=utf-8',
                       'Content-Type', rewrite.new_ct.type, rewrite.new_ct.subtype)
                   out[#out + 1] = nct
+                  -- update Content-Type header
+                  task:set_milter_reply({
+                    remove_headers = {['Content-Type'] = 0},
+                  })
+                  task:set_milter_reply({
+                    add_headers = {['Content-Type'] = string.format('%s/%s; charset=utf-8', rewrite.new_ct.type, rewrite.new_ct.subtype)}
+                  })
                   return
                 elseif name:lower() == 'content-transfer-encoding' then
                   out[#out + 1] = string.format('%s: %s',
                       'Content-Transfer-Encoding', 'quoted-printable')
+                  -- update Content-Transfer-Encoding header
+                  task:set_milter_reply({
+                    remove_headers = {['Content-Transfer-Encoding'] = 0},
+                  })
+                  task:set_milter_reply({
+                    add_headers = {['Content-Transfer-Encoding'] = 'quoted-printable'}
+                  })
                   seen_cte = true
                   return
                 end

+ 4 - 0
data/conf/sogo/sogo.conf

@@ -16,6 +16,9 @@
     SOGoFoldersSendEMailNotifications = YES;
     SOGoForwardEnabled = YES;
 
+    // Option to set Users as admin to globally manage calendar permissions etc. Disabled by default
+    // SOGoSuperUsernames = ("moo@example.com");
+
     SOGoUIAdditionalJSFiles = (
       js/theme.js,
       js/custom-sogo.js
@@ -38,6 +41,7 @@
 
     SOGoLanguage = English;
     SOGoMailAuxiliaryUserAccountsEnabled = YES;
+    // SOGoCreateIdentitiesDisabled = NO;
     SOGoMailCustomFromEnabled = YES;
     SOGoMailingMechanism = smtp;
     SOGoSMTPAuthenticationType = plain;

+ 7 - 3
data/web/debug.php

@@ -39,9 +39,13 @@ foreach ($containers as $container => $container_info) {
       $StartedAt['month'],
       $StartedAt['day'],
       $StartedAt['year']));
-    $user_tz = new DateTimeZone(getenv('TZ'));
-    $date->setTimezone($user_tz);
-    $started = $date->format('r');
+    try {
+      $user_tz = new DateTimeZone(getenv('TZ'));
+      $date->setTimezone($user_tz);
+      $started = $date->format('r');
+    } catch(Exception $e) {
+      $started = '?';
+    }
   }
   else {
     $started = '?';

+ 2 - 1
data/web/edit.php

@@ -59,7 +59,8 @@ if (isset($_SESSION['mailcow_cc_role'])) {
             'domain_details' => $result,
             'domain_footer' => $domain_footer,
             'mailboxes' => mailbox('get', 'mailboxes', $_GET["domain"]),
-            'aliases' => mailbox('get', 'aliases', $_GET["domain"], 'address')
+            'aliases' => mailbox('get', 'aliases', $_GET["domain"], 'address'),
+            'alias_domains' => mailbox('get', 'alias_domains', $_GET["domain"])
           ];
       }
     }

+ 7 - 0
data/web/inc/ajax/container_ctrl.php

@@ -1,4 +1,11 @@
 <?php
+
+// Block requests by checking the 'Sec-Fetch-Dest' header.
+if (isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] !== 'empty') {
+  header('HTTP/1.1 403 Forbidden');
+  exit;
+}
+
 require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
 if (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] != 'admin') {
 	exit();

+ 4 - 4
data/web/inc/functions.inc.php

@@ -284,17 +284,17 @@ function last_login($action, $username, $sasl_limit_days = 7, $ui_offset = 1) {
             }
             if (!$sasl[$k]['location']) {
               $curl = curl_init();
-              curl_setopt($curl, CURLOPT_URL,"https://dfdata.bella.network/lookup/" . $sasl[$k]['real_rip']);
+              curl_setopt($curl, CURLOPT_URL,"https://dfdata.bella.network/country/" . $sasl[$k]['real_rip']);
               curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
               curl_setopt($curl, CURLOPT_USERAGENT, 'Moocow');
               curl_setopt($curl, CURLOPT_TIMEOUT, 5);
               $ip_data = curl_exec($curl);
               if (!curl_errno($curl)) {
                 $ip_data_array = json_decode($ip_data, true);
-                if ($ip_data_array !== false and !empty($ip_data_array['location']['shortcountry'])) {
-                  $sasl[$k]['location'] = $ip_data_array['location']['shortcountry'];
+                if ($ip_data_array !== false and !empty($ip_data_array['shortcountry'])) {
+                  $sasl[$k]['location'] = $ip_data_array['shortcountry'];
                     try {
-                      $redis->hSet('IP_SHORTCOUNTRY', $sasl[$k]['real_rip'], $ip_data_array['location']['shortcountry']);
+                      $redis->hSet('IP_SHORTCOUNTRY', $sasl[$k]['real_rip'], $ip_data_array['shortcountry']);
                     }
                     catch (RedisException $e) {
                       $_SESSION['return'][] = array(

+ 46 - 20
data/web/inc/functions.mailbox.inc.php

@@ -3588,30 +3588,54 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
           $footers['plain'] = isset($_data['plain']) ? $_data['plain'] : '';
           $footers['skip_replies'] = isset($_data['skip_replies']) ? (int)$_data['skip_replies'] : 0;
           $footers['mbox_exclude'] = array();
-          if (isset($_data["mbox_exclude"])){
-            if (!is_array($_data["mbox_exclude"])) {
-              $_data["mbox_exclude"] = array($_data["mbox_exclude"]);
-            }
-            foreach ($_data["mbox_exclude"] as $mailbox) {
-              if (!filter_var($mailbox, FILTER_VALIDATE_EMAIL)) {
-                $_SESSION['return'][] = array(
-                  'type' => 'danger',
-                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
-                  'msg' => array('username_invalid', $mailbox)
-                );
-                continue;
+          $footers['alias_domain_exclude'] = array();
+          if (isset($_data["exclude"])){
+            if (!is_array($_data["exclude"])) {
+              $_data["exclude"] = array($_data["exclude"]);
+            }
+            foreach ($_data["exclude"] as $exclude) {
+              if (filter_var($exclude, FILTER_VALIDATE_EMAIL)) {
+                $stmt = $pdo->prepare("SELECT `address` FROM `alias` WHERE `address` = :address
+                  UNION
+                  SELECT `username` FROM `mailbox` WHERE `username` = :username");
+                $stmt->execute(array(
+                  ':address' => $exclude,
+                  ':username' => $exclude,
+                ));
+                $row = $stmt->fetch(PDO::FETCH_ASSOC);
+                if(!$row){
+                  $_SESSION['return'][] = array(
+                    'type' => 'danger',
+                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+                    'msg' => array('username_invalid', $exclude)
+                  );
+                  continue;
+                }
+                array_push($footers['mbox_exclude'], $exclude);
               }
-              $is_now = mailbox('get', 'mailbox_details', $mailbox);            
-              if(empty($is_now)){
+              elseif (is_valid_domain_name($exclude)) {
+                $stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain` WHERE `alias_domain` = :alias_domain");
+                $stmt->execute(array(
+                  ':alias_domain' => $exclude,
+                ));
+                $row = $stmt->fetch(PDO::FETCH_ASSOC);
+                if(!$row){
+                  $_SESSION['return'][] = array(
+                    'type' => 'danger',
+                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
+                    'msg' => array('username_invalid', $exclude)
+                  );
+                  continue;
+                }
+                array_push($footers['alias_domain_exclude'], $exclude);
+              }
+              else {
                 $_SESSION['return'][] = array(
                   'type' => 'danger',
                   'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
-                  'msg' => array('username_invalid', $mailbox)
+                  'msg' => array('username_invalid', $exclude)
                 );
-                continue;
               }
-              
-              array_push($footers['mbox_exclude'], $mailbox);
             }
           }
           foreach ($domains as $domain) {
@@ -3636,12 +3660,13 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
             try {
               $stmt = $pdo->prepare("DELETE FROM `domain_wide_footer` WHERE `domain`= :domain");
               $stmt->execute(array(':domain' => $domain));
-              $stmt = $pdo->prepare("INSERT INTO `domain_wide_footer` (`domain`, `html`, `plain`, `mbox_exclude`, `skip_replies`) VALUES (:domain, :html, :plain, :mbox_exclude, :skip_replies)");
+              $stmt = $pdo->prepare("INSERT INTO `domain_wide_footer` (`domain`, `html`, `plain`, `mbox_exclude`, `alias_domain_exclude`, `skip_replies`) VALUES (:domain, :html, :plain, :mbox_exclude, :alias_domain_exclude, :skip_replies)");
               $stmt->execute(array(
                 ':domain' => $domain,
                 ':html' => $footers['html'],
                 ':plain' => $footers['plain'],
                 ':mbox_exclude' => json_encode($footers['mbox_exclude']),
+                ':alias_domain_exclude' => json_encode($footers['alias_domain_exclude']),
                 ':skip_replies' => $footers['skip_replies'],
               ));
             }
@@ -4466,6 +4491,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
           $domaindata['mboxes_in_domain'] = $MailboxDataDomain['count'];
           $domaindata['mboxes_left'] = $row['mailboxes']  - $MailboxDataDomain['count'];
           $domaindata['domain_name'] = $row['domain'];
+          $domaindata['domain_h_name'] = idn_to_utf8($row['domain']);
           $domaindata['description'] = $row['description'];
           $domaindata['max_num_aliases_for_domain'] = $row['aliases'];
           $domaindata['max_num_mboxes_for_domain'] = $row['mailboxes'];
@@ -4801,7 +4827,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
           }
 
           try {
-            $stmt = $pdo->prepare("SELECT `html`, `plain`, `mbox_exclude`, `skip_replies` FROM `domain_wide_footer`
+            $stmt = $pdo->prepare("SELECT `html`, `plain`, `mbox_exclude`, `alias_domain_exclude`, `skip_replies` FROM `domain_wide_footer`
               WHERE `domain` = :domain");
             $stmt->execute(array(
               ':domain' => $domain

+ 13 - 8
data/web/inc/functions.rspamd.inc.php

@@ -145,17 +145,22 @@ function rspamd_maps($_action, $_data = null) {
       $maps = (array)$_data['map'];
       $valid_maps = array();
       foreach ($maps as $map) {
+        $is_valid = false;
         foreach ($RSPAMD_MAPS as $rspamd_map_type) {
-          if (!in_array($map, $rspamd_map_type)) {
-            $_SESSION['return'][] = array(
-              'type' => 'danger',
-              'log' => array(__FUNCTION__, $_action, '-'),
-              'msg' => array('global_map_invalid', $map)
-            );
-          } else {
-            array_push($valid_maps, $map);
+          if (in_array($map, $rspamd_map_type)) {
+            $is_valid = true;
+            break;
           }
         }
+        if ($is_valid) {
+          array_push($valid_maps, $map);
+        } else {
+          $_SESSION['return'][] = array(
+            'type' => 'danger',
+            'log' => array(__FUNCTION__, $_action, '-'),
+            'msg' => array('global_map_invalid', $map)
+          );
+        }
       }
       foreach ($valid_maps as $map) {
         try {

+ 0 - 1
data/web/inc/header.inc.php

@@ -78,7 +78,6 @@ $globalVariables = [
   'app_links_processed' => $app_links_processed,
   'is_root_uri' => (parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) == '/'),
   'uri' => $_SERVER['REQUEST_URI'],
-  'last_login' => last_login('get', $_SESSION['mailcow_cc_username'], 7, 0)['ui']['time']
 ];
 
 foreach ($globalVariables as $globalVariableName => $globalVariableValue) {

+ 3 - 2
data/web/inc/init_db.inc.php

@@ -3,7 +3,7 @@ function init_db_schema() {
   try {
     global $pdo;
 
-    $db_version = "06062024_1210";
+    $db_version = "31072024_1012";
 
     $stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
     $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
@@ -273,6 +273,7 @@ function init_db_schema() {
           "html" => "LONGTEXT",
           "plain" => "LONGTEXT",
           "mbox_exclude" => "JSON NOT NULL DEFAULT ('[]')",
+          "alias_domain_exclude" => "JSON NOT NULL DEFAULT ('[]')",
           "skip_replies" => "TINYINT(1) NOT NULL DEFAULT '0'"
         ),
         "keys" => array(
@@ -1004,7 +1005,7 @@ function init_db_schema() {
           )
         ),
         "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
-      ),
+      ),      
       "pushover" => array(
         "cols" => array(
           "username" => "VARCHAR(255) NOT NULL",

+ 1 - 1
data/web/inc/presets/sieve/sieve_1.yml

@@ -1,7 +1,7 @@
 headline: lang.sieve_preset_1
 content: |
   require ["reject","body","regex"];
-  if anyof (body :raw :regex ["filename=.*\.doc","filename=.*\.exe","filename=.*\.moo"]) {
+  if anyof (body :raw :regex ["filename=\".*\\.(doc|exe|moo)\""]) {
     reject text:
   doc, exe and moo are dangerous file extensions.
   Why would you do that? I am a sad cow.

+ 2 - 0
data/web/inc/vars.inc.php

@@ -95,6 +95,8 @@ $AVAILABLE_LANGUAGES = array(
   'it-it' => 'Italiano (Italian)',
   'ko-kr' => '한국어 (Korean)',
   'lv-lv' => 'latviešu (Latvian)',
+  'lt-lt' => 'Lietuvių (Lithuanian)',
+  'nb-no' => 'Norsk (Norwegian)',
   'nl-nl' => 'Nederlands (Dutch)',
   'pl-pl' => 'Język Polski (Polish)',
   'pt-br' => 'Português brasileiro (Brazilian Portuguese)',

+ 1 - 7
data/web/js/site/debug.js

@@ -1355,13 +1355,7 @@ function update_stats(timeout=5){
       $("#host_cpu_usage").text(parseInt(data.cpu.usage).toString() + "%");
       $("#host_memory_total").text((data.memory.total / (1024 ** 3)).toFixed(2).toString() + "GB");
       $("#host_memory_usage").text(parseInt(data.memory.usage).toString() + "%");
-      if (data.architecture == "aarch64"){
-        $("#host_architecture").html('<span data-bs-toggle="tooltip" data-bs-placement="top" title="' + lang_debug.wip +'">' + data.architecture + ' ⚠️</span>');
-      }
-      else {
-        $("#host_architecture").html(data.architecture);
-      }
-
+      $("#host_architecture").html(data.architecture);
       // update cpu and mem chart
       var cpu_chart = Chart.getChart("host_cpu_chart");
       var mem_chart = Chart.getChart("host_mem_chart");

+ 8 - 4
data/web/js/site/mailbox.js

@@ -450,6 +450,10 @@ jQuery(function($){
         dataSrc: function(json){
           $.each(json.data, function(i, item) {
             item.domain_name = escapeHtml(item.domain_name);
+            item.domain_h_name = escapeHtml(item.domain_h_name);
+            if (item.domain_name != item.domain_h_name){
+              item.domain_h_name = item.domain_h_name + '<small class="d-block">' + item.domain_name + '</small>';
+            }
 
             item.aliases = item.aliases_in_domain + " / " + item.max_num_aliases_for_domain;
             item.mailboxes = item.mboxes_in_domain + " / " + item.max_num_mboxes_for_domain;
@@ -488,11 +492,11 @@ jQuery(function($){
 
             if (item.backupmx == 1) {
               if (item.relay_unknown_only == 1) {
-                item.domain_name = '<div class="badge fs-6 bg-info">Relay Non-Local</div> ' + item.domain_name;
+                item.domain_h_name = '<div class="badge fs-7 bg-info">Relay Non-Local</div> ' + item.domain_h_name;
               } else if (item.relay_all_recipients == 1) {
-                item.domain_name = '<div class="badge fs-6 bg-info">Relay All</div> ' + item.domain_name;
+                item.domain_h_name = '<div class="badge fs-7 bg-info">Relay All</div> ' + item.domain_h_name;
               } else {
-                item.domain_name = '<div class="badge fs-6 bg-info">Relay</div> ' + item.domain_name;
+                item.domain_h_name = '<div class="badge fs-7 bg-info">Relay</div> ' + item.domain_h_name;
               }
             }
           });
@@ -520,7 +524,7 @@ jQuery(function($){
         },
         {
           title: lang.domain,
-          data: 'domain_name',
+          data: 'domain_h_name',
           responsivePriority: 3,
           defaultContent: ''
         },

+ 1 - 1
data/web/js/site/user.js

@@ -688,5 +688,5 @@ jQuery(function($){
   onVisible("[id^=wl_policy_mailbox_table]", () => draw_wl_policy_mailbox_table());
   onVisible("[id^=sync_job_table]", () => draw_sync_job_table());
   onVisible("[id^=app_passwd_table]", () => draw_app_passwd_table());
-  last_logins('get');
+  onVisible("[id^=recent-logins]", () => last_logins('get'));
 });

+ 1 - 1
data/web/lang/lang.cs-cz.json

@@ -547,7 +547,7 @@
         "dns_records": "DNS záznamy",
         "dns_records_24hours": "Upozornění: Změnám v systému DNS může trvat až 24 hodin, než se zde správně zobrazí jejich aktuální stav. Můžete zde snadno zjistit, jak nastavit DNS záznamy a zda jsou všechny záznamy správně uloženy.",
         "dns_records_data": "Správný záznam",
-        "dns_records_docs": "Přečtěte si prosím <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">dokumentaci</a>.",
+        "dns_records_docs": "Přečtěte si prosím <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">dokumentaci</a>.",
         "dns_records_name": "Název",
         "dns_records_status": "Současný stav",
         "dns_records_type": "Typ",

+ 1 - 1
data/web/lang/lang.da-dk.json

@@ -459,7 +459,7 @@
         "cname_from_a": "Værdi afledt af A / AAAA-post. Dette understøttes, så længe posten peger på den korrekte ressource.",
         "dns_records": "DNS-poster",
         "dns_records_24hours": "Bemærk, at ændringer, der foretages i DNS, kan tage op til 24 timer for at få deres aktuelle status korrekt reflekteret på denne side. Det er beregnet som en måde for dig let at se, hvordan du konfigurerer dine DNS-poster og kontrollere, om alle dine poster er korrekt gemt i DNS.",
-        "dns_records_docs": "Se også <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">dokumentationen</a>.",
+        "dns_records_docs": "Se også <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">dokumentationen</a>.",
         "dns_records_data": "Korrekte data",
         "dns_records_name": "Navn",
         "dns_records_status": "Nuværende tilstand",

+ 2 - 2
data/web/lang/lang.de-de.json

@@ -558,7 +558,7 @@
         "dns_records": "DNS-Einträge",
         "dns_records_24hours": "Bitte beachten Sie, dass es bis zu 24 Stunden dauern kann, bis Änderungen an Ihren DNS-Einträgen als aktueller Status auf dieser Seite dargestellt werden. Diese Seite ist nur als Hilfsmittel gedacht, um die korrekten Werte für DNS-Einträge anzuzeigen und zu überprüfen, ob die Daten im DNS hinterlegt sind.",
         "dns_records_data": "Korrekte Daten",
-        "dns_records_docs": "Die <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">Online-Dokumentation</a> enthält weitere Informationen zur DNS-Konfiguration.",
+        "dns_records_docs": "Die <a target=\"_blank\" href=\"https://docs.mailcow.email/de/getstarted/prerequisite-dns\">Online-Dokumentation</a> enthält weitere Informationen zur DNS-Konfiguration.",
         "dns_records_name": "Name",
         "dns_records_status": "Aktueller Status",
         "dns_records_type": "Typ",
@@ -615,6 +615,7 @@
         "extended_sender_acl_info": "Der DKIM-Domainkey der externen Absenderdomain sollte in diesen Server importiert werden, falls vorhanden.<br>\r\n  Wird SPF verwendet, muss diesem Server der Versand gestattet werden.<br>\r\n  Wird eine Domain oder Alias-Domain zu diesem Server hinzugefügt, die sich mit der externen Absenderadresse überschneidet, wird der externe Absender hier entfernt.<br>\r\n  Ein Eintrag @domain.tld erlaubt den Versand als *@domain.tld",
         "force_pw_update": "Erzwinge Passwortänderung bei nächstem Login",
         "force_pw_update_info": "Dem Benutzer wird lediglich der Zugang zur %s ermöglicht, App Passwörter funktionieren weiterhin.",
+        "footer_exclude": "von Fußzeile ausschließen",
         "full_name": "Voller Name",
         "gal": "Globales Adressbuch",
         "gal_info": "Das globale Adressbuch enthält alle Objekte einer Domain und kann durch keinen Benutzer geändert werden. Die Verfügbarkeitsinformation in SOGo ist nur bei eingeschaltetem globalen Adressbuch ersichtlich <b>Zum Anwenden einer Änderung muss SOGo neugestartet werden.</b>",
@@ -633,7 +634,6 @@
         "max_quota": "Max. Größe per Mailbox (MiB)",
         "maxage": "Maximales Alter in Tagen einer Nachricht, die kopiert werden soll<br><small>(0 = alle Nachrichten kopieren)</small>",
         "maxbytespersecond": "Max. Übertragungsrate in Bytes/s (0 für unlimitiert)",
-        "mbox_exclude": "Mailboxen ausschließen",
         "mbox_rl_info": "Dieses Limit wird auf den SASL Loginnamen angewendet und betrifft daher alle Absenderadressen, die der eingeloggte Benutzer verwendet. Bei Mailbox Ratelimit überwiegt ein Domain-weites Ratelimit.",
         "mins_interval": "Intervall (min)",
         "multiple_bookings": "Mehrfaches Buchen",

+ 2 - 2
data/web/lang/lang.en-gb.json

@@ -595,7 +595,7 @@
         "dns_records": "DNS Records",
         "dns_records_24hours": "Please note that changes made to DNS may take up to 24 hours to correctly have their current state reflected on this page. It is intended as a way for you to easily see how to configure your DNS records and to check whether all your records are correctly stored in DNS.",
         "dns_records_data": "Correct Data",
-        "dns_records_docs": "Please also consult <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">the documentation</a>.",
+        "dns_records_docs": "Please also consult <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">the documentation</a>.",
         "dns_records_name": "Name",
         "dns_records_status": "Current State",
         "dns_records_type": "Type",
@@ -652,6 +652,7 @@
         "extended_sender_acl_info": "A DKIM domain key should be imported, if available.<br>\r\n  Remember to add this server to the corresponding SPF TXT record.<br>\r\n  Whenever a domain or alias domain is added to this server, that overlaps with an external address, the external address is removed.<br>\r\n  Use @domain.tld to allow to send as *@domain.tld.",
         "force_pw_update": "Force password update at next login",
         "force_pw_update_info": "This user will only be able to login to %s. App passwords remain useable.",
+        "footer_exclude": "Exclude from footer",
         "full_name": "Full name",
         "gal": "Global Address List",
         "gal_info": "The GAL contains all objects of a domain and cannot be edited by any user. Free/busy information in SOGo is missing, if disabled! <b>Restart SOGo to apply changes.</b>",
@@ -670,7 +671,6 @@
         "max_quota": "Max. quota per mailbox (MiB)",
         "maxage": "Maximum age of messages in days that will be polled from remote<br><small>(0 = ignore age)</small>",
         "maxbytespersecond": "Max. bytes per second <br><small>(0 = unlimited)</small>",
-        "mbox_exclude": "Exclude mailboxes",
         "mbox_rl_info": "This rate limit is applied on the SASL login name, it matches any \"from\" address used by the logged-in user. A mailbox rate limit overrides a domain-wide rate limit.",
         "mins_interval": "Interval (min)",
         "multiple_bookings": "Multiple bookings",

+ 3 - 1
data/web/lang/lang.es-es.json

@@ -22,7 +22,9 @@
         "app_passwds": "Gestionar las contraseñas de aplicaciones",
         "domain_desc": "Cambiar descripción del dominio",
         "protocol_access": "Cambiar protocolo de acceso",
-        "quarantine_category": "Cambiar categoría de las notificaciones de cuarentena"
+        "quarantine_category": "Cambiar categoría de las notificaciones de cuarentena",
+        "domain_relayhost": "Cambiar relayhost por un dominio",
+        "extend_sender_acl": "Permitir extender la ACL del remitente por direcciones externas"
     },
     "add": {
         "activate_filter_warn": "Todos los demás filtros se desactivarán cuando este filtro se active.",

+ 293 - 169
data/web/lang/lang.fr-fr.json

@@ -25,7 +25,7 @@
         "spam_score": "Score SPAM",
         "syncjobs": "Tâches de synchronisation",
         "tls_policy": "Politique TLS",
-        "unlimited_quota": "Quota illimité pour les boites de courriel",
+        "unlimited_quota": "Quota illimité pour les boîtes de réception",
         "domain_desc": "Modifier la description du domaine",
         "domain_relayhost": "Changer le relais pour un domaine",
         "mailbox_relayhost": "Changer le relais d’une boîte de réception"
@@ -52,7 +52,7 @@
         "delete2duplicates": "Supprimer les doubles à destination",
         "description": "Description",
         "destination": "Destination",
-        "disable_login": "Désactiver l'authentification (les mails entrants resteront acceptés)",
+        "disable_login": "Désactiver l'authentification (les courriels entrants resteront acceptés)",
         "domain": "domaine",
         "domain_matches_hostname": "Le domaine %s correspond à la machine (hostname)",
         "domain_quota_m": "Quota total du domaine (Mo)",
@@ -68,11 +68,11 @@
         "hostname": "Nom d'hôte",
         "inactive": "Inactif",
         "kind": "Type",
-        "mailbox_quota_def": "Quota boîte mail par défaut",
-        "mailbox_quota_m": "Quota max par boîte (Mo)",
+        "mailbox_quota_def": "Quota boîte de réception par défaut",
+        "mailbox_quota_m": "Quota max par boîte de réception (Mo)",
         "mailbox_username": "Identifiant (partie gauche d'une adresse de courriel)",
         "max_aliases": "Nombre maximal d'alias",
-        "max_mailboxes": "Nombre maximal de boîtes",
+        "max_mailboxes": "Nombre maximal de boîtes de réception",
         "mins_interval": "Période de relève (minutes)",
         "multiple_bookings": "Inscriptions multiples",
         "nexthop": "Suivant",
@@ -84,10 +84,10 @@
         "public_comment": "Commentaire public",
         "quota_mb": "Quota (Mo)",
         "relay_all": "Relayer tous les destinataires",
-        "relay_all_info": "↪ Si vous choissisez <b>de ne pas</b> relayer tous les destinataires, vous devez ajouter une boîte (\"aveugle\") pour chaque destinataire simple qui doit être relayé.",
+        "relay_all_info": "↪ Si vous choissisez <b>de ne pas</b> relayer tous les destinataires, vous devez ajouter une boîte de réception (\"aveugle\") pour chaque destinataire simple qui doit être relayé.",
         "relay_domain": "Relayer ce domaine",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> Vous pouvez définir des cartes de transport vers une destination personnalisée pour ce domaine. sinon, une recherche MX sera effectuée.",
-        "relay_unknown_only": "Relayer uniquement les boîtes inexistantes. Les boîtes existantes seront livrées localement.",
+        "relay_unknown_only": "Relayer uniquement les boîtes de réception inexistantes. Les boîtes de réception existantes seront livrées localement.",
         "relayhost_wrapped_tls_info": "Veuillez <b>ne pas</b> utiliser des ports TLS wrappés (généralement utilisés sur le port 465).<br>\r\nUtilisez n'importe quel port non encapsulé et lancez STARTTLS. Une politique TLS pour appliquer TLS peut être créée dans \"Cartes de politique TLS\".",
         "select": "Veuillez sélectionner…",
         "select_domain": "Sélectionner d'abord un domaine",
@@ -96,7 +96,7 @@
         "skipcrossduplicates": "Ignorer les messages en double dans les dossiers (premier arrivé, premier servi)",
         "subscribeall": "S'abonner à tous les dossiers",
         "syncjob": "Ajouter une tâche de synchronisation",
-        "syncjob_hint": "Sachez que les mots de passe seront sauvegardés en clair !",
+        "syncjob_hint": "Sachez que les mots de passe seront enregistrés en clair !",
         "target_address": "Aller à l'adresse",
         "target_address_info": "<small>Adresse(s) de courriel complète(s) (séparées par des virgules).</small>",
         "target_domain": "Domaine cible",
@@ -105,9 +105,10 @@
         "username": "Nom d'utilisateur",
         "validate": "Valider",
         "validation_success": "Validation réussie",
-        "bcc_dest_format": "La destination Cci doit être une seule adresse e-mail valide.<br>Si vous avez besoin d'envoyer une copie à plusieurs adresses, créez un alias et utilisez-le ici.",
+        "bcc_dest_format": "La destination Cci doit être une seule adresse de courriel valide.<br>Si vous avez besoin d'envoyer une copie à plusieurs adresses, créez un alias et utilisez-le ici.",
         "tags": "Etiquettes",
-        "app_passwd_protocols": "Protocoles autorisés pour le mot de passe de l'application"
+        "app_passwd_protocols": "Protocoles autorisés pour le mot de passe de l'application",
+        "dry": "Simuler la synchronisation"
     },
     "admin": {
         "access": "Accès",
@@ -169,7 +170,7 @@
         "domain_s": "Domaine(s)",
         "duplicate": "Dupliquer",
         "duplicate_dkim": "Dupliquer l'enregistrement DKIM",
-        "edit": "Editer",
+        "edit": "Éditer",
         "empty": "Aucun résultat",
         "excludes": "Exclure ces destinataires",
         "f2b_ban_time": "Durée du bannissement (s)",
@@ -193,7 +194,7 @@
         "generate": "générer",
         "guid": "GUID - Identifiant de l'instance",
         "guid_and_license": "GUID & Licence",
-        "hash_remove_info": "La suppression d'un hachage ratelimit (s'il existe toujours) réinitialisera complètement son compteur.<br>\r\n  Chaque hachage est indiqué par une couleur individuelle.",
+        "hash_remove_info": "La suppression d'un hachage limite d'envoi (s'il existe toujours) réinitialisera complètement son compteur.<br>\n  Chaque hachage est indiqué par une couleur individuelle.",
         "help_text": "Remplacer le texte d'aide sous le masque de connexion (HTML autorisé)",
         "host": "Hôte",
         "html": "HTML",
@@ -202,14 +203,14 @@
         "in_use_by": "Utilisé par",
         "inactive": "Inactif",
         "include_exclude": "Inclure/Exclure",
-        "include_exclude_info": "Par défaut - sans sélection - <b>toutes les boîtes</b> sont adressées",
+        "include_exclude_info": "Par défaut - sans sélection - <b>toutes les boîte de réception</b> sont adressées",
         "includes": "Inclure ces destinataires",
         "last_applied": "Dernière application",
         "license_info": "Une licence n’est pas requise, mais contribue au développement.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"SAL order\">Enregistrer votre GUID ici</a> or <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Support order\">acheter le support pour votre intallation Mailcow.</a>",
         "link": "Lien",
         "loading": "Veuillez patienter…",
         "logo_info": "Votre image sera redimensionnée à une hauteur de 40 pixels pour la barre de navigation du haut et à un maximum de 250 pixels en largeur pour la page d'accueil. Un graphique extensible est fortement recommandé.",
-        "lookup_mx": "Faire correspondre la destination à MX (.outlook.com pour acheminer tous les messages ciblés vers un MX * .outlook.com sur ce tronçon)",
+        "lookup_mx": "Faire correspondre la destination à MX (<code>.*\\.google\\.com</code> pour acheminer tous les messages ciblés vers un MX se terminant par google.com sur ce tronçon)",
         "main_name": "\"mailcow UI\" nom",
         "merged_vars_hint": "Les lignes grisées ont été importées depuis <code>vars.(local.)inc.php</code> et ne peuvent pas être modifiées.",
         "message": "Message",
@@ -221,7 +222,7 @@
         "no_record": "Aucun enregistrement",
         "oauth2_client_id": "Client ID",
         "oauth2_client_secret": "Secret client",
-        "oauth2_info": "L'implémentation OAuth2 prend en charge le type d'autorisation \"Authorization Code\" et émet des jetons d'actualisation.<br>\nLe serveur émet également automatiquement de nouveaux jetons d'actualisation, après qu'un jeton d'actualisation a été utilisé.<br><br>\n→ La portée par défaut est <i>profile</i>. Seuls les utilisateurs d'une boîte peuvent être authentifiés par rapport à OAuth2. Si le paramètre scope est omis, il revient au <i>profile</i>.<br>\n→ Le paramètre <i>state</i> doit être envoyé par le client dans le cadre de la demande d'autorisation.<br><br>\nChemins d'accès aux requêtes vers l'API OAuth <br>\n<ul>\n  <li>Point de terminaison d'autorisation : <code>/oauth/authorize</code></li>\n  <li>Point de terminaison du jeton : <code>/oauth/token</code></li>\n  <li>Page de ressource : <code>/oauth/profile</code></li>\n</ul>\nLa régénération du secret client ne fera pas expirer les codes d'autorisation existants, mais ils ne pourront pas renouveler leur jeton.<br><br>\nLa révocation des jetons clients entraînera la fin immédiate de toutes les sessions actives. Tous les clients doivent se ré-authentifier.",
+        "oauth2_info": "L'implémentation OAuth2 prend en charge le type d'autorisation \"Authorization Code\" et émet des jetons d'actualisation.<br>\nLe serveur émet également automatiquement de nouveaux jetons d'actualisation, après qu'un jeton d'actualisation a été utilisé.<br><br>\n→ La portée par défaut est <i>profile</i>. Seuls les utilisateurs d'une boîte de réception peuvent être authentifiés par rapport à OAuth2. Si le paramètre scope est omis, il revient au <i>profile</i>.<br>\n→ Le paramètre <i>state</i> doit être envoyé par le client dans le cadre de la demande d'autorisation.<br><br>\nChemins d'accès aux requêtes vers l'API OAuth <br>\n<ul>\n  <li>Point de terminaison d'autorisation : <code>/oauth/authorize</code></li>\n  <li>Point de terminaison du jeton : <code>/oauth/token</code></li>\n  <li>Page de ressource : <code>/oauth/profile</code></li>\n</ul>\nLa régénération du secret client ne fera pas expirer les codes d'autorisation existants, mais ils ne pourront pas renouveler leur jeton.<br><br>\nLa révocation des jetons clients entraînera la fin immédiate de toutes les sessions actives. Tous les clients doivent se ré-authentifier.",
         "oauth2_redirect_uri": "URI de redirection",
         "oauth2_renew_secret": "Générer un nouveau secret client",
         "oauth2_revoke_tokens": "Révoquer tous les jetons",
@@ -236,24 +237,24 @@
         "quarantine_max_age": "Âge maximun en jour(s)<br><small>La valeur doit être égale ou supérieure à 1 jour.</small>",
         "quarantine_max_size": "Taille maximum en Mo (les éléments plus grands sont mis au rebut):<br><small>0 ne signifie <b>pas</b> illimité.</small>",
         "quarantine_max_score": "Ignorer la notification si le score de spam est au dessus de cette valeur :<br><small>Par défaut : 9999.0</small>",
-        "quarantine_notification_html": "Modèle de courriel de notification:<br><small>Laisser vide pour restaurer le modèle par défaut.</small>",
-        "quarantine_notification_sender": "Notification par e-mail de l’expéditeur",
+        "quarantine_notification_html": "Modèle de courriel de notification :<br><small>Laisser vide pour restaurer le modèle par défaut.</small>",
+        "quarantine_notification_sender": "Notification par courriel de l’expéditeur",
         "quarantine_notification_subject": "Objet du courriel de notification",
         "quarantine_redirect": "<b>Rediriger toutes les notifications</b> vers ce destinataire:<br><small>Laisser vide pour désactiver. <b>Courrier non signé et non coché. Doit être livré en interne seulement.</b></small>",
         "quarantine_release_format": "Format des éléments diffusés",
         "quarantine_release_format_att": "En pièce jointe",
         "quarantine_release_format_raw": "Original non modifié",
-        "quarantine_retention_size": "Rétentions par boîte:<br><small>0 indique <b>inactive</b>.</small>",
-        "quota_notification_html": "Modèle de courriel de notification:<br><small>Laisser vide pour restaurer le modèle par défaut.</small>",
-        "quota_notification_sender": "Notification par e-mail de l’expéditeur",
+        "quarantine_retention_size": "Rétentions par boîte de réception:<br><small>0 indique <b>inactive</b>.</small>",
+        "quota_notification_html": "Modèle de courriel de notification :<br><small>Laisser vide pour restaurer le modèle par défaut.</small>",
+        "quota_notification_sender": "Notification par courriel de l’expéditeur",
         "quota_notification_subject": "Objet du courriel de notification",
         "quota_notifications": "Notifications de quotas",
         "quota_notifications_info": "Les notications de quota sont envoyées aux utilisateurs une fois lors du passage à 80 % et une fois lors du passage à 95 % d’utilisation.",
-        "quota_notifications_vars": "{{percent}} égale le quota actuel de l’utilisateur<br>{{username}} est le nom de la boîte",
+        "quota_notifications_vars": "{{percent}} égale le quota actuel de l’utilisateur<br>{{username}} est le nom de la boîte de réception",
         "r_active": "Restrictions actives",
         "r_inactive": "Restrictions inactives",
         "r_info": "Les éléments grisés/désactivés sur la liste des restrictions actives ne sont pas considérés comme des restrictions valides pour Mailcow et ne peuvent pas être déplacés. Des restrictions inconnues seront établies par ordre d’apparition de toute façon. <br>Vous pouvez ajouter de nouveaux éléments dans le code <code>inc/vars.local.inc.php</code> pour pouvoir les basculer.",
-        "rate_name": "Nom du taux",
+        "rate_name": "Nom de la limite",
         "recipients": "Destinataires",
         "refresh": "Rafraîchir",
         "regen_api_key": "Regénérer la clé API",
@@ -273,9 +274,9 @@
         "rsetting_no_selection": "Veuillez sélectionner une règle",
         "rsetting_none": "Pas de règles disponibles",
         "rsettings_insert_preset": "Insérer un exemple de préréglage \"%s\"",
-        "rsettings_preset_1": "Désactiver tout sauf DKIM et la limite tarifaire pour les utilisateurs authentifiés",
+        "rsettings_preset_1": "Désactiver tout sauf DKIM et la limite d'envoi pour les utilisateurs authentifiés",
         "rsettings_preset_2": "Les postmasters veulent du spam",
-        "rsettings_preset_3": "Autoriser uniquement des expéditeurs particuliers pour une boîte (c.-à-d. utilisation comme boîte interne seulement)",
+        "rsettings_preset_3": "Autoriser uniquement des expéditeurs particuliers pour une boîte de réception (c.-à-d. utilisation comme boîte de réception interne seulement)",
         "rspamd_com_settings": "Un nom de paramètre sera généré automatiquement, voir l’exemple de préréglages ci-dessous. Pour plus de détails voir : <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Docs Rspamd</a>",
         "rspamd_global_filters": "Cartes des filtres globaux",
         "rspamd_global_filters_agree": "Je serai prudent !",
@@ -311,7 +312,7 @@
         "ui_header_announcement_type_warning": "Important",
         "ui_header_announcement_type_danger": "Très important",
         "ui_texts": "Textes et étiquettes de l'interface utilisateur",
-        "unban_pending": "unban en attente",
+        "unban_pending": "Débanissement en attente",
         "unchanged_if_empty": "Si non modifié, laisser en blanc",
         "upload": "Charger",
         "username": "Nom d'utilisateur",
@@ -330,7 +331,19 @@
         "logo_normal_label": "Normal",
         "logo_dark_label": "Inversé pour le mode sombre",
         "allowed_methods": "Access-Control-Allow-Methods",
-        "allowed_origins": "Access-Control-Allow-Origin"
+        "allowed_origins": "Access-Control-Allow-Origin",
+        "copy_to_clipboard": "Texte copié dans le presse-papier !",
+        "password_policy_special_chars": "Doit contenir des caractères spéciaux",
+        "rsettings_preset_4": "Désactiver Rspamd pour un domaine",
+        "oauth2_apps": "Applications OAuth2",
+        "password_length": "Longueur des mots de passe",
+        "password_policy_chars": "Doit contenir au moins une lettre",
+        "password_policy_length": "La longueur minimale du mot de passe est de %d",
+        "f2b_manage_external_info": "Fail2ban maintiendra la liste de bannissement, mais ne définira pas activement de règles pour bloquer le trafic. Utilisez la liste de bannissement générée ci-dessous pour bloquer le trafic de manière externe.",
+        "f2b_manage_external": "Gérer Fail2Ban en externe",
+        "transport_test_rcpt_info": "&#8226 ; Utilisez null@hosted.mailcow.de pour tester le relais vers une destination étrangère.",
+        "relay_rcpt": "Adresse \"À :\"",
+        "is_mx_based": "Basé sur MX"
     },
     "danger": {
         "access_denied": "Accès refusé ou données de formulaire non valides",
@@ -344,9 +357,9 @@
         "app_passwd_id_invalid": "Le mot de passe ID %s de l'application est non valide",
         "bcc_empty": "La destination BCC destination ne peut pas être vide",
         "bcc_exists": "Une carte de transport BCC %s existe pour le type %s",
-        "bcc_must_be_email": "Le destination BCC %s n'est pas une adresse mail valide",
+        "bcc_must_be_email": "La destination BCC %s n'est pas une adresse de courriel valide",
         "comment_too_long": "Le commentaire est trop long, 160 caractère max sont permis",
-        "defquota_empty": "Le quota par défaut par boîte ne doit pas être 0.",
+        "defquota_empty": "Le quota par défaut par boîte de réception doit pas être 0.",
         "description_invalid": "La description des ressources pour %s est non valide",
         "dkim_domain_or_sel_exists": "Une clé DKIM pour \"%s\" existe et ne sera pas écrasée",
         "dkim_domain_or_sel_invalid": "Domaine ou sélection DKIM non valide : %s",
@@ -381,22 +394,22 @@
         "invalid_recipient_map_old": "Destinataire original spécifié non valide : %s",
         "ip_list_empty": "La liste des adresses IP autorisées ne peut pas être vide",
         "is_alias": "%s est déjà connu comme une adresse alias",
-        "is_alias_or_mailbox": "%s est déjà connu comme un alias, une boîte ou une adresse alias développée à partir d’un domaine alias.",
+        "is_alias_or_mailbox": "%s est déjà connu comme un alias, une boîte de réception ou une adresse alias développée à partir d’un domaine alias.",
         "is_spam_alias": "%s est déjà connu comme une adresse alias temporaire (alias d'adresse spam)",
         "last_key": "La dernière clé ne peut pas être supprimée, veuillez désactiver TFA à la place.",
         "login_failed": "La connexion a échoué",
         "mailbox_defquota_exceeds_mailbox_maxquota": "Le quota par défaut dépasse la limite maximale du quota",
-        "mailbox_invalid": "Le nom de la boîte n'est pas valide",
+        "mailbox_invalid": "Le nom de la boîte de réception n'est pas valide",
         "mailbox_quota_exceeded": "Le quota dépasse la limite du domaine (max. %d Mo)",
-        "mailbox_quota_exceeds_domain_quota": "Le quota maximum dépasse la limite du quota de domaine",
+        "mailbox_quota_exceeds_domain_quota": "Le quota maximal dépasse la limite du quota de domaine",
         "mailbox_quota_left_exceeded": "Espace libre insuffisant (espace libre : %d Mio)",
-        "mailboxes_in_use": "Le max. des boîtes doit être supérieur ou égal à %d",
+        "mailboxes_in_use": "Le max. des boîtes de réception doit être supérieur ou égal à %d",
         "malformed_username": "Nom d’utilisateur malformé",
         "map_content_empty": "Le contenu de la carte ne peut pas être vide",
         "max_alias_exceeded": "Le nombre max. d'aliases est dépassé",
-        "max_mailbox_exceeded": "Le nombre max. de boîte est dépassé (%d of %d)",
-        "max_quota_in_use": "Le quota de la boîte doit être supérieur ou égal à %d Mo",
-        "maxquota_empty": "Le quota maximum par boîte ne doit pas être de 0.",
+        "max_mailbox_exceeded": "Le nombre max. de boîte de réception est dépassé (%d of %d)",
+        "max_quota_in_use": "Le quota de la boîte de réception doit être supérieur ou égal à %d Mo",
+        "maxquota_empty": "Le quota maximum par boîte de réception ne doit pas être de 0.",
         "mysql_error": "Erreur MySQL : %s",
         "nginx_reload_failed": "Le rechargement de Nginx a échoué : %s",
         "network_host_invalid": "Réseau ou hôte non valide : %s",
@@ -421,15 +434,15 @@
         "release_send_failed": "Le message n’a pas pu être diffusé : %s",
         "reset_f2b_regex": "Le filtre regex n'a pas pu être réinitialisé à temps, veuillez réessayer ou attendre quelques secondes de plus et recharger le site web.",
         "resource_invalid": "Le nom de la resource %s n'est pas valide",
-        "rl_timeframe": "Le délai limite du taux est incorrect",
-        "rspamd_ui_pw_length": "Le mot de passe de l'interface Rspamd doit être de 6 caratères au minimum",
+        "rl_timeframe": "Le délai de la limite d'envoi est incorrect",
+        "rspamd_ui_pw_length": "Le mot de passe de l'interface Rspamd doit être de 6 caractères au minimum",
         "script_empty": "Le script ne peut pas être vide",
         "sender_acl_invalid": "La valeur ACL de l’expéditeur %s est invalide",
-        "set_acl_failed": "Impossible de définir ACL",
+        "set_acl_failed": "Impossible de définir l'ACL",
         "settings_map_invalid": "La carte des paramètres %s est invalide",
         "sieve_error": "Erreur d'analyse syntaxique Sieve : %s",
         "spam_learn_error": "Erreur d'apprentissage du spam : %s",
-        "subject_empty": "Le sujet ne peut^pas être vide",
+        "subject_empty": "Le sujet ne peut pas être vide",
         "target_domain_invalid": "Le domaine cible %s n'est pas valide",
         "targetd_not_found": "Le domaine cible %s est introuvable",
         "targetd_relay_domain": "Le domaine cible %s est un domaine de relais",
@@ -441,7 +454,7 @@
         "tls_policy_map_parameter_invalid": "Le paramètre Policy est invalide",
         "totp_verification_failed": "Echec de la vérification TOTP",
         "transport_dest_exists": "La destination de transport \"%s\" existe",
-        "webauthn_verification_failed": "Echec de la vérification WebAuthn : %s",
+        "webauthn_verification_failed": "Échec de la vérification WebAuthn : %s",
         "fido2_verification_failed": "La vérification FIDO2 a échoué : %s",
         "unknown": "Une erreur inconnue est survenue",
         "unknown_tfa_method": "Methode TFA inconnue",
@@ -450,11 +463,18 @@
         "validity_missing": "Veuillez attribuer une période de validité",
         "value_missing": "Veuillez fournir toutes les valeurs",
         "yotp_verification_failed": "La vérification Yubico OTP a échoué : %s",
-        "webauthn_authenticator_failed": "L'authentificateur selectionné est introuvable",
+        "webauthn_authenticator_failed": "L'authentificateur sélectionné est introuvable",
         "demo_mode_enabled": "Le mode de démonstration est activé",
-        "template_exists": "La template %s existe déja",
-        "template_id_invalid": "Le numéro de template %s est invalide",
-        "template_name_invalid": "Le nom de la template est invalide"
+        "template_exists": "Le modèle %s existe déjà",
+        "template_id_invalid": "Le numéro de modèle %s est invalide",
+        "template_name_invalid": "Le nom du modèle est invalide",
+        "img_dimensions_exceeded": "L'image dépasse les dimensions maximales",
+        "img_size_exceeded": "L'image dépasse la taille maximale de fichier",
+        "webauthn_publickey_failed": "Aucune clé publique n'a été stockée pour l'authentificateur sélectionné.",
+        "cors_invalid_method": "Allow-Method specifiée invalide",
+        "cors_invalid_origin": "Allow-Origin spécifiée invalide",
+        "extended_sender_acl_denied": "ACL manquante pour définir les adresses des expéditeurs externes",
+        "webauthn_username_failed": "L'authentificateur sélectionné appartient à un autre compte"
     },
     "debug": {
         "chart_this_server": "Graphique (ce serveur)",
@@ -464,7 +484,7 @@
         "history_all_servers": "Historique (tous les serveurs)",
         "in_memory_logs": "Logs En-mémoire",
         "jvm_memory_solr": "Utilisation mémoire JVM",
-        "log_info": "<p>Les logs <b>En-mémoire</b> Mailcow sont collectés dans des listes Redis et découpées en LOG_LINES (%d) chaque minute pour réduire la charge.\r\n  <br>Les logs En-mémoire ne sont pas destinés à être persistants. Toutes les applications qui se connectent en mémoire, se connectent également au démon Docker et donc au pilote de journalisation par défaut.\r\n  <br>Le type de journal en mémoire doit être utilisé pour déboguer les problèmes mineurs avec les conteneurs.</p>\r\n  <p><b>Les logs externes</b> sont collectés via l'API de l'application concernée.</p>\r\n  <p>Les journaux <b>statiques</b> sont principalement des journaux d’activité, qui ne sont pas enregistrés dans Dockerd, mais qui doivent toujours être persistants (sauf pour les logs API).</p>",
+        "log_info": "<p>Les logs <b>En-mémoire</b> Mailcow sont collectés dans des listes Redis et découpées en LOG_LINES (%d) chaque minute pour réduire la charge.\n  <br>Les logs En-mémoire ne sont pas destinés à être persistants. Toutes les applications qui se connectent en mémoire, se connectent également au démon Docker, et donc au pilote de journalisation par défaut.\n  <br>Le type de journal en mémoire doit être utilisé pour déboguer les problèmes mineurs avec les conteneurs.</p>\n  <p><b>Les logs externes</b> sont collectés via l'API de l'application concernée.</p>\n  <p>Les journaux <b>statiques</b> sont principalement des journaux d’activité, qui ne sont pas enregistrés dans Dockerd, mais qui doivent toujours être persistants (sauf pour les logs API).</p>",
         "logs": "Logs",
         "restart_container": "Redémarrer",
         "solr_dead": "Solr est en cours de démarrage, désactivé ou mort.",
@@ -477,23 +497,29 @@
         "uptime": "Disponibilité",
         "started_on": "Démarré à",
         "static_logs": "Logs statiques",
-        "system_containers": "Système & Conteneurs"
+        "system_containers": "Système & Conteneurs",
+        "timezone": "Fuseau horaire",
+        "username": "Nom d'utilisateur",
+        "wip": "En cours de réalisation",
+        "architecture": "Architecture",
+        "cores": "Cœurs",
+        "current_time": "Heure du système"
     },
     "diagnostics": {
         "cname_from_a": "Valeur dérivée de l’enregistrement A/AAAA. Ceci est supporté tant que l’enregistrement indique la bonne ressource.",
         "dns_records": "Enregistrements DNS",
         "dns_records_24hours": "Veuillez noter que les modifications apportées au DNS peuvent prendre jusqu’à 24 heures pour que leurs états actuels soient correctement reflétés sur cette page. Il est conçu comme un moyen pour vous de voir facilement comment configurer vos enregistrements DNS et de vérifier si tous vos enregistrements sont correctement stockés dans les DNS.",
-        "dns_records_docs": "Veuillez également consulter <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">la documentation</a>.",
+        "dns_records_docs": "Veuillez également consulter <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">la documentation</a>.",
         "dns_records_data": "Données correcte",
         "dns_records_name": "Nom",
-        "dns_records_status": "Etat courant",
+        "dns_records_status": "État courant",
         "dns_records_type": "Type",
         "optional": "Cet enregistrement est optionel."
     },
     "edit": {
         "active": "Actif",
         "advanced_settings": "Réglages avancés",
-        "alias": "Editer les alias",
+        "alias": "Éditer les alias",
         "allow_from_smtp": "Restreindre l'utilisation de <b>SMTP</b> à ces adresses IP",
         "allow_from_smtp_info": "Laissez vide pour autoriser tous les expéditeurs.<br>Adresses IPv4/IPv6 et réseaux.",
         "allowed_protocols": "Protocoles autorisés",
@@ -501,7 +527,7 @@
         "app_passwd": "Mot de passe de l'application",
         "automap": "Essayer d’automatiser les dossiers (\"Sent items\", \"Sent\" => \"Sent\" etc.)",
         "backup_mx_options": "Options Backup MX",
-        "bcc_dest_format": "La destination BCC doit être une seule adresse e-mail valide.",
+        "bcc_dest_format": "La destination BCC doit être une seule adresse de courriel valide.",
         "client_id": "ID client",
         "client_secret": "Secret client",
         "comment_info": "Un commentaire privé n’est pas visible pour l’utilisateur, tandis qu’un commentaire public est affiché comme infobulle lorsque vous le placez dans un aperçu des utilisateurs",
@@ -511,13 +537,13 @@
         "delete_ays": "Veuillez confirmer le processus de suppression.",
         "description": "Description",
         "disable_login": "Refuser l’ouverture de session (le courrier entrant est toujours accepté)",
-        "domain": "Edition du domaine",
-        "domain_admin": "Edition de l'administrateur du domaine",
+        "domain": "Édition du domaine",
+        "domain_admin": "Édition de l'administrateur du domaine",
         "domain_quota": "Quota du domaine",
         "domains": "Domaines",
         "dont_check_sender_acl": "Désactiver la vérification de l’expéditeur pour le domaine %s (+ alias de domaines)",
-        "edit_alias_domain": "Edition des alias de domaine",
-        "encryption": "Cryptage",
+        "edit_alias_domain": "Édition des alias de domaine",
+        "encryption": "Chiffrement",
         "exclude": "Exclure des objets (regex)",
         "extended_sender_acl": "Adresses de l’expéditeur externe",
         "extended_sender_acl_info": "Une clé de domaine DKIM doit être importée, si disponible.<br>\r\n  N’oubliez pas d’ajouter ce serveur à l’enregistrement TXT SPF correspondant.<br>\r\n  Chaque fois qu’un domaine ou un alias de domaine est ajouté à ce serveur, et qui chevauche une adresse externe, l’adresse externe est supprimée.<br>\r\n  Utiliser @domain.tld pour permettre l'envoi comme *@domain.tld.",
@@ -532,14 +558,14 @@
         "inactive": "Inactif",
         "kind": "Type",
         "last_modified": "Dernière modification",
-        "mailbox": "Edition de la boîte mail",
-        "mailbox_quota_def": "Quota par défaut de la boîte",
+        "mailbox": "Édition de la boîte de réception",
+        "mailbox_quota_def": "Quota par défaut de la boîte de réception",
         "max_aliases": "Nombre max. d'alias",
-        "max_mailboxes": "Nombre max. de boîtes possibles",
-        "max_quota": "Quota max. par boîte mail (Mo)",
+        "max_mailboxes": "Nombre max. de boîte de réception possibles",
+        "max_quota": "Quota max. par boîte de réception (Mo)",
         "maxage": "Âge maximal en jours des messages qui seront consultés à distance<br><small>(0 = ignorer la durée)</small>",
         "maxbytespersecond": "Octets max. par seconde <br><small>(0 = pas de limite)</small>",
-        "mbox_rl_info": "Cette limite de taux est appliquée au nom de connexion SASL, elle correspond à toute adresse \"from\" utilisée par l’utilisateur connecté. Une limite tarifaire pour les boîtes remplace une limite tarifaire pour l’ensemble du domaine.",
+        "mbox_rl_info": "Cette limite d'envoi est appliquée au nom de connexion SASL, elle correspond à toute adresse \"from\" utilisée par l’utilisateur connecté. Une limite d'envoi pour les boîtes de réception remplace une limite d'envoi pour l’ensemble du domaine.",
         "mins_interval": "Intervalle (min)",
         "multiple_bookings": "Réservations multiples",
         "nexthop": "Saut suivant",
@@ -549,22 +575,22 @@
         "private_comment": "Commentaire privé",
         "public_comment": "Commentaire public",
         "pushover_evaluate_x_prio": "Acheminement du courrier hautement prioritaire [<code>X-Priority: 1</code>]",
-        "pushover_info": "Les paramètres de notification push s’appliqueront à tout le courrier propre (non spam) livré à <b>%s</b> y compris les alias (partagés, non partagés, étiquetés).",
+        "pushover_info": "Les paramètres de notification push s’appliqueront à tout le courrier propre (non-spam) livré à <b>%s</b> y compris les alias (partagés, non partagés, étiquetés).",
         "pushover_only_x_prio": "Ne tenir compte que du courrier hautement prioritaire [<code>X-Priority: 1</code>]",
-        "pushover_sender_array": "Ne tenir compte que des adresses électroniques suivantes de l’expéditeur : <small>(séparées par des virgules)</small>",
+        "pushover_sender_array": "Ne tenir compte que des adresses de courriel suivantes de l’expéditeur : <small>(séparées par des virgules)</small>",
         "pushover_sender_regex": "Tenir compte de l’expéditeur regex suivant",
         "pushover_text": "Texte de la notification",
         "pushover_title": "Titre de la notification",
         "pushover_vars": "Lorsque aucun filtre d’expéditeur n’est défini, tous les messages seront considérés.<br>Les filtres Regex ainsi que les vérifications exactes de l’expéditeur peuvent être définis individuellement et seront considérés de façon séquentielle. Ils ne dépendent pas les uns des autres.<br>Variables utilisables pour le texte et le titre (veuillez prendre note des politiques de protection des données)",
-        "pushover_verify": "Vérifier les justificatifs",
+        "pushover_verify": "Vérifier les informations d'identification",
         "quota_mb": "Quota (Mo)",
-        "ratelimit": "Limite de taux",
-        "redirect_uri": "Redirection/rappel URL",
+        "ratelimit": "Limite d'envoi",
+        "redirect_uri": "URL de redirection/callback",
         "relay_all": "Relayer tous les destinataires",
-        "relay_all_info": "↪ Si vous <b>ne choissisez pas</b> de relayer tous les destinataires, vous devrez ajouter une boîte (\"aveugle\") pour chaque destinataire qui devrait être relayé.",
+        "relay_all_info": "↪ Si vous <b>ne choisissez pas</b> de relayer tous les destinataires, vous devrez ajouter une boîte de réception (\"aveugle\") pour chaque destinataire qui devrait être relayé.",
         "relay_domain": "Relayer ce domaine",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> Vous pouvez définir des cartes de transport vers une destination personnalisée pour ce domaine. Si elle n’est pas configurée, une recherche MX sera effectuée.",
-        "relay_unknown_only": "Relais des boîtes non existantes seulement. Les boîtes existantes seront livrées localement..",
+        "relay_unknown_only": "Relais des boîtes de réception non existantes seulement. Les boîtes de réception existantes seront livrées localement.",
         "relayhost": "Transports dépendant de l’expéditeur",
         "remove": "Enlever",
         "resource": "Ressource",
@@ -572,12 +598,12 @@
         "scope": "Portée",
         "sender_acl": "Permettre d’envoyer comme",
         "sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">Le contrôle de l’expéditeur est désactivé</span>",
-        "sender_acl_info": "Si l’utilisateur de la boîte A est autorisé à envoyer en tant qu’utilisateur de la boîte B, l’adresse de l’expéditeur n’est pas automatiquement affichée comme sélectionnable du champ \"from\" dans SOGo.<br>\r\n  L’utilisateur B de la boîte doit créer une délégation dans Sogo pour permettre à l’utilisateur A de la boîte de sélectionner son adresse comme expéditeur. Pour déléguer une boîte dans Sogo, utilisez le menu (trois points) à droite du nom de votre boîte dans le coin supérieur gauche dans la vue de courrier. Ce comportement ne s’applique pas aux adresses alias.",
+        "sender_acl_info": "Si l’utilisateur de la boîte de réception A est autorisé à envoyer en tant qu’utilisateur de la boîte de réception B, l’adresse de l’expéditeur n’est pas automatiquement affichée comme sélectionnable du champ \"de\" dans SOGo.<br>\n  L’utilisateur B de la boîte de réception doit créer une délégation dans Sogo pour permettre à l’utilisateur A de la boîte de réception de sélectionner son adresse comme expéditeur. Pour déléguer une boîte de réception dans Sogo, utilisez le menu (trois points) à droite du nom de votre boîte dans le coin supérieur gauche dans la vue de courrier. Ce comportement ne s’applique pas aux adresses alias.",
         "sieve_desc": "Description courte",
         "sieve_type": "Type de filtre",
         "skipcrossduplicates": "Ignorer les messages en double dans les dossiers (premier arrivé, premier servi)",
         "sogo_visible": "Alias visible dans SOGo",
-        "sogo_visible_info": "Cette option affecte uniquement les objets qui peuvent être affichés dans SOGo (adresses alias partagées ou non partagées pointant vers au moins une boîte mail locale). Si caché, un alias n’apparaîtra pas comme expéditeur sélectionnable dans SOGo.",
+        "sogo_visible_info": "Cette option affecte uniquement les objets qui peuvent être affichés dans SOGo (adresses alias partagées ou non partagées pointant vers au moins une boîte de réception locale). Si caché, un alias n’apparaîtra pas comme expéditeur sélectionnable dans SOGo.",
         "spam_alias": "Créer ou modifier des adresses alias limitées dans le temps",
         "spam_filter": "Filtre spam",
         "spam_policy": "Ajouter ou supprimer des éléments à la liste blanche/noire",
@@ -588,12 +614,35 @@
         "target_domain": "Domaine cible",
         "timeout1": "Délai de connexion à l’hôte distant",
         "timeout2": "Délai de connexion à l’hôte local",
-        "title": "Editer l'objet",
+        "title": "Éditer l'objet",
         "unchanged_if_empty": "Si non modifié, laisser en blanc",
         "username": "Nom d'utilisateur",
-        "validate_save": "Valider et sauver",
+        "validate_save": "Valider et enregistrer",
         "lookup_mx": "La destination est une expression régulière qui doit correspondre avec le nom du MX (<code>.*\\.google\\.com</code> pour acheminer tout le courrier destiné à un MX se terminant par google.com via ce saut)",
-        "mailbox_relayhost_info": "S'applique uniquement à la boîte aux lettres et aux alias directs, remplace le relayhost du domaine."
+        "mailbox_relayhost_info": "S'applique uniquement à la boîte de réception et aux alias directs, remplace le relayhost du domaine.",
+        "acl": "ACL (Permission)",
+        "footer_exclude": "Exclure du pied de page",
+        "custom_attributes": "Attributs personnalisés",
+        "domain_footer_info_vars": {
+            "from_addr": "{= from_addr =} - Partie de l'enveloppe relative à l'adresse de provenance",
+            "from_domain": "{= from_domain =} - Partie de l'enveloppe provenant du domaine",
+            "custom": "{= foo =} - Si la boîte de réception possède l'attribut personnalisé \"foo\" avec la valeur \"bar\", elle renvoie \"bar\"",
+            "auth_user": "{= auth_user =}    - Nom d'utilisateur authentifié spécifié par un MTA",
+            "from_user": "{= from_user =}   -La partie utilisateur de l'enveloppe, par exemple, pour \"moo@mailcow.tld\", renvoie \"moo\"",
+            "from_name": "{= from_name =} - À partir du nom de l'enveloppe, par exemple, pour \"Mailcow &lt;moo@mailcow.tld&gt ;\" on obtient \"Mailcow\""
+        },
+        "domain_footer_skip_replies": "Ignorer le pied de page des courriels de réponse",
+        "domain_footer": "Pied de page du domaine",
+        "domain_footer_html": "Pied de page HTML",
+        "domain_footer_info": "Les pieds de page du domaine sont ajoutés à tous les courriels sortants associés à une adresse au sein de ce domaine. <br> Les variables suivantes peuvent être utilisées pour le pied de page :",
+        "domain_footer_plain": "Pied de page",
+        "app_passwd_protocols": "Protocoles autorisés pour le mot de passe d'application",
+        "created_on": "Créé le",
+        "none_inherit": "Aucun / Héritage",
+        "quota_warning_bcc": "Avertissement sur les quotas BCC",
+        "quota_warning_bcc_info": "Les avertissements seront envoyés en copies séparées aux destinataires suivants. Le sujet sera précédé du nom d'utilisateur correspondant entre parenthèses, par exemple : <code>Avertissement sur les quotas (user@example.com)</code>.",
+        "sogo_access_info": "L'authentification unique à partir de l'interface de messagerie reste opérationnelle. Ce paramètre n'affecte pas l'accès à tous les autres services et ne supprime ni ne modifie le profil SOGo existant d'un utilisateur.",
+        "admin": "Modifier l'administrateur"
     },
     "footer": {
         "cancel": "Annuler",
@@ -604,15 +653,16 @@
         "hibp_ok": "Aucune correspondance trouvée.",
         "loading": "Veuillez patienter…",
         "restart_container": "Redémarrer le conteneur",
-        "restart_container_info": "<b>Important:</b> Un redémarrage en douceur peut prendre un certain temps, veuillez attendre qu’il soit terminé.",
+        "restart_container_info": "<b>Important :</b> Un redémarrage en douceur peut prendre un certain temps, veuillez attendre qu’il soit terminé.",
         "restart_now": "Redémarrer maintenant",
-        "restarting_container": "Redémarrage du conteneur, cela peut prendre un certain temps"
+        "restarting_container": "Redémarrage du conteneur, cela peut prendre un certain temps",
+        "nothing_selected": "Rien n'est sélectionné"
     },
     "header": {
         "administration": "Configuration & détails",
         "apps": "Applications",
         "debug": "Information Système",
-        "email": "E-Mail",
+        "email": "Courriel",
         "mailcow_config": "Configuration",
         "quarantine": "Quarantaine",
         "restart_netfilter": "Redémarrer Netfilter",
@@ -628,7 +678,7 @@
         "delayed": "La connexion a été retardée de %s secondes.",
         "fido2_webauthn": "FIDO2/WebAuthn Login",
         "login": "Connexion",
-        "mobileconfig_info": "Veuillez vous connecter en tant qu’utilisateur de la boîte pour télécharger le profil de connexion Apple demandé.",
+        "mobileconfig_info": "Veuillez vous connecter en tant qu’utilisateur de la boîte de réception pour télécharger le profil de connexion Apple demandé.",
         "other_logins": "Clé d'authentification",
         "password": "Mot de passe",
         "username": "Nom d'utilisateur"
@@ -636,7 +686,7 @@
     "mailbox": {
         "action": "Action",
         "activate": "Activer",
-        "active": "Active",
+        "active": "Actif",
         "add": "Ajouter",
         "add_alias": "Ajouter un alias",
         "add_bcc_entry": "Ajouter une carte BCC",
@@ -644,19 +694,19 @@
         "add_domain_alias": "Ajouter un alias de domaine",
         "add_domain_record_first": "Veuillez d’abord ajouter un domaine",
         "add_filter": "Ajouter un filtre",
-        "add_mailbox": "Ajouter une boîte",
+        "add_mailbox": "Ajouter une boîte de réception",
         "add_recipient_map_entry": "Ajouter la carte du destinataire",
         "add_resource": "Ajouter une ressource",
         "add_tls_policy_map": "Ajouter la carte de la politique des TLS",
         "address_rewriting": "Réécriture de l’adresse",
         "alias": "Alias",
-        "alias_domain_alias_hint": "Les alias <b>ne sont pas</b> appliqués automatiquement sur les alias de domaine. Un alias d'adresse <code>my-alias@domain</code> <b>ne couvre pas</b> l'adresse <code>my-alias@alias-domain</code> (où \"alias-domain\" est un alias imaginaire pour \"domain\").<br>Veuillez utiliser un filtre à tamis pour rediriger le courrier vers une boîte externe (voir l'onglet \"Filtres\" ou utilisez SOGo -> Forwarder).",
+        "alias_domain_alias_hint": "Les alias <b>ne sont pas</b> appliqués automatiquement sur les alias de domaine. Un alias d'adresse <code>my-alias@domain</code> <b>ne couvre pas</b> l'adresse <code>my-alias@alias-domain</code> (où \"alias-domain\" est un alias imaginaire pour \"domain\").<br>Veuillez utiliser un filtre à tamis pour rediriger le courrier vers une boîte de réception externe (voir l'onglet « Filtres » ou utilisez SOGo → Transférer).",
         "alias_domain_backupmx": "Alias de domaine inactif pour le domaine relais",
         "aliases": "Aliases",
         "allow_from_smtp": "Restreindre l'utilisation de <b>SMTP</b> à ces adresses IP",
         "allow_from_smtp_info": "Laissez vide pour autoriser tous les expéditeurs.<br>Adresses IPv4/IPv6 et réseaux.",
         "allowed_protocols": "Protocoles autorisés",
-        "backup_mx": "Sauvegarde MX",
+        "backup_mx": "Domaine de relais",
         "bcc": "BCC",
         "bcc_destination": "Destination BCC",
         "bcc_destinations": "Destinations BCC",
@@ -672,9 +722,9 @@
         "bcc_type": "Type de BCC",
         "booking_null": "Toujours montrer comme libre",
         "booking_0_short": "Toujours libre",
-        "booking_custom": "Limite rigide à un nombre de réservations personnalisé",
-        "booking_custom_short": "Limite rigide",
-        "booking_ltnull": "Illimité, mais afficher aussi occupé lorsque réservé",
+        "booking_custom": "Limitation stricte à un nombre personnalisé de réservations",
+        "booking_custom_short": "Limite stricte",
+        "booking_ltnull": "Illimité, mais indiqué comme occupé lors de la réservation",
         "booking_lt0_short": "Limite souple",
         "daily": "Quotidiennement",
         "deactivate": "Désactiver",
@@ -689,33 +739,33 @@
         "domain_quota": "Quota",
         "domain_quota_total": "Quota total du domaine",
         "domains": "Domaines",
-        "edit": "Editer",
-        "empty": "Pas de résulats",
+        "edit": "Éditer",
+        "empty": "Pas de résultats",
         "enable_x": "Activer",
-        "excludes": "Exclut",
-        "filter_table": "Table de filtre",
+        "excludes": "Exclus",
+        "filter_table": "Table de filtrage",
         "filters": "Filtres",
         "fname": "Nom complet",
         "force_pw_update": "Forcer la mise à jour du mot de passe à la prochaine ouverture de session",
         "gal": "Carnet d'Adresses Global (GAL)",
-        "hourly": "Horaire",
+        "hourly": "Toutes les heures",
         "in_use": "Utilisé (%)",
         "inactive": "Inactif",
         "insert_preset": "Insérer un exemple de préréglage \"%s\"",
         "kind": "Type",
         "last_mail_login": "Dernière connexion mail",
         "last_modified": "Dernière modification",
-        "last_run": "Dernière éxécution",
+        "last_run": "Dernière exécution",
         "last_run_reset": "Calendrier suivant",
-        "mailbox": "Mailbox",
-        "mailbox_defquota": "Taille de boîte par défaut",
-        "mailbox_quota": "Taille max. d’une boîte",
-        "mailboxes": "Boîtes mail",
+        "mailbox": "Boîte de réception",
+        "mailbox_defquota": "Taille de boîte de réception par défaut",
+        "mailbox_quota": "Taille max. d’une boîte de réception",
+        "mailboxes": "Boîtes de réception",
         "mailbox_defaults": "Paramètres par défaut",
-        "mailbox_defaults_info": "Définir les paramètres par défaut pour les nouvelles boîtes aux lettres.",
+        "mailbox_defaults_info": "Définir les paramètres par défaut pour les nouvelles boîtes de réception.",
         "max_aliases": "Nombre maximal d'alias",
-        "max_mailboxes": "Nombre maximal de boîtes",
-        "max_quota": "Quota max. par boîte mail",
+        "max_mailboxes": "Nombre maximal de boîte de réception",
+        "max_quota": "Quota max. par boîte de réception",
         "mins_interval": "Intervalle (min)",
         "msg_num": "Message #",
         "multiple_bookings": "Réservations multiples",
@@ -726,18 +776,18 @@
         "owner": "Propriétaire",
         "private_comment": "Commentaire privé",
         "public_comment": "Commentaire public",
-        "q_add_header": "Courriers indésirables",
-        "q_all": " quand déplacé dans le dossier spam ou rejeté",
-        "q_reject": "Rejecté",
+        "q_add_header": "lorsqu'il est déplacé dans le dossier Indésirables",
+        "q_all": " quand déplacé dans le dossier indésirables ou rejeté",
+        "q_reject": "en cas de refus",
         "quarantine_notification": "Avis de quarantaine",
         "quarantine_category": "Catégorie de la notification de quarantaine",
         "quick_actions": "Actions",
         "recipient_map": "Carte du destinataire",
         "recipient_map_info": "Les cartes des destinataires sont utilisées pour remplacer l’adresse de destination d’un message avant sa livraison.",
         "recipient_map_new": "Nouveau destinataire",
-        "recipient_map_new_info": "La destination de la carte du destinataire doit être une adresse électronique valide.",
+        "recipient_map_new_info": "La destination de la carte du destinataire doit être une adresse de courriel valide.",
         "recipient_map_old": "Destinataire original",
-        "recipient_map_old_info": "Une carte de destination originale doit être une adresse e-mail valide ou un nom de domaine.",
+        "recipient_map_old_info": "Une carte de destination originale doit être une adresse de courriel valide ou un nom de domaine.",
         "recipient_maps": "Cartes des bénéficiaires",
         "relay_all": "Relayer tous les destinataires",
         "remove": "Supprimer",
@@ -745,16 +795,16 @@
         "running": "En fonctionnement",
         "set_postfilter": "Marquer comme postfiltre",
         "set_prefilter": "Marquer comme préfiltre",
-        "sieve_info": "Vous pouvez stocker plusieurs filtres par utilisateur, mais un seul préfiltre et un seul postfiltre peuvent être actifs en même temps.<br>\r\nChaque filtre sera traité dans l’ordre décrit. Ni un script \"rejeter\" ni un \"garder\" n’arrêtera le traitement des autres scripts. Les modifications apportées aux scripts de tamis globaux déclencheront un redémarrage de Dovecot.<br><br>Préfiltre de tamis global → Préfiltre → Scripts utilisateur → Postfiltre → Postfiltre du tamis global",
+        "sieve_info": "Vous pouvez stocker plusieurs filtres par utilisateur, mais un seul préfiltre et un seul postfiltre peuvent être actifs simultanément.<br>\nChaque filtre sera traité dans l’ordre décrit. Ni un script « rejeter » ni un « garder » n’arrêtera le traitement des autres scripts. Les modifications apportées aux scripts de tamis globaux déclencheront un redémarrage de Dovecot.<br><br>Préfiltre de tamis global → Préfiltre → Scripts utilisateur → Postfiltre → Postfiltre du tamis global",
         "sieve_preset_1": "Jeter le courrier avec les types de fichiers dangereux probables",
-        "sieve_preset_2": "Toujours marquer l’e-mail d’un expéditeur spécifique comme vu",
-        "sieve_preset_3": "Jeter en silence, arrêter tout traitement supplémentaire du tamis",
-        "sieve_preset_4": "Fichier dans INBOX, éviter le traitement ultérieur par filtres à tamis",
+        "sieve_preset_2": "Toujours marquer l'adresse de courriel d’un expéditeur spécifique comme vu",
+        "sieve_preset_3": "Jeter en silence, arrêter tout traitement supplémentaire par filtre sieve",
+        "sieve_preset_4": "Fichier dans INBOX, éviter le traitement ultérieur par filtres sieve",
         "sieve_preset_5": "Répondeur auto (vacances)",
         "sieve_preset_6": "Rejeter le courrier avec réponse",
         "sieve_preset_7": "Rediriger et garder/déposer",
-        "sieve_preset_8": "Supprimer le message envoyé à une adresse alias dont fait partie l’expéditeur",
-        "sieve_preset_header": "Voir les exemples de préréglages ci-dessous. Pour plus de détails voir <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipedia</a>.",
+        "sieve_preset_8": "Rediriger les courriels d'un expéditeur spécifique, les marquer comme lus et les classer dans des sous-dossiers.",
+        "sieve_preset_header": "Voir les exemples de préréglages ci-dessous. Pour plus de détails, voir <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipédia</a>.",
         "sogo_visible": "Alias visible dans SOGo",
         "sogo_visible_n": "Masquer alias dans SOGo",
         "sogo_visible_y": "Afficher alias dans SOGo",
@@ -775,19 +825,29 @@
         "tls_map_policy": "Politique",
         "tls_policy_maps": "Cartes des politiques des TLS",
         "tls_policy_maps_info": "Cette carte de politique remplace les règles de transport TLS sortantes indépendamment des paramètres de politique TLS des utilisateurs.<br>\r\n  Veuillez vérifier <a href=\"http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps\" target=\"_blank\">la doc \"smtp_tls_policy_maps\" </a> pour plus d'informations.",
-        "tls_policy_maps_enforced_tls": "Ces politiques remplaceront également le comportement des utilisateurs de boîtes qui appliquent les connexions TLS sortantes. Si aucune politique n’existe ci-dessous, ces utilisateurs appliqueront les valeurs par défaut spécifiées comme <code>smtp_tls_mandatory_protocols</code> et <code>smtp_tls_mandatory_ciphers</code>.",
+        "tls_policy_maps_enforced_tls": "Ces politiques remplaceront également le comportement des utilisateurs de boîtes de réception qui appliquent les connexions TLS sortantes. Si aucune politique n’existe ci-dessous, ces utilisateurs appliqueront les valeurs par défaut spécifiées comme <code>smtp_tls_mandatory_protocols</code> et <code>smtp_tls_mandatory_ciphers</code>.",
         "tls_policy_maps_long": "Contournement de la carte de politique TLS sortante",
         "toggle_all": "Tout basculer",
         "username": "Nom d'utilisateur",
         "waiting": "En attente",
         "weekly": "Hebdomadaire",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "add_alias_expand": "Étendre l'alias aux alias de domaine",
+        "catch_all": "Catch-All",
+        "created_on": "Créé le",
+        "goto_ham": "Apprendre comme <b>ham</b>",
+        "goto_spam": "Apprendre comme <b>pourriel</b>",
+        "last_pw_change": "Dernier changement de mot de passe",
+        "mailbox_templates": "Modèle de boîte de réception",
+        "relay_unknown": "Relayer les boîtes de réception inconnues",
+        "all_domains": "Tous les domaines",
+        "syncjob_EXIT_OVERQUOTA": "Quota dépassé de la boîte de réception cible"
     },
     "oauth2": {
-        "access_denied": "Veuillez vous connecter en tant que propriétaire de la boîte pour accorder l’accès via 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.",
         "authorize_app": "Autoriser l'application",
         "deny": "Refuser",
-        "permit": "Autorise l'application",
+        "permit": "Autoriser l'application",
         "profile": "Profil",
         "profile_desc": "Afficher les informations personnelles : nom d’utilisateur, nom complet, créé, modifié, actif",
         "scope_ask_permission": "Une application demande les permissions suivantes"
@@ -800,8 +860,8 @@
         "confirm_delete": "Confirmer la suppression de cet élément.",
         "danger": "Danger",
         "deliver_inbox": "Envoyer dans la boîte de reception",
-        "disabled_by_config": "La configuration actuelle du système désactive la fonctionnalité de quarantaine. Veuillez définir \"retentions par boîte\" et une \"taille maximum\" pour les éléments en quarantaine.",
-        "settings_info": "Quantité maximum d'éléments à mettre en quarantaine : %s<br>Taille maximale des e-mails : %s MiB",
+        "disabled_by_config": "La configuration actuelle du système désactive la fonctionnalité de quarantaine. Veuillez définir « retentions par boîte » et une « taille maximale » pour les éléments en quarantaine.",
+        "settings_info": "Quantité maximale d'éléments à mettre en quarantaine : %s<br>Taille maximale des courriels : %s MiB",
         "download_eml": "Télécharger (.eml)",
         "empty": "Pas de résultat",
         "high_danger": "Haut",
@@ -814,7 +874,7 @@
         "notified": "Notifié",
         "qhandler_success": "Demande envoyée avec succès au système. Vous pouvez maintenant fermer la fenêtre.",
         "qid": "Rspamd QID",
-        "qinfo": "Le système de quarantaine enregistrera le courrier rejeté dans la base de données (l'expéditeur n'aura <em> pas </em> l'impression d'un courrier remis) ainsi que le courrier, qui est remis sous forme de copie dans le dossier indésirable d'une boîte aux lettres.\r\n  <br>\"Apprendre comme spam et supprimer\" apprendra un message comme spam via le théorème Bayesianet calculera également des hachages flous pour refuser des messages similaires à l'avenir.\r\n  <br>Veuillez noter que l'apprentissage de plusieurs messages peut prendre du temps, selon votre système. <br> Les éléments figurant sur la liste noire sont exclus de la quarantaine.",
+        "qinfo": "Le système de quarantaine enregistrera le courrier rejeté dans la base de données (l'expéditeur n'aura <em> pas </em> l'impression d'un courrier remis) ainsi que le courrier, remis sous forme de copie dans le dossier indésirable d'une boîte de réception.\n  <br>« Apprendre comme spam et supprimer » apprendra un message comme spam via le théorème Bayésien calculera également des hachages flous pour refuser des messages similaires à l'avenir.\n  <br>Veuillez noter que l'apprentissage de plusieurs messages peut prendre du temps, selon votre système. <br> Les éléments figurant sur la liste noire sont exclus de la quarantaine.",
         "qitem": "Élément de quarantaine",
         "quarantine": "Quarantaine",
         "quick_actions": "Actions",
@@ -846,26 +906,34 @@
         "toggle_all": "Tout basculer"
     },
     "queue": {
-        "queue_manager": "Gestion de la file d'attente"
+        "queue_manager": "Gestion de la file d'attente",
+        "hold_mail": "Garder",
+        "legend": "Fonctions d'action de la file d'attente du courrier :",
+        "info": "La file d'attente contient tous les courriels en attente de livraison. Si un courriel reste longtemps dans la file d'attente, il est automatiquement supprimé par le système.<br>Le message d'erreur du courriel concerné indique pourquoi le courriel n'a pas pu être distribué.",
+        "deliver_mail_legend": "Tentatives de réexpédition des courriers sélectionnés.",
+        "hold_mail_legend": "Met en attente les courriers sélectionnés. (Empêche les tentatives de distribution ultérieures)",
+        "unban": "file d'attente d'unban",
+        "unhold_mail": "Libérer",
+        "unhold_mail_legend": "Libère les courriers sélectionnés pour la distribution. (Nécessite une mise en attente préalable)"
     },
     "start": {
         "help": "Afficher/masquer le panneau d’aide",
-        "imap_smtp_server_auth_info": "Veuillez utiliser votre adresse e-mail complète et le mécanisme d’authentification PLAIN.<br>\r\nVos données de connexion seront cryptées par le cryptage obligatoire côté serveur.",
-        "mailcow_apps_detail": "Utiliser une application mailcow pour accéder à vos messages, calendrier, contacts et plus.",
-        "mailcow_panel_detail": "<b>Les administrateurs de domaines</b> peuvent créer, modifier or supprimer des boîtes et alias, changer de domaines et lire de plus amples renseignements sur les domaines qui leurs sont attribués.<br>\r\n<b>Les utilisateurs de boîtes</b> sont en mesure de créer des alias limités dans le temps (alias spam), de modifier leurs mots de passe et les paramètres du filtre anti-spam."
+        "imap_smtp_server_auth_info": "Veuillez utiliser votre adresse courriel complète et le mécanisme d’authentification PLAIN.<br>\nVos données de connexion seront cryptées par le cryptage obligatoire côté serveur.",
+        "mailcow_apps_detail": "Utiliser une application mailcow pour accéder à vos messages, vos calendriers, vos contacts et plus.",
+        "mailcow_panel_detail": "<b>Les administrateurs de domaines</b> peuvent créer, modifier, ou supprimer des boîtes de réception et alias, changer de domaines et lire de plus amples renseignements sur les domaines qui leur sont attribués.<br>\n<b>Les utilisateurs de boîtes de réception</b> sont en mesure de créer des alias limités dans le temps (alias spam), de modifier leurs mots de passe et les paramètres du filtre anti-spam."
     },
     "success": {
-        "acl_saved": "ACL (Access Control List) pour l'objet %s sauvé",
-        "admin_added": "Administrateur %s a été ajoutées",
+        "acl_saved": "ACL (Access Control List) pour l'objet %s enregistré",
+        "admin_added": "Administrateur %s a été ajouté",
         "admin_api_modified": "Les modifications apportées à l’API ont été enregistrées",
         "admin_modified": "Les modifications apportées à l’administrateur ont été enregistrées",
         "admin_removed": "Administrateur %s a été effacé",
         "alias_added": "L'adresse alias %s (%d) a été ajoutée",
         "alias_domain_removed": "L'alias de domaine %s a été effacé",
-        "alias_modified": "Le changement de l'adresse alias %s a été sauvegardée",
+        "alias_modified": "Le changement de l'adresse alias %s a été enregistré",
         "alias_removed": "L'alias %s a été effacé",
         "aliasd_added": "Alias de domaine %s ajouté",
-        "aliasd_modified": "Les changements de l'alias de domaine %s ont été sauvegardés",
+        "aliasd_modified": "Les changements de l'alias de domaine %s ont été enregistrés",
         "app_links": "Modifications enregistrées dans les liens d’application",
         "app_passwd_added": "Ajout d’un nouveau mot de passe d’application",
         "app_passwd_removed": "Suppression de l’identifiant du mot de passe de l’application %s",
@@ -877,14 +945,14 @@
         "delete_filters": "Filtres supprimés : %s",
         "deleted_syncjob": "ID du travail de synchronisation supprimé : %s",
         "deleted_syncjobs": "Travail de synchronisation supprimé : %s",
-        "dkim_added": "La clé DKIM %s a été sauvegardée",
-        "dkim_duplicated": "La clé DKIM pour e domaine %s a été copiée vers %s",
+        "dkim_added": "La clé DKIM %s a été enregistrée",
+        "dkim_duplicated": "La clé DKIM pour le domaine %s a été copiée vers %s",
         "dkim_removed": "La clé DKIM %s a été supprimée",
         "domain_added": "Domaine ajouté %s",
         "domain_admin_added": "L'administrateur de domaine %s a été ajouté",
-        "domain_admin_modified": "Les modifications de l'administrateur de domaine %s ont été sauvées",
+        "domain_admin_modified": "Les modifications de l'administrateur de domaine %s ont été enregistrées",
         "domain_admin_removed": "L'administrateur de domaine %s a été supprimé",
-        "domain_modified": "Les modification du domaine %s ont été sauvées",
+        "domain_modified": "Les modifications du domaine %s ont été enregistrées",
         "domain_removed": "Le domaine %s a été supprimé",
         "dovecot_restart_success": "Dovecot a été relancé avec succès",
         "eas_reset": "Les périphériques Activesync pour l’utilisateur %s ont été réinitialisés",
@@ -900,40 +968,47 @@
         "learned_ham": "ID %s acquis avec succès comme ham",
         "license_modified": "Les modifications apportées à la licence ont été enregistrées",
         "logged_in_as": "Connecté en tant que %s",
-        "mailbox_added": "La boîte mail %s a été ajoutée",
-        "mailbox_modified": "Les modifications de la boîte %s ont été sauvées",
-        "mailbox_removed": "La boîte %s a été supprimée",
+        "mailbox_added": "La boîte de réception %s a été ajoutée",
+        "mailbox_modified": "Les modifications de la boîte de réception %s ont été enregistrées",
+        "mailbox_removed": "La boîte de réception %s a été supprimée",
         "nginx_reloaded": "Nginx a été rechargé",
-        "object_modified": "Les changements de %s ont été sauvés",
+        "object_modified": "Les changements de %s ont été enregistrés",
         "pushover_settings_edited": "Paramètres Pushover réglés avec succès, veuillez vérifier les informations d’identification.",
         "qlearn_spam": "Le message ID %s a été appris comme spam et supprimé",
         "queue_command_success": "Queue de commande terminée avec succès",
         "recipient_map_entry_deleted": "La carte du destinataire ID %s a été effacée",
-        "recipient_map_entry_saved": "L'entrée de la carte du bénéficiaire \"%s\" a été sauvée",
+        "recipient_map_entry_saved": "L'entrée de la carte du bénéficiaire \"%s\" a été enregistrée",
         "relayhost_added": "L'entrée de la carte %s a été ajoutée",
         "relayhost_removed": "L'entrée de la carte %s a été supprimée",
         "reset_main_logo": "Réinitialisation du logo par défaut",
         "resource_added": "La ressource %s a été ajoutée",
-        "resource_modified": "Les modifications apportées à la boîte %s ont été enregistrées",
+        "resource_modified": "Les modifications apportées à la boîte de réception %s ont été enregistrées",
         "resource_removed": "La ressource %s a été supprimée",
-        "rl_saved": "Limite de taux pour l’objet %s enregistrée",
+        "rl_saved": "Limite d'envoi pour l’objet %s enregistrée",
         "rspamd_ui_pw_set": "Mot de passe de l'interface Rspamd sauvegardé avec succès",
         "saved_settings": "Paramètres enregistrés",
         "settings_map_added": "Ajout de l’entrée de la carte des paramètres",
         "settings_map_removed": "Suppression de la carte des paramètres ID %s",
         "sogo_profile_reset": "Le profil SOGo profile pour l'utilisateur %s est remis à zéro",
-        "tls_policy_map_entry_deleted": "La carte de stratégie TLS ID %s a été supprimé",
-        "tls_policy_map_entry_saved": "La carte de stratégie TLS ID \"%s\" a été sauvée",
+        "tls_policy_map_entry_deleted": "La carte de stratégie TLS ID %s a été supprimée",
+        "tls_policy_map_entry_saved": "La carte de stratégie TLS ID \"%s\" a été enregistrée",
         "ui_texts": "Enregistrement des modifications apportées aux textes de l’interface utilisateur",
         "upload_success": "Fichier téléchargé avec succès",
         "verified_totp_login": "Authentification TOTP vérifiée",
         "verified_webauthn_login": "Authentification WebAuthn vérifiée",
         "verified_fido2_login": "Authentification FIDO2 vérifiée",
-        "verified_yotp_login": "Authentification Yubico OTP vérifiée"
+        "verified_yotp_login": "Authentification Yubico OTP vérifiée",
+        "cors_headers_edited": "Les paramètres CORS ont été enregistrés",
+        "domain_footer_modified": "Les modifications apportées au pied de page du domaine %s ont été enregistrées",
+        "f2b_banlist_refreshed": "L'ID de la liste de ban a été actualisé avec succès.",
+        "template_added": "Modèles ajoutés %s",
+        "template_removed": "Le modèle ayant l'ID %s a été supprimé",
+        "domain_add_dkim_available": "A DKIM key did already exist",
+        "ip_check_opt_in_modified": "Le contrôle de l'IP a été enregistré avec succès"
     },
     "tfa": {
-        "api_register": "%s utilise l'API Yubico Cloud. Veuillez obtenir une clé API pour votre clé <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">here</a>",
-        "confirm": "confirmer",
+        "api_register": "%s utilise l'API Yubico Cloud. Veuillez obtenir une clé API pour votre clé <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">ici</a>",
+        "confirm": "Confirmer",
         "confirm_totp_token": "Veuillez confirmer vos modifications en saisissant le jeton généré",
         "delete_tfa": "Désactiver TFA",
         "disable_tfa": "Désactiver TFA jusqu’à la prochaine ouverture de session réussie",
@@ -954,21 +1029,25 @@
         "webauthn": "Authentification WebAuthn",
         "waiting_usb_auth": "<i>En attente d’un périphérique USB…</i><br><br>S’il vous plaît appuyez maintenant sur le bouton de votre périphérique USB WebAuthn.",
         "waiting_usb_register": "<i>En attente d’un périphérique USB…</i><br><br>Veuillez entrer votre mot de passe ci-dessus et confirmer votre inscription WebAuthn en appuyant sur le bouton de votre périphérique USB WebAuthn.",
-        "yubi_otp": "Authentification OTP Yubico"
+        "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é."
     },
     "fido2": {
         "set_fn": "Définir un nom",
         "fn": "Nom",
-        "rename": "renommer",
+        "rename": "Renommer",
         "confirm": "Confirmer",
-        "register_status": "Etat de l'enregistrement",
+        "register_status": "État de l'enregistrement",
         "known_ids": "Identifiant(s) connu(s)",
         "none": "Désactivé",
         "set_fido2": "Enregistrer un nouvel appareil FIDO2",
         "start_fido2_validation": "Tester la validation FIDO2",
         "fido2_auth": "Se connecter avec FIDO2",
         "fido2_success": "L'appareil est enregistré avec succès",
-        "fido2_validation_failed": "La validation a échoué"
+        "fido2_validation_failed": "La validation a échoué",
+        "set_fido2_touchid": "Enregistrer Touch ID sur Apple M1"
     },
     "user": {
         "action": "Action",
@@ -985,9 +1064,9 @@
         "alias_valid_until": "Valide jusque",
         "aliases_also_send_as": "Aussi autorisé à envoyer en tant qu’utilisateur",
         "aliases_send_as_all": "Ne pas vérifier l’accès de l’expéditeur pour les domaines suivants et leurs alias",
-        "app_hint": "Les mots de passe d’application sont des mots de passe alternatifs pour votre connexion IMAP, SMTP, Caldav, Carddav et EAS. Le nom d’utilisateur reste inchangé.<br>SOGo n'est pas disponible au travers de mots de passe.",
+        "app_hint": "Les mots de passe d’application sont des mots de passe alternatifs pour votre connexion IMAP, SMTP, Caldav, Carddav et EAS. Le nom d’utilisateur reste inchangé.<br>SOGo n'est pas disponible au travers des mots de passe d'application.",
         "app_name": "Nom d'application",
-        "app_passwds": "Mots de passe de l'application",
+        "app_passwds": "Mots de passe d'applications",
         "apple_connection_profile": "Profil de connexion Apple",
         "apple_connection_profile_complete": "Ce profil de connexion inclut les paramètres IMAP et SMTP ainsi que les chemins Caldav (calendriers) et Carddav (contacts) pour un appareil Apple.",
         "apple_connection_profile_mailonly": "Ce profil de connexion inclut les paramètres de configuration IMAP et SMTP pour un périphérique Apple.",
@@ -1000,14 +1079,14 @@
         "delete_ays": "Veuillez confirmer le processus de suppression.",
         "direct_aliases": "Adresses alias directes",
         "direct_aliases_desc": "Les adresses d’alias directes sont affectées par le filtre anti-spam et les paramètres de politique TLS.",
-        "eas_reset": "Réinitialiser le cache de l’appareil Activesync",
-        "eas_reset_help": "Dans de nombreux cas, une réinitialisation du cache de l’appareil aidera à récupérer un profil Activesync cassé.<br><b>Attention :</b> Tous les éléments seront à nouveau téléchargés !",
+        "eas_reset": "Réinitialiser le cache de l’appareil ActiveSync",
+        "eas_reset_help": "Dans de nombreux cas, une réinitialisation du cache de l’appareil aidera à récupérer un profil ActiveSync cassé.<br><b>Attention :</b> Tous les éléments seront de nouveau téléchargés !",
         "eas_reset_now": "Réinitialiser maintenant",
         "edit": "Éditer",
-        "email": "E-mail",
-        "email_and_dav": "E-mail, calendriers et contacts",
-        "encryption": "Cryptage",
-        "excludes": "Exclut",
+        "email": "Courriel",
+        "email_and_dav": "Courriel, calendriers et contacts",
+        "encryption": "Chiffrement",
+        "excludes": "Exclus",
         "expire_in": "Expire dans",
         "force_pw_update": "Vous <b>devez</b> définir un nouveau mot de passe pour pouvoir accéder aux services liés aux logiciels de groupe.",
         "generate": "générer",
@@ -1020,7 +1099,7 @@
         "last_mail_login": "Dernière connexion mail",
         "last_run": "Dernière exécution",
         "loading": "Chargement…",
-        "mailbox_details": "Détails de la boîte",
+        "mailbox_details": "Détails",
         "messages": "messages",
         "never": "jamais",
         "new_password": "Nouveau mot de passe",
@@ -1034,27 +1113,27 @@
         "pushover_evaluate_x_prio": "Acheminement du courrier hautement prioritaire [<code>X-Priority: 1</code>]",
         "pushover_info": "Les paramètres de notification push s’appliqueront à tout le courrier propre (non spam) livré à <b>%s</b> y compris les alias (partagés, non partagés, étiquetés).",
         "pushover_only_x_prio": "Ne tenir compte que du courrier hautement prioritaire [<code>X-Priority: 1</code>]",
-        "pushover_sender_array": "Tenez compte des adresses courriel suivantes de l’expéditeur : <small>(comma-separated)</small>",
+        "pushover_sender_array": "Tenir compte des adresses de courriel suivantes de l’expéditeur : <small>(comma-separated)</small>",
         "pushover_sender_regex": "Apparier les expéditeurs par le regex suivant",
         "pushover_text": "Texte de notification",
         "pushover_title": "Titre de la notification",
-        "pushover_vars": "Lorsquaucun filtre d’expéditeur n’est défini, tous les messages seront considérés.<br>Les filtres Regex ainsi que les vérifications exactes de l’expéditeur peuvent être définis individuellement et seront considérés de façon séquentielle. Ils ne dépendent pas les uns des autres.<br>Variables utilisables pour le texte et le titre (veuillez prendre note des politiques de protection des données)",
-        "pushover_verify": "Vérifier les justificatifs",
+        "pushover_vars": "Lorsque aucun filtre d’expéditeur n’est défini, tous les messages seront considérés.<br>Les filtres Regex ainsi que les vérifications exactes de l’expéditeur peuvent être définis individuellement et seront considérés de façon séquentielle. Ils ne dépendent pas les uns des autres.<br>Variables utilisables pour le texte et le titre (veuillez prendre note des politiques de protection des données)",
+        "pushover_verify": "Vérifier les identifiants",
         "q_add_header": "Courrier indésirable",
         "q_all": "Toutes les catégories",
         "q_reject": "Rejeté",
         "quarantine_notification": "Avis de quarantaine",
         "quarantine_category": "Catégorie de la notification de quarantaine",
-        "quarantine_notification_info": "Une fois qu’un avis a été envoyé, les articles seront marqués comme \"notified\" et aucune autre notification ne sera envoyée pour ce point particulier.",
-        "quarantine_category_info": "La catégorie de notification \"Rejeté\" inclut le courrier qui a été rejeté, tandis que \"Dossier indésirable\" informera un utilisateur des e-mails qui ont été placés dans le dossier indésirable.",
+        "quarantine_notification_info": "Une fois qu’un avis a été envoyé, les articles seront marqués comme « notifiés » et aucune autre notification ne sera envoyée pour ce point particulier.",
+        "quarantine_category_info": "La catégorie de notification « Rejeté » inclut le courrier rejeté, tandis que « Dossier indésirable » informera un utilisateur des courriels placés dans le dossier indésirable.",
         "remove": "Enlever",
-        "running": "En fonction",
-        "save": "Sauvegarder les changements",
-        "save_changes": "Sauvegarder les changements",
+        "running": "En fonctionnement",
+        "save": "Enregistrer les changements",
+        "save_changes": "Enregistrer les changements",
         "sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">Le contrôle de l’expéditeur est désactivé</span>",
         "shared_aliases": "Adresses alias partagées",
         "shared_aliases_desc": "Les alias partagés ne sont pas affectés par les paramètres spécifiques à l’utilisateur tels que le filtre anti-spam ou la politique de chiffrement. Les filtres anti-spam correspondants ne peuvent être effectués que par un administrateur en tant que politique de domaine.",
-        "show_sieve_filters": "Afficher le filtre de tamis actif de l’utilisateur",
+        "show_sieve_filters": "Afficher le filtre sieve actif de l’utilisateur",
         "sogo_profile_reset": "Remise à zéro du profil SOGo",
         "sogo_profile_reset_help": "Ceci détruira un profil Sogo des utilisateurs et <b>supprimera toutes les données de contact et de calendrier irrécupérables</b>.",
         "sogo_profile_reset_now": "Remise à zéro du profil maintenant",
@@ -1063,10 +1142,10 @@
         "spamfilter": "Filtre de spam",
         "spamfilter_behavior": "Note",
         "spamfilter_bl": "Liste noire (BlackList)",
-        "spamfilter_bl_desc": "Les adresses de courriel sur la liste noire de <b>always (toujours)</b> peuvent être classées comme des pourriels et rejetées. Des caractères génériques peuvent être utilisés. Un filtre n’est appliqué qu’aux alias directs (alias avec une seule boîte cible), à l’exclusion des alias tous azimuts et d’une boîte elle-même.",
+        "spamfilter_bl_desc": "Les adresses de courriel sur la liste noire de <b>toujours</b> peuvent être classées comme des pourriels et rejetées. Des caractères génériques peuvent être utilisés. Un filtre n’est appliqué qu’aux alias directs (alias avec une seule boîte de réception cible), à l’exclusion des alias tous azimuts et d’une boîte de réception elle-même.",
         "spamfilter_default_score": "Valeurs par défaut",
         "spamfilter_green": "Vert : ce message n'est pas un spam",
-        "spamfilter_hint": "La première valeur indique un \"faible score de spam\", la seconde représente un \"haut score de spam\".",
+        "spamfilter_hint": "La première valeur indique un « faible score de spam », la seconde représente un « haut score de spam ».",
         "spamfilter_red": "Rouge : Ce message est un spam et sera rejeté par le serveur",
         "spamfilter_table_action": "Action",
         "spamfilter_table_add": "Ajouter un élément",
@@ -1075,13 +1154,13 @@
         "spamfilter_table_remove": "supprimer",
         "spamfilter_table_rule": "Règle",
         "spamfilter_wl": "Liste blanche (WhiteList)",
-        "spamfilter_wl_desc": "La liste blanche est programmé pour <b> ne jamais</b> classer comme spam les adresses e-mail qu'elle contient. Des caractères génériques peuvent être utilisés. Un filtre n’est appliqué qu’aux alias directs (alias avec une seule boîte cible), à l’exclusion des alias catch-all et d’une boîte mail.",
+        "spamfilter_wl_desc": "La liste blanche est programmée pour <b> ne jamais</b> classer comme spam les adresses de courriel qu'elle contient. Des caractères génériques peuvent être utilisés. Un filtre n’est appliqué qu’aux alias directs (alias avec une seule boîte de réception cible), à l’exclusion des alias catch-all et d’une boîte de réception.",
         "spamfilter_yellow": "Jaune : ce message est peut être un spam, il sera étiqueté comme spam et déplacé vers votre dossier Pourriel",
         "status": "Statut",
         "sync_jobs": "Jobs de synchronisation",
         "tag_handling": "Régler la manipulation du courrier étiqueté",
-        "tag_help_example": "Exemple pour une adresse e-mail étiquetée : me<b>+Facebook</b>@example.org",
-        "tag_help_explain": "Dans un sous-dossier : un nouveau sous-dossier nommé selon l'étiquette sera créé sous INBOX (\"INBOX/Facebook\").<br>\nDans le sujet : le nom des balises sera ajouté au début du sujet du mail, exemple : \"[Facebook] My News\".",
+        "tag_help_example": "Exemple pour une adresse de courriel étiquetée : me<b>+Facebook</b>@example.org",
+        "tag_help_explain": "Dans un sous-dossier : un nouveau sous-dossier nommé selon l'étiquette sera créé sous INBOX (\"INBOX/Facebook\").<br>\nDans le sujet : le nom des balises sera ajouté au début du sujet de l'e-mail, exemple : \"[Facebook] My News\".",
         "tag_in_none": "Ne rien faire",
         "tag_in_subfolder": "Dans un sous dossier",
         "tag_in_subject": "Dans le sujet",
@@ -1090,7 +1169,7 @@
         "tls_enforce_in": "Appliquer le TLS entrant",
         "tls_enforce_out": "Appliquer le TLS sortant",
         "tls_policy": "Politique de chiffrement",
-        "tls_policy_warning": "<strong>Attention:</strong> Si vous décidez d’appliquer le transfert de courrier chiffré, vous risquez de perdre des courriels.<br>Les messages qui ne satisfont pas à la politique seront renvoyés avec une erreur grave par le système de messagerie.<br>Cette option s’applique à votre adresse courriel principale (login name), toutes les adresses dérivées de domaines alias ainsi que les adresses alias <b>avec cette seule boîte</b> comme cible.",
+        "tls_policy_warning": "<strong>Attention :</strong> Si vous décidez d’appliquer le transfert de courrier chiffré, vous risquez de perdre des courriels.<br>Les messages qui ne satisfont pas à la politique seront renvoyés avec une erreur grave par le système de messagerie.<br>Cette option s’applique à votre adresse courriel principale (login name), toutes les adresses dérivées de domaines alias ainsi que les adresses alias <b>avec cette seule boîte de réception</b> comme cible.",
         "user_settings": "Paramètres utilisateur",
         "username": "Nom d'utilisateur",
         "verify": "Vérification",
@@ -1101,7 +1180,29 @@
         "months": "mois",
         "year": "année",
         "years": "années",
-        "with_app_password": "avec le mot de passe de l'application"
+        "with_app_password": "avec le mot de passe de l'application",
+        "apple_connection_profile_with_app_password": "Un nouveau mot de passe est généré et ajouté au profil, de sorte qu'aucun mot de passe ne doit être saisi lors de la configuration de votre appareil. Ne partagez pas le fichier car il vous donne un accès complet à votre boîte de réception.",
+        "attribute": "Attribut",
+        "direct_protocol_access": "Cet utilisateur de la boîte aux lettres dispose d'un <b>accès externe direct</b> aux protocoles et applications suivants. Votre administrateur contrôle ce paramètre. Il est possible de créer des mots de passe d'application pour accorder l'accès à des protocoles et des applications individuels.<br>Le bouton « Connexion au webmail » permet une connexion unique à SOGo et est toujours disponible.",
+        "open_webmail_sso": "Connexion au webmail",
+        "recent_successful_connections": "Voir les connexions réussies",
+        "syncjob_EXIT_TLS_FAILURE": "Problème de connexion chiffrée",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "Problème d'authentification",
+        "syncjob_EXIT_OVERQUOTA": "La boîte de réception cible a dépassé le quota",
+        "login_history": "Historique des connexions",
+        "change_password_hint_app_passwords": "Votre compte a %d mots de passe d'application qui ne seront pas modifiés. Pour les gérer, allez dans l'onglet Mots de passe de l'application.",
+        "clear_recent_successful_connections": "Vider l'historique des connexions réussies",
+        "created_on": "Créé le",
+        "last_ui_login": "Dernière connexion sur l'interface",
+        "syncjob_check_log": "Vérifier le journal",
+        "syncjob_last_run_result": "Résultat du dernier lancement",
+        "syncjob_EX_OK": "Succès",
+        "syncjob_EXIT_CONNECTION_FAILURE": "Problème de connexion",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Impossible de se connecter au serveur distant",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Nom d'utilisateur ou mot de passe incorrect",
+        "value": "Valeur",
+        "allowed_protocols": "Protocoles autorisés",
+        "mailbox": "Boîte de réception"
     },
     "warning": {
         "cannot_delete_self": "Impossible de supprimer l’utilisateur connecté",
@@ -1110,9 +1211,32 @@
         "fuzzy_learn_error": "Erreur d’apprentissage du hachage flou: %s",
         "hash_not_found": "Hachage non trouvé ou déjà supprimé",
         "ip_invalid": "IP non valide ignorée : %s",
-        "no_active_admin": "Impossible de désactiver le dernier administrateur active",
-        "quota_exceeded_scope": "Dépassement du quota de domaine : Seules des boîtes illimitées peuvent être créées dans ce domaine.",
+        "no_active_admin": "Impossible de désactiver le dernier administrateur actif",
+        "quota_exceeded_scope": "Dépassement du quota de domaine : Seules des boîtes de réception illimitées peuvent être créées dans ce domaine.",
         "session_token": "Jeton de formulaire invalide : Jeton différent",
-        "session_ua": "Jeton de formulaire invalide : erreur de validation User-Agent"
+        "session_ua": "Jeton de formulaire invalide : erreur de validation User-Agent",
+        "is_not_primary_alias": "Alias non primaire ignoré %s"
+    },
+    "datatables": {
+        "decimal": ".",
+        "expand_all": "Tout déplier",
+        "thousands": ",",
+        "paginate": {
+            "first": "Premier",
+            "last": "Dernier"
+        },
+        "aria": {
+            "sortAscending": ": activer pour trier les colonnes en ordre croissant",
+            "sortDescending": ": activer pour trier les colonnes en ordre décroissant"
+        },
+        "infoEmpty": "Affichage de 0 à 0 de 0 entrées",
+        "infoFiltered": "(filtré à partir de _MAX_ entrées totales)",
+        "lengthMenu": "Afficher les entrées _MENU_",
+        "loadingRecords": "Chargement…",
+        "processing": "Veuillez patienter…",
+        "collapse_all": "Tout réduire"
+    },
+    "ratelimit": {
+        "disabled": "Désactivé"
     }
 }

+ 187 - 4
data/web/lang/lang.hu-hu.json

@@ -22,7 +22,114 @@
         "activate_api": "API aktiválása",
         "activate_send": "Küldés gomb aktiválása",
         "add": "Hozzáad",
-        "active": "Aktív"
+        "active": "Aktív",
+        "api_info": "Az API még fejlesztés alatt áll. A dokumentáció megtalálható a <a href=\"/api\">/api</a> alatt",
+        "allowed_methods": "Hozzáférés-Szabályozás-Engedélyezési-Módszerek",
+        "logo_normal_label": "Normál",
+        "logo_dark_label": "Sötét üzemmódhoz invertálva",
+        "f2b_regex_info": "Figyelembe vett naplók: SOGo, Postfix, Dovecot, PHP-FPM.",
+        "f2b_retry_window": "Újrapróbálkozási ablak (s) a maximális próbálkozásokhoz",
+        "f2b_whitelist": "Fehérlistás hálózatok/hostok",
+        "filter_table": "Szűrő táblázat",
+        "forwarding_hosts": "Továbbító hostok",
+        "forwarding_hosts_add_hint": "Megadhat IPv4/IPv6 címeket, hálózatokat CIDR jelölésben, állomásneveket (amelyek IP-címekre lesznek feloldva) vagy tartományneveket (amelyek IP-címekre lesznek feloldva az SPF rekordok vagy ezek hiányában az MX rekordok lekérdezésével).",
+        "from": "A címről",
+        "copy_to_clipboard": "Szöveg másolva a vágólapra!",
+        "f2b_manage_external": "A Fail2Ban külső kezelése",
+        "f2b_manage_external_info": "A Fail2ban továbbra is karbantartja a tiltólistát, de nem állít be aktívan szabályokat a forgalom blokkolására. Használja az alábbi generált tiltólistát a forgalom külső blokkolásához.",
+        "f2b_max_ban_time": "Maximális tiltási idő (s)",
+        "f2b_netban_ipv4": "IPv4 alhálózat mérete, amelyre tilalmat kell alkalmazni (8-32)",
+        "f2b_netban_ipv6": "IPv6 alhálózat mérete, amelyre tilalmat kell alkalmazni (8-128)",
+        "f2b_parameters": "Fail2ban paraméterek",
+        "forwarding_hosts_hint": "A bejövő üzeneteket feltétel nélkül elfogadják az itt felsorolt összes állomásról. Ezeket az állomáshelyeket nem ellenőrzik a DNSBL-ek alapján, és nem vetik alá a szürkelistázásnak. A tőlük érkező spameket a rendszer soha nem utasítja el, de opcionálisan a Junk mappába iktathatja őket. Leggyakrabban olyan levelezőszerverek megadására használjuk, amelyeken olyan szabályt állítottunk be, amely a bejövő e-maileket a mailcow-kiszolgálóra továbbítja.",
+        "guid_and_license": "GUID & Licenc",
+        "help_text": "Súgó szöveg felülírása a bejelentkezési maszk alatt (HTML engedélyezett)",
+        "html": "HTML",
+        "import": "Import",
+        "ip_check": "IP ellenőrzés",
+        "ip_check_disabled": "Az IP-ellenőrzés le van tiltva. Bekapcsolhatja a következő menüpont alatt<br> <strong>Rendszer > Beállítások > Opciók > Személyreszabás</strong>",
+        "is_mx_based": "MX alapú",
+        "last_applied": "Utoljára alkalmazott",
+        "link": "Link",
+        "loading": "Kérjük, várj...",
+        "login_time": "Bejelentkezési idő",
+        "f2b_list_info": "Egy feketelistán szereplő állomás vagy hálózat mindig nagyobb súlyú, mint egy fehérlistás entitás. <b>A lista frissítései néhány másodpercig tartanak.</b>",
+        "f2b_ban_time_increment": "A tiltási idő minden egyes tiltással növekszik",
+        "additional_rows": " - további sorokat adtak hozzá",
+        "admin": "Adminisztrátor",
+        "admin_details": "Rendszergazda adatok szerkesztése",
+        "admin_domains": "Domain hozzárendelések",
+        "f2b_max_attempts": "Max. próbálkozások",
+        "generate": "generálni",
+        "admins": "Adminisztrátorok",
+        "admins_ldap": "LDAP rendszergazdák",
+        "allowed_origins": "Hozzáférés-Szabályozás-Engedélyezési-Származás",
+        "api_allow_from": "API-hozzáférés engedélyezése ezekről az IP/CIDR hálózati jelölésekről",
+        "api_key": "API-kulcs",
+        "api_read_only": "Csak olvasható hozzáférés",
+        "api_read_write": "Olvasás-írás hozzáférés",
+        "api_skip_ip_check": "IP-ellenőrzés kihagyása az API esetében",
+        "cors_settings": "CORS beállítások",
+        "guid": "GUID - egyedi példányazonosító",
+        "dkim_to": "A címre",
+        "dkim_to_title": "Céltartomány(ok) - felülírásra kerül",
+        "domain": "Domain",
+        "domain_admin": "Domain adminisztrátor",
+        "domain_admins": "Domain adminisztrátorok",
+        "domain_s": "Domain(ek)",
+        "duplicate": "Duplikátum",
+        "duplicate_dkim": "Duplikált DKIM bejegyzés",
+        "edit": "Szerkesztés",
+        "empty": "Nincs eredmény",
+        "excludes": "Kizárja ezeket a kedvezményezetteket",
+        "f2b_ban_time": "Tilalmi idő (s)",
+        "f2b_blacklist": "Feketelistás hálózatok/hostok",
+        "f2b_filter": "Regex szűrők",
+        "logo_info": "A képed 40px magasságúra lesz méretezve a felső navigációs sávhoz és max. 250px szélességűre a kezdőlaphoz. A skálázható grafika használata erősen ajánlott.",
+        "dkim_add_key": "ARC/DKIM kulcs hozzáadása",
+        "dkim_domains_selector": "Válogató",
+        "dkim_domains_wo_keys": "A hiányzó kulcsokkal rendelkező tartományok kiválasztása",
+        "dkim_from": "A címről",
+        "dkim_from_title": "Forrás tartomány, ahonnan az adatokat másolni kell",
+        "dkim_key_length": "DKIM kulcs hossza (bit)",
+        "dkim_key_missing": "Kulcs hiányzik",
+        "import_private_key": "Privát kulcs importálása",
+        "in_use_by": "Használja a",
+        "inactive": "Inaktív",
+        "include_exclude": "Beleértve/Kivéve",
+        "include_exclude_info": "Alapértelmezés szerint - kiválasztás nélkül - <b>minden postafiók</b> címzésre kerül.",
+        "includes": "Vegye fel ezeket a címzetteket",
+        "add_row": "Sor hozzáadása",
+        "host": "Host",
+        "active_rspamd_settings_map": "Aktív beállítások térképe",
+        "add_admin": "Adminisztrátor hozzáadása",
+        "add_forwarding_host": "Továbbító állomás hozzáadása",
+        "add_relayhost": "Feladófüggő szállítás hozzáadása",
+        "add_relayhost_hint": "Felhívjuk figyelmed, hogy ha vannak hitelesítési adatok, azok egyszerű szövegként kerülnek tárolásra.",
+        "add_settings_rule": "Beállítási szabály hozzáadása",
+        "add_transport": "Szállítás hozzáadása",
+        "add_transports_hint": "Felhívjuk figyelmed, hogy ha vannak hitelesítési adatok, azok egyszerű szövegként kerülnek tárolásra.",
+        "advanced_settings": "Speciális beállítások",
+        "change_logo": "Logó módosítása",
+        "dkim_key_unused": "Nem használt kulcs",
+        "add_domain_admin": "Tartományi rendszergazda hozzáadása",
+        "dkim_key_valid": "Érvényes kulcs",
+        "dkim_keys": "ARC/DKIM kulcsok",
+        "dkim_overwrite_key": "A meglévő DKIM kulcs felülírása",
+        "dkim_private_key": "Privát kulcs",
+        "app_links": "App linkek",
+        "app_name": "Alkalmazás neve",
+        "arrival_time": "Érkezési idő (szerveridő)",
+        "authed_user": "Azonosított felhasználó",
+        "ays": "Biztos, hogy folytatni akarod?",
+        "ban_list_info": "A tiltott IP-címek listáját lásd alább: <b>hálózat (fennmaradó tiltási idő) - [akciók]</b>.<br />A tiltás feloldására várakozó IP-ket néhány másodpercen belül eltávolítjuk az aktív tiltási listáról.<br />A piros címkék a feketelistán szereplő aktív állandó tiltásokat jelzik.",
+        "configuration": "Konfiguráció",
+        "convert_html_to_text": "HTML átalakítása egyszerű szöveggé",
+        "credentials_transport_warning": "<b>Figyelmeztetés</b>: Egy új közlekedési térképbejegyzés hozzáadása frissíti a hitelesítő adatokat minden olyan bejegyzéshez, amelynek a következő ugrás oszlopa megegyezik.",
+        "customize": "Testreszabás",
+        "destination": "Célállomás",
+        "customer_id": "Ügyfél azonosító",
+        "apps_name": "\"mailcow Apps\" név"
     },
     "edit": {
         "active": "Aktív",
@@ -57,7 +164,7 @@
     "header": {
         "administration": "Beállítások és részletek",
         "apps": "Appok",
-        "debug": "Rendszer információ",
+        "debug": "Információ",
         "email": "E-Mail",
         "mailcow_config": "Beállítások",
         "quarantine": "Karantén",
@@ -399,13 +506,89 @@
         "protocol_access": "Protokoll-hozzáférés módosítása",
         "quarantine_attachments": "Karantén mellékletek",
         "quarantine_category": "Karantén értesítési kategória módosítása",
-        "quarantine_notification": "Karantén értesítések módosítása"
+        "quarantine_notification": "Karantén értesítések módosítása",
+        "eas_reset": "EAS-eszközök alaphelyzetbe állítása",
+        "extend_sender_acl": "Küldő ACL külső címekkel való bővítésének engedélyezése",
+        "mailbox_relayhost": "Relayhost módosítása egy postafiókhoz",
+        "prohibited": "ACL által tiltott",
+        "pushover": "Pushover",
+        "ratelimit": "Mérték határ",
+        "recipient_maps": "Címzett térképek",
+        "smtp_ip_access": "Az SMTP engedélyezett állomásainak módosítása",
+        "sogo_profile_reset": "SOGo profil visszaállítása",
+        "spam_alias": "Ideiglenes álnevek",
+        "spam_policy": "Fekete/Fehér lista",
+        "spam_score": "Spam pontszám",
+        "syncjobs": "Szinkronizálási feladatok",
+        "tls_policy": "TLS szabályzat",
+        "unlimited_quota": "Korlátlan kvóta a postafiókok számára",
+        "sogo_access": "A SOGo-hozzáférés kezelésének lehetővé tétele"
     },
     "diagnostics": {
         "dns_records": "DNS bejegyzések"
     },
     "add": {
         "username": "Felhasználónév",
-        "validation_success": "Sikeres ellenőrzés"
+        "validation_success": "Sikeres ellenőrzés",
+        "mailbox_quota_def": "Alapértelmezett postafiók kvóta",
+        "password_repeat": "Megerősítő jelszó (ismétlés)",
+        "post_domain_add": "A \"sogo-mailcow\" SOGo konténert újra kell indítani egy új tartomány hozzáadása után!<br><br>Kiegészítésképpen a tartományok DNS-konfigurációját is felül kell vizsgálni. A DNS-konfiguráció jóváhagyása után indítsa újra az \"acme-mailcow\"-t, hogy automatikusan generáljon tanúsítványokat az új tartományhoz (autoconfig.&lt;domain&gt;, autodiscover.&lt;domain&gt;).<br>Ez a lépés opcionális, és 24 óránként megismétlődik.",
+        "dry": "Szinkronizálás szimulálása",
+        "inactive": "Inaktív",
+        "kind": "Kedves",
+        "mailbox_quota_m": "Maximális kvóta postafiókonként (MiB)",
+        "mailbox_username": "Felhasználónév (az e-mail cím bal oldali része)",
+        "max_aliases": "Max. lehetséges álnevek",
+        "max_mailboxes": "Max. lehetséges postafiókok",
+        "mins_interval": "A lekérdezési időköz (perc)",
+        "password": "Jelszó",
+        "port": "Port",
+        "public_comment": "Nyilvános megjegyzés",
+        "target_domain": "Céltartomány",
+        "timeout1": "Időtúllépés a távoli állomáshoz való csatlakozáskor",
+        "timeout2": "Időtúllépés a helyi állomáshoz való csatlakozáskor",
+        "validate": "Érvényesítsd",
+        "description": "Leírás",
+        "destination": "Célállomás",
+        "disable_login": "Bejelentkezés letiltása (a bejövő leveleket továbbra is elfogadja)",
+        "domain_matches_hostname": "Domain %s megegyezik a hostnévvel",
+        "domain_quota_m": "Teljes tartományi kvóta (MiB)",
+        "enc_method": "Titkosítási módszer",
+        "exclude": "Objektumok kizárása (regex)",
+        "full_name": "Teljes név",
+        "gal": "Globális címlista",
+        "goto_ham": "Tanulj <span class=\"text-success\"><b>sonkaként</b></span>",
+        "goto_null": "Leveleket csendben eldobni",
+        "goto_spam": "Tanuld <span class=\"text-danger\"><b>spamként</b></span>",
+        "syncjob_hint": "Ne feledje, hogy a jelszavakat egyszerű szöveges formában kell elmenteni!",
+        "target_address": "Továbbítási címek",
+        "target_address_info": "<small>Teljes e-mail cím(ek) (vesszővel elválasztva).</small>",
+        "bcc_dest_format": "A BCC-célpontnak egyetlen érvényes e-mail címnek kell lennie.<br>Ha több címre kell másolatot küldenie, hozzon létre egy aliast, és használja azt.",
+        "comment_info": "A privát megjegyzés nem látható a felhasználó számára, míg a nyilvános megjegyzés tooltip-ként jelenik meg, amikor a felhasználó áttekintésében a megjegyzésre mutat.",
+        "custom_params": "Egyéni paraméterek",
+        "gal_info": "A GAL tartalmazza a tartomány összes objektumát, és egyetlen felhasználó sem szerkesztheti. A SOGo-ban a Szabad/Elfoglalt információ hiányzik, ha ki van kapcsolva! <b>Indítsa újra a SOGo-t a változások alkalmazásához.</b>",
+        "hostname": "Házigazda",
+        "backup_mx_options": "Továbbítási opciók",
+        "custom_params_hint": "Megfelelő: --param=xy, Rossz: --param xy",
+        "delete1": "Törlés a forrásból, ha befejeződött",
+        "delete2": "A forráson kívüli üzenetek törlése a célállomáson",
+        "delete2duplicates": "Duplikáltak törlése a célállomáson",
+        "domain": "Domain",
+        "nexthop": "Következő hop",
+        "tags": "Címkék",
+        "app_password": "Alkalmazás jelszó hozzáadása",
+        "private_comment": "Privát megjegyzés",
+        "alias_address_info": "<small>Teljes e-mail cím(ek) vagy @example.com, egy domainhez tartozó összes üzenetet elfogásához (vesszővel elválasztva). <b>csak mailcow tartományok</b>.</small>",
+        "generate": "generál",
+        "activate_filter_warn": "Az összes többi szűrő deaktiválódik, ha az aktív opció be van jelölve.",
+        "active": "Aktív",
+        "add": "Hozzáad",
+        "add_domain_only": "Csak domain hozzáadása",
+        "add_domain_restart": "Domain hozzáadása és a SOGo újraindítása",
+        "alias_address": "Alias cím(ek)",
+        "alias_domain": "Alias domain",
+        "alias_domain_info": "<small>Csak érvényes tartománynevek (vesszővel elválasztva).</small>",
+        "app_name": "Alkalmazás neve",
+        "app_passwd_protocols": "Engedélyezett protokollok az alkalmazás jelszavához"
     }
 }

+ 19 - 9
data/web/lang/lang.it-it.json

@@ -107,7 +107,8 @@
         "validation_success": "Convalidato con successo",
         "bcc_dest_format": "Il destinatario in copia nascosta deve essere un singolo indirizzo email.<br>Se si vuole spedire una copia del messaggio a più destinatari, bisogna creare un alias ed utilizzarlo per questa opzione.",
         "app_passwd_protocols": "Protocolli consentiti per la password dell'app",
-        "tags": "Tag"
+        "tags": "Tag",
+        "dry": "Simula sincronizzazione"
     },
     "admin": {
         "access": "Accedi",
@@ -339,7 +340,8 @@
         "oauth2_add_client": "Aggiungere il client OAuth2",
         "rsettings_preset_4": "Disattivare Rspamd per un dominio",
         "options": "Opzioni",
-        "cors_settings": "Impostazioni CORS"
+        "cors_settings": "Impostazioni CORS",
+        "copy_to_clipboard": "Testo copiato negli appunti!"
     },
     "danger": {
         "access_denied": "Accesso negato o form di login non corretto",
@@ -462,7 +464,9 @@
         "demo_mode_enabled": "La modalità demo è abilitata",
         "template_name_invalid": "Nome template non valido",
         "template_exists": "Il template %s esiste già",
-        "template_id_invalid": "Il template con ID %s non è valido"
+        "template_id_invalid": "Il template con ID %s non è valido",
+        "img_dimensions_exceeded": "L'immagine supera la dimensione massima consentita",
+        "img_size_exceeded": "L'immagine supera la dimensione massima del file"
     },
     "debug": {
         "chart_this_server": "Grafico (questo server)",
@@ -506,7 +510,7 @@
         "dns_records": "Record DNS",
         "dns_records_24hours": "Tieni presente che le modifiche apportate ai record DNS potrebbero richiedere fino a 24 ore per poter essere visualizzate correttamente in questa pagina. Tutto ciò è da intendersi come un modo per voi di vedere come configurare i record DNS e per controllare se tutti i record DNS sono stati inseriti correttamente.",
         "dns_records_data": "Dati corretti",
-        "dns_records_docs": "Si prega di consultare anche <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">la documentazione</a>.",
+        "dns_records_docs": "Si prega di consultare anche <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">la documentazione</a>.",
         "dns_records_name": "Nome",
         "dns_records_status": "Stato attuale",
         "dns_records_type": "Tipo",
@@ -626,7 +630,9 @@
         "acl": "ACL (autorizzazione)",
         "app_passwd_protocols": "Protocolli consentiti per la password dell'app",
         "last_modified": "Ultima modifica",
-        "pushover_sound": "Suono"
+        "pushover_sound": "Suono",
+        "custom_attributes": "Attributi personalizzati",
+        "domain_footer_skip_replies": "Ignora il piè di pagina nelle e-mail di risposta"
     },
     "fido2": {
         "confirm": "Conferma",
@@ -1021,7 +1027,8 @@
         "domain_add_dkim_available": "Esisteva già una chiave DKIM",
         "template_added": "Aggiunto template %s",
         "template_modified": "Le modifiche al template %s sono state salvate",
-        "template_removed": "Il template con ID %s è stato cancellato"
+        "template_removed": "Il template con ID %s è stato cancellato",
+        "f2b_banlist_refreshed": "L'ID della lista blocchi è stato aggiornato con successo."
     },
     "tfa": {
         "api_register": "%s usa le API Yubico Cloud. Richiedi una chiave API <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">qui</a>",
@@ -1048,7 +1055,8 @@
         "yubi_otp": "Autenticazione Yubico OTP",
         "tfa_token_invalid": "Token TFA non valido",
         "u2f_deprecated": "Sembra che la tua chiave sia stata registrata utilizzando il metodo U2F deprecato. Disattiveremo Two-Factor-Authenticaiton per te e cancelleremo la tua chiave.",
-        "u2f_deprecated_important": "Registra la tua chiave nel pannello di amministrazione con il nuovo metodo WebAuthn."
+        "u2f_deprecated_important": "Registra la tua chiave nel pannello di amministrazione con il nuovo metodo WebAuthn.",
+        "authenticators": "Autenticatori"
     },
     "user": {
         "action": "Azione",
@@ -1209,8 +1217,10 @@
         "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Impossibile connettersi al server remoto",
         "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Nome utente o password errati",
         "with_app_password": "con password dell'app",
-        "direct_protocol_access": "Questo utente della mailbox ha <b>accesso diretto ed esterno</b> ai seguenti protocolli e applicazioni. Questa impostazione è controllata dal tuo amministratore. Le password delle applicazioni possono essere create per garantire l'accesso ai singoli protocolli e applicazioni.<br>Il pulsante \"Webmail\" fornisce un singolo accesso a SOGo ed è sempre disponibile.",
-        "pushover_sound": "Suono"
+        "direct_protocol_access": "Questo utente della mailbox ha <b>accesso diretto ed esterno</b> ai seguenti protocolli e applicazioni. Questa impostazione è controllata dal tuo amministratore. Le password delle applicazioni possono essere create per garantire l'accesso ai singoli protocolli e applicazioni.<br>Il pulsante \"Accedi alla webmail\" fornisce un singolo accesso a SOGo ed è sempre disponibile.",
+        "pushover_sound": "Suono",
+        "attribute": "Attributo",
+        "value": "Valore"
     },
     "warning": {
         "cannot_delete_self": "Cannot delete logged in user",

+ 354 - 0
data/web/lang/lang.lt-lt.json

@@ -0,0 +1,354 @@
+{
+    "acl": {
+        "app_passwds": "Tvarkyti programėlių slaptažodžius",
+        "bcc_maps": "BCC žemėlapiai",
+        "domain_desc": "Keisti domeno aprašymą",
+        "eas_reset": "Išvalyti EAS įrenginius",
+        "filters": "Filtrai",
+        "login_as": "Prisijungti kaip elektroninio pašto naudotojas",
+        "protocol_access": "Keisti protokolų prieigą",
+        "quarantine": "Karantino valdymas",
+        "quarantine_category": "Keisti karantino pranešimo katrgoriją",
+        "quarantine_notification": "Keisti karantino pranešimus",
+        "ratelimit": "Prieigos limitas",
+        "recipient_maps": "Gavėjų sąsajos",
+        "smtp_ip_access": "Pakeisti prieinamuosius SMTP serverius",
+        "sogo_access": "Leisti SOGo prieigos valdymą",
+        "spam_policy": "Juodasis/Baltasis sąrašas",
+        "spam_score": "Šlamsto balas",
+        "tls_policy": "TLS politika",
+        "unlimited_quota": "Neribota elektroninio pašto dėžudžių kvota",
+        "quarantine_attachments": "Karantino priedai",
+        "sogo_profile_reset": "Nustatyti SOGo profilį iš naujo",
+        "alias_domains": "Pridėti pakaitinius domenus",
+        "delimiter_action": "Delimitatoriaus veiksmas",
+        "domain_relayhost": "Pakeisti peradresavimo serverį domenui",
+        "extend_sender_acl": "Leisti išplėsti siuntėjo ACL išoriniais adresais",
+        "mailbox_relayhost": "Pakeisti siuntimo serverį pašto dėžutei",
+        "prohibited": "Draudžiama pagal ACL",
+        "spam_alias": "Laikini slapyvardžiai",
+        "syncjobs": "Sinchronizuoti darbus"
+    },
+    "add": {
+        "active": "Aktyvus",
+        "add": "Pridėti",
+        "add_domain_only": "Pridėti tik domeną",
+        "add_domain_restart": "Pridėti domeną ir paleisti SOGo iš naujo",
+        "alias_domain_info": "<small>Tik tinkami domenų vardai (išskirta kableliais).</small>",
+        "app_name": "Programėlės pavadinimas",
+        "app_password": "Pridėti programėlės slaptažodį",
+        "app_passwd_protocols": "Prieinamieji programėlės slaptažodžio protokolai",
+        "custom_params": "Pasirinktiniai parametrai",
+        "delete1": "Ištrinti iš šaltinio, kai baigta",
+        "activate_filter_warn": "Visi kiti filtrai bus deaktivuoti, kai „aktyvus“ yra pražymėtas.",
+        "custom_params_hint": "Teisingai: --param=xy, neteisingai: --param xy",
+        "description": "Aprašymas",
+        "destination": "Gavėjas",
+        "domain": "Domenas",
+        "domain_quota_m": "Viso domeno kvota (MiB)",
+        "dry": "Simuliuoti sinchronizaciją",
+        "enc_method": "Šifravimo metodas",
+        "full_name": "Prilnas vardas",
+        "generate": "generuoti",
+        "goto_null": "Tyliai atmesti žinutes",
+        "goto_spam": "Išmokti kaip <span class=\"text-danger\"><b>šlamštas</b></span>",
+        "password": "Slaptažodis",
+        "select": "Pasirinkite...",
+        "select_domain": "Prima, pasirinkite domeną",
+        "sieve_desc": "Trumpas aprašymas",
+        "sieve_type": "Filtro tipas",
+        "mailbox_quota_def": "Numatytoji elelktroninio pašto dėžutės kvota",
+        "password_repeat": "Slaptažodžio patvirtininas (pakartoti)",
+        "disable_login": "Uždrausti prisijungimą (ateinančios žinutės vistiek bus gaunamos)",
+        "inactive": "Neaktyvus",
+        "alias_address": "Pakaitiniai/is adresai/as",
+        "alias_address_info": "<small>Pilnas el. pašto adresas (-ai) arba @example.com, kad gautumėte visus pranešimus iš domeno (atskirtus kableliais). <b>Tik \"mailcow\" domenai</b>.</small>",
+        "alias_domain": "Pakaitinis domenas",
+        "automap": "Stenktis automatiškai susieti aplankus (\"Išsiųsti\", \"Išsiųsti\" => \"išsiųsti\" ir tt.)",
+        "backup_mx_options": "Perdavimo nustatymai",
+        "bcc_dest_format": "BCC gavimo adresas turi būti vienas galiojantis el. pašto adresas.<br>Jei turite siųsti kopiją į kelis adresus, sukurkite slapyvardį ir naudokite jį čia.",
+        "delete2": "Ištrinti žinutes gavimo vietoje, kurios nėra šaltinyje.",
+        "delete2duplicates": "Ištrinti dublikatus gavimo vietoje",
+        "domain_matches_hostname": "Domenas %s atitinka serverio vardą",
+        "exclude": "Išskirti objektus (regex)",
+        "gal": "Visuotinis adresų sąrašas",
+        "gal_info": "GAL (Global Address List) apima visus domeno objektus ir jų negali redaguoti joks vartotojas. SOGo trūksta laisvosios/užimtosios informacijos, jei tai išjungta! <b>Perkraukite SOGo, kad pritaikytumėte pakeitimus.</b>"
+    },
+    "admin": {
+        "access": "Prieiga",
+        "active": "Aktyvus",
+        "add": "Pridėti",
+        "add_admin": "Pridėti administratorių",
+        "add_domain_admin": "Pridėti domeno administratorių",
+        "add_settings_rule": "Pridėti nustatymų taisyklę",
+        "admin": "Administratorius",
+        "admins": "Administratoriai",
+        "admins_ldap": "LDAP administratoriai",
+        "api_key": "API prieigos raktas",
+        "copy_to_clipboard": "Tekstas nukopijuotas!",
+        "cors_settings": "CORS nustatymai",
+        "dkim_from": "Iš",
+        "dkim_key_length": "DKIM rakto ilgis (bitai)",
+        "dkim_key_valid": "Raktas tinkamas",
+        "dkim_keys": "ARC/DKIM raktai",
+        "dkim_private_key": "Slaptasis raktas",
+        "dkim_to": "Į",
+        "domain": "Domenas",
+        "domain_admin": "Domeno administratorius",
+        "domain_admins": "Doneno administratoriai",
+        "domain_s": "Domenas/ai",
+        "duplicate": "Dublikatas",
+        "duplicate_dkim": "Dublikuotas DKIM įrašas",
+        "edit": "Redaguoti",
+        "empty": "Jokių rezultatų",
+        "f2b_filter": "Regex filtrai",
+        "filter_table": "Filtrų lentelė",
+        "from": "Nuo",
+        "generate": "generuoti",
+        "html": "HTML",
+        "import": "Importuoti",
+        "inactive": "Neaktyvus",
+        "message": "Žinutė",
+        "message_size": "Žinutės dydis",
+        "nexthop": "Kitas šuolis",
+        "no": "&#10005;",
+        "no_record": "Nėra įrašo",
+        "oauth2_apps": "OAuth2 Programėlės",
+        "oauth2_add_client": "Pridėti OAuth2 klientą",
+        "oauth2_client_id": "Kliento ID",
+        "optional": "pasirinktinas",
+        "options": "Nustatymai",
+        "password": "Slaptažodis",
+        "password_length": "Slaptažodžio ilgis",
+        "password_policy_chars": "Privalo turėti bent vieną numerį ar skaičių",
+        "password_policy_length": "Mažiausias slaptažodžio ilgis - %d",
+        "password_policy_numbers": "Privalo turėti bent vieną skaičių",
+        "password_policy_special_chars": "Privalo turėti specialiųjų ženklų",
+        "password_repeat": "Slaptažodžio patvirtinimas (pakartoti)",
+        "quarantine": "Karantinas",
+        "quarantine_notification_sender": "Pranešimų e-pašto siuntėjas",
+        "quarantine_release_format_att": "Kaip priedą",
+        "quarantine_release_format_raw": "Nepakeitas originalas",
+        "quota_notifications": "Kvotos pranešimai",
+        "r_active": "Aktyvūs apribojimai",
+        "r_inactive": "Neaktyvus apribojimai",
+        "refresh": "Perkrauti",
+        "regen_api_key": "Regeneruoti API raktą",
+        "relay_rcpt": "„Kam:“ adresas",
+        "relay_run": "Paleisti testą",
+        "remove": "Ištrinti",
+        "rsetting_add_rule": "Pridėti taisyklę",
+        "rsetting_desc": "Trumpas aprašymas",
+        "rspamd_global_filters_agree": "Aš busiu atsargus/i!",
+        "save": "Išsaugoti pakeitimus",
+        "search_domain_da": "Ieškoti domenus",
+        "send": "Siųsti",
+        "sender": "Siuntėjas",
+        "source": "Šaltinis",
+        "spamfilter": "Šlamšto filtras",
+        "text": "Tekstas",
+        "time": "Laikas",
+        "to_top": "Atgal į viršų",
+        "ui_header_announcement_content": "Tekstas (HTML leistina)",
+        "ui_header_announcement_select": "Pasirinkite pranešimo tipą",
+        "ui_header_announcement_type": "Tipas",
+        "ui_header_announcement_type_danger": "Labai svarbus",
+        "ui_header_announcement_type_info": "Info",
+        "upload": "Įkelti",
+        "username": "Naudotojo vardas",
+        "verify": "Patikrinti",
+        "yes": "&#10003;",
+        "customer_id": "Kliento ID",
+        "f2b_parameters": "„Fail2Ban“ parametrai",
+        "import_private_key": "Importuoti slaptąjį raktą",
+        "action": "Veiksmas",
+        "convert_html_to_text": "Konvertuoti HTML į paprastą tekstą",
+        "oauth2_renew_secret": "Geberuoti naują kliento slapuką",
+        "private_key": "Slaptasis raktas",
+        "sal_level": "Moo lygis",
+        "ui_header_announcement_type_warning": "Svarbus",
+        "admin_details": "Redaguoti administratoriaus duomenis",
+        "login_time": "Prisijungino laikas",
+        "ui_header_announcement": "Pranešimai",
+        "dkim_overwrite_key": "Perrašyti egzistuojantį DKIK raktą",
+        "f2b_whitelist": "Tinklai baltajama sąraše",
+        "f2b_blacklist": "Tinklai juodajame saraše",
+        "loading": "Prašau palaukite...",
+        "password_policy_lowerupper": "Privalo turėti mažuosius ir didžiuosius ženklus/raides",
+        "relay_from": "„Nuo:“ adresas"
+    },
+    "danger": {
+        "demo_mode_enabled": "Demo Režimas įjungtas",
+        "description_invalid": "Resurso %s aprašymas yra netinkamas",
+        "domain_exists": "Domenas %s jau egzistuoja",
+        "domain_invalid": "Domeno vardas tuščias arba netinkamas",
+        "domain_not_found": "Domenas %s nerastas",
+        "domain_quota_m_in_use": "Domeno kvota turi būti daygiau arba lygiai %s MiB",
+        "file_open_error": "Failas negali būti atidarytas įrašymui",
+        "filter_type": "Netinkamas filtro tipas",
+        "invalid_mime_type": "Netinkamas MIME tipas",
+        "login_failed": "Prisijungimas nepavyko",
+        "mailbox_defquota_exceeds_mailbox_maxquota": "Numatytoji kvota didesnė nei maksimalus kvotos limitas",
+        "mysql_error": "MySQL problema: %s",
+        "img_invalid": "Negalimas nuotraukos patikrinimas",
+        "mailbox_quota_left_exceeded": "Per mažai vietos diske (liko %d MiB)",
+        "comment_too_long": "Komentaeas per ilgas, maksimalus leistinas simbolių skaičius yra 160",
+        "nginx_reload_failed": "Nginx perkrovimas nepavyko: %s",
+        "invalid_filter_type": "Netinkamas filtro tipas"
+    },
+    "edit": {
+        "validate_save": "Patikrinti ir išsaugoti",
+        "unchanged_if_empty": "Jei nepakeista, palikite tuščią",
+        "username": "Naudotojo vardas"
+    },
+    "fido2": {
+        "confirm": "Patvirtinti",
+        "fido2_success": "Įrenginys sėkmingai užregistruotas",
+        "fido2_validation_failed": "Patikrinimas nepavyko",
+        "fn": "Draugiškasis vardas",
+        "known_ids": "Žinomi ID",
+        "none": "Neįgalintas",
+        "register_status": "Registracijos statusas",
+        "rename": "Pervadyti",
+        "set_fido2_touchid": "Registruokite Touch ID su Apple M1",
+        "set_fn": "Nustatyti draugiškąjį vardą",
+        "start_fido2_validation": "Pradėti FIDO2 patikrinimą",
+        "fido2_auth": "Prisijungti su FIDO2",
+        "set_fido2": "Registruoti FIDO2 įrengenį"
+    },
+    "footer": {
+        "cancel": "Atšaukti",
+        "confirm_delete": "Patvirtinti trynimą",
+        "delete_now": "Ištrinti dabar",
+        "hibp_check": "Patikrinti naudodami haveibeenpwned.com",
+        "hibp_nok": "Atitikta! Tai yra galimai pavojingas slaptažodis!",
+        "hibp_ok": "Nerasta jokių atitikmenų.",
+        "loading": "Prašome palaukti...",
+        "nothing_selected": "Niekas nepasirinkta",
+        "restart_container": "Paleiskite konteinerį iš naujo",
+        "restart_now": "Perkrauti dabar",
+        "restarting_container": "Perkraunamas konteineris, tai gali užtrukti.",
+        "delete_these_items": "Prašome patvirtinti savo pakeitimus šiam objekto ID",
+        "restart_container_info": "<b>Svarbu:</b> Sklandus paleidimas iš naujo gali užtrukti, prašome palaukti, kol jis baigsis."
+    },
+    "header": {
+        "administration": "Konfigūracija ir detalės",
+        "apps": "Programėlės",
+        "debug": "Informacija",
+        "email": "El. paštas",
+        "mailcow_system": "Sistema",
+        "mailcow_config": "Konfiguracija",
+        "quarantine": "Karantinas",
+        "restart_netfilter": "Paleisti „netfilter“ iš naujo",
+        "restart_sogo": "Paleisti SOGo iš naujo",
+        "user_settings": "Naudotojo Nustatymai"
+    },
+    "info": {
+        "no_action": "Nėra taikomų veiksmų",
+        "session_expires": "Jūsų sesija pasibaigs už maždaug 15 sekundžių.",
+        "awaiting_tfa_confirmation": "Laukiama DFA patvirtinimo"
+    },
+    "login": {
+        "fido2_webauthn": "FIDO2/WebAuthn Prisijungimas",
+        "login": "Prisijungti",
+        "other_logins": "Prisijungimas raktu",
+        "password": "Slaptažodis",
+        "username": "Naudotojo vardas",
+        "mobileconfig_info": "Prašome prisijungti kaip pašto dėžutės vartotojui, kad galėtumėte atsisiųsti pageidaujamą „Apple“ ryšio profilį."
+    },
+    "mailbox": {
+        "action": "Veiksmas",
+        "activate": "Aktivuoti",
+        "active": "Aktyvus",
+        "add": "Pridėti",
+        "add_alias": "Pridėti pseudonimą",
+        "add_alias_expand": "Išplėsti pseudonimą per pseudonimų domenus",
+        "add_bcc_entry": "Pridėti BCC žemėlapį",
+        "add_domain": "Pridėti domeną",
+        "add_domain_alias": "Pridėti pakaitinį domeną",
+        "add_domain_record_first": "Prašome pridėti domeną pirmiausia",
+        "add_filter": "Pridėti filtrą",
+        "add_mailbox": "Pridėti pašto dėžutę",
+        "add_recipient_map_entry": "Pridėti gavėjų žemėlapį",
+        "add_resource": "Pridėti resursą",
+        "add_template": "Pridėti Šabloną",
+        "add_tls_policy_map": "Pridėti TLS politikos schemą",
+        "address_rewriting": "Adresų perrašymas",
+        "alias": "Slapyvardis",
+        "alias_domain_backupmx": "Pakaitinis domenas nėra aktyvuotas peradresavimo domenui",
+        "all_domains": "Visi Domenai",
+        "allow_from_smtp_info": "Palikite tuščią, norėdami leisti visiems siuntėjams.<br>IPv4/IPv6 adresai ir tinklai.",
+        "backup_mx": "Peradresavimo domenas",
+        "bcc": "BCC",
+        "bcc_destination": "BCC gavimo vieta",
+        "bcc_destinations": "BCC gavimo vieta",
+        "bcc_local_dest": "Vietinė gavimo vieta",
+        "bcc_map": "BCC žemėlapis",
+        "bcc_map_type": "BCC tipas",
+        "bcc_maps": "BCC žemėlapiai",
+        "bcc_type": "BCC tipas",
+        "booking_null": "Visada rodyti kaip laisvą",
+        "booking_0_short": "Visada laisvas",
+        "booking_custom": "Nekintamasis apribojimas pagal individualią užsakymų sumą",
+        "booking_custom_short": "Nekintamasis ribojimas",
+        "booking_ltnull": "Neribotas, bet rodyti kaip užimtas, kai užrezervuota",
+        "booking_lt0_short": "Kintamasis apribojimas",
+        "catch_all": "Viską sugriebiantis",
+        "daily": "Kasdien",
+        "description": "Aprašymas",
+        "disable_login": "Uždrausti prisijungimą (gaunami el. laiškai vis dar priimami)",
+        "disable_x": "Išjungti",
+        "dkim_key_length": "DKIM rakto ilgis (bitai)",
+        "domain": "Domenas",
+        "domain_aliases": "Pakaitomieji domenai",
+        "domain_templates": "Domenų Šablonai",
+        "domain_quota": "Kvota",
+        "domain_quota_total": "Bendroji domeno kvota",
+        "domains": "Domenai",
+        "edit": "Redaguoti",
+        "filters": "Filtrai",
+        "fname": "Pilnas vardas",
+        "gal": "Visuotinis adresų sąrašas",
+        "goto_spam": "Išmokti kaip <b>šlamštas</b>",
+        "hourly": "Kas valandą",
+        "in_use": "Naudojimas (%)",
+        "inactive": "Neaktyvus",
+        "allowed_protocols": "Leidžiami protokolai tiesioginiam vartotojo prieigai (neturi įtakos programėlių slaptažodžių protokolams)",
+        "goto_ham": "Išmokti kaip <b>ham</b>",
+        "aliases": "Pseudonimai",
+        "allow_from_smtp": "Leiskite tik šiems IP naudotis <b>SMTP</b>",
+        "alias_domain_alias_hint": "Pseudonimai <b>nėra</b> taikomi domeno pseudonimams automatiškai. Pseudonimo adresas <code>my-alias@domain</code> <b>neapima</b> adreso <code>my-alias@alias-domain</code> (kur \"alias-domain\" yra įsivaizduojamas \"domain\" pseudonimas).<br>Prašome naudoti sieve filtrą, kad nukreiptumėte laiškus į išorinę pašto dėžutę (žr. skirtuką \"Filtrai\" arba naudokite SOGo -> Peradresavimas). Naudokite \"Išplėsti pseudonimus per pseudonimų sritis\" kad automatiškai pridėti trūkstamus pseudonimus.",
+        "deactivate": "Deaktivuoti",
+        "domain_admins": "Domeno administratoriai",
+        "enable_x": "Įjungti",
+        "last_run_reset": "Suplanuoti kitą",
+        "mailbox": "Pašto dėžutė",
+        "mailbox_defaults": "Numatytieji nustatymai",
+        "mailbox_defaults_info": "Nustatyti numatytuosius nustatymus naujoms pašto dėžutėms.",
+        "mailbox_defquota": "Numatytasis pašto dėžutės dydis",
+        "mailbox_templates": "Pašto dėžučių šablonai",
+        "mailbox_quota": "Maks. pašto dėžutės dydis",
+        "mailboxes": "Pašto dėžutės",
+        "max_aliases": "Maks. slapyvardžiai",
+        "max_mailboxes": "Maks. galimų pašto dėžučių",
+        "max_quota": "Maks. kvota kiekvienai pašto dėžutei",
+        "mins_interval": "Intervalas (min)",
+        "msg_num": "Žinutė #"
+    },
+    "quarantine": {
+        "atts": "Priedaj",
+        "check_hash": "Ieškoti failo Hash'o @ VT",
+        "confirm": "Patvirtinti",
+        "confirm_delete": "Patvirtinti šio elemento trynimą",
+        "danger": "Pavojus"
+    },
+    "success": {
+        "domain_admin_added": "Pridėtas domeno administractorius %s",
+        "domain_admin_removed": "Domeno administratorius %s ištrintas",
+        "domain_modified": "Domeno %s pakitimai išsaugoti",
+        "domain_removed": "Domenas %s ištrintas",
+        "dovecot_restart_success": "„Doveccot“ perkrautas",
+        "domain_added": "Pridėtas domenas %s",
+        "domain_admin_modified": "Pakeitimai domeno adminustratoriui %s išsaugoti"
+    }
+}

+ 142 - 88
data/web/lang/lang.lv-lv.json

@@ -4,7 +4,19 @@
         "filters": "Filtri",
         "recipient_maps": "Saņēmēja kartes",
         "syncjobs": "Sinhronizācijas uzdevumi",
-        "spam_score": "Mēstules novērtējums"
+        "spam_score": "Mēstules novērtējums",
+        "alias_domains": "Pievienot aizstājdomēnus",
+        "spam_alias": "Pagaidu aizstājvārdi",
+        "app_passwds": "Lietotņu paroļu pārvaldība",
+        "delimiter_action": "Atdalītāja darbība",
+        "domain_desc": "Mainīt domēna aprakstu",
+        "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": "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"
     },
     "add": {
         "activate_filter_warn": "Visi pārējie filtri tiks deaktivizēti, kad aktīvs ir atzīmēts.",
@@ -12,9 +24,9 @@
         "add": "Pievienot",
         "add_domain_only": "Tikai pievienot domēnu",
         "add_domain_restart": "Pievienot domēnu un restartēt SOGo",
-        "alias_address": "Alias addrese/s",
+        "alias_address": "Aizstājaddrese/s",
         "alias_address_info": "<small>Pilna epasta addrese/s vai @piemērs.com, lai notvertu visas domēna ziņas (komatu atdalītas). <b>tikai mailcow domēni</b>.</small>",
-        "alias_domain": "Alias domēni",
+        "alias_domain": "Aizstājdomēni",
         "alias_domain_info": "<small>Tikai derīgi domēna vārdi (komatu atdalīti).</small>",
         "automap": "Mēģiniet automatizēt mapes (\"Nosūtītie vienumi\", \"Nosūtītie\" => \"Nosūtītie\" etc.)",
         "backup_mx_options": "Dublējuma MX iespējas",
@@ -23,7 +35,7 @@
         "delete2duplicates": "Dzēst dublikātus galamērķī",
         "description": "Apraksts",
         "domain": "Domēns",
-        "domain_quota_m": "Kopējā  domēna kvota (MiB)",
+        "domain_quota_m": "Kopējā domēna kvota (MiB)",
         "enc_method": "Šifrēšanas metode",
         "exclude": "Izslēgt objektus (regex)",
         "full_name": "Pilns vārds",
@@ -32,17 +44,17 @@
         "kind": "Veids",
         "mailbox_quota_m": "Maks. kvota pastkastei (MiB)",
         "mailbox_username": "Lietotājvārds (kriesā daļa no epasta adreses)",
-        "max_aliases": "Maks. iespejamās aliases",
+        "max_aliases": "Lielākais pieļaujamo aizstājvārdu skaits",
         "max_mailboxes": "Maks. iespējamās pastkastes",
         "mins_interval": "Aptauajs intervāls (minūtes)",
         "multiple_bookings": "Vairākas rezervācijas",
         "password": "Parole",
         "password_repeat": "Apstiprinājuma parole (atkārtot)",
         "port": "Ports",
-        "post_domain_add": "Jums būs nepieciešams atsāknēt SOGo servisa konteineru pēc jauna domēna pievienošanas!",
+        "post_domain_add": "SOGO konteineru \"sogo-mailcow\" ir nepieciešams pārsāknēt pēc jauna domēna pievienošanas.<br><br>Papildus vajadzētu pārskatīt domēnu DNS konfigurāciju. Tiklīdz DNS konfigurācija ir apstiprināta, jāpārsāknē \"acme-mailcow\", lai automātiski izveidotu sertifikātus jaunajam domēnam (autoconfig.&lt;domain&gt;, autodiscover.&lt;domain&gt;).<br>Šis solis ir izvēles un tiks atkārtots ik pēc 24 stundām.",
         "quota_mb": "Kvota (MiB)",
         "relay_all": "Pārsūtīt visus saņēmējus",
-        "relay_all_info": "<small>Ja izvēlies <b>nepārsūtīt</b> visus saņēmējus, tad Tev būs nepieciešams pievienot (\"tukšu\") pastkasti katram saņēmējam, kas būtu jāpārsūta.</small>",
+        "relay_all_info": "↪ Ja izvēlies <b>nepārsūtīt</b> visus saņēmējus, tad Tev būs nepieciešams pievienot (\"aklo\") pastkasti katram saņēmējam, kas būtu jāpārsūta.",
         "relay_domain": "Pārsūtīt šo domēnu",
         "select": "Lūdzu izvēlaties...",
         "select_domain": "Lūdzu sākumā izvēlaties domēnu",
@@ -56,7 +68,8 @@
         "target_domain": "Mērķa domēns",
         "username": "Lietotājvārds",
         "validate": "Apstiprināt",
-        "validation_success": "Apstiprināts veiksmīgi"
+        "validation_success": "Apstiprināts veiksmīgi",
+        "bcc_dest_format": "BCC galamērķim ir jābūt vienai derīgai e-pasta adresei.<br>Ja ir nepieciešams nosūtīt kopiju vairākām adresēm, jāizveido aizstājvārds un jāizmanto tas šeit."
     },
     "admin": {
         "access": "Pieeja",
@@ -93,14 +106,14 @@
         "f2b_ban_time": "Aizlieguma laiks (s)",
         "f2b_max_attempts": "Maks. piegājieni",
         "f2b_netban_ipv4": "IPv4 apakštīkla izmērs, lai piemērotu aizliegumu uz (8-32)",
-        "f2b_netban_ipv6": "IPv6 apakštīkla izmērs, lai piemērotu aizliegumu uz  (8-128)",
+        "f2b_netban_ipv6": "IPv6 apakštīkla izmērs, lai piemērotu aizliegumu uz (8-128)",
         "f2b_parameters": "Fail2ban parametri",
         "f2b_retry_window": "Atkārtošanas logs (s) priekš maks. piegājiena",
         "f2b_whitelist": "Baltā saraksta tīkls/hosts",
         "filter_table": "Filtru tabula",
         "forwarding_hosts": "Hostu pārsūtīšana",
-        "forwarding_hosts_add_hint": "Jūs varat norādīt  IPv4/IPv6 addreses, tīklu iekš CIDR apzīmējuma, hosta nosaukumu (kas tiks atrisinātas IP  adresēs), vai domēna vārdos (kas tiks atrisināts IP adresēs vaicājot SPF ierakstus vai, ja tādu nav, MX ierakstus).",
-        "forwarding_hosts_hint": "Ienākošie ziņojumi ir bez nosacījumiem pieņemti no visiem šeit norādītajiem hostiem. Pēc tam šie hosti netiek pārbaudīti pret DNSBL vai  pakļauti Greylistei. No tiem saņemtās mēstules nekad netiek noraidītas, bet pēc izvēles tās var pārvietot mapē Nevēlamais. Visbiežāk to izmanto, lai precizētu pasta serverus, kuros ir iestatīts noteikums, kas pārsūta ienākošos e-pasta ziņojumus uz jūsu mailcow serveri.",
+        "forwarding_hosts_add_hint": "Var norādīt vai nu IPv4/IPv6 addreses, tīklu ar CIDR apzīmējumu, saimniekdatoru nosaukumus (kas tiks atrisināti IP adresēs) vai arī domēna vārdus (kas tiks atrisināti IP adresēs, vaicājot SPF ierakstus, vai, ja tādu nav, MX ierakstus).",
+        "forwarding_hosts_hint": "Ienākošie ziņojumi tiek bez nosacījumiem pieņemti no visiem šeit norādītajiem saimniekdatoriem. Tie tad netiek pārbaudīti pret DNSBL vai pakļauti ievietošanai pelēkajā sarakstā. No tiem saņemtās mēstules nekad netiek noraidītas, bet pēc izvēles tās var pārvietot mapē \"Nevēlams\". Visbiežāk to izmanto, lai norādītu pasta serverus, kuros ir uzstādīts nosacījums, kas pārsūta ienākošās e-pasta vēstules uz Tavu mailcow serveri.",
         "help_text": "Ignorēt palīdzības tekstu zem pieteikšanās maskas (HTML ir atļauta)",
         "host": "Hosts",
         "import": "Importēt",
@@ -109,7 +122,7 @@
         "inactive": "Neaktīvs",
         "link": "Saite",
         "loading": "Lūgums uzgaidīt...",
-        "logo_info": "Jūsu attēls augšējā navigācijas joslā tiks palielināts līdz 40 pikseļiem un maks. sākumlapas platums par 250 pikseļi. Ir ļoti ieteicama pielāgojama grafikaYour image will be scaled to a height of 40px for the top navigation bar and a max. width of 250px for the start page. Ir ļoti ieteicama pielāgojamā grafika",
+        "logo_info": "Tavs attēls augšējā pārvietošanās joslā tiks mērogots līdz 40 pikseļiem un ne vairāk par 250 pikseļiem platumā sākumlapā. Ļoti ieteicams izmantot mērogojamus attēlus.",
         "main_name": "\"mailcow UI\" nosaukums",
         "merged_vars_hint": "Pelēkās rindas tika apvienotas <code>vars.(local.)inc.php</code> un nevar tikt modificētas.",
         "no_new_rows": "Papildu rindas nav pieejamas",
@@ -118,18 +131,18 @@
         "password_repeat": "Apstiprināt paroli (atkārtot)",
         "private_key": "Privāta atslēga",
         "quarantine": "Karantīna",
-        "quarantine_exclude_domains": "Izslēgt domēnus un alias-domēnus:",
-        "quarantine_max_size": "Maks. izmērs MiB (lielāki vienumi ir atbrīvoti):",
-        "quarantine_retention_size": "Atlikumi pastkastēs:",
+        "quarantine_exclude_domains": "Neņemt vērā domēnus un aizstājdomēnus",
+        "quarantine_max_size": "Lielākais pieļaujamais izmērs MiB (lielāki vienumi tiek atmesti):<br><small>0 <b>nenorāda</b> neierobežotu.</small>",
+        "quarantine_retention_size": "Paturējumi katrā pastkastē:<br><small>0 norāda, ka ir <b>atspējoti</b>.</small>",
         "r_active": "Aktīvie ierobežojumi",
         "r_inactive": "Neaktīvie ierobežojumi",
-        "r_info": " Pelēki/atslēgti elementi aktīvo ierobežojumu sarakstā nav zināmi kā mailcow spēkā esoši ierobežojumi un tos nevar pārvietot. Jebkurā gadījumā nezināmi ierobežojumi tiks sakārtoti pēc pievienošanas. <br>Jūs varat pievienot jaunus elementus <code>inc/vars.local.inc.php</code>, lai varētu tos pārslēgt.",
+        "r_info": "Pelēkie/atspējotie vienumi spēkā esošo ierobežojumu sarakstā mailcow nav zināmi kā derīgi ierobežojumi, un tos nevar pārvietot. Nezināmi ierobežojumi jebkurā gadījumā parādīšanas secībā. <br>Jaunus vienumus var pievienot <code>inc/vars.local.inc.php</code>, lai varētu tos pārslēgt.",
         "recipients": "Adresāts",
         "refresh": "Atsvaidzināt",
         "regen_api_key": "Reģenerēt API atslēgu",
         "relay_from": "\"No:\" addrese",
         "relay_run": "Palaist testu",
-        "relayhosts_hint": "Definējiet  relejhostus šeit, lai tos varētu izvēlēties domēna konfigurācijas logā.",
+        "relayhosts_hint": "Norādīt no sūtītāja atkarīgas piegādes, lai varētu tos atlasīt domēnu konfigurācijas uzvednē.<br>\n  Piegādes pakalpojums vienmēr ir \"smtp\", tādējādi tiks mēģināts TLS, kad piedāvāts. Iekļautais TLS (SMTPS) netiek atbalstīts. Tiek ņemts vērā lietotāja atsevišķais izejošā TLS nosacījuma iestatījums.<br>\n  Ietekmē atlasītos domēnus, tajā skaitā aizstājdomēnus.",
         "remove": "Noņemt",
         "remove_row": "Noņemt rindu",
         "reset_default": "Atiestatīt uz noklusējumu",
@@ -148,16 +161,20 @@
         "username": "Lietotājvārds",
         "generate": "izveidot",
         "message": "Ziņojums",
-        "last_applied": "Pēdējoreiz pielietots"
+        "last_applied": "Pēdējoreiz pielietots",
+        "f2b_regex_info": "Vērā ņemtie žurnāli: SOGO, Postfix, Dovecot, PHP-FPM.",
+        "sys_mails": "Sistēmas pasts",
+        "ip_check_disabled": "IP pārbaude ir atspējota. To var iespējot<br><strong>Sistēma > Konfigurācija > iespējas > Pielāgot</strong>",
+        "rspamd_com_settings": "Iestatījuma nosaukums tiks izveidots automātiski. Lūgums zemāk skatīt priekšiestatījumu piemērus. Vairāk informācijas ir <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd dokumentācijā</a>"
     },
     "danger": {
         "access_denied": "Piekļuve liegta, vai nepareizi dati",
-        "alias_domain_invalid": "Alias domēns ir nepareizs",
-        "alias_empty": "Alias adrese nevar būt tukša",
-        "alias_goto_identical": "Alias un domēnvārds nevar būt identisks",
-        "alias_invalid": "Alias adrese nepareiza",
-        "aliasd_targetd_identical": "Alias domēns nevar būt vienāds ar mērķa domēnu",
-        "aliases_in_use": "Maks. aliases jabūt lielākām vai vienādām ar %d",
+        "alias_domain_invalid": "Aizstājdomēns %s ir nederīgs",
+        "alias_empty": "Aizstājadrese nedrīkst būt tukša",
+        "alias_goto_identical": "Aizstājvārds un mērķa adrese nedrīkst būt vienādi",
+        "alias_invalid": "Aizstājadrese %s ir nederīga",
+        "aliasd_targetd_identical": "Aizstājdomēns nedrīkst būt vienāds ar mērķa domēnu: %s",
+        "aliases_in_use": "Pieļaujamajam aizstājvārdu skaitam jābūt lielākam vai vienādam ar %d",
         "description_invalid": "Resursa apraksts ir nederīgs",
         "dkim_domain_or_sel_invalid": "DKIM domēns vai selektors nepareizs",
         "domain_exists": "Domēns %s jau pastāv",
@@ -165,15 +182,15 @@
         "domain_not_empty": "Nevar noņemt neaizpildītu domēnu",
         "domain_not_found": "Domēns %s nav atrasts",
         "domain_quota_m_in_use": "Domēna kvotai jābūt lielākai vai vienādai ar %s MiB",
-        "goto_empty": "Goto adrese nevar būt tukša",
+        "goto_empty": "Aizstājādresei jāsatur vismaz viena derīga mērķa adrese",
         "goto_invalid": "Goto adrese nepareiza",
         "imagick_exception": "Kļūda: Imagick izņēmums, lasot attēlu",
         "img_invalid": "Nevar apstiprināt attēla failu",
         "img_tmp_missing": "Nevar apstiprināt attēla failu: pagaidu failu nav atrasts",
         "invalid_mime_type": "Nederīgs mime tips",
-        "is_alias": "%s jau ir zināms alias",
-        "is_alias_or_mailbox": "%s jau ir zināms alias, pastkastes vai alias addrese izvērsta no alias domēna.",
-        "is_spam_alias": "%s ir jau zināms spam alias",
+        "is_alias": "%s jau ir zināma kā aizstājadrese",
+        "is_alias_or_mailbox": "%s jau ir zināms kā aizstājvārds, pastkaste vai aizstājadrese, kas ir izvērsta no aizstājdomēna.",
+        "is_spam_alias": "%s jau ir zināma kā pagaidu aizstājadrese (mēstuļu aizstājadrese)",
         "last_key": "Pēdējo atslēgu nevar izdzēst, tā vietā jāatspējo divpakāpju pārbaude.",
         "login_failed": "Ielogošanās neveiksmīga",
         "mailbox_invalid": "Pastkastes vārds ir nederīgs",
@@ -181,7 +198,7 @@
         "mailbox_quota_exceeds_domain_quota": "Pastkastes izmērs pārsniedz maksimāli pieļaujamo",
         "mailbox_quota_left_exceeded": "Nav pietiekami daudz vietas (atlikusī vieta: %d MiB)",
         "mailboxes_in_use": "Maks. pastkastēm jābūt lielākām vai vienādām ar %d",
-        "max_alias_exceeded": "Visas aliases izmantotas",
+        "max_alias_exceeded": "Pārsniegts pieļaujamo aizstājvārdu skaits",
         "max_mailbox_exceeded": "Maksimālais pastkastšu skaits sasniegts (%d of %d)",
         "max_quota_in_use": "Pastkastes kvotai jābūt lielākai vai vienādai %d MiB",
         "maxquota_empty": "Maksimālais pieļaujamais izmērs nevar būt 0.",
@@ -202,7 +219,7 @@
         "validity_missing": "Lūdzu piešķiriet derīguma termiņu"
     },
     "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 pareizo resursu.",
+        "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.",
         "dns_records": "DNS Ieraksti",
         "dns_records_24hours": "Lūdzu ņemiet vērā, ka DNS izmaiņas var aizņemt laiku līdz 24 stundām, lai pareizi varētu atspoguļot izmaiņas šajā lapā. Tas ir paredzēts, lai jūs varētu viegli uzzināt, kā konfigurēt savus DNS ierakstus un pārbaudīt, vai visi jūsu ieraksti ir pareizi saglabāti DNS.",
         "dns_records_data": "Pareizi dati",
@@ -213,7 +230,7 @@
     },
     "edit": {
         "active": "Aktīvs",
-        "alias": "Rediģēt alias",
+        "alias": "Labot aizstājvārdu",
         "automap": "Mēģiniet automatizēt mapes (\"Nosūtītie vienumi\", \"Nosūtītie\" => \"Nosūtītie\" utt.)",
         "backup_mx_options": "Dublēt MX iespējas",
         "delete1": "Dzēst no avota, kad pabeigts",
@@ -224,8 +241,8 @@
         "domain_admin": "Labot domēna administratoru",
         "domain_quota": "Domēna kvota",
         "domains": "Domēni",
-        "dont_check_sender_acl": "Atspējot domēna sūtītāju pārbaudi %s + alias domēni",
-        "edit_alias_domain": "Rediģēt alias domēnu",
+        "dont_check_sender_acl": "Atspējot sūtītāju pārbaudi domēnam %s (+ aizstājdomēni)",
+        "edit_alias_domain": "Labot aizstājdomēnu",
         "encryption": "Šifrēšana",
         "exclude": "Neiekļaut objektus (regex)",
         "force_pw_update": "Piespiedu paroles atjaunošana pie nākošās pieslēgšanās",
@@ -235,7 +252,7 @@
         "inactive": "Neaktīvs",
         "kind": "Veids",
         "mailbox": "Rediģēt pastkasti",
-        "max_aliases": "Maks. aliases",
+        "max_aliases": "Lielākais aizstājvārdu skaits",
         "max_mailboxes": "Maks. iespējamās pastkastes",
         "max_quota": "Maks. kvota uz pastkasti (MiB)",
         "maxage": "Maximum age of messages in days that will be polled from remote<br><small>(0 = ignore age)</small>",
@@ -247,7 +264,7 @@
         "previous": "Iepriekšējā lapa",
         "quota_mb": "Kvota (MiB)",
         "relay_all": "Pārsūtīt visus adresātus",
-        "relay_all_info": "<small>Ja tu izvēlies <b>nepārsūtīt</b> visus adresātus, tad tev vajadzēs pievienot (\"tukšu\") pastkasti katram saņēmējam, kas būtu jāpārsūta.</small>",
+        "relay_all_info": "↪ Ja izvēlies <b>nepārsūtīt</b> visus adresātus, tad tev vajadzēs pievienot (\"aklo\") pastkasti katram saņēmējam, kas būtu jāpārsūta.",
         "relay_domain": "Pārsūtīt domēnu",
         "remove": "Noņemt",
         "resource": "Resurss",
@@ -256,9 +273,9 @@
         "sieve_desc": "Īss apraksts",
         "sieve_type": "Filtra tips",
         "skipcrossduplicates": "Izlaist dublētus ziņojumus pa mapēm (pirmais nāk, pirmais kalpo)",
-        "spam_alias": "Izveidot vai mainīt laika ierobežotas alias adreses",
-        "spam_policy": "Pievienot vai noņemt  vienības   baltajā-/melnajā sarakstā",
-        "spam_score": "Iestatīt pielāgotu surogātpastu",
+        "spam_alias": "Izveidot vai mainīt laika ierobežotas aizstājadreses",
+        "spam_policy": "Pievienot vai noņemt vienumus baltajā-/melnajā sarakstā",
+        "spam_score": "Iestatīt pielāgotu surogātpasta vērtējumu",
         "subfolder2": "Sinhronizēt galamērķa apakšmapē<br><small>(tukšs = neizmantot apakšmapi)</small>",
         "syncjob": "Rediģēt sinhronizācijas darbu",
         "target_address": "Iet uz adresi/ēm <small>(komatu atdalītas)</small>",
@@ -267,32 +284,41 @@
         "unchanged_if_empty": "Ja neizmainīts atstājiet tukšu",
         "username": "Lietotājvārds",
         "validate_save": "Apstiprināt un saglabāt",
-        "last_modified": "Pēdējoreiz mainīts"
+        "last_modified": "Pēdējoreiz mainīts",
+        "domain_footer_skip_replies": "Neņemt vērā kājeni atbildes e-pastos",
+        "bcc_dest_format": "BCC galamērķim jābūt vienai derīgai e-pasta adresei.<br>Ja ir nepieciešams nosūtīt kopiju uz vairākām adresēm, jāizveido aizstājvārds, un tas ir jāizmanto šeit.",
+        "extended_sender_acl_info": "Vajadzētu ievietot DKIM domēna atslēgu, ja tā ir pieejama.<br>\n  Jāatceras pievienot šo serveri attiecīgajam SPF TXT ierakstam.<br>\n  Kad vien šim serverim tiek pievienots domēns vai aizstājdomēns, kas pārklājas ar ārēju adresi, ārējā adrese tiek noņemta.<br>\n  Jāizmanto @domain.tld, lai ļautu nosūtīt kā *@domain.tld.",
+        "pushover_info": "Pašpiegādes paziņojumu iestatījumi tiks piemēroti visiem tīrajiem (ne surogātpasta) sūtījumiem, kas piegādāti <b>%s</b>, tostarp aizstājvārdiem (kopīgotiem, nekopīgotiem, ar birkām).",
+        "mailbox_relayhost_info": "Tiek piemērots tikai pastkastei un tiešajiem aizstājvārdiem, aizstāj domēna retranslācijas saimniekdatoru.",
+        "sender_acl_info": "Ja pastkastes lietotājam A ir ļauts sūtīt kā pastkastes lietotājam B, sūtītāja adrese SOGo netiek automātiski parādīta kā atlasāms lauks \"no\".<br>.\n  Pastkastes lietotājam B SOGo ir jāizveido pilnvarojums, lai pastkastes lietotājs A varētu izvēlēties tā adresi kā sūtītāja. Lai SOGo pilnvarotu pastkasti, pasta skatā jāizmanto izvēlne (trīs punkti) pa labi no pastkastes nosaukuma augšējā kreisajā pusē. Šī darbība neattiecas uz aizstājadresēm.",
+        "sogo_visible": "Aizstājvārds ir redzams SOGo",
+        "sogo_visible_info": "Šī iespēja ietekmē tikai tos objektus, kurus var parādīt SOGo (koplietojamās vai nekoplietojamās aizstājadreses, kas norāda uz vismaz vienu vietējo pastkasti). Ja paslēpts, netiks parādīts SOGo kā atlasāms sūtītājs."
     },
     "footer": {
         "cancel": "Atcelt",
         "confirm_delete": "Apstiprināt dzēšanu",
         "delete_now": "Dzēst tagad",
-        "delete_these_items": "Lūdzu apstipriniet darbīku šiem abjektiem:",
+        "delete_these_items": "Lūgums apstiprināt izmaiņas šim objekta Id",
         "loading": "Lūdzu uzgaidiet...",
         "restart_container": "Restartēt konteineri",
         "restart_container_info": "<b>Important:</b> Piespiedu restartēšana var aizņemt ilgu laiku, lūdzu uzgaidiet.",
-        "restart_now": "Restartēt "
+        "restart_now": "Pārsāknēt tagad"
     },
     "header": {
-        "administration": "Administrēšana",
-        "debug": "Atkļūdošana",
-        "email": "E-Mail",
-        "mailcow_config": "Configurācija",
+        "administration": "Konfigurācija un informācija",
+        "debug": "Informācija",
+        "email": "E-pasts",
+        "mailcow_config": "Konfigurācija",
         "quarantine": "Karantīna",
         "restart_sogo": "Restartēt SOGo",
-        "user_settings": "Lietotāja uzstādījumi"
+        "user_settings": "Lietotāja uzstādījumi",
+        "mailcow_system": "Sistēma"
     },
     "info": {
         "no_action": "No action applicable"
     },
     "login": {
-        "delayed": "Pieslēgšanās aizkavējās par  %s sekundēm.",
+        "delayed": "Pieteikšanās tika aizkavēta %s sekundēm.",
         "login": "Pieslēgties",
         "password": "Parole",
         "username": "Lietotājvārds"
@@ -302,22 +328,22 @@
         "activate": "Activate",
         "active": "Aktīvs",
         "add": "Pievienot",
-        "add_alias": "Pievienot alias",
+        "add_alias": "Pievienot aizstājvārdu",
         "add_bcc_entry": "Pievienot BCC karti",
         "add_domain": "Pievienot domēnu",
-        "add_domain_alias": "Pievienot domēna alias",
+        "add_domain_alias": "Pievienot domēna aizstājvārdu",
         "add_filter": "Pievienot filtru",
         "add_mailbox": "Pievienot pastkasti",
         "add_recipient_map_entry": "Pievienot saņēmēja karti",
         "add_resource": "Pievienot resursu",
         "address_rewriting": "Adreses pārrakstīšana",
-        "alias": "Alias",
-        "aliases": "Aliases",
+        "alias": "Aizstājvārds",
+        "aliases": "Aizstājvārdi",
         "backup_mx": "Rezerves kopija MX",
         "bcc": "BCC",
         "bcc_destination": "BCC galamērķi/s",
         "bcc_destinations": "BCC galamērķi/s",
-        "bcc_info": "BCC kartes tiek izmantotas, lai klusu pārsūtītu visu ziņojumu kopijas uz citu adresi. Saņēmēja kartes tipa ieraksts tiek izmantots, kad vietējais galamērķis darbojas kā pasta adresāts. Sūtītāja kartes atbilst vienam un tam pašam principam. <br/>\r\n   Vietējais galamērķis netiks informēts par piegādes neveiksmi. ",
+        "bcc_info": "BCC kartes tiek izmantotas, lai klusi pārsūtītu visu ziņojumu kopijas uz citu adresi. Saņēmēja kartes veida ieraksts tiek izmantots, kad vietējais galamērķis darbojas kā pasta saņēmējs. Sūtītāja kartes atbilst vienam un tam pašam principam.<br/>\n  Vietējais galamērķis netiks informēts par neizdevušos piegādi.",
         "bcc_local_dest": "Vietējais galamērķis",
         "bcc_map_type": "BCC veids",
         "bcc_maps": "BCC kartes",
@@ -331,7 +357,7 @@
         "dkim_key_length": "DKIM atslēgas garums (bits)",
         "domain": "Domēns",
         "domain_admins": "Domēna administratori",
-        "domain_aliases": "Domēna aliases",
+        "domain_aliases": "Domēna aizstājvārdi",
         "domain_quota": "Kvota",
         "domain_quota_total": "Kopējais domēna ierobežojums",
         "domains": "Domēns",
@@ -349,7 +375,7 @@
         "last_run_reset": "Ievietot sarakstā kā nākamo",
         "mailbox_quota": "Maks. pastkastes izmērs",
         "mailboxes": "Pastkaste",
-        "max_aliases": "Maks. iespejamās aliases",
+        "max_aliases": "Lielākais aizstājvārdu skaits",
         "max_mailboxes": "Maks. iespējamās pastkastes",
         "max_quota": "Maks. kvota uz pastkasti",
         "mins_interval": "Intervāls (min)",
@@ -369,11 +395,11 @@
         "running": "Darbojas",
         "set_postfilter": "Atzīmēt kā pēcfiltru",
         "set_prefilter": "Atzīmēt kā pimrsfiltru",
-        "sieve_info": "Jūs varat saglabāt vairākus filtrus katram lietotājam, bet tikai viens pirmsfiltrs un viens pēcfiltrs var būt aktīvs vienlaicīgi.<br>\r\nKatrs filtrs tiks apstrādāts aprakstītajā kārtībā. Kļūdains vai izdots skripts \"Paturēt;\" pārtrauks turpmāko skriptu apstrādi.<br>\r\n<a href=\"https://github.com/mailcow/mailcow-dockerized/blob/master/data/conf/dovecot/global_sieve_before\" target=\"_blank\">Global sieve prefilter</a> → Pirmsfiltrs → Lietotāja skripts → Pēcfiltrs → <a href=\"https://github.com/mailcow/mailcow-dockerized/blob/master/data/conf/dovecot/global_sieve_after\" target=\"_blank\">Global sieve postfilter</a>",
-        "spam_aliases": "Temp. alias",
+        "sieve_info": "Katram lietotājam var saglabāt vairākus filtrus, bet tikai viens pirmsfiltrs un viens pēcfiltrs var darboties vienlaicīgi.<br>\nKatrs filtrs tiks apstrādāts norādītajā kārtībā. Ne kļūdains skripts, ne izdots \"keep;\" nepārtrauks turpmāko skriptu apstrādi. Vispārējo sieve skriptu izmaiņas izsauks Dovecot pārsāknēšanu.<br><br>Vispārējais sieve pirmsfiltrs &#8226; Pirmsfiltrs &#8226; Lietotāja skripti &#8226; Pēcfiltrs &#8226; Vispārējais sieve pēcfiltrs",
+        "spam_aliases": "Pagaidu aizstājvārds",
         "status": "Status",
         "sync_jobs": "Sinhronizācijas darbi",
-        "target_address": "Doties uz  adresi",
+        "target_address": "Doties uz adresi",
         "target_domain": "Mērķa domēns",
         "tls_enforce_in": "Piespiest TLS ienākošajiem",
         "tls_enforce_out": "Piespiest TLS izejošajiem",
@@ -385,7 +411,16 @@
         "daily": "Ik dienu",
         "hourly": "Ik stundu",
         "last_mail_login": "Pēdējā pieteikšanās pastkastē",
-        "mailbox": "Pastkaste"
+        "mailbox": "Pastkaste",
+        "sieve_preset_2": "Vienmēr atzīmēt noteikta sūtītāja e-pastu kā izlasītu",
+        "open_logs": "Atvērt žurnālus",
+        "sieve_preset_8": "Pārvirzīt noteikta sūtītāja e-pastu, atzīmēt kā izlasītu un ievietot to apakšmapē",
+        "sogo_visible": "Aizstājvārds ir redzams SOGo",
+        "sogo_visible_n": "Paslēpt aizstājvārdu SOGo",
+        "sogo_visible_y": "Rādīt aizstājvārdu SOGo",
+        "add_alias_expand": "Izvērst aizstājvārdu pār aizstājdomēniem",
+        "alias_domain_alias_hint": "Aizstājvārdi <b>netiek</b> automātiski piemēroti domēnu aizstājvārdiem. Aizstājadrese <code>my-alias@domain</code> <b>nenosedz</b> adresi <code>my-alias@alias-domain</code> (kur \"alias-domain\" ir iedomāts \"domain\" aizstājdomēns).<br>Lūgums izmantot sieta atlasi, lai pārvirzītu pastu uz ārēju pastkasti (skatīt cilti \"Atlasīšana\" vai izmantot SOGo -> Pārsūtītājs). \"Izvērst aizstājvārdu pār aizstājdomēniem\" ir izmantojams, lai automātiski pievienotu trūkstošos aiztājvārdus.",
+        "alias_domain_backupmx": "Aizstājdomēns ir neaktīvs retranslācijas domēnam"
     },
     "quarantine": {
         "action": "Darbības",
@@ -408,25 +443,29 @@
         "subj": "Priekšmets",
         "text_from_html_content": "Saturs (konvertēts html)",
         "text_plain_content": "Saturs (teksts/vienkāršs)",
-        "toggle_all": "Pārslēgt visu"
+        "toggle_all": "Pārslēgt visu",
+        "disabled_by_config": "Pašreizējā sistēmas konfigurācija atspējo karantīnu. Lūgums iestatīt \"saglabāšanu katrai pastkastītei\" un \"lielākais pieļaujamais lielums\" karantīnas vienumiem.",
+        "qhandler_success": "Pieprasījums veiksmīgi nosūtīts sistēmai. Tagad var aizvērt logu.",
+        "qinfo": "Karantīnas sistēma datubāzē saglabās noraidīto pastu (sūtītājam <em>netiks</em> radīts iespaids par piegādātu pastu), kā arī pastu, kas tiek piegādāts kā kopija pastkastes mēstuļu mapē.\n  <br>\"Apgūt kā surogātpastu un izdzēst\" apgūs ziņojumu kā surogātpastu ar Bajesa teorēmu un aprēķinās arī nestriktas jaucējvērtības, lai nākotnē noraidītu līdzīgus ziņojumus.\n  <br>Lūgums apzināties, ka vairāku ziņojumu apgūšana var būt laikietilpīga atkarībā no sistēmas.<br>Melnā saraksta vienumi karantīnā netiek iekļauti."
     },
     "queue": {
-        "queue_manager": "Queue Manager"
+        "queue_manager": "Queue Manager",
+        "info": "Pasta rinda satur visus e-pastus, kas gaida piegādi. Ja e-pasts ir iestrēdzis pasta rindā ilgu laiku, sistēma to automātiski izdzēš.<br>Attiecīgā pasta kļūdas ziņojums sniedz informāciju par to, kāpēc pastu neizdevās piegādāt."
     },
     "start": {
         "help": "Rādīt/Paslēp palīdzības paneli",
-        "imap_smtp_server_auth_info": "Lūdzu, izmantojiet pilnu e-pasta adresi un PLAIN autentifikācijas mehānismu.<br>\r\nJūsu pieteikšanās dati tiks šifrēti, izmantojot servera puses obligātu šifrēšanu",
+        "imap_smtp_server_auth_info": "Lūgums izmantot pilnu e-pasta adresi un PLAIN autentifikācijas mehānismu.<br>\nPieteikšanās dati tiks šifrēti ar servera puses obligātu šifrēšanu.",
         "mailcow_apps_detail": "Izmantojiet lietotni mailcow, lai piekļūtu savam pastam, kalendāram, kontaktiem un citām lietām.",
-        "mailcow_panel_detail": "<b>Domēna administrators</b> izveidot, mainīt vai dzēst pastkastes un aliases, mainīt domēnus un lasīt papildu informāciju par saviem piešķirtajiem domēniem.<br>\r\n  <b>Pastkastes lietotāji</b> var izveidot ierobežotus laika ierobežojumus (surogātpasta aliases), mainīt paroli un surogātpasta filtru iestatījumus."
+        "mailcow_panel_detail": "<b>Domēna pārvaldītāji</b> izveido, maina vai izdzēš pastkastes un aizstājvārdus, maina domēnus un lasa papildu informāciju par piešķirtajiem domēniem.<br>\n<b>Pastkastes lietotāji</b> var izveidot laikā ierobežotus aizstājvārdus (surogātpasta aizstājvārdus), mainīt savu paroli un surogātpasta atlasīšanas iestatījumus."
     },
     "success": {
         "admin_modified": "Izmaiņas administrātoram ir saglabātas",
-        "alias_added": "Aliasi pievienoti",
-        "alias_domain_removed": "Alias domēns %s tika noņemts",
-        "alias_modified": "Izmaiņas aliasiem %s ir saglabātas",
-        "alias_removed": "Alias %s ir noņemts",
-        "aliasd_added": "Pievients alias domēnam %s",
-        "aliasd_modified": "Izmaiņas aloas domēnam %s 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",
+        "alias_removed": "Aizstājvārds %s tika noņemts",
+        "aliasd_added": "Pievienots aizstājdomēns %s",
+        "aliasd_modified": "Aizstājdomēna %s izmaiņas tika saglabātas",
         "app_links": "Saglabāt izmaiņas lietotņu saitēm",
         "dkim_added": "DKIM atslēga saglabāta",
         "dkim_removed": "DKIM atslēga %s ir noņemta",
@@ -437,7 +476,7 @@
         "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",
-        "f2b_modified": "Izmaiņas  Fail2ban parameteriem ir saglabātas",
+        "f2b_modified": "Fail2ban parametru izmaiņas tika saglabātas",
         "forwarding_host_added": "Pāradresācijas hosts %s pievienotsd",
         "forwarding_host_removed": "Pāradresācijas hosts %s noņemts",
         "item_deleted": "Vērtība %s veiksmīgi dzēsta",
@@ -462,7 +501,7 @@
         "confirm_totp_token": "Lūdzu apstipriniet Jūsu izmaiņas ievadot uzģenerēto tekstu",
         "delete_tfa": "Atspējot TFA",
         "disable_tfa": "Atspējot TFA līdz nākamajai veiksmīgai pieteikšanās",
-        "enter_qr_code": "Jūsu TOTP kods, ja Jūsu ierīce nevar noskanēt QR kodus.",
+        "enter_qr_code": "TOTP kods, ja Tava ierīce nevar nolasīt kvadrātkodus",
         "key_id": "Jūsu YubiKey identifikators",
         "key_id_totp": "Identifikators Jūsu atslēgai",
         "none": "Deaktivizēt",
@@ -480,24 +519,24 @@
         "action": "Rīcība",
         "active": "Aktīvs",
         "active_sieve": "Aktīvais filtrs",
-        "alias": "Alias",
-        "alias_create_random": "Ģenerēt nejaušā nosaukuma alias",
-        "alias_extend_all": "Pagarināt alias par 1 stundu",
+        "alias": "Aizstājvārds",
+        "alias_create_random": "Izveidot nejaušu aizstājvārdu",
+        "alias_extend_all": "Pagarināt aizstājvārdus par 1 stundu",
         "alias_full_date": "d.m.Y, H:i:s T",
-        "alias_remove_all": "Noņemt visus alias",
+        "alias_remove_all": "Noņemt visus aizstājvārdus",
         "alias_select_validity": "Derīguma periods",
         "alias_time_left": "Laiks atlicis",
         "alias_valid_until": "Derīgs līdz",
         "aliases_also_send_as": "Atļauts arī sūtīt kā lietotājam",
-        "aliases_send_as_all": "Nepārbaudīt sūtītāja peikļuvi domēnam/iem un alias domēniem",
+        "aliases_send_as_all": "Nepārbaudīt sūtītāja piekļuvi šiem domēniem un to aizstājdomēniem",
         "change_password": "Nomainīt paroli",
-        "client_configuration": "Parādīt konfigurācijas piemērus dažādām iekārtām",
+        "client_configuration": "Parādīt konfigurācijas norādes e-pasta klientiem un tālruņiem",
         "create_syncjob": "Izveidot jaunu sinhronizācijas darbu",
         "day": "Dienas",
-        "direct_aliases": "Tiešas alias adreses",
-        "direct_aliases_desc": "Tiešie alias tiek ietekmēti no spam filtra un TLS politikas iestatījumiem affected by spam filter and TLS policy settings.",
+        "direct_aliases": "Tiešas aizstājadreses",
+        "direct_aliases_desc": "Tiešās aizstājadreses ir surogātpasta atlasīšanas un TLS nosacījumu iestatījumu ietekmētas.",
         "eas_reset": "Atiestatīt ActiveSync ierīces kešatmiņu",
-        "eas_reset_help": "Daudzos gadījumos ierīces kešatmiņas atiestatīšana palīdz atjaunot bojāto ActiveSync profilu.<br><b>Uzmanību:</b> Visi elementi tiks  atkārtoti ielādēti!",
+        "eas_reset_help": "Daudzos gadījumos ierīces kešatmiņas atiestatīšana palīdz atjaunot bojāto ActiveSync profilu.<br><b>Uzmanību:</b> visi vienumi tiks atkārtoti lejupielādēti!",
         "eas_reset_now": "Atiestatīt tagad",
         "edit": "Labot",
         "encryption": "Šifrēšana",
@@ -520,15 +559,15 @@
         "remove": "Noņemt",
         "running": "Running",
         "save_changes": "Saglabāt izmaiņas",
-        "shared_aliases": "Koplietotās alias adreses",
-        "shared_aliases_desc": "Koplietotais alias netiek ietekmēts no lietotāju darbībām. Pielāgots spam filtra iestatījums var būt arhivēts no domēna ietvaros uzstādīta noteikuma no administrātora..",
+        "shared_aliases": "Kopīgotās aizstājadreses",
+        "shared_aliases_desc": "Tādi lietotāja iestatījumi kā surogātpasta atlasīšana vai šifrēšanas nosacījumi neietekmē kopīgotos aizstājvārdus. Atbilstošu surogātpasta atlasi var izveidot tikai pārvaldītājs kā domēnu aptverošu nosacījumu.",
         "show_sieve_filters": "Parādīt aktīvā lietotāja Sieve filtru",
-        "spam_aliases": "Pagaidu e-pasta alias",
+        "spam_aliases": "Pagaidu e-pasta aizstājvārdi",
         "spamfilter": "Mēstuļu filtrs",
         "spamfilter_behavior": "Reitings",
         "spamfilter_bl": "Melnais saraksts",
-        "spamfilter_bl_desc": "Melajā sarakstā iekļautās adreses vienmēr tiks uzskatītas par mēstulēm.",
-        "spamfilter_default_score": "Noklusētās vērtības:",
+        "spamfilter_bl_desc": "No melnajā sarakstā iekļautajām e-pasta adresēm saņemtās vēstules <b>vienmēr</b> tiks atzīmētas kā mēstules un noraidītas. Noraidītais pasts <b>netiks</b> ievietots karantīnā. Var izmantot aizstājzīmes. Atlasīšana tiek pielietota tikai tiešiem aizstājvārdiem (aizstājvārdiem ar vienu mērķa pastkasti), izņemot visu tverošos aizstājvārdus un pašu pastkasti.",
+        "spamfilter_default_score": "Noklusējuma vērtības",
         "spamfilter_green": "Zaļš: šī nav mēstule",
         "spamfilter_hint": "Pirmā vērtība norāda uz zemu \"Spam vērtējumu\" vērtējumu, otra vērtība par \"Augstu spam vērtējumu\".",
         "spamfilter_red": "Sarkans: Šī vēstule noteikti ir spams un tiek nekavējoties noraidīta",
@@ -539,7 +578,7 @@
         "spamfilter_table_remove": "noņemt",
         "spamfilter_table_rule": "Noteikums",
         "spamfilter_wl": "Baltais saraksts",
-        "spamfilter_wl_desc": "Baltajā sarakstā iekļautās adreses nekad netiks klasificētas kā mēstules.",
+        "spamfilter_wl_desc": "No baltā saraksta e-pasta adresēm saņemtās vēstules <b>nekad</b> netiks atzīmētas kā mēstules. Var tikt izmantotas aizstājzīmes. Atlase tiek piemērota tikai tiešiem aizstājvārdiem (aizstājvārdiem ar vienu mērķa pastkasti), izņemot visu tverošos aizstājvārdus un pašu pastkasti.",
         "spamfilter_yellow": "Dzeltens: šī vēstule visticamāk ir spams un tiks pārvietota uz Junk mapi",
         "status": "Status",
         "sync_jobs": "Sinhronizācijas uzdevumi",
@@ -552,12 +591,15 @@
         "tls_enforce_in": "Piespiest TLS ienākošajiem",
         "tls_enforce_out": "Piespiest TLS izejošajiem",
         "tls_policy": "Šifrēšanas politika",
-        "tls_policy_warning": "<strong>Uzmanību:</strong> Ja jūs izlemjat aktivizēt e-pastu šifrēšanu, Jūs varat pazaudēt vēstules.<br>Vēstules kas neatbilst politikai atleks atpakaļ no sistēmas ar kļūdu.<br>Šī opcija attiecas uz Jūsu primāro e-pasta adresi, visām adresēm, kas atvasinātas no alias domēniem, kā arī aliasi <b>,kas saistīti tikai ar šo pastkasti</b> kā mērķis.",
+        "tls_policy_warning": "<strong>Brīdinājums:</strong> Ja tiek izlemts ieviest šifrēta pasta nosūtīšanu, var tikt pazaudēti e-pasti.<br>Ziņojumi, kas neatbilst nosacījumiem, pasta sistēma atmetīs ar kļūdu.<br>Šī iespēja attiecas uz galveno e-pasta adresi (pieteikšanās vārdu), visām adresēm, kas atvasinātas no aizsājdomēniem, kā arī aizstājadreses, <b>kas norāda tikai uz šo pastkasti</b>.",
         "user_settings": "Lietotāja iestatījumi",
         "username": "Lietotājvārds",
         "waiting": "Waiting",
         "week": "Nedēļa",
-        "weeks": "Nedēļas"
+        "weeks": "Nedēļas",
+        "open_logs": "Atvērt žurnālus",
+        "apple_connection_profile_mailonly": "Šis savienojuma profils iekļauj IMAP un SMTP konfigurācijas parametrus Apple ierīcei.",
+        "pushover_info": "Pašpiegādes paziņojumu iestatījumi attieksies uz visu tīro (ne surogātpasta) pastu, kas piegādāts uz <b>%s</b>, ieskaitot aizstājvārdus (kopīgotus, nekopīgotus, ar birkām)."
     },
     "datatables": {
         "paginate": {
@@ -566,6 +608,18 @@
         }
     },
     "debug": {
-        "last_modified": "Pēdējoreiz mainīts"
+        "last_modified": "Pēdējoreiz mainīts",
+        "static_logs": "Nemainīgie žurnāli",
+        "no_update_available": "Sistēma izmanto jaunāko versiju",
+        "in_memory_logs": "Atmiņā esošie žurnāli",
+        "system_containers": "Sistēma un konteineri",
+        "current_time": "Sistēmas laiks",
+        "external_logs": "Ārējie žurnāli",
+        "logs": "Žurnāli"
+    },
+    "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"
     }
 }

+ 326 - 0
data/web/lang/lang.nb-no.json

@@ -0,0 +1,326 @@
+{
+    "admin": {
+        "api_read_only": "Kun lesetilgang",
+        "advanced_settings": "Avanserte innstillinger",
+        "admin_details": "Endre administratordetaljer",
+        "add_row": "Legg til rad",
+        "active_rspamd_settings_map": "Aktivt innstillingskart",
+        "admins": "Administratorer",
+        "api_info": "APIet er under utvikling. Dokumentasjonen finnes på <a href=\"/api\">/api</a>",
+        "admin_domains": "Domenetilordninger",
+        "add": "Legg til",
+        "active": "Aktiv",
+        "add_transport": "Legg til transport",
+        "api_key": "API-nøkkel",
+        "add_admin": "Legg til administrator",
+        "admin": "Administrator",
+        "allowed_methods": "Tilgangskontroll-Tillatte-Metoder",
+        "add_transports_hint": "Vær oppmerksom på at eventuelle autentiseringsdata vil bli lagret i klartekst.",
+        "add_relayhost": "Legg til sender-avhengig transport",
+        "additional_rows": " ekstra rader ble lagt til",
+        "admins_ldap": "LDAP-administratorer",
+        "action": "Handling",
+        "add_settings_rule": "Legg til innstillingsregel",
+        "allowed_origins": "Tilgangskontroll-Tillat-Opphav",
+        "api_allow_from": "Tillat API-tilgang fra disse IP/CIDR-nettverkene",
+        "activate_send": "Aktivér sendeknapp",
+        "access": "Tilgang",
+        "add_domain_admin": "Legg til domeneadministrator",
+        "add_forwarding_host": "Legg til videresendingsvert",
+        "activate_api": "Aktivér API",
+        "add_relayhost_hint": "Vennligst vær oppmerksom på at autentiseringsdata, om noe, vil bli lagret i klartekst.",
+        "app_links": "App-lenker",
+        "app_name": "App-navn",
+        "apps_name": "\"mailcow Apps\"-navn",
+        "arrival_time": "Ankomsttid (servertid)",
+        "authed_user": "Autorisert bruker",
+        "ays": "Er du sikker på at du vil fortsette?",
+        "change_logo": "Endre logo",
+        "logo_normal_label": "Normal",
+        "logo_dark_label": "Omvendt for mørk modus",
+        "configuration": "Konfigurasjon",
+        "convert_html_to_text": "Konvertér HTML til ren tekst",
+        "copy_to_clipboard": "Tekst kopiert til utklippstavle!",
+        "cors_settings": "CORS-innstillinger",
+        "credentials_transport_warning": "<b>Advarsel</b>:  Å legge til en ny transport-mapping vil oppdatere innloggingsinformasjon for alle oppføringer med en tilsvarende \"next hop\"-kolonne.",
+        "customer_id": "Kunde-ID",
+        "customize": "Tilpass",
+        "destination": "Mål",
+        "dkim_add_key": "Legg til ARC/DKIM-nøkkel",
+        "dkim_domains_selector": "Velger",
+        "dkim_domains_wo_keys": "Velg domener med manglende nøkler",
+        "dkim_from": "Fra",
+        "dkim_key_length": "DKIM-nøkkellengde (bits)",
+        "dkim_key_missing": "Nøkkel mangler",
+        "dkim_key_unused": "Nøkkel ikke i bruk",
+        "dkim_key_valid": "Nøkkel gyldig",
+        "dkim_keys": "ARC/DKIM-nøkler",
+        "dkim_overwrite_key": "Overskriv eksisterende DKIM-nøkkel",
+        "dkim_private_key": "Privat nøkkel",
+        "dkim_to": "Til",
+        "domain_admins": "Domeneadministratorer",
+        "domain_s": "Domene/r",
+        "duplicate": "Duplikat",
+        "duplicate_dkim": "Duplisert DKIM-oppføring",
+        "edit": "Rediger",
+        "empty": "Ingen resultater",
+        "excludes": "Ekspluderer disse mottakerne",
+        "f2b_ban_time": "Utestengingstid (sek)",
+        "f2b_blacklist": "Svartelistede nettverk/verter",
+        "f2b_filter": "Regex-filtre",
+        "f2b_manage_external": "Betjene Fail2Ban eksternt",
+        "f2b_manage_external_info": "Fail2Ban vil fortsette å vedlikeholde utestengingslisten, men den vil ikke aktivt legge til regler for å blokkere trafikk. Bruk den genererte blokkeringslisten under for å blokkere trafikk eksternt.",
+        "f2b_max_attempts": "Maks antall forsøk",
+        "f2b_max_ban_time": "Maks utestengingstid (sek)",
+        "f2b_netban_ipv4": "IPv4-subnetstørrelse å aktivere blokkering for (8-32)",
+        "f2b_netban_ipv6": "IPv6-subnetstørrelse å aktivere blokkering for (8-128)",
+        "f2b_parameters": "Fail2Ban-parametre",
+        "f2b_retry_window": "Tidsrom (sek) for maks antall forsøk",
+        "f2b_whitelist": "Hvitelistede nettverk/verter",
+        "filter_table": "Filtreringstabell",
+        "forwarding_hosts": "Videresendingsverter",
+        "api_skip_ip_check": "Hopp over IP-sjekk for API",
+        "ban_list_info": "Se liste over utestengte IPer under: <b>nettverk (gjenværende utestengingstid) - [handlinger]</b>.<br />IPer i kø for å bli tillatt igjen vil bli fjernet fra den aktive utestengingslisten i løpet av noen sekunder.<br />Røde etiketter indikerer aktive permanente utestenginger via svartelisting.",
+        "dkim_from_title": "Kildedomene å kopiere data fra",
+        "domain": "Domene",
+        "f2b_ban_time_increment": "Utestengingstid økes for hver ny utestenging",
+        "api_read_write": "Lese- og skrivetilgang",
+        "f2b_list_info": "En svartelistet vert eller nettverk vil alltid ha større vekt enn en hvitelistet oppføring.<b>Oppdateringer av listen tar noen sekunder før de vises.</b>",
+        "f2b_regex_info": "Logger tatt i betraktning: SOGo, Postfix, Dovecot, PHP-FHM.",
+        "dkim_to_title": "Måldomene/r - vil bli overskrevet",
+        "domain_admin": "Domeneadministrator",
+        "r_active": "Aktive begrensninger",
+        "queue_unban": "fjern blokkering",
+        "r_inactive": "Inaktive begrensninger",
+        "r_info": "Grå/deaktivere elementer i listen over aktive restriksjoner er ikke kjente som gyldige restriksjoner i mailcow og kan ikke flyttes. Ukjente begrensninger vil bli aktivert i den rekkefølgen de opptrer uansett.<br>Du kan legge til nye elementer i <code>inc/vars.local.inc.php</code> for å kunne slå dem av og på.",
+        "relayhosts_hint": "Definer sender-avhengige transportmetoder for å kunne velge dem i domenekonfigurasjonsdialogen<br>\n  Transportmetoden er alltid \"smtp:\" og vil derfor forsøke TLS når tilbudt. Innpakket TLS (SMTPS) er ikke støttet. En brukers individuelle utgående TLS-policyinnstilling tas til etterretning.<br>\n  Gjelder for valgte domener inkludert alias-domener.",
+        "rspamd_global_filters_regex": "Navnene forklarer deres mening. Alt innhold må inneholde gyldige regulære utstrykk etter formatet \"/mønster/alternativer\" (f.eks. <code>/.+@domain\\.tld/i</code>).<br>\n  Selv om grove sjekkrutiner kjøres for hver linje regex, kan funksjonaliteten i Rspamd bli ødelagt dersom den ikke klarer å lese syntakset riktig.<br>\n  Rspamd vil forsøke å lese innholdet når det endres. Hvis du opplever problemer, <a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">start Rspamd på nytt</a> for å tvinge ny innlesing av mappingene.<br>Svartelistede elementer er ekskluderte fra karantene.",
+        "transport_test_rcpt_info": "&#8226; Bruk null@hosted.mailcow.de for å teste videresending til en ekstern destinasjon.",
+        "transports_hint": "&#8226; En transportmapping <b>overstyrer</b> en sender-avhengig transportmapping</b>.<br>\n&#8226; MX-baserte transportmappinger er foretrukket brukt.<br>\n&#8226; Utgående TLS-policyinnstillinger per-bruker blir ignorert og kan kun tvinges via TLS-policymappinger.<br>\n&#8226; Transporttjenesten for definerte transportmetoder er alltid \"smtp:\" og vil derfor forsøke TLS når tilbudt. Innpakket TLS (SMTPS) støttes ikke.<br>\n&#8226; Adresser som matcher \"/localhost$/\" vil alltid sendes via \"local:\", derfor vil en \"*\"-destinasjon ikke gjelde disse adressene.<br>\n&#8226; For å bestemme identifikasjon for et eksempelvis neste hopp \"[host]:25\", vil Postfix <b>alltid</b> sende en forespørsel for \"host\" før den søker etter \"[host]:25\". Denne oppførselen gjør det umulig å bruke både \"host\" og \"[host]:25\" samtidig.",
+        "regex_maps": "Regex-mappinger",
+        "relay_from": "\"Fra:\"-adresse",
+        "relay_rcpt": "\"Til:\"-adresse",
+        "relay_run": "Kjør test",
+        "relayhosts": "Sender-avhengige transportmetoder",
+        "remove": "Fjern",
+        "remove_row": "Fjern rad",
+        "reset_default": "Tilbakestill til standardinnstillinger",
+        "reset_limit": "Fjern hash",
+        "routing": "Ruting",
+        "rsetting_add_rule": "Legg til regel",
+        "rsetting_content": "Regelinnhold",
+        "rsetting_desc": "Kort beskrivelse",
+        "rsetting_no_selection": "Vennligst velg en regel",
+        "rsetting_none": "Ingen regler tilgjengelig",
+        "rsettings_insert_preset": "Legg inn eksempel-forvalg \"%s\"",
+        "rsettings_preset_1": "Deaktiver alt unntatt DKIM og mengdebegrensning for autentiserte brukere",
+        "rsettings_preset_2": "Postmastere vil ha spam",
+        "rsettings_preset_3": "Bare tillat spesifikke sendere for en postboks (f.eks. kun bruk som intern postboks)",
+        "rsettings_preset_4": "Deaktiver Rspamd for et domene",
+        "rspamd_com_settings": "Et navn for innstillingen vil bli autogenerert, vennligst se eksempelforvalgene under. For ytterligere detaljer se <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd-dokumentasjonen</a>",
+        "rspamd_global_filters": "Globale filtreringsmappinger",
+        "rspamd_global_filters_agree": "Jeg skal være forsiktig!",
+        "rspamd_global_filters_info": "Globale filtermappinger inneholder forskjellige typer globale svarte- og hvitelister.",
+        "rspamd_settings_map": "Rspamd innstillingsmapping",
+        "sal_level": "Moo-nivå",
+        "save": "Lagre endringer",
+        "search_domain_da": "Søk domener",
+        "send": "Send",
+        "sender": "Avsender",
+        "service": "Tjeneste",
+        "service_id": "TjenesteID",
+        "source": "Kilde",
+        "spamfilter": "Spamfilter",
+        "subject": "Emne",
+        "success": "Suksess",
+        "sys_mails": "Systemeposter",
+        "text": "Tekst",
+        "time": "Tid",
+        "title": "Tittel",
+        "title_name": "\"mailcow UI\" nettstedstittel",
+        "to_top": "Tilbake til toppen",
+        "transport_dest_format": "Regex eller syntaks: example.org, .example.org, *, box@example.org (flere verdier kan separeres via komma)",
+        "transport_maps": "Transportmappinger",
+        "ui_footer": "Bunntekst (HTML tillatt)",
+        "ui_header_announcement": "Annonseringer",
+        "ui_header_announcement_active": "Gjør annonsering aktiv",
+        "ui_header_announcement_content": "Tekst (HTML tillatt)",
+        "ui_header_announcement_help": "Annonseringen er synlig for alle innloggede brukere og på innloggingsskjermen for grensesnittet.",
+        "ui_header_announcement_select": "Velg annonseringstype",
+        "ui_header_announcement_type": "Type",
+        "ui_header_announcement_type_danger": "Veldig viktig",
+        "ui_header_announcement_type_info": "Info",
+        "ui_header_announcement_type_warning": "Viktig",
+        "ui_texts": "Grensesnittmerkelapper og tekster",
+        "unban_pending": "fjerning av utestenging avventes",
+        "unchanged_if_empty": "Hvis uendret, la være tomt",
+        "upload": "Last opp",
+        "username": "Brukernavn",
+        "validate_license_now": "Validér GUID mot lisenstjener",
+        "verify": "Validér",
+        "yes": "&#10003;"
+    },
+    "acl": {
+        "ratelimit": "Nivågrense",
+        "sogo_profile_reset": "Nullstill SOGo-profil",
+        "smtp_ip_access": "Endre tillatte verter for SMTP",
+        "tls_policy": "TLS-policy",
+        "spam_alias": "Midlertidige alias",
+        "spam_policy": "Svarteliste/Hvitliste",
+        "unlimited_quota": "Ubegrenset kvote for postkasser",
+        "sogo_access": "Tillat administrasjon av SOGo-tilgang",
+        "syncjobs": "Synkroniser jobber",
+        "spam_score": "Spam-resultat",
+        "recipient_maps": "Mottakerkart",
+        "alias_domains": "Legg til alias-domene",
+        "app_passwds": "Behandle app-passord",
+        "bcc_maps": "BCC-mappinger",
+        "delimiter_action": "Skilletegn-handling",
+        "domain_relayhost": "Endre videresendingsvert for et domene",
+        "eas_reset": "Nullstill EAS-enheter",
+        "filters": "Filtre",
+        "login_as": "Logg inn som postkassebruker",
+        "mailbox_relayhost": "Endre videresendingsvert for en postkasse",
+        "prohibited": "Forbudt av ACL",
+        "protocol_access": "Endre protokolltilgang",
+        "pushover": "Pushover",
+        "quarantine": "Karantenehandlinger",
+        "quarantine_attachments": "Sett vedlegg i karantene",
+        "quarantine_category": "Endre varslingskategori for karantene",
+        "quarantine_notification": "Endre karantenevarslinger",
+        "domain_desc": "Endre domenebeskrivelse",
+        "extend_sender_acl": "Tillat utvidelse av sender-ACL fra eksterne adresser"
+    },
+    "add": {
+        "app_passwd_protocols": "Tillatte protokoller for app-passord",
+        "hostname": "Vert",
+        "goto_ham": "Lær som <span class=\"text-success\"><b>ham</b></span>",
+        "custom_params": "Tilpassede parametre",
+        "target_address": "Gå-til-adresse",
+        "delete2": "Slett meldinger på måldestinasjonen som ikke finnes på kilden",
+        "syncjob": "Legg til synkroniseringsjobb",
+        "domain": "Domene",
+        "timeout1": "Tidsavbrudd for tilkobling til ekstern vert",
+        "goto_null": "Slett epost uten varsling",
+        "custom_params_hint": "Riktig: --param=xy, feil: --param xy",
+        "multiple_bookings": "Flere reservasjoner",
+        "alias_domain": "Aliasdomene",
+        "exclude": "Ekskludér objekter (regex)",
+        "validate": "Validér",
+        "dry": "Simulér synkronisering",
+        "relay_all_info": "↪ Hvis du velger å <b>ikke</b> videresende for alle mottakere, så må du legge til en (\"blind\") postkasse for hver eneste mottaker som det skal videresendes for.",
+        "description": "Beskrivelse",
+        "destination": "Måldestinasjon",
+        "alias_domain_info": "<small>Kun gyldige domenenavn (kommaseparerte).</small>",
+        "mailbox_username": "Brukernavn (venstre del av en epostadresse)",
+        "username": "Brukernavn",
+        "mins_interval": "Sjekkintervall (minutter)",
+        "disable_login": "Ikke tillat innlogging (innkommende epost blir fremdeles mottatt)",
+        "delete2duplicates": "Slett duplikater på måldestinasjonen",
+        "post_domain_add": "SOGo-kontaineren, \"sogo-mailcow\", må startes på nytt etter at man har lagt til et nytt domene!<br><br>I tillegg må domenets DNS-oppsett ses gjennom. Når DNS-oppsettet er godkjent, start \"acme-mailcow\" på nytt for å automatisk opprette sertifikater for det nye domenet (autoconfig.&lt;domain&gt;, autodiscover.&lt;domain&gt;).<br>Dette steget er valgfritt og vil bli forsøkt utført hver 24. time.",
+        "select": "Vennligst velg...",
+        "full_name": "Fullt navn",
+        "alias_address": "Aliasadresse/r",
+        "activate_filter_warn": "Alle andre filtre vil deaktiveres når aktive er valgt.",
+        "quota_mb": "Kvote (MiB)",
+        "gal_info": "Den globale adresselisten inneholder alle objekter i et domene og kan ikke redigeres av noen bruker. Ledig/opptatt-informasjon i SOGo vil mangle, hvis deaktivert! <b>Start SOGo på nytt for å aktivere endringene.</b>",
+        "alias_address_info": "<small>Komplett/e epostadresse/r eller @example.com, for å fange opp alle meldinger til et domene (kommaseparert).<b>Kun mailcow-domener</b>.</small>",
+        "bcc_dest_format": "BCC-mål må være én enkelt og gyldig epostadresse.<br>Hvis du trenger å sende en kopi til flere adresser, opprett et alias og bruk det her.",
+        "add": "Legg til",
+        "add_domain_only": "Legg til kun domene",
+        "kind": "Type",
+        "relay_domain": "Vidersend for dette domenet",
+        "add_domain_restart": "Legg til domene og start SOGo på nytt",
+        "enc_method": "Krypteringsmetode",
+        "app_name": "App-navn",
+        "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> Du kan definere transport-kart for en egendefinert destinasjon for dette domenet. Hvis denne ikke er satt, vil det bli foretatt et MX-oppslag.",
+        "max_aliases": "Maks. antall mulige alias",
+        "comment_info": "En privat kommentar er ikke synlig for brukeren, mens en offentlig kommentar vises som et verktøytips når man holder muspekeren over i en brukers oversikt.",
+        "inactive": "Inaktiv",
+        "domain_quota_m": "Total domenekvote (MiB)",
+        "password": "Passord",
+        "delete1": "Slett fra kilde når fullført",
+        "tags": "Emneknagger",
+        "port": "Port",
+        "backup_mx_options": "Alternativer for videresending",
+        "gal": "Global Adresseliste",
+        "private_comment": "Privat kommentar",
+        "goto_spam": "Lær som <span class=\"text-danger\"><b>spam</b></span>",
+        "target_domain": "Måldomene",
+        "public_comment": "Offentlig kommentar",
+        "timeout2": "Tidsavbrudd for tilkobling til lokal vert",
+        "mailbox_quota_def": "Standard kvote for postkasser",
+        "skipcrossduplicates": "Hopp over duplikatmeldinger på tvers av mapper (førstemann til mølla)",
+        "sieve_desc": "Kort beskrivelse",
+        "mailbox_quota_m": "Maks. kvote pr. postkasse (MiB)",
+        "automap": "Forsøk automatisk mappe-tilordning (\"Sendte elementer\", \"Sendt\" => \"Sendt\" etc.)",
+        "validation_success": "Validering fullført",
+        "relay_all": "Videresend for alle mottakere",
+        "subscribeall": "Abonnér på alle mapper",
+        "domain_matches_hostname": "Domene %s er det samme som vertsnavn",
+        "generate": "opprett",
+        "app_password": "Legg til app-passord",
+        "max_mailboxes": "Maks. antall mulige postkasser",
+        "syncjob_hint": "Vær oppmerksom på at passord må lagres i klartekst!",
+        "relayhost_wrapped_tls_info": "Vennligst <b>ikke</b> bruk TLS-aktiverte porter (stort sett bare brukt på port 465).<br>\nBruk en annen ikke-TLS-aktivert port og send STARTTLS. En TLS-policy for å tvinge TLS kan opprettes i \"TLS-policy-mappinger\".",
+        "relay_unknown_only": "Videresend kun for ikke-eksisterende postkasser. Eksisterende postkasser vil bli levert lokalt.",
+        "sieve_type": "Filtertype",
+        "password_repeat": "Passordbekreftelse (gjenta)",
+        "nexthop": "Neste hopp",
+        "select_domain": "Vennligst velg et domene først",
+        "active": "Aktiv",
+        "target_address_info": "<small>Komplett/e epostadresse/r (kommaseparert).</small>"
+    },
+    "danger": {
+        "dkim_domain_or_sel_exists": "En DKIM-nøkkel for \"%s\" eksisterer og vil ikke bli overskrevet",
+        "from_invalid": "Avsender kan ikke være tom",
+        "bcc_must_be_email": "BCC-destinasjon %s er ikke en gyldig epostadresse",
+        "domain_quota_m_in_use": "Domenekvote må være større enn eller lik %s MiB",
+        "access_denied": "Tilgang nektet eller ugyldige skjemadata",
+        "alias_domain_invalid": "Aliasdomene %s er ugyldig",
+        "alias_empty": "Aliasadresse kan ikke være tom",
+        "alias_goto_identical": "Alias og gå-til-adresse kan ikke være identiske",
+        "alias_invalid": "Aliasadresse %s er ugyldig",
+        "aliasd_targetd_identical": "Aliasdomene kan ikke være likt som måldomene: %s",
+        "aliases_in_use": "Max. aliaser må være større enn eller det samme som %d",
+        "app_name_empty": "App-navn kan ikke være tomt",
+        "app_passwd_id_invalid": "App-passord ID %s ugyldig",
+        "bcc_empty": "BCC-destinasjon kan ikke være tom",
+        "bcc_exists": "En BCC-mapping %s eksisterer for type %s",
+        "comment_too_long": "Kommentar for lang, maks 160 tegn tillatt",
+        "cors_invalid_method": "Ugyldig Allow-Method spesifisert",
+        "cors_invalid_origin": "Ugyldig Allow-Origin angitt",
+        "defquota_empty": "Standardkvote pr. postboks kan ikke være 0.",
+        "demo_mode_enabled": "Demomodus er aktivert",
+        "description_invalid": "Ressursbeskrivelse for %s er ugyldig",
+        "dkim_domain_or_sel_invalid": "DKIM-domene eller selector ugyldig: %s",
+        "domain_cannot_match_hostname": "Domenet kan ikke være det samme som vertsnavnet",
+        "domain_exists": "Domenet %s eksisterer allerede",
+        "domain_invalid": "Domenenavn er tomt eller ugyldig",
+        "domain_not_empty": "Kan ikke fjerne ikke-tomt domene %s",
+        "domain_not_found": "Domene %s ikke funnet",
+        "extended_sender_acl_denied": "manglende ACL for å angi ekstern avsenderadresse",
+        "extra_acl_invalid": "Ekstern avsenderadresse \"%s\" er ugyldig",
+        "extra_acl_invalid_domain": "Ekstern avsenderadresse \"%s\" bruker et ugyldig domene",
+        "fido2_verification_failed": "FIDO2-verifisering feilet: %s",
+        "file_open_error": "Fil kan ikke åpnes for skriving",
+        "filter_type": "Feil filtertype",
+        "global_filter_write_error": "Kunne ikke skrive filterfil: %s",
+        "global_map_invalid": "Global mapping-ID %s ugyldig",
+        "global_map_write_error": "Kunne ikke skrive global mapping-ID %s: %s",
+        "goto_empty": "En aliasadresse må inneholde minst en gyldig gå-til-adresse",
+        "goto_invalid": "Gå-til-adresse %s er ugyldig",
+        "ham_learn_error": "Ham-læringsfeil: %s",
+        "imagick_exception": "Feil: Imagick-avvik under lesing av bilde",
+        "img_invalid": "Kan ikke validere bildefil",
+        "img_tmp_missing": "Kan ikke validere bildefil: Midlertidig fil ikke funnet",
+        "invalid_bcc_map_type": "Ugyldig BCC-mappingtype",
+        "invalid_destination": "Målformat \"%s\" er ugyldig",
+        "invalid_filter_type": "Ugyldig filtertype",
+        "invalid_host": "Ugyldig vert angitt: %s",
+        "invalid_mime_type": "Ugyldig mime-type",
+        "invalid_nexthop": "\"Next hop\"-format er ugyldig",
+        "img_dimensions_exceeded": "Bildet overskriver maksimal bildestørrelse",
+        "img_size_exceeded": "Bildet overskrider maksimal filstørrelse"
+    }
+}

+ 6 - 6
data/web/lang/lang.nl-nl.json

@@ -185,7 +185,7 @@
         "filter_table": "Filtertabel",
         "forwarding_hosts": "Forwarding hosts",
         "forwarding_hosts_add_hint": "Het is mogelijk om IPv4- of IPv6-adressen, netwerken in CIDR-notatie, hostnames (worden omgezet naar IP-adressen) of domeinnamen (worden tevens omgezet naar IP-adressen of, bij gebrek daaraan, MX-records) op te geven.",
-        "forwarding_hosts_hint": "Inkomende berichten worden onvoorwaardelijk geaccepteerd vanaf iedere host hieronder vermeld. Deze hosts worden hierdoor niet gecontroleerd op DNSBLs, en zullen de greylisting omzeilen. Spam wordt daarentegen zoals gebruikelijk in de spamfolder geplaatst. Dit wordt vaak gebruikt om mailservers te specificeren die forwarden naar deze Mailcow-server.",
+        "forwarding_hosts_hint": "Inkomende berichten worden onvoorwaardelijk geaccepteerd vanaf iedere host hieronder vermeld. Deze hosts worden hierdoor niet gecontroleerd op DNSBLs, en zullen de greylisting omzeilen. Spam wordt daarentegen zoals gebruikelijk in de spamfolder geplaatst. Dit wordt vaak gebruikt om mailservers te specificeren die alles doorsturen naar deze Mailcow-server.",
         "from": "Afzender",
         "generate": "genereer",
         "guid": "Identificatienummer - GUID",
@@ -295,7 +295,7 @@
         "to_top": "Naar boven",
         "transport_dest_format": "Voorbeeld: example.org, .example.org, *, mailbox@example.org (meerdere waarden zijn kommagescheiden)",
         "transport_maps": "Transport-maps",
-        "transports_hint": "→ Een transport-map wordt boven een afzendergebonden transport-map verkozen.<br>→ Het uitgaande versleutelingsbeleid van individuele gebruikers wordt genegeerd en kan uitsluitend worden gehandhaafd doormiddel van globaal versleutelingsbeleid.<br>→ De transportservice is altijd \"smtp:\" en zal daarom met TLS proberen te verbinden. Wrapped TLS (SMTPS) wordt niet ondersteund.<br>→ Adressen overeenkomend met \"/localhost$/\" zullen altijd via \"local:\" getransporteerd worden, hierdoor zullen \"*\"-bestemmingen niet van toepassing zijn op deze adressen.<br>→ Om de aanmeldingsgegevens van een (voorbeeld) nexthop \"[host]:25\" te bepalen, zoekt Postfix <b>altijd</b> naar \"nexthop\" voodat er wordt gekeken naar \"[nexthop]:25\". Dit maakt het onmogelijk om \"nexthop\" en \"[nexthop]:25\" tegelijkertijd te gebruiken.",
+        "transports_hint": "→ Een transport-map wordt boven een afzendergebonden transport-map verkozen.<br>→ Het uitgaande versleutelingsbeleid van individuele gebruikers wordt genegeerd en kan uitsluitend worden gehandhaafd door middel van globaal versleutelingsbeleid.<br>→ De transportservice is altijd \"smtp:\" en zal daarom met TLS proberen te verbinden. Wrapped TLS (SMTPS) wordt niet ondersteund.<br>→ Adressen overeenkomend met \"/localhost$/\" zullen altijd via \"local:\" getransporteerd worden, hierdoor zullen \"*\"-bestemmingen niet van toepassing zijn op deze adressen.<br>→ Om de aanmeldingsgegevens van een (voorbeeld) nexthop \"[host]:25\" te bepalen, zoekt Postfix <b>altijd</b> naar \"nexthop\" voodat er wordt gekeken naar \"[nexthop]:25\". Dit maakt het onmogelijk om \"nexthop\" en \"[nexthop]:25\" tegelijkertijd te gebruiken.",
         "ui_footer": "Footer (HTML toegestaan)",
         "ui_header_announcement": "Aankondigingen",
         "ui_header_announcement_active": "Activeer aankondiging",
@@ -473,7 +473,7 @@
         "history_all_servers": "Geschiedenis (alle servers)",
         "in_memory_logs": "Geheugenlogs",
         "jvm_memory_solr": "JVM-geheugengebruik",
-        "log_info": "<p>Mailcows <b>geheugenlogs</b> worden elke minuut afgesneden naar maximaal %d regels (LOG_LINES) om de stabiliteit te garanderen.<br>Geheugenlogs zijn niet bedoeld om bewaard te blijven. Alle applicaties die geheugenlogs schrijven worden ook naar het Docker-proces gelogd.<br>De geheugenlogs kunnen gebruikt worden voor het oplossen van problemen met bepaalde containers.</p><p><b>Externe logs</b> worden verzameld doormiddel van de API van deze applicaties.</p><p><b>Statische logs</b> zijn activiteitenlogs die niet naar het Docker-proces worden gelogd, maar wel bewaard moeten blijven (uitgezonderd API-logs).</p>",
+        "log_info": "<p>Mailcows <b>geheugenlogs</b> worden elke minuut afgesneden naar maximaal %d regels (LOG_LINES) om de stabiliteit te garanderen.<br>Geheugenlogs zijn niet bedoeld om bewaard te blijven. Alle applicaties die geheugenlogs schrijven worden ook naar het Docker-proces gelogd.<br>De geheugenlogs kunnen gebruikt worden voor het oplossen van problemen met bepaalde containers.</p><p><b>Externe logs</b> worden verzameld door middel van de API van deze applicaties.</p><p><b>Statische logs</b> zijn activiteitenlogs die niet naar het Docker-proces worden gelogd, maar wel bewaard moeten blijven (uitgezonderd API-logs).</p>",
         "logs": "Logs",
         "restart_container": "Herstart",
         "solr_dead": "Solr is uitgeschakeld, uitgevallen of nog bezig met opstarten.",
@@ -510,7 +510,7 @@
         "cname_from_a": "Waarde afgeleid van een A- of AAAA-vermelding.",
         "dns_records": "DNS-configuratie",
         "dns_records_24hours": "Houd er rekening mee dat wijzigingen aan DNS tot wel 24 uur in beslag kunnen nemen voordat ze op deze pagina worden weergegeven. Deze informatie is bedoeld om gemakkelijk te bekijken of de DNS-configuratie aan de eisen voldoet.",
-        "dns_records_docs": "Raadpleeg ook <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">de documentatie</a>.",
+        "dns_records_docs": "Raadpleeg ook <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">de documentatie</a>.",
         "dns_records_data": "Correcte gegevens",
         "dns_records_name": "Naam",
         "dns_records_status": "Huidige staat",
@@ -684,7 +684,7 @@
         "add_tls_policy_map": "Voeg versleutelingsbeleid toe",
         "address_rewriting": "Adresomleidingen",
         "alias": "Alias",
-        "alias_domain_alias_hint": "Aliassen worden <b>niet</b> automatisch toegepast op domeinaliassen. Aliasadres <code>alias@domein</code> dekt het adres <code>alias@alias-domein</code> <b>niet</b> (waarbij \"alias-domein\" een aliasdomein is voor \"domein\").<br>Gebruik een filter om mail te forwarden naar een externe mailbox (zie het tabje \"Filters\" of gebruik SOGo -> Doorsturen).",
+        "alias_domain_alias_hint": "Aliassen worden <b>niet</b> automatisch toegepast op domeinaliassen. Aliasadres <code>alias@domein</code> dekt het adres <code>alias@alias-domein</code> <b>niet</b> (waarbij \"alias-domein\" een aliasdomein is voor \"domein\").<br>Gebruik een filter om mail door te sturen naar een externe mailbox (zie het tabje \"Filters\" of gebruik SOGo -> Doorsturen).",
         "alias_domain_backupmx": "Aliasdomein inactief voor geforward domein",
         "aliases": "Aliassen",
         "allow_from_smtp": "Sta enkel de volgende IP-adressen toe voor <b>SMTP</b>",
@@ -694,7 +694,7 @@
         "bcc": "BCC",
         "bcc_destination": "BCC-bestemming",
         "bcc_destinations": "BCC-bestemmingen",
-        "bcc_info": "BCC-maps worden gebruikt om kopieën van alle berichten naar een ander adres te forwarden.<br>Wees er van bewust dat er geen melding wordt gedaan van een mislukte aflevering.",
+        "bcc_info": "BCC-maps worden gebruikt om kopieën van alle berichten naar een ander adres door te sturen.<br>Wees er van bewust dat er geen melding wordt gedaan van een mislukte aflevering.",
         "bcc_local_dest": "Lokale bestemming",
         "bcc_map": "BCC-map",
         "bcc_map_type": "BCC-type",

+ 44 - 40
data/web/lang/lang.pt-br.json

@@ -1,6 +1,6 @@
 {
     "acl": {
-        "alias_domains": "Adicionar domínios alternativos",
+        "alias_domains": "Adicionar domínios alias",
         "app_passwds": "Gerenciar senhas de aplicativos",
         "bcc_maps": "Mapas BCC",
         "delimiter_action": "Ação delimitadora",
@@ -28,7 +28,7 @@
         "spam_score": "Pontuação de spam",
         "syncjobs": "Trabalhos de sincronização",
         "tls_policy": "Política de TLS",
-        "unlimited_quota": "Cota ilimitada para mailbox"
+        "unlimited_quota": "Cota ilimitada para mailboxes"
     },
     "add": {
         "activate_filter_warn": "Todos os outros filtros serão desativados quando a opção ativa estiver marcada.",
@@ -480,7 +480,9 @@
         "username_invalid": "O nome de usuário %s não pode ser usado",
         "validity_missing": "Por favor, atribua um período de validade",
         "value_missing": "Forneça todos os valores",
-        "yotp_verification_failed": "Falha na verificação do Yubico OTP: %s"
+        "yotp_verification_failed": "Falha na verificação do Yubico OTP: %s",
+        "img_dimensions_exceeded": "A imagem excede o tamanho máximo",
+        "img_size_exceeded": "A imagem excede o tamanho máximo"
     },
     "datatables": {
         "collapse_all": "Recolher tudo",
@@ -554,7 +556,7 @@
         "dns_records": "Registros DNS",
         "dns_records_24hours": "Observe que as alterações feitas no DNS podem levar até 24 horas para que seu estado atual seja refletido corretamente nesta página. O objetivo é uma forma de você ver facilmente como configurar seus registros DNS e verificar se todos os seus registros estão armazenados corretamente no DNS.",
         "dns_records_data": "Dados corretos",
-        "dns_records_docs": "Consulte também <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">a documentação</a>.",
+        "dns_records_docs": "Consulte também <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">a documentação</a>.",
         "dns_records_name": "Nome",
         "dns_records_status": "Estado atual",
         "dns_records_type": "Tipo",
@@ -609,6 +611,7 @@
         "extended_sender_acl_info": "Uma chave de domínio DKIM deve ser importada, se disponível. <br>\r\n Lembre-se de adicionar esse servidor ao registro TXT SPF correspondente. <br>\r\n Sempre que um domínio ou domínio de alias é adicionado a esse servidor, que se sobrepõe a um endereço externo, o endereço externo é removido. <br>\r\n Use @domain .tld para permitir o envio como * @domain .tld.",
         "force_pw_update": "Forçar a atualização da senha no próximo login",
         "force_pw_update_info": "Esse usuário só poderá fazer login em %s. As senhas do aplicativo permanecem utilizáveis.",
+        "footer_exclude": "Excluir do rodapé",
         "full_name": "Nome completo",
         "gal": "Lista de endereços global",
         "gal_info": "A GAL contém todos os objetos de um domínio e não pode ser editada por nenhum usuário. Faltam informações de disponibilidade no SoGo, se desativadas! <b>Reinicie o SoGo para aplicar as alterações.</b>",
@@ -624,10 +627,10 @@
         "mailbox_relayhost_info": "Aplicado somente à caixa de correio e aos aliases diretos, substitui um host de retransmissão de domínio.",
         "max_aliases": "Máximo de aliases",
         "max_mailboxes": "Número máximo de mailboxes possíveis",
-        "max_quota": "Cota máxima por caixa de correio (MiB)",
+        "max_quota": "Cota máxima por mailbox (MiB)",
         "maxage": "Duração máxima das mensagens em dias que serão pesquisadas remotamente <br><small>(0 = ignorar a idade</small>)",
         "maxbytespersecond": "Máximo de bytes por segundo <br><small>(0 = ilimitado</small>)",
-        "mbox_rl_info": "Esse limite de taxa é aplicado ao nome de login do SASL e corresponde a qualquer endereço “de” usado pelo usuário conectado. Um limite de taxa de caixa de correio substitui um limite de taxa em todo o domínio.",
+        "mbox_rl_info": "Esse limite de taxa é aplicado ao nome de login do SASL e corresponde a qualquer endereço “de” usado pelo usuário conectado. Um limite de taxa de mailbox substitui um limite de taxa em todo o domínio.",
         "mins_interval": "Intervalo (min)",
         "multiple_bookings": "Várias reservas",
         "none_inherit": "Nenhum/Herdar",
@@ -654,7 +657,7 @@
         "ratelimit": "Limite de taxa",
         "redirect_uri": "URL de redirecionamento/retorno de chamada",
         "relay_all": "Retransmita todos os destinatários",
-        "relay_all_info": "↪ Se você optar por <b>não</b> retransmitir todos os destinatários, precisará adicionar uma caixa de correio (“cega”) para cada destinatário que deve ser retransmitido.",
+        "relay_all_info": "↪ Se você optar por <b>não</b> retransmitir todos os destinatários, precisará adicionar uma mailbox (“cega”) para cada destinatário que deve ser retransmitido.",
         "relay_domain": "Retransmitir este domínio",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Informações</div> Você pode definir mapas de transporte para um destino personalizado para esse domínio. Se não for definido, uma pesquisa MX será feita.",
         "relay_unknown_only": "Retransmita somente mailboxes não existentes. As caixas de mailboxes serão entregues localmente.",
@@ -665,14 +668,14 @@
         "scope": "Escopo",
         "sender_acl": "Permitir enviar como",
         "sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">A verificação do remetente está desativada</span>",
-        "sender_acl_info": "Se o usuário A da caixa de correio tiver permissão para enviar como usuário B da caixa de correio, o endereço do remetente não será exibido automaticamente como campo “de” selecionável no SoGo. <br>\r\n O usuário B da caixa de correio precisa criar uma delegação no SoGo para permitir que o usuário A da caixa de correio selecione seu endereço como remetente. Para delegar uma caixa de correio no SoGo, use o menu (três pontos) à direita do nome da sua caixa de correio no canto superior esquerdo enquanto estiver na visualização de e-mail. Esse comportamento não se aplica a endereços de alias.",
+        "sender_acl_info": "Se o usuário A da mailbox tiver permissão para enviar como usuário B da mailbox, o endereço do remetente não será exibido automaticamente como campo “de” selecionável no SoGo. <br>\n O usuário B da mailbox precisa criar uma delegação no SoGo para permitir que o usuário A da mailbox selecione seu endereço como remetente. Para delegar uma mailbox no SoGo, use o menu (três pontos) à direita do nome da sua caixa de correio no canto superior esquerdo enquanto estiver na visualização de e-mail. Esse comportamento não se aplica a endereços de alias.",
         "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 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 caixa de correio local). Se estiver oculto, um alias não aparecerá como remetente selecioná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 branca/negra",
@@ -688,7 +691,7 @@
         "username": "Nome de usuário",
         "validate_save": "Valide e salve",
         "custom_attributes": "Atributos personalizados",
-        "mbox_exclude": "Excluir mailboxes"
+        "domain_footer_skip_replies": "Ignore o rodapé nos e-mails de resposta"
     },
     "fido2": {
         "confirm": "Confirme",
@@ -724,7 +727,7 @@
         "administration": "Configuração e detalhes",
         "apps": "Aplicativos",
         "debug": "Informações",
-        "email": "Correio eletrônico",
+        "email": "E-mail",
         "mailcow_system": "Sistema",
         "mailcow_config": "Configuração",
         "quarantine": "Quarentena",
@@ -741,7 +744,7 @@
         "delayed": "O login foi atrasado em %s segundos.",
         "fido2_webauthn": "Login do FIDO2/WebAuthn",
         "login": "Login",
-        "mobileconfig_info": "Faça login como usuário da caixa de correio para baixar o perfil de conexão Apple solicitado.",
+        "mobileconfig_info": "Faça login como usuário da mailbox para baixar o perfil de conexão Apple solicitado.",
         "other_logins": "Login com chave",
         "password": "Senha",
         "username": "Nome de usuário"
@@ -758,16 +761,16 @@
         "add_domain_alias": "Adicionar alias de domínio",
         "add_domain_record_first": "Por favor, adicione um domínio primeiro",
         "add_filter": "Adicionar filtro",
-        "add_mailbox": "Adicionar caixa de correio",
+        "add_mailbox": "Adicionar mailbox",
         "add_recipient_map_entry": "Adicionar mapa do destinatário",
         "add_resource": "Adicionar recurso",
         "add_template": "Adicionar modelo",
         "add_tls_policy_map": "Adicionar mapa de política TLS",
         "address_rewriting": "Reescrita de endereço",
-        "alias": "Pseudônimo",
-        "alias_domain_alias_hint": "Os aliases <b>não</b> são aplicados automaticamente aos aliases de domínio. Um endereço de alias <code>my-alias @domain</code> <b>não</b> cobre o endereço <code>my-alias @alias -domain (onde “alias-domain” é um domínio</code> de alias imaginário para “domain”). <br>Use um filtro de peneira para redirecionar e-mails para uma caixa de correio externa (consulte a guia “Filtros” ou use SoGo -> Forwarder). Use “Expandir alias em domínios de alias” para adicionar automaticamente os aliases ausentes.",
+        "alias": "Alias",
+        "alias_domain_alias_hint": "Os aliases <b>não</b> são aplicados automaticamente aos aliases de domínio. Um endereço de alias <code>my-alias@domain</code> <b>não</b> cobre o endereço <code>my-alias@alias -domain</code> (onde “alias-domain” é um domínio de alias imaginário para “domain”). <br>Use um filtro para redirecionar e-mails para uma mailbox externa (consulte a guia “Filtros” ou use SoGo -> Forwarder). Use “Expandir alias em domínios de alias” para adicionar automaticamente os aliases ausentes.",
         "alias_domain_backupmx": "Domínio de alias inativo para domínio de retransmissão",
-        "aliases": "Pseudônimos",
+        "aliases": "Aliases",
         "all_domains": "Todos os domínios",
         "allow_from_smtp": "<b>Permita que esses IPs usem apenas SMTP</b>",
         "allow_from_smtp_info": "Deixe em branco para permitir todos os remetentes. Endereços e <br>redes IPv4/IPv6.",
@@ -829,16 +832,16 @@
         "last_pw_change": "Última alteração de senha",
         "last_run": "Última corrida",
         "last_run_reset": "Programe a seguir",
-        "mailbox": "Caixa de correio",
+        "mailbox": "Mailbox",
         "mailbox_defaults": "Configurações padrão",
         "mailbox_defaults_info": "Defina as configurações padrão para novas mailboxes.",
-        "mailbox_defquota": "Tamanho padrão da caixa de correio",
-        "mailbox_templates": "Modelos de caixa de correio",
-        "mailbox_quota": "Tamanho máximo de uma caixa de correio",
-        "mailboxes": "mailboxes",
+        "mailbox_defquota": "Tamanho padrão da mailbox",
+        "mailbox_templates": "Modelos de mailbox",
+        "mailbox_quota": "Tamanho máximo de uma mailbox",
+        "mailboxes": "Mailboxes",
         "max_aliases": "Máximo de aliases",
         "max_mailboxes": "Número máximo de mailboxes possíveis",
-        "max_quota": "Cota máxima por caixa de correio",
+        "max_quota": "Cota máxima por mailbox",
         "mins_interval": "Intervalo (min)",
         "msg_num": "Mensagem #",
         "multiple_bookings": "Várias reservas",
@@ -895,7 +898,7 @@
         "syncjob_EXIT_CONNECTION_FAILURE": "Problema de conexão",
         "syncjob_EXIT_TLS_FAILURE": "Problema com conexão criptografada",
         "syncjob_EXIT_AUTHENTICATION_FAILURE": "Problema de autenticação",
-        "syncjob_EXIT_OVERQUOTA": "A caixa de correio de destino está acima da cota",
+        "syncjob_EXIT_OVERQUOTA": "A mailbox de destino está acima da cota",
         "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",
         "table_size": "Tamanho da mesa",
@@ -922,7 +925,7 @@
         "yes": "✓"
     },
     "oauth2": {
-        "access_denied": "Faça login como proprietário da caixa de correio para conceder acesso via OAuth2.",
+        "access_denied": "Faça login como proprietário da mailbox para conceder acesso via OAuth2.",
         "authorize_app": "Autorizar aplicativo",
         "deny": "Negar",
         "permit": "Autorizar aplicativo",
@@ -938,7 +941,7 @@
         "confirm_delete": "Confirme a exclusão desse elemento.",
         "danger": "Perigo",
         "deliver_inbox": "Entregar na caixa de entrada",
-        "disabled_by_config": "A configuração atual do sistema desativa a funcionalidade de quarentena. Defina “retenções por caixa de correio” e um “tamanho máximo” para os elementos de quarentena.",
+        "disabled_by_config": "A configuração atual do sistema desativa a funcionalidade de quarentena. Defina “retenções por mailbox” e um “tamanho máximo” para os elementos de quarentena.",
         "download_eml": "Baixar (.eml)",
         "empty": "Sem resultados",
         "high_danger": "Alto",
@@ -951,7 +954,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 salvará as mensagens rejeitadas no banco de dados (o remetente <em>não</em> 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 caixa de correio.\r\n <br>“Aprenda como spam e exclua” aprenderá uma mensagem como spam por meio do teorema bayesiano e também calculará hashes difusos para negar mensagens semelhantes no futuro.\r\n <br>Esteja ciente de que aprender várias mensagens pode ser demorado, dependendo do seu sistema. <br>Os elementos da lista negra são excluídos da quarentena.",
+        "qinfo": "O sistema de quarentena salvará as mensagens rejeitadas no banco de dados (o remetente <em>não</em> 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 <br>“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 <br>Esteja ciente de que aprender várias mensagens pode ser demorado, dependendo do seu sistema. <br>Os elementos da lista negra são excluídos da quarentena.",
         "qitem": "Item de quarentena",
         "quarantine": "Quarentena",
         "quick_actions": "Ações",
@@ -1010,7 +1013,7 @@
         "help": "Mostrar/ocultar painel de ajuda",
         "imap_smtp_server_auth_info": "Use seu endereço de e-mail completo e o mecanismo de autenticação PLAIN. <br>\r\nSeus dados de login serão criptografados pela criptografia obrigatória do lado do servidor.",
         "mailcow_apps_detail": "Use um aplicativo mailcow para acessar seus e-mails, calendário, contatos e muito mais.",
-        "mailcow_panel_detail": "<b>Os administradores de domínio</b> criam, modificam ou excluem mailboxes e aliases, alteram domínios e leem mais informações sobre seus domínios atribuídos. <br>\n<b>Os usuários de caixas de correio</b> podem criar aliases com limite de tempo (aliases de spam), alterar suas configurações de senha e filtro de spam."
+        "mailcow_panel_detail": "<b>Os administradores de domínio</b> criam, modificam ou excluem mailboxes e aliases, alteram domínios e leem mais informações sobre seus domínios atribuídos. <br>\n<b>Os usuários de mailbox </b> podem criar aliases com limite de tempo (aliases de spam), alterar suas configurações de senha e filtro de spam."
     },
     "success": {
         "acl_saved": "ACL para o objeto %s salvo",
@@ -1062,9 +1065,9 @@
         "learned_ham": "Identificação %s como ham aprendida com sucesso",
         "license_modified": "As alterações na licença foram salvas",
         "logged_in_as": "Conectado como %s",
-        "mailbox_added": "A caixa de correio %s foi adicionada",
-        "mailbox_modified": "As alterações na caixa de correio %s foram salvas",
-        "mailbox_removed": "A caixa de correio %s foi removida",
+        "mailbox_added": "A mailbox %s foi adicionada",
+        "mailbox_modified": "As alterações na mailbox %s foram salvas",
+        "mailbox_removed": "A mailbox %s foi removida",
         "nginx_reloaded": "O Nginx foi recarregado",
         "object_modified": "As alterações no objeto %s foram salvas",
         "password_policy_saved": "A política de senha foi salva com sucesso",
@@ -1077,7 +1080,7 @@
         "relayhost_removed": "A entrada de mapa %s foi removida",
         "reset_main_logo": "Redefinir para o logotipo padrão",
         "resource_added": "O recurso %s foi adicionado",
-        "resource_modified": "As alterações na caixa de correio %s foram salvas",
+        "resource_modified": "As alterações na mailbox %s foram salvas",
         "resource_removed": "O recurso %s foi removido",
         "rl_saved": "Limite de taxa para o objeto %s salvo",
         "rspamd_ui_pw_set": "Senha do Rspamd UI definida com sucesso",
@@ -1123,14 +1126,15 @@
         "webauthn": "Autenticação WebAuthn",
         "waiting_usb_auth": "<i>Aguardando o dispositivo USB...</i> <br><br>Toque no botão no seu dispositivo USB agora.",
         "waiting_usb_register": "<i>Aguardando o dispositivo USB...</i> <br><br>Digite sua senha acima e confirme seu registro tocando no botão no seu dispositivo USB.",
-        "yubi_otp": "Autenticação Yubico OTP"
+        "yubi_otp": "Autenticação Yubico OTP",
+        "authenticators": "Autenticadores"
     },
     "user": {
         "action": "Ação",
         "active": "Ativo",
         "active_sieve": "Filtro ativo",
         "advanced_settings": "Configurações avançadas",
-        "alias": "Pseudônimo",
+        "alias": "Alias",
         "alias_create_random": "Gere um alias aleatório",
         "alias_extend_all": "Estenda os aliases em 1 hora",
         "alias_full_date": "D.M.Y., H: S T",
@@ -1147,7 +1151,7 @@
         "apple_connection_profile": "Perfil de conexão da Apple",
         "apple_connection_profile_complete": "Esse perfil de conexão inclui parâmetros IMAP e SMTP, bem como caminhos CalDAV (calendários) e CardDAV (contatos) para um dispositivo Apple.",
         "apple_connection_profile_mailonly": "Esse perfil de conexão inclui parâmetros de configuração IMAP e SMTP para um dispositivo Apple.",
-        "apple_connection_profile_with_app_password": "Uma nova senha de aplicativo é gerada e adicionada ao perfil para que nenhuma senha precise ser inserida ao configurar seu dispositivo. Não compartilhe o arquivo, pois ele concede acesso total à sua caixa de correio.",
+        "apple_connection_profile_with_app_password": "Uma nova senha de aplicativo é gerada e adicionada ao perfil para que nenhuma senha precise ser inserida ao configurar seu dispositivo. Não compartilhe o arquivo, pois ele concede acesso total à sua mailbox.",
         "change_password": "Alterar senha",
         "change_password_hint_app_passwords": "Sua conta tem %d senhas de aplicativos que não serão alteradas. Para gerenciá-las, acesse a guia Senhas do aplicativo.",
         "clear_recent_successful_connections": "Conexões bem-sucedidas e claras",
@@ -1160,7 +1164,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": "Esse usuário da caixa de correio tem <b>acesso externo direto</b> 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. <br>O botão “Webmail” fornece login único no SoGo e está sempre disponível.",
+        "direct_protocol_access": "Esse usuário da mailbox tem <b>acesso externo direto</b> 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. <br>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. <br><b>Atenção:</b> Todos os elementos serão baixados novamente!",
         "eas_reset_now": "Reinicie agora",
@@ -1187,7 +1191,7 @@
         "last_ui_login": "Último login na interface do usuário",
         "loading": "Carregando...",
         "login_history": "Histórico de login",
-        "mailbox": "Caixa de correio",
+        "mailbox": "Mailbox",
         "mailbox_details": "Detalhes",
         "mailbox_general": "Geral",
         "mailbox_settings": "Configurações",
@@ -1239,7 +1243,7 @@
         "spamfilter": "Filtro de spam",
         "spamfilter_behavior": "Avaliação",
         "spamfilter_bl": "Lista negra",
-        "spamfilter_bl_desc": "Endereços de e-mail na lista negra para <b>sempre</b> serem classificados como spam e rejeitados. E-mails rejeitados <b>não</b> 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 caixa de correio.",
+        "spamfilter_bl_desc": "Endereços de e-mail na lista negra para <b>sempre</b> serem classificados como spam e rejeitados. E-mails rejeitados <b>não</b> 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”.",
@@ -1251,7 +1255,7 @@
         "spamfilter_table_remove": "remover",
         "spamfilter_table_rule": "Regra",
         "spamfilter_wl": "Lista branca",
-        "spamfilter_wl_desc": "Os endereços de e-mail incluídos na lista branca são programados para <b>nunca</b> serem classificados como spam. 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 caixa de correio.",
+        "spamfilter_wl_desc": "Os endereços de e-mail incluídos na lista branca são programados para <b>nunca</b> 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",
@@ -1261,7 +1265,7 @@
         "syncjob_EXIT_CONNECTION_FAILURE": "Problema de conexão",
         "syncjob_EXIT_TLS_FAILURE": "Problema com conexão criptografada",
         "syncjob_EXIT_AUTHENTICATION_FAILURE": "Problema de autenticação",
-        "syncjob_EXIT_OVERQUOTA": "A caixa de correio de destino está acima da cota",
+        "syncjob_EXIT_OVERQUOTA": "A mailbox de destino está acima da cota",
         "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",
@@ -1275,7 +1279,7 @@
         "tls_enforce_in": "Imponha a entrada de TLS",
         "tls_enforce_out": "Imponha a saída TLS",
         "tls_policy": "Política de criptografia",
-        "tls_policy_warning": "<strong>Aviso:</strong> Se você decidir impor a transferência de e-mail criptografada, poderá perder e-mails. <br>As mensagens que não satisfizerem a política serão devolvidas com uma falha grave pelo sistema de correio. <br>Essa opção se aplica ao seu endereço de e-mail principal (nome de login), a todos os endereços derivados de domínios de alias, bem como aos endereços de alias <b>com apenas essa única caixa de correio</b> como destino.",
+        "tls_policy_warning": "<strong>Aviso:</strong> Se você decidir impor a transferência de e-mail criptografada, poderá perder e-mails. <br>As mensagens que não satisfizerem a política serão devolvidas com uma falha grave pelo sistema de correio. <br>Essa opção se aplica ao seu endereço de e-mail principal (nome de login), a todos os endereços derivados de domínios de alias, bem como aos endereços de alias <b>com apenas essa única mailbox </b> como destino.",
         "user_settings": "Configurações do usuário",
         "username": "Nome de usuário",
         "verify": "Verificar",

+ 7 - 7
data/web/lang/lang.pt-pt.json

@@ -12,7 +12,7 @@
         "domain_quota_m": "Total de espaço por domínio (MiB):",
         "full_name": "Nome:",
         "mailbox_quota_m": "Máximo espaço por conta (MiB):",
-        "mailbox_username": "Usuário (primeira parte do endereço de email):",
+        "mailbox_username": "Utilizador (primeira parte do endereço de email):",
         "max_aliases": "Máximo de apelidos:",
         "max_mailboxes": "Máximo de contas:",
         "password": "Senha:",
@@ -96,7 +96,7 @@
         "sender_acl_invalid": "Campo Sender ACL é inválido",
         "target_domain_invalid": "O endereço de Domínio Destino é inválido",
         "targetd_not_found": "Domínio de Destino não encontrado",
-        "username_invalid": "Nome de usuário inválido",
+        "username_invalid": "Nome de utilizador inválido",
         "validity_missing": "Você deve definir um período de validade"
     },
     "edit": {
@@ -138,7 +138,7 @@
         "administration": "Administração",
         "email": "E-Mail",
         "mailcow_config": "Configuração",
-        "user_settings": "Configurações do usuário"
+        "user_settings": "Configurações do utilizador"
     },
     "info": {
         "no_action": "Nenhuma ação foi definida"
@@ -147,7 +147,7 @@
         "delayed": "Sua entrada será atrasada por %s segundos.",
         "login": "Entrar",
         "password": "Senha",
-        "username": "Usuário"
+        "username": "Utilizador"
     },
     "mailbox": {
         "action": "Ação",
@@ -186,7 +186,7 @@
         "target_domain": "Domínio Destino",
         "tls_enforce_in": "Forçar TLS na entrada",
         "tls_enforce_out": "Forçar TLS na saída",
-        "username": "Usuário"
+        "username": "Utilizador"
     },
     "quarantine": {
         "action": "Ação",
@@ -199,7 +199,7 @@
         "help": "Mostrar/Ocultar painel de ajuda",
         "imap_smtp_server_auth_info": "Utilize o endereço de email completo com o método de autentucação PLAIN.<br>\r\nOs dados de login serão encryptados pelo servidor.",
         "mailcow_apps_detail": "Use um mailcow app para acessar seus emails, calendário, contatos e outras informações.",
-        "mailcow_panel_detail": "<b>Administradores:</b> podem criar, alterar ou apagar contas e apelidos , alterar domínios e outras informações de seus domínios atribuídos.<br>\r\n\t<b>Usuários:</b> podem criar apelidos por tempo determinado , alterar senha e configuração do nível do filtro de spam."
+        "mailcow_panel_detail": "<b>Administradores:</b> podem criar, alterar ou apagar contas e apelidos , alterar domínios e outras informações de seus domínios atribuídos.<br>\r\n\t<b>utilizadors:</b> podem criar apelidos por tempo determinado , alterar senha e configuração do nível do filtro de spam."
     },
     "success": {
         "admin_modified": "Administrador alterado com sucesso",
@@ -267,7 +267,7 @@
         "tls_enforce_out": "Forçar TLS na saída",
         "tls_policy": "Regras de Encryptação",
         "tls_policy_warning": "<strong>Aviso:</strong> Se você selecionar para forçar o envio encryptado , alguns emails poderão ser rejeitados.<br>Mensages que não satisfizerem as politicas dos outros servidores serão rejeitadas definitivamente.",
-        "user_settings": "Configurações do usuário",
+        "user_settings": "Configurações do utilizador",
         "username": "Administrador",
         "week": "Semana",
         "weeks": "Semanas"

+ 1 - 1
data/web/lang/lang.ro-ro.json

@@ -504,7 +504,7 @@
         "cname_from_a": "Valoare derivată din înregistrarea A/AAAA. Acest lucru este acceptat atâta timp cât înregistrarea indică resursele corecte.",
         "dns_records": "Înregistrări DNS",
         "dns_records_24hours": "Rețineți că modificările aduse DNS-ului pot dura până la 24 de ore pentru a reflecta corect starea lor curentă pe această pagină. Acest mecanism este conceput ca o modalitate să vezi ușor cum să îți configurezi înregistrările DNS și să verifici dacă toate înregistrările sunt stocate corect în DNS.",
-        "dns_records_docs": "Vă rugăm să consultați și <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">documentația</a>.",
+        "dns_records_docs": "Vă rugăm să consultați și <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">documentația</a>.",
         "dns_records_data": "Date corecte",
         "dns_records_name": "Nume",
         "dns_records_status": "Stare curentă",

+ 4 - 2
data/web/lang/lang.ru-ru.json

@@ -504,7 +504,7 @@
         "dns_records": "Записи DNS",
         "dns_records_24hours": "Обратите внимание, что для внесения изменений в DNS может потребоваться до 24 часов, чтобы правильно отобразить их текущее состояние на этой странице. Эта страница предназначен для того, чтобы вы могли легко увидеть, как настроить записи DNS и проверить, все ли записи правильно занесены в DNS.",
         "dns_records_data": "Значение",
-        "dns_records_docs": "Пожалуйста, ознакомьтесь с <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">документацией</a>.",
+        "dns_records_docs": "Пожалуйста, ознакомьтесь с <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">документацией</a>.",
         "dns_records_name": "Название",
         "dns_records_status": "Статус",
         "dns_records_type": "Тип",
@@ -546,6 +546,7 @@
         "extended_sender_acl_info": "Для внешних доменов должен быть импортирован или сгенерирован доменный ключ DKIM с соответствующей записью TXT в домене, если внешний домен использует DMARC.<br>\r\n  Не забудьте добавить этот сервер к соответствующей записи SPF TXT внешнего домена.<br>\r\n  Добавление домена из списка внешних адресов в mailcow автоматически удалит соответствующие записи из внешних адресов пользователей.<br>\r\n  Чтобы разрешить пользователю отправку от имени *@domain.tld, укажите @domain.tld.",
         "force_pw_update": "Требовать смены пароля при следующем входе в систему",
         "force_pw_update_info": "Пользователь должен будет войти в %s и сменить свой пароль. mailcow OAuth2, SOGo, EAS, IMAP/POP3 и SMTP будут не доступны до смены пароля.",
+        "footer_exclude": "Исключить из нижнего колонтитула",
         "full_name": "Полное имя",
         "gal": "GAL - Глобальная адресная книга",
         "gal_info": "GAL содержит все объекты домена и не подлежит редактированию. Информация о занятости в SOGo будет отсутствовать для домена, если данная функция будет отключена! <b>Требуется перезапустить SOGo, чтобы применить изменения.</b>",
@@ -636,7 +637,6 @@
         "domain_footer": "Нижний колонтитул домена",
         "domain_footer_html": "HTML нижний колонтитул",
         "domain_footer_plain": "ПРОСТОЙ нижний колонтитул",
-        "mbox_exclude": "Исключить почтовые ящики",
         "custom_attributes": "Пользовательские атрибуты"
     },
     "fido2": {
@@ -1225,6 +1225,8 @@
         "session_ua": "Неверный токен формы: ошибка проверки User-Agent"
     },
     "datatables": {
+        "collapse_all": "Свернуть все",
+        "expand_all": "Развернуть все",
         "infoPostFix": ""
     }
 }

+ 1 - 1
data/web/lang/lang.si-si.json

@@ -543,7 +543,7 @@
         "dns_records": "DNS zapisi",
         "dns_records_24hours": "Prosim upoštevajte, da lahko traja do 24 ur da se spremembe v DNS pravilno prikažejo na tej strani. Namen je da lahko enostavno vidite, kako konfigurirati svoje DNS zapise in preverite ali so vaši zapisi pravilno shranjeni v DNS.",
         "dns_records_data": "Pravilni podatki",
-        "dns_records_docs": "Prosim preverite tudi <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">dokumentacijo</a>.",
+        "dns_records_docs": "Prosim preverite tudi <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">dokumentacijo</a>.",
         "dns_records_name": "Ime",
         "dns_records_status": "Trenutno stanje",
         "dns_records_type": "Vrsta",

+ 1 - 1
data/web/lang/lang.sk-sk.json

@@ -523,7 +523,7 @@
         "dns_records": "DNS záznamy",
         "dns_records_24hours": "Berte prosím do úvahy, že zmeny v DNS môžu trvať až 24 hodín, aby sa zmeny prejavili na tejto stránke. Pre jednoduchosť DNS konfigurácie môžete použiť údaje uvedené nižšie, prípadne skontrolovať tak správnosť záznamov v DNS.",
         "dns_records_data": "Správne dáta",
-        "dns_records_docs": "Pozrite si prosím <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">dokumentáciu</a>.",
+        "dns_records_docs": "Pozrite si prosím <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">dokumentáciu</a>.",
         "dns_records_name": "Meno",
         "dns_records_status": "Súčasný stav",
         "dns_records_type": "Typ",

+ 2 - 2
data/web/lang/lang.sv-se.json

@@ -60,7 +60,7 @@
         "exclude": "Exkludera objekt (regex-filter)",
         "full_name": "Fullständiga namn",
         "gal": "Global adressbok",
-        "gal_info": "Den global adressboken innehåller alla objekt i en domän och kan inte redigeras av någon användare. Informationen om tillgänglighet i SOGo är endast synlig när den globala adressboken är påslagen.  <b>Starta om SOGo för att tillämpa ändringar.</b>",
+        "gal_info": "Den global adressboken innehåller alla objekt i en domän och kan inte redigeras av någon användare. Informationen om tillgänglighet i SOGo är endast synlig när den globala adressboken är påslagen. <b>Starta om SOGo för att tillämpa ändringar.</b>",
         "generate": "generera",
         "goto_ham": "Markera detta som en <span class=\"text-success\"><b>felaktig spam-registrering</b>, detta kommer förhindra liknande fel i framtiden</span>",
         "goto_null": "Kasta e-postmeddelanande omedelbart",
@@ -473,7 +473,7 @@
         "cname_from_a": "Värde härstammar från A/AAAA-uppslaget. Detta stöds så länge som uppslaget pekar mot rätt resurs.",
         "dns_records": "DNS-uppslag",
         "dns_records_24hours": "Observera att ändringar gjorda i DNS kan ta upp till 24 timmar innan det visas korrekt på denna sida. Syftet med sidan är att enkelt se hur DNS-uppslagen är konfigurerade. Det är lätt att kontrollera att DNS-uppslagen är korrekt uppsatta.",
-        "dns_records_docs": "Se även <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">dokumentationen</a>.",
+        "dns_records_docs": "Se även <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">dokumentationen</a>.",
         "dns_records_data": "Korrektdata",
         "dns_records_name": "Namn",
         "dns_records_status": "Nuvarande status",

+ 1161 - 5
data/web/lang/lang.tr-tr.json

@@ -1,6 +1,6 @@
 {
     "acl": {
-        "alias_domains": "Alias domain ekle",
+        "alias_domains": "Takma alan adı ekle",
         "app_passwds": "Uygulama şifrelerini yönet",
         "bcc_maps": "BCC haritası",
         "delimiter_action": "Sınırlandırma işlemi",
@@ -68,7 +68,7 @@
         "goto_null": "Postaları çöpe at",
         "goto_spam": "Spam olarak<span class=\"text-danger\"><b>işaretle</b></span>",
         "hostname": "Ana sunucu",
-        "inactive": "İnaktif",
+        "inactive": "Pasif",
         "kind": "Tür",
         "mailbox_quota_def": "Varsayılan e-posta kotası",
         "mailbox_quota_m": "E-posta başına maksimum kota (MiB)",
@@ -77,7 +77,7 @@
         "max_mailboxes": "Maksimum e-posta hesabı",
         "mins_interval": "Sorgulama döngüsü (dakika)",
         "multiple_bookings": "Birden fazla rezervasyon",
-        "nexthop": "Next hop",
+        "nexthop": "Sonraki atlama",
         "password": "Şifre",
         "password_repeat": "Şifre (tekrar)",
         "port": "Port",
@@ -107,7 +107,8 @@
         "timeout2": "Yerel ana bilgisayara bağlantı için zaman aşımı",
         "username": "Kullanıcı Adı",
         "validate": "Doğrula",
-        "validation_success": "Doğrulama başarılı"
+        "validation_success": "Doğrulama başarılı",
+        "dry": "Senkronizasyonu simüle et"
     },
     "admin": {
         "action": "İşlem",
@@ -133,7 +134,223 @@
         "duplicate_dkim": "Çift DKIM kayıtları",
         "f2b_ban_time": "Yasaklama süresi (saniye)",
         "f2b_max_attempts": "Maksimum giriş denemesi",
-        "f2b_retry_window": "Maksimum girişim için deneme pencere(leri)"
+        "f2b_retry_window": "Maksimum girişim için deneme pencere(leri)",
+        "ip_check_disabled": "IP kontrolü devre dışı. Bunu <br> <strong>Sistem > Yapılandırma > Seçenekler > Özelleştir</strong> altında etkinleştirebilirsiniz.",
+        "logo_info": "Resminiz, üst gezinme çubuğu için 40 piksel yüksekliğe ve maks. başlangıç sayfası için 250 piksel genişlik. Ölçeklenebilir bir grafik şiddetle tavsiye edilir.",
+        "forwarding_hosts_add_hint": "IPv4/IPv6 adreslerini, CIDR gösterimindeki ağları, ana bilgisayar adlarını (IP adreslerine çözümlenecek) veya alan adlarını (SPF kayıtlarını veya yokluğunda MX kayıtlarını sorgulayarak IP adreslerine çözümlenecek) belirtebilirsiniz.",
+        "include_exclude_info": "Varsayılan olarak - seçim yapılmadan - <b>tüm posta kutuları</b> adreslenir",
+        "credentials_transport_warning": "<b>Uyarı</b>: Yeni bir ulaşım haritası girişi eklemek, eşleşen bir sonraki atlama sütunuyla tüm girişlerin kimlik bilgilerini güncelleyecektir.",
+        "f2b_manage_external_info": "Fail2ban yasak listeyi koruyacak fakat trafiğe engel olacak kurallar koymayacak.Trafiği dışarıdan engellemek için aşağıda oluşturulan yasak listesini kullanın.",
+        "add_settings_rule": "Ayarlar kuralı ekle",
+        "add_transports_hint": "Lütfen, varsa, kimlik doğrulama verilerinin düz metin olarak saklanacağını unutmayın.",
+        "additional_rows": " ek satırlar eklendi",
+        "admin": "Yönetici",
+        "admins": "Yöneticiler",
+        "admins_ldap": "LDAP yöneticileri",
+        "advanced_settings": "Gelişmiş ayarlar",
+        "allowed_origins": "Access-Control-Allow-Origin",
+        "cors_settings": "CORS ayarları",
+        "last_applied": "Son uygulanan",
+        "logo_normal_label": "Normal",
+        "logo_dark_label": "Karanlık moda çevir",
+        "f2b_max_ban_time": "Max. yasaklanma süresi (s)",
+        "guid": "GUID - benzersiz örnek kimliği",
+        "guid_and_license": "GUID & Lisans",
+        "copy_to_clipboard": "Metni panoya kopyala",
+        "dkim_add_key": "ARC/DKIM key ekle",
+        "dkim_domains_selector": "Seçici",
+        "dkim_from": "Gönderen",
+        "dkim_key_length": "DKIM anahtar uzunluğu (bit)",
+        "dkim_key_missing": "Anahtar eksik",
+        "dkim_key_unused": "Anahtar kullanılamaz",
+        "dkim_key_valid": "Anahtar geçerli",
+        "dkim_keys": "ARC/DKIM anahtarları",
+        "dkim_overwrite_key": "Mevcut DKIM anahtarının üzerine yaz",
+        "dkim_private_key": "Özel anahtar",
+        "f2b_ban_time_increment": "Yasaklanma süresi her engellemede artar",
+        "f2b_manage_external": "Fail2Ban'ı dışarıdan yönetin",
+        "f2b_regex_info": "Dikkate alınan günlükler: SOGo, Postfix, Dovecot, PHP-FPM.",
+        "f2b_whitelist": "Beyaz listeye alınan ağlar/ana bilgisayarlar",
+        "filter_table": "Tabloyu filtrele",
+        "forwarding_hosts": "Yönlendirme Ana Bilgisayarları",
+        "forwarding_hosts_hint": "Gelen mesajlar burada listelenen tüm ana bilgisayarlardan koşulsuz olarak kabul edilir. Bu ana bilgisayarlar daha sonra DNSBL'lere karşı kontrol edilmez veya gri listeye tabi tutulmaz. Onlardan gelen istenmeyen e-postalar asla reddedilmez, ancak isteğe bağlı olarak Önemsiz klasörüne dosyalanabilir. Bunun en yaygın kullanımı, gelen e-postaları mailcow sunucunuza ileten bir kural kurduğunuz posta sunucularını belirtmektir.",
+        "from": "Kimden",
+        "generate": "oluştur",
+        "hash_remove_info": "Bir hız sınırı karmasını (hala mevcutsa) kaldırmak, sayacını tamamen sıfırlayacaktır.<br>\n  Her karma ayrı bir renkle belirtilir.",
+        "help_text": "Oturum açma maskesinin altındaki yardım metnini geçersiz kıl (HTML'ye izin verilir)",
+        "host": "Host",
+        "html": "HTML",
+        "import": "İçe aktar",
+        "import_private_key": "Özel anahtarı içe aktar",
+        "in_use_by": "tarafından kullanımda",
+        "inactive": "Pasif",
+        "include_exclude": "Dahil et, hariç tut",
+        "includes": "Bu alıcıları dahil et",
+        "ip_check_opt_in": "Harici IP adreslerini çözümlemek için <strong>ipv4.mailcow.email</strong> ve <strong>ipv6.mailcow.email</strong> üçüncü taraf hizmetini kullanmayı seçin.",
+        "is_mx_based": "MX tabanlı",
+        "link": "Link",
+        "loading": "Lütfen bekleyin…",
+        "login_time": "Giriş zamanı",
+        "lookup_mx": "Hedef, MX adıyla eşleşecek normal bir ifadedir (google.com ile biten bir MX'e hedeflenen tüm postaları bu atlama üzerinden yönlendirmek için <code>.*google\\\\.com</code>)",
+        "main_name": "“mailcow UI” adı",
+        "merged_vars_hint": "Grileştirilmiş satırlar <code>vars.(local.)inc.php</code> dosyasından birleştirildi ve değiştirilemez.",
+        "message": "Mesaj",
+        "message_size": "Mesaj boyutu",
+        "nexthop": "Sonraki atlama",
+        "no": "&#10005;",
+        "no_active_bans": "Aktif yasak yok",
+        "allowed_methods": "Access-Control-Allow-Methods",
+        "f2b_netban_ipv4": "Yasak uygulanacak IPv4 alt ağ boyutu (8-32)",
+        "f2b_netban_ipv6": "Yasak uygulanacak IPv6 alt ağ boyutu (8-32)",
+        "f2b_parameters": "Fail2ban parametreleri",
+        "empty": "Sonuç yok",
+        "excludes": "Bu alıcıları hariç tutar",
+        "f2b_blacklist": "Kara listeye alınan ağlar/ana bilgisayarlar",
+        "f2b_filter": "Regex filtreleri",
+        "f2b_list_info": "Kara listeye alınmış bir ana bilgisayar veya ağ, her zaman beyaz listedeki bir varlıktan daha ağır basacaktır. <b>Liste güncellemelerinin uygulanması birkaç saniye sürecektir.</b>",
+        "ip_check": "IP Kontrol",
+        "access": "Erişim",
+        "activate_api": "API etkinleştir",
+        "activate_send": "Gönder düğmesini etkinleştir",
+        "active": "Etkinleştir",
+        "active_rspamd_settings_map": "Aktif ayarlar haritası",
+        "add_admin": "Yönetici ekle",
+        "add_relayhost": "Gönderene bağlı aktarım ekle",
+        "add_relayhost_hint": "Lütfen, varsa, kimlik doğrulama verilerinin düz metin olarak saklanacağını unutmayın.",
+        "add_row": "Satır ekle",
+        "api_allow_from": "Bu IP'lerden/CIDR ağ gösterimlerinden API erişimine izin ver",
+        "api_key": "API anahtarı",
+        "api_read_only": "Sadece okuma",
+        "api_read_write": "Okuma yazma",
+        "api_skip_ip_check": "API için IP kontrolünü atla",
+        "app_links": "Uygulama linkleri",
+        "app_name": "Uygulama adı",
+        "arrival_time": "Varış zamanı (sunucu zamanı)",
+        "customer_id": "Müşteri Kimliği",
+        "customize": "Özelleştir",
+        "destination": "Hedef",
+        "ays": "Devam etmek istediğinizden emin misiniz?",
+        "change_logo": "Logoyu değiştir",
+        "convert_html_to_text": "HTML'yi düz metne dönüştürün",
+        "edit": "Düzenle",
+        "no_new_rows": "Başka satır yok",
+        "oauth2_client_secret": "Client anahtarı",
+        "quarantine_release_format": "Serbest bırakılan öğelerin biçimi",
+        "oauth2_info": "OAuth2 uygulaması,  \"Yetkilendirme Kodu\" verme türünü destekler ve yenileme belirteçleri yayınlar.<br>\nSunucu, bir yenileme belirteci kullanıldıktan sonra otomatik olarak yeni yenileme belirteçleri de verir.<br><br>\n&#8226; Varsayılan kapsam <i>profil</i>'dir. OAuth2'ye karşı yalnızca posta kutusu kullanıcılarının kimliği doğrulanabilir. Kapsam parametresi atlanırsa, <i>profile</i>'ye geri döner.<br>\n&#8226; <i>state</i> parametresinin, yetkilendirme isteğinin bir parçası olarak istemci tarafından gönderilmesi gerekir.<br><br>\nOAuth2 API'sine yapılan istekler için yollar: <br>\n< ul>\n<li>Yetkilendirme bitiş noktası: <code>/oauth/authorize</code></li>\n<li>Token bitiş noktası: <code>/oauth/token</code></ li>\n<li>Kaynak sayfası: <code>/oauth/profile</code></li>\n</ul>\nİstemci sırrının yeniden oluşturulması, mevcut yetkilendirme kodlarının süresinin dolmasına neden olmaz, ancak belirteçlerini yenileyemezler.<br><br>\nİstemci belirteçlerini iptal etmek, tüm etkin oturumların derhal sonlandırılmasına neden olur. Tüm istemcilerin yeniden kimlik doğrulaması yapması gerekir.",
+        "license_info": "Lisans gerekli değildir ancak daha fazla geliştirmeye yardımcı olur.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"\">GUID'inizi buraya kaydedin.</a> or <a href=\"https://www.servercow.de/mailcow?lang=tr#destek\" target=\"_blank\" alt=\"\">Mailcow kurulumunuz için destek satın alın.</a>",
+        "no_record": "Kayıt yok",
+        "oauth2_apps": "OAuth2 Uygulamaları",
+        "oauth2_add_client": "OAuth2 client ekle",
+        "oauth2_client_id": "Client ID",
+        "optional": "isteğe bağlı",
+        "oauth2_redirect_uri": "URI Yönlendirmesi",
+        "oauth2_renew_secret": "Yeni client anahtarı oluştur",
+        "oauth2_revoke_tokens": "Tüm client tokenlarını iptal et",
+        "quarantine": "Karantina",
+        "options": "Seçenekler",
+        "password": "Şifre",
+        "password_length": "Parola uzunluğu",
+        "password_policy": "Şifre politikası",
+        "password_policy_chars": "En az bir alfabetik karakter içermelidir",
+        "password_policy_length": "Minimum parola uzunluğu %d'dir",
+        "password_policy_lowerupper": "Küçük ve büyük harf karakterleri içermelidir",
+        "password_policy_numbers": "En az bir sayı içermelidir",
+        "password_policy_special_chars": "Özel karakterler içermelidir",
+        "password_repeat": "Onay şifresi (tekrar)",
+        "priority": "Öncelik",
+        "private_key": "Özel anahtar",
+        "quarantine_bcc": "Tüm bildirimlerin bir kopyasını (BCC) bu alıcıya gönderin:<br><small>Devre dışı bırakmak için boş bırakın. <b>İmzasız, işaretlenmemiş posta. Yalnızca dahili olarak teslim edilmelidir.</b></small>",
+        "quarantine_exclude_domains": "Alan adlarını ve diğer alan adlarını hariç tut",
+        "quarantine_max_age": "Gün cinsinden maksimum yaş<br><small>Değer 1 güne eşit veya daha büyük olmalıdır.</small>",
+        "quarantine_max_score": "Bir epostanın spam puanı bu değerden yüksekse bildirim at:<br><small>Varsayılan değer 9999,0</small>",
+        "quota_notifications_vars": "{{percent}}, kullanıcının mevcut kotasına eşittir<br>{{username}} posta kutusu adıdır",
+        "quarantine_max_size": "MiB cinsinden maksimum boyut (daha büyük öğeler atılır):<br><small>0 sınırsız olduğunu <b>değil</b> göstermez.</small>",
+        "quarantine_notification_html": "Bildirim e-posta şablonu:<br><small>Varsayılan şablonu geri yüklemek için boş bırakın.</small>",
+        "quarantine_notification_sender": "Bildirim e-postası gönderen",
+        "quarantine_notification_subject": "Bildirim e-postası konusu",
+        "quarantine_redirect": "<b>Tüm bildirimleri bu alıcıya yönlendir</b>:<br><small>Devre dışı bırakmak için boş bırakın. <b>İmzasız, kontrol edilmemiş posta. Yalnızca dahili olarak teslim edilmelidir.</b></small>",
+        "quarantine_release_format_att": "Ek olarak",
+        "quarantine_release_format_raw": "Değiştirilmemiş orijinal",
+        "quarantine_retention_size": "Posta kutusu başına tutma sayısı:<br><small>0, <b>etkin değil</b> anlamına gelir.</small>",
+        "quota_notification_html": "Bildirim e-posta şablonu:<br><small>Varsayılan şablonu geri yüklemek için boş bırakın.</small>",
+        "quota_notification_sender": "Bildirim e-postası gönderen",
+        "quota_notification_subject": "Bildirim e-postası konusu",
+        "quota_notifications": "Kota bildirimleri",
+        "quota_notifications_info": "Kota bildirimleri, kullanıcılara %80'i geçtiğinde ve %95'i geçtiğinde bir kez gönderilir.",
+        "queue_unban": "Kuyruk yasağını kaldır",
+        "r_active": "Aktif kısıtlamalar",
+        "r_inactive": "Pasif kısıtlamalar",
+        "r_info": "Etkin kısıtlamalar listesindeki grileştirilmiş/devre dışı bırakılmış öğeler, posta kutusu için geçerli kısıtlamalar olarak bilinmez ve taşınamaz. Bilinmeyen kısıtlamalar yine de görünüm sırasına göre ayarlanacaktır. <br>Onları değiştirebilmek için <code>inc/vars.local.inc.php</code> içine yeni öğeler ekleyebilirsiniz.",
+        "rate_name": "Puan adı",
+        "recipients": "Alıcılar",
+        "refresh": "Yenile",
+        "regen_api_key": "API anahtarını yeniden oluştur",
+        "regex_maps": "Regex haritaları",
+        "relay_from": "\"Kimden:\" adresi",
+        "relay_rcpt": "\"Kime:\" adresi",
+        "relay_run": "Test çalıştır",
+        "relayhosts": "Gönderene bağlı aktarımlar",
+        "relayhosts_hint": "Etki alanı yapılandırma iletişim kutusunda seçebilmek için gönderene bağlı aktarımları tanımlayın.<br>\nAktarım hizmeti her zaman \"smtp:\" şeklindedir ve bu nedenle teklif edildiğinde TLS'yi deneyecektir. Sarılmış TLS (SMTPS) desteklenmez. Kullanıcıların bireysel giden TLS politikası ayarı dikkate alınır.\n<br> Takma ad alanları da dahil olmak üzere seçili alan adlarını etkiler.",
+        "rspamd_global_filters_regex": "İsimleri amaçlarını açıklıyor. Tüm içerik, \"/pattern/options\" biçiminde geçerli normal ifade içermelidir (ör. <code>/.+@domain\\.tld/i</code>).<br>\n İlkel olmasına rağmen kontroller regex'in her satırında yürütülüyor, sözdizimini doğru okuyamazsa Rspamds işlevi bozulabilir.<br>\nRspamd değiştirildiğinde harita içeriğini okumaya çalışır. Sorun yaşarsanız, <a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">Rspamd'yi yeniden başlatın</a> bir haritanın yeniden yüklenmesini zorunlu kılmak için.<br>Kara listeye alınan öğeler karantinadan hariç tutulur.",
+        "transport_dest_format": "Regex veya sözdizimi: example.org, .example.org, *, box@example.org (birden çok değer virgülle ayrılabilir)",
+        "transports_hint": "&#8226; Bir aktarım haritası girişi, gönderene bağlı bir aktarım haritasını <b>geçersiz kılar</b>.<br>\n&#8226; Tercihen MX tabanlı aktarımlar kullanılır.<br>\n&#8226; Kullanıcı başına giden TLS ilke ayarları yoksayılır ve yalnızca TLS ilke eşleme girişleri tarafından zorunlu kılınabilir.<br>\n&#8226; Tanımlanmış taşımalar için taşıma hizmeti her zaman \"smtp:\" şeklindedir ve bu nedenle teklif edildiğinde TLS'yi deneyecektir. Sarılmış TLS (SMTPS) desteklenmez.<br>\n&#8226; \"/localhost$/\" ile eşleşen adresler her zaman \"local:\" yoluyla taşınır, bu nedenle bu adresler için bir \"*\" hedefi uygulanmaz.<br>\n&#8226; Örnek bir sonraki sıçrama \"[host]:25\" için kimlik bilgilerini belirlemek için, Postfix <b>her zaman</b> \"[host]:25\" için arama yapmadan önce \"host\" için sorgular. Bu davranış, aynı anda \"host\" ve \"[host]:25\" kullanımını imkansız hale getirir.",
+        "search_domain_da": "Alan adlarını ara",
+        "send": "Gönder",
+        "rspamd_com_settings": "Bir ayar adı otomatik olarak oluşturulacaktır, lütfen aşağıdaki örnek ön ayarlara bakın. Daha fazla ayrıntı için <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd belgelerine</a> bakın",
+        "rspamd_global_filters": "Küresel filtre haritaları",
+        "rspamd_global_filters_agree": "Dikkatli olacağım!",
+        "ui_header_announcement_type_warning": "Önemli",
+        "rsetting_desc": "Kısa tanım",
+        "rsetting_no_selection": "Lütfen bir kural seçin",
+        "rsetting_none": "Kullanılabilir kural yok",
+        "rsettings_insert_preset": "Örnek hazır ayar ekle \"%s\"",
+        "rsettings_preset_1": "Kimliği doğrulanmış kullanıcılar için DKIM ve hız sınırı hariç tümünü devre dışı bırakın",
+        "rsettings_preset_2": "Posta yöneticileri spam istiyor",
+        "rsettings_preset_3": "Bir posta kutusu için yalnızca belirli gönderenlere izin ver (yani yalnızca dahili posta kutusu olarak kullanım)",
+        "rsettings_preset_4": "Bir etki alanı için Rspamd'yi devre dışı bırakın",
+        "rspamd_global_filters_info": "Küresel filtre haritaları, farklı türde küresel kara ve beyaz listeler içerir.",
+        "rspamd_settings_map": "Rspamd ayarları haritası",
+        "sal_level": "Moo seviye",
+        "save": "Değişiklikleri kaydet",
+        "sender": "Gönderen",
+        "service": "Servis",
+        "service_id": "Servis ID",
+        "source": "Kaynak",
+        "spamfilter": "Spam filtresi",
+        "subject": "Konu",
+        "success": "Başarılı",
+        "sys_mails": "Sistem postaları",
+        "text": "Metin",
+        "time": "Zaman",
+        "title": "Başlık",
+        "title_name": "\"mailcow UI\" web sitesi başlığı",
+        "to_top": "Başa dön",
+        "transport_maps": "Ulaşım Haritaları",
+        "transport_test_rcpt_info": "&#8226; Yabancı bir hedefe geçişi test etmek için null@hosted.mailcow.de adresini kullanın.",
+        "ui_footer": "Altbilgi (HTML'ye izin verilir)",
+        "ui_header_announcement": "Duyurular",
+        "ui_header_announcement_active": "Duyuruyu etkin olarak ayarla",
+        "ui_header_announcement_content": "Metin (HTML'ye izin verilir)",
+        "ui_header_announcement_help": "Duyuru, oturum açmış tüm kullanıcılar tarafından ve kullanıcı arayüzünün oturum açma ekranında görülebilir.",
+        "ui_header_announcement_select": "Duyuru türünü seçin",
+        "ui_header_announcement_type_danger": "Çok önemli",
+        "ui_header_announcement_type_info": "Bilgi",
+        "ui_texts": "UI etiketleri ve metinleri",
+        "unban_pending": "Beklemede olan yasağı kaldır",
+        "unchanged_if_empty": "Değişmediyse boş bırakın",
+        "upload": "Yükle",
+        "username": "Kullanıcı adı",
+        "validate_license_now": "GUID'yi lisans sunucusuna göre doğrulayın",
+        "verify": "Doğrulayın",
+        "yes": "&#10003;",
+        "ui_header_announcement_type": "Türü",
+        "remove": "Kaldır",
+        "remove_row": "Satırı kaldır",
+        "reset_default": "Öntanımlı değerlere dön",
+        "reset_limit": "Hashi kaldır",
+        "routing": "Yönlendirme",
+        "rsetting_add_rule": "Kural ekle",
+        "rsetting_content": "Kural içeriği"
     },
     "warning": {
         "cannot_delete_self": "Cannot delete logged in user",
@@ -147,5 +364,944 @@
         "quota_exceeded_scope": "Domain kotası aşıldı: Bu domain kapsamında yalnızca sınırsız e-posta oluşturulabilir!",
         "session_token": "Form token geçersiz: Token uyuşmadı",
         "session_ua": "Form token geçersiz: User-Agent doğrulama hatası"
+    },
+    "datatables": {
+        "decimal": ".",
+        "info": "TOPLAM_ girişlerin _BAŞLANGIÇ_ ile _SON_ arası gösteriliyor",
+        "paginate": {
+            "first": "İlk",
+            "last": "Son",
+            "next": "Sonraki",
+            "previous": "Önceki"
+        },
+        "aria": {
+            "sortAscending": ": sütunu artan sıralama için etkinleştir",
+            "sortDescending": ": sütunu azalan şekilde sıralama için etkinleştirin"
+        },
+        "thousands": ",",
+        "collapse_all": "Tümünü Daralt",
+        "emptyTable": "Tabloda veri mevcut değil",
+        "expand_all": "Tümünü Genişlet",
+        "infoEmpty": "0 girişten 0 ila 0 arası gösteriliyor",
+        "infoFiltered": "(_MAX_ toplam girişlerden filtrelendi)",
+        "lengthMenu": "_MENU_ girişlerini göster",
+        "loadingRecords": "Yükleniyor...",
+        "processing": "Lütfen bekleyin...",
+        "search": "Ara:",
+        "zeroRecords": "Eşleşen kayıt bulunamadı"
+    },
+    "edit": {
+        "inactive": "Pasif",
+        "mailbox": "Posta kutusunu düzenle",
+        "mailbox_quota_def": "Varsayılan posta kutusu kotası",
+        "mailbox_relayhost_info": "Yalnızca posta kutusuna ve doğrudan takma adlara uygulanır, etki alanı geçiş ana bilgisayarını geçersiz kılar.",
+        "max_aliases": "Maks. takma adlar",
+        "max_mailboxes": "Maks. olası posta kutuları",
+        "max_quota": "Maks. posta kutusu başına kota (MiB)",
+        "extended_sender_acl_info": "Varsa, bir DKIM etki alanı anahtarı içe aktarılmalıdır.<br>\\r\\n Bu sunucuyu karşılık gelen SPF TXT kaydına eklemeyi unutmayın.<br>\\r\\n Bu sunucuya bir etki alanı veya takma ad etki alanı eklendiğinde, harici bir adresle çakışırsa, harici adres kaldırılır.<br>\\r\\n *@domain.tld olarak göndermeye izin vermek için @domain.tld kullanın.",
+        "footer_exclude": "Footerdan hariç tut",
+        "last_modified": "Son değişiklik",
+        "lookup_mx": "Hedef, MX adıyla eşleşecek normal bir ifadedir (google.com ile biten bir MX'e hedeflenen tüm postaları bu atlama üzerinden yönlendirmek için <code>.*google\\\\.com</code>)",
+        "sogo_access_info": "Posta kullanıcı arayüzünden tek oturum açma çalışmaya devam eder. Bu ayar, diğer tüm hizmetlere erişimi etkilemez veya bir kullanıcının mevcut SOGo profilini silmez veya değiştirmez.",
+        "comment_info": "Gizli bir yorum kullanıcı tarafından görülmezken, genel bir yorum, kullanıcının genel bakışında üzerine gelindiğinde araç ipucu olarak gösterilir.",
+        "sender_acl_info": "Posta kutusu A kullanıcısının posta kutusu kullanıcısı B olarak göndermesine izin veriliyorsa, gönderen adresi SOGo'da seçilebilir \\\"gönderen\\\" alanı olarak otomatik olarak görüntülenmez.<br>\\r\\n Posta kutusu B kullanıcısının izin vermesi için SOGo'da bir yetkilendirme oluşturması gerekir. posta kutusu kullanıcısı A, adresini gönderen olarak seçmek için. SOGo'da bir posta kutusuna yetki vermek için, posta görünümündeyken sol üstteki posta kutusu adınızın sağındaki menüyü (üç nokta) kullanın. Bu davranış, diğer ad adresleri için geçerli değildir.",
+        "sogo_visible_info": "Bu seçenek yalnızca SOGo'da görüntülenebilen nesneleri etkiler (en az bir yerel posta kutusuna işaret eden paylaşılan veya paylaşılmayan diğer ad adresleri). Gizliyse, bir takma ad SOGo'da seçilebilir gönderici olarak görünmez.",
+        "kind": "Nitelik",
+        "maxage": "Uzaktan sorgulanacak mesajların gün cinsinden maksimum ileti yaşı<br><small>(0 = yaşı yoksay)</small>",
+        "maxbytespersecond": "Maks. saniye başına bayt <br><small>(0 = sınırsız)</small>",
+        "redirect_uri": "Yönlendirme URI'i",
+        "relay_all": "Tüm alıcıları aktar",
+        "domain_footer_skip_replies": "Yanıt postasındaki altbilgiyi yoksay",
+        "exclude": "Nesneleri hariç tut (normal ifade)",
+        "extended_sender_acl": "Harici gönderen adresleri",
+        "force_pw_update": "Bir sonraki girişte şifre güncellemesini zorla",
+        "password": "Şifre",
+        "password_repeat": "Onay şifresi (tekrar)",
+        "private_comment": "Özel yorum",
+        "public_comment": "Genel yorum",
+        "pushover": "Pushover",
+        "pushover_evaluate_x_prio": "Yüksek öncelikli postayı iletin [<code>X-Priority: 1</code>]",
+        "pushover_info": "Anında iletme bildirimi ayarları, takma adlar (paylaşılan, paylaşılmayan, etiketli) dahil <b>%s</b> adresine teslim edilen tüm temiz (spam olmayan) postalara uygulanacaktır.",
+        "pushover_sender_array": "Yalnızca aşağıdaki gönderen e-posta adreslerini göz önünde bulundurun <small>(virgülle ayrılmış)</small>",
+        "scope": "Kapsam",
+        "skipcrossduplicates": "Klasörler arasında yinelenen mesajları atlayın (ilk gelen, ilk hizmet)",
+        "sogo_visible": "Takma ad SOGo'da görünür",
+        "relay_unknown_only": "Yalnızca var olmayan posta kutularını aktarın. Mevcut posta kutuları yerel olarak teslim edilecektir.",
+        "relayhost": "Göndericiye bağlı aktarımlar",
+        "remove": "Kaldır",
+        "resource": "Kaynak",
+        "save": "Değişiklikleri Kaydet",
+        "spam_policy": "Beyaz/kara listeye öğe ekleyin veya kaldırın",
+        "spam_score": "Özel bir spam puanı ayarlayın",
+        "subfolder2": "Hedefteki alt klasörle senkronize et<br><small>(boş = alt klasörü kullanmayın)</small>",
+        "syncjob": "Senkronizasyon işini düzenle",
+        "target_address": "Adrese git <small>(virgülle ayrılmış)</small>",
+        "target_domain": "Hedef alan",
+        "timeout1": "Uzak ana bilgisayara bağlantı için zaman aşımı",
+        "timeout2": "Yerel ana bilgisayara bağlantı için zaman aşımı",
+        "unchanged_if_empty": "Değişmediyse boş bırakın",
+        "username": "Kullanıcı adı",
+        "validate_save": "Doğrula ve kaydet",
+        "acl": "ACL (İzin)",
+        "active": "Aktif",
+        "admin": "Yöneticiyi düzenle",
+        "advanced_settings": "Gelişmiş ayarlar",
+        "alias": "Takma adı düzenle",
+        "generate": "oluştur",
+        "previous": "Önceki sayfa",
+        "domain_footer_info_vars": {
+            "from_addr": "Mail adresindeki adres kısmını verir",
+            "from_domain": "Mail adresindeki alan adını verir",
+            "custom": "Posta kutusu \\\"foo\\\" özelliğine ve \\\"bar\\\" değerine sahipse, \\\"bar\\\" döndürür\"",
+            "from_name": "Mail adresindeki gönderen alanını verir. Örn: Bilgi islem bilgiislem@canakkale.bel.tr nin Bilgi islem kısmını verir.",
+            "auth_user": "MTA tarafından belirtilen doğrulanmış kullanıcı adı",
+            "from_user": "Mail adresindeki kullanıcı adını alanını verir. Örn: bilgiislem@canakkale.bel.tr nin bilgiislem kısmını verir."
+        },
+        "custom_attributes": "Kullanıcı tanımlı özellikler",
+        "delete_ays": "Lütfen silme işlemini onaylayın.",
+        "description": "Açıklama",
+        "pushover_only_x_prio": "Yalnızca yüksek öncelikli postayı dikkate alın [<code>X-Priority: 1</code>]",
+        "delete2duplicates": "Hedefteki kopyaları sil",
+        "domain_footer": "Domain footer",
+        "domain_footer_html": "HTML footer",
+        "edit_alias_domain": "Takma ad alanını düzenle",
+        "encryption": "Şifreleme",
+        "domain_footer_info": "Bu alan adındaki bir adresle ilişkili tüm giden e-postalara domain-wide footer eklenir. Footer için aşağıdaki değişkenler kullanılabilir :",
+        "domains": "Alan adları",
+        "dont_check_sender_acl": "%s etki alanı için gönderen kontrolünü devre dışı bırakın (+ takma ad etki alanları)",
+        "sieve_desc": "Kısa tanım",
+        "sieve_type": "Filtre türü",
+        "sender_acl": "olarak göndermeye izin ver",
+        "sender_acl_disabled": "<span class=\\\"label label-danger\\\">Gönderen denetimi devre dışı</span>",
+        "allow_from_smtp": "Yalnızca bu IP'lerin <b>SMTP</b> kullanmasına izin verin",
+        "allow_from_smtp_info": "Tüm gönderenlere izin vermek için boş bırakın.<br>IPv4/IPv6 adresleri ve ağları.",
+        "allowed_protocols": "İzin verilen protokoller",
+        "app_name": "Uygulama adı",
+        "app_passwd": "Uygulama şifresi",
+        "app_passwd_protocols": "Uygulama şifresi için izin verilen protokoller",
+        "automap": "Klasörleri otomatik eşlemeyi deneyin (\\\"Gönderilmiş öğeler\\\", \\\"Gönderildi\\\" => \\\"Gönderildi\\\" vb.)",
+        "backup_mx_options": "Relay seçenekleri",
+        "bcc_dest_format": "BCC, tek bir geçerli e-posta adresi olmalıdır.<br>Bir kopyayı birden fazla adrese göndermeniz gerekiyorsa, bir takma ad oluşturun ve burada kullanın.",
+        "client_id": "Müşteri Kimliği",
+        "client_secret": "Müşteri sırrı",
+        "created_on": "Oluşturuldu",
+        "delete1": "Tamamlandığında kaynaktan silin",
+        "delete2": "Kaynakta olmayan hedefteki mesajları sil",
+        "domain_footer_plain": "PLAIN footer",
+        "multiple_bookings": "Çoklu rezervasyon",
+        "none_inherit": "Yok / Miras",
+        "nexthop": "Sonraki atlama",
+        "pushover_sender_regex": "Aşağıdaki gönderen regexini göz önünde bulundurun",
+        "pushover_text": "Bildirim metni",
+        "force_pw_update_info": "Bu kullanıcı yalnızca %s'de oturum açabilecek. Uygulama şifreleri kullanılabilir durumda kalır.",
+        "full_name": "Ad Soyad",
+        "gal": "Genel Adres Listesi",
+        "gal_info": "GAL, bir etki alanının tüm nesnelerini içerir ve herhangi bir kullanıcı tarafından düzenlenemez. Devre dışı bırakılmışsa, SOGo'da serbest/meşgul bilgisi eksik! <b>Değişiklikleri uygulamak için SOGo'yu yeniden başlatın.</b>",
+        "grant_types": "Yetki türleri",
+        "hostname": "Ana bilgisayar adı",
+        "mbox_rl_info": "Bu hız sınırı SASL oturum açma adına uygulanır, oturum açmış kullanıcı tarafından kullanılan herhangi bir \\\"gönderen\\\" adresiyle eşleşir. Posta kutusu hız sınırı, alan genelindeki hız sınırını geçersiz kılar.",
+        "mins_interval": "Aralık(dakika)",
+        "pushover_title": "Bildirim başlığı",
+        "pushover_sound": "Ses",
+        "pushover_vars": "Gönderici filtresi tanımlanmadığında, tüm postalar dikkate alınacaktır.<br>Regex filtreleri ve tam gönderen kontrolleri ayrı ayrı tanımlanabilir ve sıralı olarak değerlendirilecektir. Birbirlerine bağlı değildirler.<br>Metin ve başlık için kullanılabilir değişkenler (lütfen veri koruma politikalarını dikkate alın)",
+        "pushover_verify": "Kimlik bilgilerini doğrulayın",
+        "quota_warning_bcc": "Kota uyarısı BCC",
+        "quota_warning_bcc_info": "Uyarılar, aşağıdaki alıcılara ayrı kopyalar halinde gönderilecektir. Konunun sonuna parantez içinde karşılık gelen kullanıcı adı eklenecektir, örneğin: <code>Kota uyarısı (user@example.com)</code>.",
+        "ratelimit": "Hız sınırı",
+        "relay_all_info": "↪ Tüm alıcıları geçirmek için <b>değil</b> seçerseniz, aktarılması gereken her alıcı için bir (\\\"kör\\\") posta kutusu eklemeniz gerekir.",
+        "relay_domain": "Bu etki alanını aktar",
+        "relay_transport_info": "<div class=\\\"label label-info\\\">Bilgi</div> Bu etki alanı için özel bir hedef için taşıma haritaları tanımlayabilirsiniz. Ayarlanmazsa, bir MX araması yapılır.",
+        "sogo_access": "SOGo'ya doğrudan giriş erişimi verin",
+        "spam_alias": "Zaman sınırlı takma ad adresleri oluşturun veya değiştirin",
+        "spam_filter": "Spam filtresi",
+        "disable_login": "Oturum açmaya izin verme (gelen posta hala kabul edilir)",
+        "domain": "Etki alanını düzenle",
+        "domain_admin": "Etki alanı yöneticisini düzenle",
+        "domain_quota": "Etki alanı kotası",
+        "quota_mb": "Kota (MiB)",
+        "title": "Nesneyi düzenle"
+    },
+    "diagnostics": {
+        "dns_records_docs": "Lütfen ayrıca <a target=\\\"_blank\\\" href=\\\"https://mailcow.github.io/mailcow-dockerized-docs/precondition/precondition-dns/\\\">belgelere</a> bakın.",
+        "cname_from_a": "A/AAAA kaydından elde edilen değer. Bu, kayıt doğru kaynağa işaret ettiği sürece desteklenir.",
+        "dns_records_24hours": "DNS'de yapılan değişikliklerin mevcut durumlarının bu sayfaya doğru bir şekilde yansıtılmasının 24 saat kadar sürebileceğini lütfen unutmayın. DNS kayıtlarınızı nasıl yapılandıracağınızı kolayca görebilmeniz ve tüm kayıtlarınızın DNS'de doğru şekilde depolanıp depolanmadığını kontrol edebilmeniz için tasarlanmıştır.",
+        "optional": "Bu kayıt isteğe bağlıdır.",
+        "dns_records_data": "Doğru veri",
+        "dns_records_name": "İsim",
+        "dns_records_status": "Mevcut Durum",
+        "dns_records_type": "Tür",
+        "dns_records": "DNS Kayıtları"
+    },
+    "danger": {
+        "is_alias_or_mailbox": "%s zaten takma ad, posta kutusu veya takma ad etki alanından genişletilmiş bir takma ad adresi olarak biliniyor.",
+        "pushover_credentials_missing": "Pushover belirteci ve / veya anahtarı eksik",
+        "quota_not_0_not_numeric": "Kota sayısal ve >= 0 olmalıdır",
+        "extended_sender_acl_denied": "harici gönderen adreslerini ayarlamak için eksik ACL",
+        "invalid_destination": "Hedef biçimi \\\"%s\\\" geçersiz",
+        "mailbox_quota_left_exceeded": "Yeterli alan kalmadı (boş alan: %d MiB)",
+        "value_missing": "Lütfen tüm değerleri sağlayın",
+        "img_dimensions_exceeded": "Görüntü maksimum resim boyutunu aşıyor",
+        "max_quota_in_use": "Posta kutusu kotası %d MiB'den büyük veya buna eşit olmalıdır",
+        "object_exists": "%s nesnesi zaten var",
+        "webauthn_verification_failed": "WebAuthn doğrulaması başarısız oldu: %s",
+        "invalid_nexthop_authenticated": "Sonraki atlama, farklı kimlik bilgileriyle var, lütfen önce bu sonraki atlama için mevcut kimlik bilgilerini güncelleyin.",
+        "alias_domain_invalid": "%s takma ad alanı geçersiz",
+        "aliases_in_use": "Maks. takma adlar %d'den büyük veya eşit olmalıdır",
+        "app_name_empty": "Uygulama adı boş olamaz",
+        "app_passwd_id_invalid": "Uygulama şifresi kimliği %s geçersiz",
+        "bcc_empty": "BCC hedefi boş olamaz",
+        "alias_empty": "Takma ad adresi boş bırakılamaz",
+        "alias_goto_identical": "Takma ad ve varış adresi aynı olmamalıdır",
+        "alias_invalid": "%s takma ad adresi geçersiz",
+        "aliasd_targetd_identical": "Takma ad etki alanı, hedef etki alanına eşit olmamalıdır: %s",
+        "cors_invalid_method": "Geçersiz Allow-Method belirtildi",
+        "cors_invalid_origin": "Geçersiz Allow-Origin belirtildi",
+        "defquota_empty": "Posta kutusu başına varsayılan kota 0 olmamalıdır.",
+        "from_invalid": "Gönderen boş olmamalıdır",
+        "global_filter_write_error": "Filtre dosyası yazılamadı: %s",
+        "global_map_invalid": "Küresel harita kimliği %s geçersiz",
+        "maxquota_empty": "Maks. posta kutusu başına kota 0 olmamalıdır.",
+        "mysql_error": "MySQL hatası: %s",
+        "webauthn_authenticator_failed": "Seçilen kimlik doğrulayıcı bulunamadı.",
+        "webauthn_publickey_failed": "Seçilen kimlik doğrulayıcı için ortak anahtar saklanmadı",
+        "webauthn_username_failed": "Seçilen kimlik doğrulayıcı başka bir hesaba ait",
+        "global_map_write_error": "%s global harita kimliği yazılamadı: %s",
+        "access_denied": "Erişim reddedildi veya geçersiz form verisi",
+        "bcc_exists": "%s türü için %s BCC haritası var",
+        "bcc_must_be_email": "BCC %s geçerli bir e-posta adresi değil",
+        "comment_too_long": "Yorum çok uzun, maksimum 160 karaktere izin verilir",
+        "demo_mode_enabled": "Demo Mod açık",
+        "description_invalid": "%s için kaynak açıklaması geçersiz",
+        "dkim_domain_or_sel_exists": "\\\"%s\\\" için bir DKIM anahtarı var ve üzerine yazılmayacak",
+        "dkim_domain_or_sel_invalid": "DKIM etki alanı veya seçici geçersiz: %s",
+        "domain_cannot_match_hostname": "Alan, ana bilgisayar adıyla eşleşemez",
+        "domain_exists": "%s alanı zaten var",
+        "domain_invalid": "Alan adı boş veya geçersiz",
+        "domain_not_empty": "Boş olmayan alan adı %s kaldırılamıyor",
+        "domain_not_found": "%s alanı bulunamadı",
+        "domain_quota_m_in_use": "Etki alanı kotası %s MiB'den büyük veya buna eşit olmalıdır",
+        "extra_acl_invalid": "Harici gönderen adresi \\\"%s\\\" geçersiz",
+        "extra_acl_invalid_domain": "Harici gönderici \\\"%s\\\" geçersiz bir etki alanı kullanıyor",
+        "fido2_verification_failed": "FIDO2 doğrulaması başarısız oldu: %s",
+        "file_open_error": "Dosya yazmak için açılamıyor",
+        "filter_type": "Yanlış filtre türü",
+        "goto_empty": "Bir takma ad adresi, en az bir geçerli git adresi içermelidir",
+        "goto_invalid": "%s adresine git geçersiz",
+        "ham_learn_error": "Öğrenme hatası: %s",
+        "imagick_exception": "Hata: Görüntü okunurken Imagick istisnası",
+        "img_invalid": "Resim dosyası doğrulanamıyor",
+        "img_tmp_missing": "Resim dosyası doğrulanamıyor: Geçici dosya bulunamadı",
+        "password_complexity": "Şifre politikaya uygun değil",
+        "policy_list_from_exists": "Verilen ada sahip bir kayıt var",
+        "img_size_exceeded": "Görüntü maksimum dosya boyutunu aşıyor",
+        "invalid_bcc_map_type": "Geçersiz BCC harita türü",
+        "invalid_filter_type": "Geçersiz filtre türü",
+        "invalid_host": "Geçersiz ana bilgisayar belirtildi: %s",
+        "invalid_mime_type": "Geçersiz mime türü",
+        "invalid_nexthop": "Sonraki atlama biçimi geçersiz",
+        "invalid_recipient_map_new": "Geçersiz yeni alıcı belirtildi: %s",
+        "invalid_recipient_map_old": "Geçersiz orijinal alıcı belirtildi: %s",
+        "ip_list_empty": "İzin verilen IP'lerin listesi boş olamaz",
+        "is_alias": "%s zaten bir takma ad adresi olarak biliniyor",
+        "is_spam_alias": "%s zaten geçici bir takma ad adresi olarak biliniyor (spam takma ad adresi)",
+        "last_key": "Son anahtar silinemez, lütfen bunun yerine TFA'yı devre dışı bırakın.",
+        "login_failed": "Giriş başarısız",
+        "mailbox_defquota_exceeds_mailbox_maxquota": "Varsayılan kota, maksimum kota sınırını aşıyor",
+        "mailbox_invalid": "Posta kutusu adı geçersiz",
+        "mailbox_quota_exceeded": "Kota, alan sınırını aşıyor (maks. %d MiB)",
+        "mailbox_quota_exceeds_domain_quota": "Maks. kota, alan kota sınırını aşıyor",
+        "mailboxes_in_use": "Maks. posta kutuları %d'den büyük veya eşit olmalıdır",
+        "malformed_username": "Hatalı biçimlendirilmiş kullanıcı adı",
+        "map_content_empty": "Harita içeriği boş olamaz",
+        "max_alias_exceeded": "Maks. takma adlar aşıldı",
+        "max_mailbox_exceeded": "Maks. posta kutuları aşıldı (%d / %d)",
+        "network_host_invalid": "Geçersiz ağ veya ana bilgisayar: %s",
+        "next_hop_interferes": "%s, nexthop %s ile çakışıyor",
+        "next_hop_interferes_any": "Mevcut bir sonraki atlama %s ile çakışıyor",
+        "nginx_reload_failed": "Nginx yeniden yükleme başarısız oldu: %s",
+        "no_user_defined": "Kullanıcı tanımlı değil",
+        "object_is_not_numeric": "%s değeri sayısal değil",
+        "password_empty": "Şifre boş olmamalıdır",
+        "password_mismatch": "Onay şifresi eşleşmiyor",
+        "policy_list_from_invalid": "Kayıt geçersiz biçime sahip",
+        "private_key_error": "Özel anahtar hatası: %s",
+        "pushover_key": "Pushover anahtarı yanlış formatta",
+        "pushover_token": "Pushover token yanlış formatta",
+        "recipient_map_entry_exists": "Alıcı haritası girişi \\\"%s\\\" var",
+        "redis_error": "Redis hatası: %s",
+        "relayhost_invalid": "%s harita girişi geçersiz",
+        "template_exists": "%s isimli şablon zaten mevcut",
+        "template_id_invalid": "Şablon kimliği %s geçersiz",
+        "text_empty": "Metin boş olmamalıdır",
+        "unknown": "Bilinmeyen bir hata oluştu",
+        "unknown_tfa_method": "Bilinmeyen TFA yöntemi",
+        "unlimited_quota_acl": "ACL tarafından yasaklanan sınırsız kota",
+        "username_invalid": "Kullanıcı adı %s kullanılamaz",
+        "validity_missing": "Lütfen bir geçerlilik süresi atayın",
+        "yotp_verification_failed": "Yubico OTP doğrulaması başarısız oldu: %s",
+        "rspamd_ui_pw_length": "Rspamd UI şifresi en az 6 karakter uzunluğunda olmalıdır",
+        "tfa_token_invalid": "Hatalı TFA belirteci",
+        "release_send_failed": "Mesaj bırakılamadı: %s",
+        "reset_f2b_regex": "Regex filtresi zamanında sıfırlanamadı, lütfen tekrar deneyin veya birkaç saniye daha bekleyin ve web sitesini yeniden yükleyin.",
+        "resource_invalid": "%s kaynak adı geçersiz",
+        "rl_timeframe": "Hız sınırı zaman çerçevesi yanlış",
+        "script_empty": "Komut dosyası boş olamaz",
+        "sender_acl_invalid": "Gönderen ACL değeri %s geçersiz",
+        "set_acl_failed": "ACL ayarlanamadı",
+        "settings_map_invalid": "Ayarlar haritası kimliği %s geçersiz",
+        "sieve_error": "Elek ayrıştırıcı hatası: %s",
+        "spam_learn_error": "Spam öğrenme hatası: %s",
+        "subject_empty": "Konu boş olmamalıdır",
+        "target_domain_invalid": "Hedef alan %s geçersiz",
+        "targetd_not_found": "Hedef alan %s bulunamadı",
+        "targetd_relay_domain": "Hedef etki alanı %s bir geçiş etki alanıdır",
+        "template_name_invalid": "Şablon adı geçersiz",
+        "temp_error": "Geçici hata",
+        "tls_policy_map_dest_invalid": "Politika hedefi geçersiz",
+        "tls_policy_map_entry_exists": "Bir TLS ilke haritası girişi \\\"%s\\\" mevcut",
+        "tls_policy_map_parameter_invalid": "Politika parametresi geçersiz",
+        "totp_verification_failed": "TOTP doğrulaması başarısız oldu",
+        "transport_dest_exists": "\\\"%s\\\" aktarım hedefi mevcut"
+    },
+    "debug": {
+        "container_disabled": "Container durduruldu veya devre dışı bırakıldı",
+        "last_modified": "Son değişiklik",
+        "log_info": "<p>mailcow <b>bellek içi günlükler</b>, Redis listelerinde toplanır ve çekiçlemeyi azaltmak için her dakika LOG_LINES (%d) olacak şekilde kırpılır.\\r\\n <br>Bellek içi günlükler ısrarcı. Bellekte oturum açan tüm uygulamalar, ayrıca Docker arka plan programında ve dolayısıyla varsayılan günlük sürücüsünde oturum açar.\\r\\n <br>Bellek içi günlük türü, kapsayıcılarla ilgili küçük sorunları ayıklamak için kullanılmalıdır.</p>\\r\\n <p><b>Harici günlükler</b>, verilen uygulamanın API'si aracılığıyla toplanır.</p>\\r\\n <p><b>Statik günlükler</b> çoğunlukla etkinlik günlükleridir. Dockerd'da günlüğe kaydedilmez ancak yine de kalıcı olmaları gerekir (API günlükleri hariç).</p>",
+        "architecture": "Mimari",
+        "chart_this_server": "Grafik (bu sunucu)",
+        "containers_info": "Kapsayıcı bilgileri",
+        "container_running": "Çalıştırılıyor...",
+        "login_time": "Zaman",
+        "logs": "Loglar",
+        "static_logs": "Statik günlükler",
+        "success": "Başarılı",
+        "started_on": "Başladı",
+        "update_available": "Mevcut bir güncelleme var",
+        "container_stopped": "Durduruldu",
+        "cores": "Çekirdekler",
+        "current_time": "Sistem Zamanı",
+        "disk_usage": "Disk kullanımı",
+        "error_show_ip": "Genel IP adresleri çözümlenemedi.",
+        "external_logs": "Harici günlükler",
+        "history_all_servers": "Geçmiş (tüm sunucular)",
+        "in_memory_logs": "Bellek içi günlükler",
+        "jvm_memory_solr": "JVM bellek kullanımı",
+        "memory": "Hafıza",
+        "online_users": "Aktif kullanıcılar",
+        "restart_container": "Yeniden başlat",
+        "service": "Servis",
+        "show_ip": "Genel IP'yi göster",
+        "size": "Boyut",
+        "solr_dead": "Solr başlatılıyor, devre dışı bırakıldı veya öldü.",
+        "solr_status": "Solr durumu",
+        "started_at": "Başlangıç",
+        "system_containers": "Sistem ve Konteynerler",
+        "timezone": "Zaman Dilimi",
+        "uptime": "Çalışma Süresi",
+        "no_update_available": "Sistem en son sürümde",
+        "update_failed": "Güncelleme olup olmadığı kontrol edilemedi",
+        "username": "Kullanıcı Adı",
+        "wip": "Şu Anda Çalışma Devam Ediyor",
+        "docs": "Dokümanlar"
+    },
+    "mailbox": {
+        "domain_admins": "Etki alanı yöneticileri",
+        "insert_preset": "Örnek ön ayar \\\"%s\\\" ekle",
+        "mins_interval": "Aralık (dk)",
+        "bcc_info": "BCC haritaları, tüm mesajların kopyalarını başka bir adrese sessizce iletmek için kullanılır. Yerel hedef bir postanın alıcısı olarak hareket ettiğinde, bir alıcı eşleme türü girişi kullanılır. Gönderici haritaları aynı prensibe uygundur.<br/>\\r\\n Yerel hedef, başarısız bir teslimat hakkında bilgilendirilmez.",
+        "booking_custom": "Özel bir rezervasyon miktarıyla sabit sınırlama",
+        "force_pw_update": "Bir sonraki girişte parola güncellemesini zorunlu kıl",
+        "allow_from_smtp_info": "Tüm gönderenlere izin vermek için boş bırakın.<br>IPv4/IPv6 adresleri ve ağları.",
+        "tls_policy_maps_enforced_tls": "Bu ilkeler, giden TLS bağlantılarını zorlayan posta kutusu kullanıcılarının davranışını da geçersiz kılar. Aşağıda herhangi bir politika yoksa, bu kullanıcılar <code>smtp_tls_mandatory_protocols</code> ve <code>smtp_tls_mandatory_ciphers</code> olarak belirtilen varsayılan değerleri uygular.",
+        "tls_map_parameters_info": "Boş veya parametreler, örneğin: protokoller=!SSLv2 şifreleri=orta hariç tutma=3DES",
+        "recipient_map": "Alıcı haritası",
+        "sieve_info": "Kullanıcı başına birden fazla filtre saklayabilirsiniz, ancak aynı anda yalnızca bir ön filtre ve bir son filtre etkin olabilir.<br>\\r\\nHer filtre açıklanan sırayla işlenir. Ne başarısız bir komut dosyası ne de verilen bir \\\"keep;\\\", başka komut dosyalarının işlenmesini durdurmayacaktır. Global elek komut dosyalarında yapılan değişiklikler, Dovecot'un yeniden başlatılmasını tetikleyecektir.<br><br>Global elek ön filtresi &#8226; Ön filtre &#8226; Kullanıcı komut dosyaları &#8226; Son filtre &#8226; Küresel elek son filtresi",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "Kimlik doğrulama sorunu",
+        "tls_enforce_in": "TLS gelenini uygula",
+        "tls_policy_maps_info": "Bu politika haritası, bir kullanıcının TLS politika ayarlarından bağımsız olarak giden TLS aktarım kurallarını geçersiz kılar.<br>\\r\\n Lütfen <a href=\\\"http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps\\\" adresini kontrol edin. daha fazla bilgi için target=\\\"_blank\\\">\\\"smtp_tls_policy_maps\\\" dokümanları</a>.",
+        "remove": "Kaldır",
+        "resources": "Kaynaklar",
+        "running": "Çalıştırılıyor...",
+        "sender": "Gönderen",
+        "set_postfilter": "Son filtre olarak işaretle",
+        "set_prefilter": "Ön filtre olarak işaretle",
+        "add_domain": "Alan adı ekle",
+        "action": "İşlem",
+        "activate": "Etkinleştir",
+        "active": "Aktif",
+        "add": "Ekle",
+        "add_alias": "Takma ad ekle",
+        "add_alias_expand": "Diğer adları diğer ad etki alanları üzerinde genişletin",
+        "add_tls_policy_map": "TLS politika haritası ekle",
+        "address_rewriting": "Adresi yeniden yaz",
+        "alias": "Takma ad",
+        "alias_domain_alias_hint": "Takma adlar, alan takma adlarına otomatik olarak <b>uygulanmaz</b>. Bir takma ad adresi <code>takma ad@etki alanım</code> <b>kapsamıyor</b> <code>takma ad@takma ad-domain</code> adresini (burada \\\"takma ad-domain\\\" \\\"domain\\\" için hayali bir takma addır.<br>Postaları harici bir posta kutusuna yönlendirmek için lütfen bir elek filtresi kullanın (\\\"Filtreler\\\" sekmesine bakın veya SOGo -> Yönlendiriciyi kullanın). Eksik takma adları otomatik olarak eklemek için \\\"Takma adı diğer ad alanları üzerinden genişlet\\\" seçeneğini kullanın.",
+        "booking_custom_short": "Kesin sınır",
+        "booking_ltnull": "Sınırsız, ancak rezervasyon yapıldığında meşgul olarak göster",
+        "catch_all": "Hepsini Yakala",
+        "created_on": "Oluşturuldu.",
+        "daily": "Günlük",
+        "deactivate": "Devre dışı bırak",
+        "mailbox": "Posta Kutusu",
+        "mailbox_defaults": "Varsayılan ayarlar",
+        "mailbox_defaults_info": "Yeni posta kutuları için varsayılan ayarları tanımlayın.",
+        "mailbox_defquota": "Varsayılan posta kutusu boyutu",
+        "mailbox_templates": "Mail Kutusu Şablonları",
+        "mailbox_quota": "Maks.  posta kutusu boyutu",
+        "mailboxes": "Posta kutuları",
+        "public_comment": "Genel yorum",
+        "q_add_header": "önemsiz klasörüne taşındığında",
+        "q_all": " önemsiz klasörüne taşındığında ve reddedildiğinde",
+        "q_reject": "Red aşamasında",
+        "quarantine_category": "Karantina bildirim kategorisi",
+        "quarantine_notification": "Karantina bildirimleri",
+        "quick_actions": "İşlemler",
+        "stats": "İstatistikler",
+        "status": "Durum",
+        "tls_policy_maps_long": "Giden TLS politika haritası geçersiz kılmaları",
+        "toggle_all": "Tümünü değiştir",
+        "booking_lt0_short": "Esnek sınır",
+        "msg_num": "Mesaj #",
+        "spam_aliases": "Geçici takma ad",
+        "sieve_preset_2": "Her zaman belirli bir gönderenin e-postasını görüldüğü gibi işaretleyin",
+        "add_bcc_entry": "BCC haritası ekle",
+        "add_domain_alias": "Alan adı ekle",
+        "add_domain_record_first": "Lütfen önce bir alan adı ekleyin",
+        "add_filter": "Filtre ekle",
+        "add_mailbox": "Posta kutusu ekle",
+        "add_recipient_map_entry": "Alıcı haritası ekle",
+        "add_resource": "Kaynak ekle",
+        "add_template": "Şablon Ekle",
+        "alias_domain_backupmx": "Takma alan adı geçiş alanı için etkin değil",
+        "aliases": "Takma Adlar",
+        "all_domains": "Tüm Alan Adları",
+        "allow_from_smtp": "Yalnızca bu IP'lerin <b>SMTP</b> kullanmasına izin verin",
+        "allowed_protocols": "Doğrudan kullanıcı erişimi için izin verilen protokoller (uygulama parola protokollerini etkilemez)",
+        "backup_mx": "Geçiş alanı",
+        "bcc": "BCC",
+        "bcc_destination": "Gizli hedef",
+        "bcc_destinations": "Gizli hedef",
+        "bcc_local_dest": "Yerel hedef",
+        "bcc_map": "BCC haritası",
+        "bcc_map_type": "BCC türü",
+        "bcc_maps": "BCC haritaları",
+        "bcc_rcpt_map": "Alıcı haritası",
+        "bcc_sender_map": "Gönderen haritası",
+        "bcc_to_rcpt": "Alıcı harita türüne geç",
+        "bcc_to_sender": "Gönderici harita türüne geç",
+        "bcc_type": "BCC türü",
+        "booking_null": "Her zaman ücretsiz olarak göster",
+        "booking_0_short": "Her zaman ücretsiz",
+        "description": "Açıklama",
+        "disable_login": "Oturum açmaya izin verme (gelen posta hala kabul edilir)",
+        "disable_x": "Devre dışı bırak",
+        "dkim_domains_selector": "Seçici",
+        "dkim_key_length": "DKIM anahtar uzunluğu (bit)",
+        "domain": "Etki Alanı",
+        "domain_aliases": "Alan adı takma adları",
+        "domain_templates": "Etki Alanı Şablonları",
+        "domain_quota": "Kota",
+        "domain_quota_total": "Toplam alan kotası",
+        "domains": "Etki Alanları",
+        "edit": "Düzenle",
+        "empty": "Sonuç yok",
+        "enable_x": "Etkinleştir",
+        "excludes": "Hariç tutulanlar",
+        "filter_table": "Tabloyu filtrele",
+        "filters": "Filtreler",
+        "fname": "Tam adı",
+        "gal": "Genel Adres Listesi",
+        "goto_ham": "<b>ham</b> olarak öğrenin",
+        "goto_spam": "<b>spam</b> olarak öğrenin",
+        "hourly": "Saatlik",
+        "in_use": "Kullanılan (%)",
+        "inactive": "Pasif",
+        "kind": "Nitelik",
+        "last_mail_login": "Son posta girişi",
+        "last_modified": "Son değişiklik",
+        "last_pw_change": "Son şifre değişikliği",
+        "last_run": "Son çalıştırma",
+        "last_run_reset": "Sonrakini planla",
+        "max_aliases": "Max. kısayollar",
+        "max_mailboxes": "Max. mail kutuları",
+        "max_quota": "Mail kutusu başına max. kota",
+        "multiple_bookings": "Çoklu rezervasyonlar",
+        "never": "Hiçbir zaman",
+        "no": "&#10005;",
+        "no_record": "%s nesnesi için kayıt yok",
+        "no_record_single": "Kayıt yok",
+        "open_logs": "Logları aç",
+        "owner": "Sahip",
+        "private_comment": "Özel yorum",
+        "recipient": "Alıcı",
+        "recipient_map_info": "Alıcı haritaları, teslim edilmeden önce bir mesajdaki hedef adresi değiştirmek için kullanılır.",
+        "recipient_map_new": "Yeni alıcı",
+        "recipient_map_old_info": "Bir alıcı eşleme orijinal hedefi, geçerli e-posta adresleri veya bir alan adı olmalıdır.",
+        "recipient_maps": "Alıcı haritaları",
+        "relay_all": "Tüm alıcıları ilet",
+        "relay_unknown": "Bilinmeyen posta kutularını aktar",
+        "sieve_preset_1": "Olası tehlikeli dosya türlerine sahip postaları atın",
+        "sieve_preset_3": "Sessizce atın, tüm diğer elek işlemlerini durdurun",
+        "sieve_preset_4": "INBOX'a dosyalayın, elek filtreleriyle daha fazla işlemi atlayın",
+        "sieve_preset_5": "Otomatik yanıtlayıcı (tatil)",
+        "sieve_preset_6": "Postayı reddedildi olarak yanıtla",
+        "sieve_preset_7": "Yönlendir ve sakla/bırak",
+        "sieve_preset_8": "Gönderenin parçası olduğu bir takma ad adresine gönderilen mesajı atın",
+        "sieve_preset_header": "Lütfen aşağıdaki örnek ön ayarlara bakın. Daha fazla ayrıntı için <a href=\\\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\\\" target=\\\"_blank\\\">Wikipedia</a>'ya bakın.",
+        "sogo_visible": "Takma ad SOGo'da görünür",
+        "sogo_visible_n": "SOGo'da takma adı gizle",
+        "sogo_visible_y": "SOGo'da takma adı göster",
+        "sync_jobs": "İşleri senkronize et",
+        "syncjob_check_log": "Günlüğü kontrol et",
+        "syncjob_last_run_result": "Son çalıştırma sonucu",
+        "syncjob_EX_OK": "Başarılı",
+        "syncjob_EXIT_CONNECTION_FAILURE": "Bağlantı sorunu",
+        "syncjob_EXIT_TLS_FAILURE": "Şifreli bağlantıyla ilgili sorun",
+        "syncjob_EXIT_OVERQUOTA": "Hedef posta kutusu kotayı aştı",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Uzak sunucuya bağlanılamıyor",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Yanlış kullanıcı adı veya şifre",
+        "table_size": "Tablo boyutu",
+        "table_size_show_n": "%s öğeleri göster",
+        "target_address": "Adrese git",
+        "target_domain": "Hedef alan",
+        "templates": "Şablonlar",
+        "template": "Şablon",
+        "tls_enforce_out": "TLS gidenini uygula",
+        "tls_map_dest_info": "Örnekler: example.org, .example.org, [mail.example.org]:25",
+        "tls_map_policy": "Politika",
+        "tls_policy_maps": "TLS politika haritaları",
+        "username": "Kullanıcı Adı",
+        "waiting": "Bekliyor...",
+        "weekly": "Haftalık",
+        "yes": "OK",
+        "recipient_map_new_info": "Alıcı harita hedefi geçerli bir e-posta adresi olmalıdır.",
+        "recipient_map_old": "Orijinal alıcı",
+        "tls_map_dest": "Hedef",
+        "tls_map_parameters": "Parametreler"
+    },
+    "login": {
+        "mobileconfig_info": "İstenen Apple bağlantı profilini indirmek için lütfen posta kutusu kullanıcısı olarak oturum açın.",
+        "delayed": "Giriş %s saniye gecikti.",
+        "fido2_webauthn": "FIDO2/WebAuthn Giriş",
+        "login": "Giriş",
+        "password": "Şifre",
+        "username": "Kullanıcı Adı",
+        "other_logins": "Anahtar girişi"
+    },
+    "success": {
+        "bcc_saved": "BCC harita girişi kaydedildi",
+        "item_deleted": "Öğe %s başarıyla silindi",
+        "verified_webauthn_login": "Doğrulanmış WebAuthn girişi",
+        "f2b_modified": "Fail2ban parametrelerinde yapılan değişiklikler kaydedildi",
+        "rl_saved": "Kaydedilen %s nesnesi için hız sınırı",
+        "alias_added": "Takma ad adresi %s (%d) eklendi",
+        "aliasd_modified": "%s takma ad etki alanında yapılan değişiklikler kaydedildi",
+        "global_filter_written": "Filtre dosyaya başarıyla yazıldı",
+        "dkim_removed": "DKIM anahtarı %s kaldırıldı",
+        "pushover_settings_edited": "Pushover ayarları başarıyla ayarlandı, lütfen kimlik bilgilerini doğrulayın.",
+        "verified_yotp_login": "Doğrulanmış Yubico OTP girişi",
+        "deleted_syncjobs": "Silinen senkronizasyon işleri: %s",
+        "sogo_profile_reset": "%s kullanıcısı için SOGo profili sıfırlandı",
+        "domain_admin_removed": "Alan yöneticisi %s kaldırıldı",
+        "domain_admin_modified": "Alan yöneticisi %s'de yapılan değişiklikler kaydedildi",
+        "domain_footer_modified": "Domain footer değişiklikleri %s kaydedildi",
+        "domain_removed": "%s etki alanı kaldırıldı",
+        "dovecot_restart_success": "Dovecot başarıyla yeniden başlatıldı",
+        "hash_deleted": "Hash silindi",
+        "items_deleted": "Öğe %s başarıyla silindi",
+        "items_released": "Seçilen öğeler yayınlandı.",
+        "learned_ham": "Kimlik %s jambon olarak başarıyla öğrenildi",
+        "license_modified": "Lisansta yapılan değişiklikler kaydedildi",
+        "logged_in_as": "%s olarak oturum açıldı",
+        "mailbox_added": "Posta kutusu %s eklendi",
+        "mailbox_modified": "%s posta kutusunda yapılan değişiklikler kaydedildi",
+        "mailbox_removed": "Posta kutusu %s kaldırıldı",
+        "nginx_reloaded": "Nginx yeniden yüklendi",
+        "object_modified": "%s nesnesindeki değişiklikler kaydedildi",
+        "reset_main_logo": "Varsayılan logoya sıfırla",
+        "saved_settings": "Kaydedilen ayarlar",
+        "eas_reset": "%s kullanıcısı için ActiveSync cihazları sıfırlandı",
+        "domain_added": "%s etki alanı eklendi",
+        "template_modified": "%s şablonuna değişiklikler işlendi",
+        "ui_texts": "Kullanıcı arayüzü metinlerinde yapılan değişiklikler kaydedildi",
+        "template_added": "%s şablonu eklendi",
+        "acl_saved": "%s nesnesi için ACL kaydedildi",
+        "admin_added": "%s yöneticisi eklendi",
+        "admin_api_modified": "API'deki değişiklikler kaydedildi",
+        "admin_modified": "Yönetici değişiklikleri kaydedildi",
+        "admin_removed": "%s yöneticisi kaldırıldı",
+        "alias_domain_removed": "Takma ad alan adı %s kaldırıldı",
+        "alias_modified": "%s takma ad adresindeki değişiklikler kaydedildi",
+        "alias_removed": "%s takma adı kaldırıldı",
+        "aliasd_added": "%s takma ad alanı eklendi",
+        "app_links": "Uygulama bağlantılarında yapılan değişiklikler kaydedildi",
+        "app_passwd_added": "Yeni uygulama şifresi eklendi",
+        "app_passwd_removed": "Kaldırılan uygulama parolası kimliği %s",
+        "bcc_deleted": "BCC harita girişleri silindi: %s",
+        "bcc_edited": "BCC harita girişi %s düzenlendi",
+        "cors_headers_edited": "CORS ayarları kaydedildi",
+        "db_init_complete": "Veritabanı başlatma işlemi tamamlandı",
+        "delete_filter": "Silinen filtre kimliği %s",
+        "delete_filters": "Silinen filtreler: %s",
+        "deleted_syncjob": "Syncjob kimliği %s silindi.",
+        "dkim_added": "DKIM anahtarı %s kaydedildi",
+        "domain_add_dkim_available": "Bir DKIM anahtarı zaten mevcuttu",
+        "dkim_duplicated": "%s etki alanı için DKIM anahtarı %s'ye kopyalandı",
+        "domain_admin_added": "Alan yöneticisi %s eklendi",
+        "domain_modified": "%s etki alanında yapılan değişiklikler kaydedildi",
+        "f2b_banlist_refreshed": "Banlist ID başarıyla yenilendi.",
+        "forwarding_host_added": "Yönlendirme ana bilgisayarı %s eklendi",
+        "forwarding_host_removed": "Yönlendirme ana bilgisayarı %s kaldırıldı",
+        "ip_check_opt_in_modified": "IP kontrolü başarıyla kaydedildi",
+        "item_released": "Öğe %s yayınlandı",
+        "password_policy_saved": "Parola politikası başarıyla kaydedildi",
+        "qlearn_spam": "Mesaj kimliği %s spam olarak öğrenildi ve silindi",
+        "queue_command_success": "Kuyruk komutu başarıyla tamamlandı",
+        "recipient_map_entry_deleted": "Alıcı harita kimliği %s silindi",
+        "recipient_map_entry_saved": "Alıcı harita girişi \\\"%s\\\" kaydedildi",
+        "relayhost_added": "%s harita girişi eklendi",
+        "relayhost_removed": "%s harita girişi kaldırıldı",
+        "resource_added": "Kaynak %s eklendi",
+        "resource_modified": "%s posta kutusunda yapılan değişiklikler kaydedildi",
+        "resource_removed": "Kaynak %s kaldırıldı",
+        "rspamd_ui_pw_set": "Rspamd UI parolası başarıyla ayarlandı",
+        "settings_map_added": "Ayarlar haritası girişi eklendi",
+        "settings_map_removed": "Kaldırılan ayarlar haritası kimliği %s",
+        "template_removed": "%s şablonu silindi",
+        "tls_policy_map_entry_deleted": "TLS politika haritası kimliği %s silindi",
+        "tls_policy_map_entry_saved": "TLS ilke haritası girişi \\\"%s\\\" kaydedildi",
+        "upload_success": "Dosya başarıyla yüklendi",
+        "verified_fido2_login": "Doğrulanmış FIDO2 girişi",
+        "verified_totp_login": "Doğrulanmış TOTP girişi"
+    },
+    "quarantine": {
+        "remove": "Kaldır",
+        "disabled_by_config": "Geçerli sistem yapılandırması, karantina işlevini devre dışı bırakır. Lütfen karantina öğeleri için \\\"posta kutusu başına tutma\\\" ve \\\"maksimum boyut\\\" ayarlayın.",
+        "qinfo": "Karantina sistemi, reddedilen postaları veritabanına (gönderene teslim edilmiş bir posta izlenimi verilmeyecek</em>) ve bir posta kutusunun Önemsiz klasörüne kopya olarak teslim edilen postayı kaydeder.\\r\\n <br>\\\"Spam olarak öğren ve sil\\\", Bayes teoremi aracılığıyla bir mesajı spam olarak öğrenecek ve ayrıca gelecekte benzer mesajları reddetmek için bulanık karmaları hesaplayacaktır.\\r\\n <br>Lütfen birden fazla öğrenmenin olduğunu unutmayın. iletiler - sisteminize bağlı olarak - zaman alabilir.<br>Kara listeye alınan öğeler karantinadan hariç tutulur.",
+        "sender_header": "Gönderen (\"Kimden\" başlığı)",
+        "table_size": "Tablo boyutu",
+        "confirm_delete": "Bu öğenin silinmesini onaylayın.",
+        "danger": "Tehlike",
+        "deliver_inbox": "Gelen kutusuna teslim et",
+        "download_eml": "İndir (.eml)",
+        "show_item": "Öğeyi göster",
+        "spam": "Spam",
+        "spam_score": "Skor",
+        "subj": "Konu",
+        "table_size_show_n": "%s öğeleri göster",
+        "text_from_html_content": "İçerik (dönüştürülmüş html)",
+        "text_plain_content": "İçerik (metin/düz)",
+        "toggle_all": "Hepsini aç/kapat",
+        "type": "Tür",
+        "qhandler_success": "İstek sisteme başarıyla gönderildi. Artık pencereyi kapatabilirsiniz.",
+        "recipients": "Alıcılar",
+        "refresh": "Yenile",
+        "received": "Alındı.",
+        "action": "İşlem",
+        "atts": "Ekler",
+        "check_hash": "Dosya hash @ VT ara",
+        "confirm": "Onayla",
+        "empty": "Sonuç Yok",
+        "high_danger": "Yüksek",
+        "info": "Bilgi",
+        "junk_folder": "Gereksiz klasör",
+        "learn_spam_delete": "Spam olarak öğren ve sil",
+        "low_danger": "Düşük",
+        "medium_danger": "Orta",
+        "neutral_danger": "Nötr",
+        "notified": "Bildirildi.",
+        "qid": "Rspamd QID",
+        "qitem": "Karantina öğesi",
+        "quarantine": "Karantina",
+        "quick_actions": "İşlemler",
+        "quick_delete_link": "Hızlı silme bağlantısını aç",
+        "quick_info_link": "Bilgi bağlantısını aç",
+        "quick_release_link": "Hızlı yayın bağlantısını aç",
+        "rcpt": "Alıcı",
+        "rejected": "Reddedildi.",
+        "release": "Serbest Bırak",
+        "release_body": "Mesajınızı eml dosyası olarak bu mesaja ekledik.",
+        "release_subject": "Potansiyel olarak zarar veren karantina öğesi %s",
+        "rewrite_subject": "Konuyu yeniden yaz",
+        "rspamd_result": "Rspamd sonucu",
+        "sender": "Gönderen (SMTP)",
+        "settings_info": "Karantinaya alınacak maksimum öğe miktarı: %s<br>Maksimum e-posta boyutu: %s MiB"
+    },
+    "tfa": {
+        "waiting_usb_register": "<i>USB cihazı bekleniyor...</i><br><br>Lütfen şifrenizi yukarıya girin ve USB cihazınızdaki düğmeye dokunarak kaydınızı onaylayın.",
+        "scan_qr_code": "Lütfen aşağıdaki kodu kimlik doğrulama uygulamanızla tarayın veya kodu manuel olarak girin.",
+        "u2f_deprecated": "Anahtarınız, kullanımdan kaldırılmış U2F yöntemi kullanılarak kaydedilmiş gibi görünüyor. İki Faktörlü Kimlik Doğrulamayı sizin için devre dışı bırakacağız ve Anahtarınızı sileceğiz.",
+        "none": "Devre dışı bırak",
+        "authenticators": "Kimlik doğrulayıcılar",
+        "api_register": "%s, Yubico Bulut API'sini kullanır. Lütfen anahtarınız için <a href=\\\"https://upgrade.yubico.com/getapikey/\\\" target=\\\"_blank\\\">buradan bir API anahtarı edinin. </a>",
+        "confirm": "Onayla",
+        "confirm_totp_token": "Lütfen oluşturulan jetonu girerek değişikliklerinizi onaylayın",
+        "delete_tfa": "Çift faktörlü doğrulamayı kaldırın",
+        "disable_tfa": "Bir olayla başarılı girişe kadar çift geçişli çıkışı devre dışı bırak",
+        "enter_qr_code": "Cihazınız QR kodlarını tarayamıyorsa TOTP kodunuz",
+        "error_code": "Hata kodu",
+        "init_webauthn": "Başlatılıyor, lütfen bekleyin...",
+        "key_id": "Cihazınız için bir tanımlayıcı",
+        "key_id_totp": "Anahtarınız için bir tanımlayıcı",
+        "reload_retry": "- (hata devam ederse tarayıcıyı yeniden yükleyin)",
+        "select": "Lütfen seçiniz",
+        "set_tfa": "Çift faktörlü yöntem metodu",
+        "tfa_token_invalid": "Çift faktörlü doğrulama geçersiz",
+        "totp": "Zamana dayalı OTP (Google Authenticator, Authy, vb.)",
+        "u2f_deprecated_important": "Lütfen Anahtarınızı yeni WebAuthn yöntemiyle yönetici panelinde kaydedin.",
+        "webauthn": "WebAuthn kimlik doğrulaması",
+        "waiting_usb_auth": "<i>USB cihazı bekleniyor...</i><br><br>Lütfen şimdi USB cihazınızdaki düğmeye dokunun.",
+        "yubi_otp": "Yubico OTP kimlik doğrulaması",
+        "start_webauthn_validation": "Doğrulamayı başlat",
+        "tfa": "Çift faktörlü doğrulama"
+    },
+    "start": {
+        "mailcow_panel_detail": "<b>Etki alanı yöneticileri</b> posta kutuları ve takma adlar oluşturur, değiştirir veya siler, alan adlarını değiştirir ve atanan alan adları hakkında daha fazla bilgi okur.<br>\\r\\n<b>Posta kutusu kullanıcıları</b> zaman oluşturabilir -sınırlı takma adlar (spam takma adları), şifrelerini ve spam filtresi ayarlarını değiştirin.",
+        "imap_smtp_server_auth_info": "Lütfen tam e-posta adresinizi ve PLAIN kimlik doğrulama mekanizmasını kullanın.<br>\\r\\nGiriş verileriniz, sunucu tarafı zorunlu şifreleme ile şifrelenecektir.",
+        "mailcow_apps_detail": "Postalarınıza, takviminize, kişilerinize ve daha fazlasına erişmek için bir mailcow uygulaması kullanın.",
+        "help": "Yardım panelini göster/gizle"
+    },
+    "queue": {
+        "hold_mail_legend": "Seçilen postaları bekletir. (Daha fazla teslimat girişimini önler)",
+        "legend": "Posta kuyruğu eylemleri işlevleri:",
+        "ays": "Lütfen geçerli kuyruktaki tüm öğeleri silmek istediğinizi onaylayın.",
+        "deliver_mail": "Teslim Et",
+        "deliver_mail_legend": "Seçilen postaları yeniden teslim etme girişimleri.",
+        "delete": "Tümünü Sil",
+        "flush": "Kuyruğu Temizle",
+        "info": "Posta kuyruğu, teslim edilmeyi bekleyen tüm e-postaları içerir. Bir mail uzun süre mail kuyruğunda kalırsa sistem tarafından otomatik olarak silinir.<br>İlgili mailin hata mesajı mailin neden teslim edilemediği hakkında bilgi verir.",
+        "queue_manager": "Kuyruk Yöneticisi",
+        "show_message": "Mesajı göster",
+        "unban": "Yasağı Kaldır",
+        "unhold_mail": "Bırak",
+        "unhold_mail_legend": "Seçilen postaları teslimat için serbest bırakır. (önceden bekletme gerektirir)",
+        "hold_mail": "Tut"
+    },
+    "fido2": {
+        "confirm": "Onayla",
+        "fido2_auth": "FIDO2 ile giriş yap",
+        "fido2_success": "Cihaz başarıyla kaydedildi",
+        "set_fido2": "FIDO2 cihazını kaydedin",
+        "set_fn": "Kolay ad belirleyin",
+        "start_fido2_validation": "FIDO2 doğrulamasını başlat",
+        "fido2_validation_failed": "Doğrulama başarısız",
+        "fn": "Kolay ad",
+        "known_ids": "Bilinen Kimlikler",
+        "none": "Engellendi.",
+        "register_status": "Kayıt Durumu",
+        "rename": "Yeniden adlandır",
+        "set_fido2_touchid": "Apple M1'de Touch ID'yi kaydedin"
+    },
+    "footer": {
+        "confirm_delete": "Silmeyi Onayla",
+        "delete_now": "Şimdi sil",
+        "delete_these_items": "Lütfen aşağıdaki nesne kimliğindeki değişikliklerinizi onaylayın",
+        "restart_container_info": "<b>Önemli:</b> Düzgün bir yeniden başlatmanın tamamlanması biraz zaman alabilir, lütfen bitmesini bekleyin.",
+        "restart_now": "Şimdi yeniden başlat",
+        "restarting_container": "Konteyner yeniden başlatılıyor, bu işlem biraz zaman alabilir",
+        "hibp_check": "haveibeenpwned.com adresinden kontrol edin",
+        "cancel": "İptal",
+        "hibp_nok": "Eşleşti! Bu potansiyel olarak tehlikeli bir şifredir!",
+        "hibp_ok": "Eşleşme bulunamadı.",
+        "loading": "Lütfen bekleyin...",
+        "nothing_selected": "Seçim yapılmadı",
+        "restart_container": "Konteyneri yeniden başlat"
+    },
+    "header": {
+        "administration": "Yapılandırma ve Ayrıntılar",
+        "apps": "Uygulamalar",
+        "debug": "Bilgi",
+        "email": "E-Posta",
+        "mailcow_system": "Sistem",
+        "mailcow_config": "Yapılandırma",
+        "quarantine": "Karantina",
+        "restart_netfilter": "netfilter'ı yeniden başlat",
+        "restart_sogo": "SOGo'yu yeniden başlat",
+        "user_settings": "Kullanıcı Ayarları"
+    },
+    "info": {
+        "awaiting_tfa_confirmation": "TFA onayı bekleniyor",
+        "no_action": "Uygulanabilir bir işlem yok",
+        "session_expires": "Oturumunuz yaklaşık 15 saniye içinde sona erecek"
+    },
+    "oauth2": {
+        "access_denied": "OAuth2 aracılığıyla erişim izni vermek için lütfen posta kutusu sahibi olarak giriş yapın.",
+        "authorize_app": "Uygulamayı yetkilendir",
+        "deny": "Reddet",
+        "permit": "Uygulamayı yetkilendir",
+        "profile": "Profil",
+        "profile_desc": "Kişisel bilgileri görüntüleyin: kullanıcı adı, tam ad, oluşturuldu, değiştirildi, etkin",
+        "scope_ask_permission": "Bir uygulama aşağıdaki izinleri istedi"
+    },
+    "ratelimit": {
+        "disabled": "Engellendi",
+        "second": "mesaj / saniye",
+        "minute": "mesaj / dakika",
+        "hour": "mesaj / saat",
+        "day": "mesaj / gün"
+    },
+    "user": {
+        "advanced_settings": "Gelişmiş ayarlar",
+        "aliases_also_send_as": "Kullanıcı olarak göndermeye de izin verilir",
+        "direct_aliases_desc": "Doğrudan takma ad adresleri spam filtresi ve TLS ilke ayarlarından etkilenir.",
+        "direct_protocol_access": "Bu posta kutusu kullanıcısının aşağıdaki protokollere ve uygulamalara <b>doğrudan, harici erişimi</b> vardır. Bu ayar yöneticiniz tarafından kontrol edilir. Bireysel protokollere ve uygulamalara erişim vermek için uygulama şifreleri oluşturulabilir.< br>\\\"Web postasında oturum aç\\\" düğmesi, SOGo'da tek oturum açmayı sağlar ve her zaman kullanılabilir.",
+        "pushover_info": "Push bildirim ayarları, takma adlar (paylaşılan, paylaşılmayan, etiketli) dahil <b>%s</b> adresine teslim edilen tüm temiz (spam olmayan) postalar için geçerli olacaktır.",
+        "last_pw_change": "Son şifre değişikliği",
+        "mailbox_details": "Detaylar",
+        "quarantine_notification_info": "Bir bildirim gönderildiğinde, öğeler \\\"bildirildi\\\" olarak işaretlenecek ve bu belirli öğe için başka bildirim gönderilmeyecek.",
+        "alias_extend_all": "Takma adları 1 saat uzat",
+        "app_hint": "Uygulama parolaları, IMAP, SMTP, CalDAV, CardDAV ve EAS oturum açma bilgileriniz için alternatif parolalardır. Kullanıcı adı değişmeden kalır. SOGo web postası, uygulama parolalarıyla kullanılamaz.",
+        "apple_connection_profile_mailonly": "Bu bağlantı profili, bir Apple aygıtı için IMAP ve SMTP yapılandırma parametrelerini içerir.",
+        "no_last_login": "Son kullanıcı arayüzü oturum açma bilgisi yok",
+        "pushover_vars": "Gönderen filtresi tanımlanmadığında, tüm postalar dikkate alınacaktır.<br>Düzenli ifade filtreleri ve tam gönderen kontrolleri ayrı ayrı tanımlanabilir ve sıralı olarak değerlendirilecektir. Birbirlerine bağlı değildirler.<br> Metin ve başlık için kullanılabilir değişkenler (lütfen veri koruma politikalarını dikkate alın)",
+        "shared_aliases_desc": "Paylaşılan takma adlar, spam filtresi veya şifreleme politikası gibi kullanıcıya özel ayarlardan etkilenmez. Karşılık gelen spam filtreleri yalnızca bir yönetici tarafından etki alanı çapında bir politika olarak yapılabilir.",
+        "action": "Eylem",
+        "create_app_passwd": "Uygulama parolası oluştur",
+        "create_syncjob": "Yeni senkronizasyon işi oluştur",
+        "change_password": "Şifre değiştirme",
+        "clear_recent_successful_connections": "Görünen başarılı bağlantıları temizle",
+        "client_configuration": "E-posta istemcileri ve akıllı telefonlar için yapılandırma kılavuzlarını göster",
+        "messages": "mesajlar",
+        "spam_aliases": "Geçici e-posta takma adları",
+        "spam_score_reset": "Sunucu varsayılanına sıfırla",
+        "years": "Yıllar",
+        "change_password_hint_app_passwords": "Hesabınızda değiştirilmeyecek  uygulama şifresi var. Bunları yönetmek için Uygulama şifreleri sekmesine gidin.",
+        "pushover_evaluate_x_prio": "Yüksek öncelikli postayı ilet [<code>X-Priority: 1</code>]",
+        "spamfilter_table_add": "Öge Ekle",
+        "spamfilter_table_domain_policy": "n/a (alan politikası)",
+        "spamfilter_table_empty": "Görüntülenecek veri yok\"",
+        "spamfilter_table_remove": "Kaldır",
+        "tls_policy_warning": "<strong>Uyarı:</strong> Şifreli posta aktarımını zorunlu kılmaya karar verirseniz, e-postalarınızı kaybedebilirsiniz.<br>Politikayı karşılamayan iletiler, posta sistemi tarafından kesin bir başarısızlıkla geri döner.< br>Bu seçenek, birincil e-posta adresiniz (oturum açma adı), takma ad alanlarından türetilen tüm adresler ve ayrıca <b>hedef olarak yalnızca bu tek posta kutusuyla</b> takma ad adresleri için geçerlidir.",
+        "interval": "Aralık",
+        "username": "Kullanıcı adı",
+        "verify": "Doğrula",
+        "waiting": "Bekliyor",
+        "spamfilter_default_score": "Varsayılan değerler",
+        "status": "Durum",
+        "active": "Aktif",
+        "active_sieve": "Aktif filtre",
+        "alias": "Takma ad",
+        "alias_create_random": "Rastgele takma ad oluştur",
+        "alias_full_date": "d.m.Y, H:i:s T",
+        "alias_remove_all": "Tüm takma adları kaldır",
+        "alias_select_validity": "Geçerlilik süresi",
+        "alias_time_left": "Kalan süre",
+        "alias_valid_until": "Tarihe Kadar Geçerli",
+        "aliases_send_as_all": "Aşağıdaki alan(lar) ve takma ad alanları için gönderici erişimini kontrol etmeyin",
+        "allowed_protocols": "İzin verilen protokoller",
+        "app_name": "Uygulama adı",
+        "app_passwds": "Uygulama şifreleri",
+        "apple_connection_profile": "Apple bağlantı profili",
+        "apple_connection_profile_complete": "Bu bağlantı profili, bir Apple aygıtı için IMAP ve SMTP parametrelerinin yanı sıra CalDAV (takvimler) ve CardDAV (kişiler) yollarını içerir.",
+        "apple_connection_profile_with_app_password": "Yeni bir uygulama parolası oluşturulur ve profile eklenir, böylece cihazınızı kurarken parola girilmesi gerekmez. Posta kutunuza tam erişim sağladığı için lütfen dosyayı paylaşmayın.",
+        "attribute": "Özellik",
+        "created_on": "Oluşturulma tarihi",
+        "daily": "Günlük",
+        "day": "Gün",
+        "delete_ays": "Lütfen silme işlemini onaylayın.",
+        "direct_aliases": "Doğrudan takma ad adresleri",
+        "eas_reset_help": "Birçok durumda cihaz önbelleğini sıfırlama, bozuk bir ActiveSync profilini kurtarmaya yardımcı olur.<br><b>Dikkat:</b> Tüm öğeler yeniden indirilecek!",
+        "edit": "Düzenle",
+        "email": "e-posta",
+        "email_and_dav": "e-posta, takvimler ve kişiler",
+        "empty": "Sonuç yok",
+        "encryption": "Şifreleme",
+        "excludes": "Hariçtir",
+        "expire_in": "Son kullanma tarihi",
+        "fido2_webauthn": "FIDO2/WebAuthn",
+        "force_pw_update": "Grup yazılımıyla ilgili hizmetlere erişebilmek için yeni bir parola <b>gerekir</b> ayarlamalısınız.",
+        "from": "Kimden",
+        "generate": "Oluştur",
+        "hour": "Saat",
+        "hourly": "Saatlik",
+        "hours": "Saatler",
+        "in_use": "Kullanılmış",
+        "is_catch_all": "Alan/alanlar için tümünü yakala",
+        "last_mail_login": "Son posta girişi",
+        "last_run": "Son çalıştırma",
+        "last_ui_login": "Kullanıcının son  arayüzü girişi",
+        "loading": "Yükleniyor...",
+        "login_history": "Giriş geçmişi",
+        "mailbox": "Posta Kutusu",
+        "mailbox_general": "Genel",
+        "mailbox_settings": "Ayarlar",
+        "month": "Ay",
+        "months": "Aylar",
+        "never": "Asla",
+        "new_password": "Yeni şifre",
+        "new_password_repeat": "Onay şifresi (tekrar)",
+        "no_active_filter": "Aktif filtre mevcut değil",
+        "no_record": "Kayıt yok",
+        "open_logs": "Günlükleri açın",
+        "open_webmail_sso": "Web postasına giriş yapın",
+        "password": "Şifre",
+        "password_now": "Geçerli şifre (değişiklikleri onaylayın)",
+        "password_repeat": "Şifre (tekrar)",
+        "pushover_only_x_prio": "Yalnızca yüksek öncelikli postaları dikkate alın [<code>X-Priority: 1</code>]",
+        "pushover_sender_array": "Aşağıdaki gönderen e-posta adreslerini <small>(virgülle ayrılmış)</small> göz önünde bulundurun",
+        "pushover_sender_regex": "Gönderenleri aşağıdaki normal ifadeye göre eşleştir",
+        "pushover_text": "Bildirim metni",
+        "pushover_title": "Bildirim başlığı",
+        "pushover_sound": "Ses",
+        "pushover_verify": "Kimlik bilgilerini doğrula",
+        "q_add_header": "Önemsiz klasör",
+        "q_all": "Tüm  kategoriler",
+        "quarantine_category": "Karantina bildirim kategorisi",
+        "quarantine_category_info": "\\\"Reddedildi\\\" bildirim kategorisi reddedilen postaları içerirken, \\\"Önemsiz klasör\\\" bir kullanıcıyı önemsiz klasörüne konan postalar hakkında bilgilendirir.",
+        "quarantine_notification": "Karantina bildirimleri",
+        "recent_successful_connections": "Başarılı bağlantılar görüldü",
+        "remove": "Kaldır.",
+        "running": "Çalıştırılıyor...",
+        "save": "Değişiklikleri Kaydet",
+        "save_changes": "Değişiklikleri Kaydet",
+        "sender_acl_disabled": "<span class=\\\"label label-danger\\\">Gönderen denetimi devre dışı</span>",
+        "shared_aliases": "Paylaşılan takma ad adresleri",
+        "show_sieve_filters": "Etkin kullanıcı elek filtresini göster",
+        "sogo_profile_reset": "SOGo profilini sıfırla",
+        "sogo_profile_reset_help": "Bu, kullanıcının SOGo profilini yok edecek ve <b>geri alınamayan tüm kişi ve takvim verilerini siler</b>.",
+        "sogo_profile_reset_now": "Profili şimdi sıfırla",
+        "spamfilter": "Spam filtresi",
+        "spamfilter_behavior": "Derecelendirme",
+        "spamfilter_bl": "Kara liste",
+        "sync_jobs": "İşleri senkronize et",
+        "spamfilter_bl_desc": "Spam olarak sınıflandırılacak ve reddedilecek <b>her zaman</b> kara listeye alınan e-posta adresleri. Reddedilen postalar karantinaya <b>kopyalanmaz</b>. Joker karakterler kullanılabilir. Bir filtre yalnızca şunlara uygulanır tüm takma adları ve bir posta kutusunun kendisi hariç doğrudan takma adlar (tek bir hedef posta kutusuna sahip takma adlar).",
+        "spamfilter_green": "Yeşil: bu mesaj spam değil",
+        "spamfilter_hint": "İlk değer \\\"düşük spam puanını\\\" tanımlar, ikincisi \\\"yüksek spam puanını\\\" temsil eder.",
+        "spamfilter_red": "Kırmızı: Bu ileti istenmeyen postadır ve sunucu tarafından reddedilecektir",
+        "spamfilter_table_action": "Eylem",
+        "spamfilter_table_rule": "Kural",
+        "spamfilter_wl": "Beyaz liste",
+        "spamfilter_wl_desc": "Beyaz listeye alınan e-posta adresleri spam olarak <b>asla</b> sınıflandırılmayacak şekilde programlanmıştır. Joker karakterler kullanılabilir. Bir filtre yalnızca, tümünü yakalama takma adları ve bir posta kutusunun kendisi.",
+        "spamfilter_yellow": "Sarı: bu mesaj spam olabilir, spam olarak etiketlenecek ve gereksiz klasörünüze taşınacak",
+        "syncjob_check_log": "İşleri senkronize et",
+        "syncjob_last_run_result": "Son çalıştırma sonucu",
+        "syncjob_EX_OK": "Başarılı",
+        "syncjob_EXIT_CONNECTION_FAILURE": "Bağlantı sorunu",
+        "syncjob_EXIT_TLS_FAILURE": "Şifreli bağlantı ile ilgili sorun",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "Kimlik doğrulama sorunu",
+        "syncjob_EXIT_OVERQUOTA": "Hedef posta kutusu kotayı aştı",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Uzak sunucuya bağlanılamıyor",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Yanlış kullanıcı adı veya şifre",
+        "tag_handling": "Etiketli postalar için işlemeyi ayarla",
+        "tag_help_example": "Etiketli bir e-posta adresi örneği: ben<b>+Facebook</b>@example.org",
+        "tag_help_explain": "Alt klasörde: INBOX (\\\"INBOX/Facebook\\\") altında etiketten sonra adlandırılan yeni bir alt klasör oluşturulacak.<br>\\r\\nKonuda: etiketlerin adı posta konusunun önüne eklenecek, örnek: \\\"[Facebook] Haberlerim\\\".",
+        "tag_in_none": "Hiçbir şey yapma",
+        "tag_in_subfolder": "Alt klasörde",
+        "tag_in_subject": "Konuda",
+        "text": "Metin",
+        "title": "Başlık",
+        "tls_enforce_in": "TLS gelenini zorunlu kıl",
+        "tls_enforce_out": "TLS gidenini zorunlu kıl",
+        "tls_policy": "Şifreleme politikası",
+        "user_settings": "Kullanıcı ayarları",
+        "value": "Değer",
+        "weekly": "Haftalık",
+        "weeks": "Haftalar",
+        "with_app_password": "Uygulama şifresi ile",
+        "year": "Yıl",
+        "eas_reset": "ActiveSync cihaz önbelleğini sıfırla",
+        "eas_reset_now": "Şimdi sıfırla",
+        "q_reject": "Reddedildi",
+        "week": "Hafta"
     }
 }

+ 3 - 3
data/web/lang/lang.uk-ua.json

@@ -525,7 +525,7 @@
         "cname_from_a": "Значення, отримане із запису A/AAAA. Це підтримується, поки запис вказує на правильний ресурс.",
         "dns_records": "Записи DNS",
         "dns_records_data": "Значення",
-        "dns_records_docs": "Також перегляньте <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">документацію</a>.",
+        "dns_records_docs": "Також перегляньте <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">документацію</a>.",
         "dns_records_name": "Назва",
         "dns_records_status": "Статус",
         "optional": "Цей запис необов'язковий.",
@@ -561,6 +561,7 @@
         "extended_sender_acl": "Зовнішні адреси пошти",
         "force_pw_update": "Вимагати зміну пароля при наступному вході до системи",
         "force_pw_update_info": "Цей користувач зможе увійти лише в %s. Паролі додатків залишаються придатними для використання.",
+        "footer_exclude": "Виключити з нижнього колонтитула",
         "full_name": "Повне ім'я",
         "gal": "GAL - Глобальна адресна книга",
         "generate": "згенерувати",
@@ -659,8 +660,7 @@
         },
         "domain_footer_html": "Нижній колонтитул HTML",
         "domain_footer_plain": "ЗВИЧАЙНИЙ нижній колонтитул",
-        "custom_attributes": "Користувацькі атрибути",
-        "mbox_exclude": "Виключити поштові скриньки"
+        "custom_attributes": "Користувацькі атрибути"
     },
     "fido2": {
         "confirm": "Підтвердити",

+ 15 - 7
data/web/lang/lang.zh-cn.json

@@ -336,7 +336,9 @@
         "validate_license_now": "通过证书服务器验证 GUID",
         "verify": "验证",
         "yes": "&#10003;",
-        "options": "选项"
+        "options": "选项",
+        "f2b_max_ban_time": "最长封禁时间(秒)",
+        "copy_to_clipboard": "复制到粘贴板"
     },
     "danger": {
         "access_denied": "访问被拒绝或者表单数据无效",
@@ -356,7 +358,7 @@
         "description_invalid": "%s 的资源描述无效",
         "dkim_domain_or_sel_exists": "\"%s\"的 DKIM 密钥已存在,因此不会被覆盖",
         "dkim_domain_or_sel_invalid": "DKIM 域名或选择器无效: %s",
-        "domain_cannot_match_hostname": "域名与主机名称不匹配",
+        "domain_cannot_match_hostname": "域名不应与主机名相同",
         "domain_exists": "域名 %s 已存在",
         "domain_invalid": "域名地址为空或无效",
         "domain_not_empty": "不能删除非空域名 %s",
@@ -456,7 +458,8 @@
         "validity_missing": "请设置有效期",
         "value_missing": "请填入所有值",
         "yotp_verification_failed": "Yubico OTP 认证失败: %s",
-        "template_exists": "模板 %s 已存在"
+        "template_exists": "模板 %s 已存在",
+        "template_name_invalid": "模板名称无效"
     },
     "debug": {
         "chart_this_server": "图表 (此服务器)",
@@ -487,14 +490,18 @@
         "container_disabled": "容器已被停止或禁用",
         "container_running": "运行中",
         "cores": "核心数",
-        "memory": "内存"
+        "memory": "内存",
+        "error_show_ip": "无法解析公网IP地址",
+        "show_ip": "显示公网IP",
+        "update_available": "有可用更新",
+        "update_failed": "无法检查更新"
     },
     "diagnostics": {
         "cname_from_a": "来自 A/AAAA 记录的值。但只要记录指向正确的资源即可。",
         "dns_records": "DNS 记录",
         "dns_records_24hours": "请注意 DNS 记录的更改可能需要24小时才可以使此页面的当前状态显示正确。此页面为你提供了一个可以便捷查询如何配置 DNS 记录以及检查你的 DNS 记录是否正确的方式。",
         "dns_records_data": "正确数据",
-        "dns_records_docs": "请同时也参考这个<a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">文档</a>.",
+        "dns_records_docs": "请同时也参考这个<a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">文档</a>.",
         "dns_records_name": "名称",
         "dns_records_status": "当前状态",
         "dns_records_type": "类型",
@@ -903,7 +910,7 @@
         "disabled": "禁用",
         "second": "msgs / 秒",
         "minute": "msgs / 分钟",
-        "hour": "msgs / 小",
+        "hour": "msgs / 小",
         "day": "msgs / 天"
     },
     "start": {
@@ -1202,7 +1209,8 @@
         "paginate": {
             "first": "第一页",
             "last": "最后一页",
-            "previous": "上一页"
+            "previous": "上一页",
+            "next": "下一页"
         }
     }
 }

+ 17 - 12
data/web/lang/lang.zh-tw.json

@@ -88,7 +88,7 @@
         "relay_all": "中繼所有收件人",
         "relay_all_info": "↪ 如果選擇<b>不</b>中繼所有收件人,你會需要幫每個應該中繼的收件人新增一個 (\"盲\") 信箱。",
         "relay_domain": "中繼此域名",
-        "relay_transport_info": "<div class=\"label label-info\">資訊</div> 你可以為此域名定義傳輸規則以自訂目的地,如果留空則會遵照 MX 紀錄。",
+        "relay_transport_info": "<div class=\"badge fs-6 bg-info\">資訊</div> 你可以為此域名定義傳輸規則以自訂目的地,如果留空則會遵照 MX 紀錄。",
         "relay_unknown_only": "只為不存在的信箱地址中繼。已存在的信箱地址則在本區域遞送。",
         "relayhost_wrapped_tls_info": "請 <b>不要</b> 使用\"已包裝 TLS\"的通訊埠 (大多為通訊埠 465).<br>\r\n使用其他\"未包裝\"的通訊埠發起 STARTTLS. 你可以在\"TLS 規則表\"中新增強制使用 TLS 的規則。",
         "select": "請選擇...",
@@ -519,14 +519,15 @@
         "show_ip": "顯示公網IP",
         "update_available": "有可用更新",
         "no_update_available": "系統已經是最新版本",
-        "update_failed": "無法檢查更新"
+        "update_failed": "無法檢查更新",
+        "wip": "工作正在進行中"
     },
     "diagnostics": {
         "cname_from_a": "由 A/AAAA 紀錄獲取。只要紀錄指向正確的資源,此功能就會持續運作。",
         "dns_records": "DNS 紀錄",
         "dns_records_24hours": "請注意 DNS 紀錄的更改可能需要 24 小時才能正確顯示於此頁面。此頁面的目的是為了讓你可以輕鬆的了解如何設定 DNS 紀錄並檢查 DNS 是否設定正確。",
         "dns_records_data": "正確值",
-        "dns_records_docs": "請同時另外查看 <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">文件</a>.",
+        "dns_records_docs": "請同時另外查看 <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">文件</a>.",
         "dns_records_name": "名稱",
         "dns_records_status": "目前狀態",
         "dns_records_type": "類型",
@@ -569,6 +570,7 @@
         "extended_sender_acl_info": "如果可以的話,請匯入 DKIM 域名金鑰。<br>\r\n別忘記將此伺服器新增到相應的 SPF TXT 中。<br>\r\n當域名或域名別名被新增時,若其與此外部寄件人地址交疊,則外部寄件人地址會被移除。<br>\r\n填入 @domain.tld 以允許作為 *@domain.tld 發送郵件。",
         "force_pw_update": "在下一次登入時強制要求更新密碼",
         "force_pw_update_info": "此使用者只能登入至 %s。應用程式密碼仍可正常使用",
+        "footer_exclude": "从页脚排除",
         "full_name": "全名",
         "gal": "全域聯絡人清單",
         "gal_info": "<b>全域聯絡人清單</b>包含了域名下的所有物件,且使用者不可編輯。如果關閉,使用者的 空閒/繁忙 訊息將不能在 SOGo 中顯示。<b>重新啟動 SOGo 以應用更改。</b>",
@@ -615,7 +617,7 @@
         "relay_all": "中繼所有收件人",
         "relay_all_info": "↪ 如果選擇<b>不</b>中繼所有收件人,你會需要幫每個應該中繼的收件人新增一個 (\"盲\") 信箱。",
         "relay_domain": "中繼這個域名",
-        "relay_transport_info": "<div class=\"label label-info\">資訊</div> 你可以為此域名定義傳輸規則以自訂目的地,如果留空則會遵照 MX 紀錄。",
+        "relay_transport_info": "<div class=\"badge fs-6 bg-info\">資訊</div> 你可以為此域名定義傳輸規則以自訂目的地,如果留空則會遵照 MX 紀錄。",
         "relay_unknown_only": "只為不存在的信箱地址中繼。已存在的信箱地址則在本區域遞送。",
         "relayhost": "中繼傳輸",
         "remove": "移除",
@@ -623,7 +625,7 @@
         "save": "儲存更改",
         "scope": "範圍",
         "sender_acl": "允許發送為",
-        "sender_acl_disabled": "<span class=\"label label-danger\">寄件人檢查已關閉</span>",
+        "sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">寄件人檢查已關閉</span>",
         "sender_acl_info": "如果信箱使用者 A 被允許以信箱使用者 B 發送郵件,該寄件人地址不會出現在 SOGo 中\"發送自\"的下拉選項中。<br>\r\n信箱使用者 B 需要新增授權以允許信箱使用者 A 選擇 B 的地址作為寄件人;授權方法為,在 SOGo 中點擊右上方信箱名稱左邊的選項按鈕(三個點)並授權。此行為不會套用於信箱別名。",
         "sieve_desc": "簡短描述",
         "sieve_type": "過濾器類型",
@@ -648,7 +650,6 @@
         "validate_save": "驗證並儲存",
         "domain_footer_info": "網域範圍的頁尾將會新增至與該網域內的位址關聯的所有外發電子郵件。 <br> 以下變數可用於頁尾:",
         "custom_attributes": "自訂屬性",
-        "mbox_exclude": "排除信箱",
         "pushover_sound": "聲音"
     },
     "fido2": {
@@ -684,7 +685,7 @@
     "header": {
         "administration": "設定和管理",
         "apps": "應用程式",
-        "debug": "系統訊",
+        "debug": "系統訊",
         "quarantine": "隔離",
         "restart_netfilter": "重新啟動 netfilter",
         "restart_sogo": "重新啟動 SOGo",
@@ -829,7 +830,7 @@
         "sender": "寄件人",
         "set_postfilter": "標記為 postfilter",
         "set_prefilter": "標記為 prefilter",
-        "sieve_info": "你可以為每個使用者儲存多個過濾器,但只能同時啟用一個 prefilter 和一個 postfilter。<br>\r\n過濾器將按清單中的順序依次執行,下一個腳本不會因為上一個腳本失敗或\"keep;\"而停止。更改全域 sieve 腳本會重新啟動 Dovecot。<br><br>全域 sieve prefilter → Prefilter → 使用者腳本 → Postfilter → 全域 sieve postfilter",
+        "sieve_info": "你可以為每個使用者儲存多個過濾器,但只能同時啟用一個 prefilter 和一個 postfilter。<br>\n過濾器將按清單中的順序依次執行,下一個腳本不會因為上一個腳本失敗或保留而停止。更改全域 sieve 腳本會重新啟動 Dovecot。<br><br>全域 sieve prefilter &#8226; Prefilter &#8226; 使用者腳本 &#8226; Postfilter &#8226; 全域 sieve postfilter",
         "sieve_preset_1": "丟棄含有潛在危險檔案格式的信件",
         "sieve_preset_2": "永遠標記來自指定寄件人的郵件為已讀",
         "sieve_preset_3": "無聲刪除,並停止運行後續的 sieve 腳本",
@@ -837,7 +838,7 @@
         "sieve_preset_5": "自動回覆 (休假)",
         "sieve_preset_6": "拒絕郵件並回應",
         "sieve_preset_7": "重新導向並保留/刪除",
-        "sieve_preset_8": "刪除寄件人發送給包含自己別名地址的郵件",
+        "sieve_preset_8": "重新導向來自特定寄件者的電子郵件,標記為已讀取並分類到子資料夾中",
         "sieve_preset_header": "請看下方的範例預設。 查看 <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipedia</a> 以瞭解更多細節。",
         "sogo_visible": "別名會顯示於 SOGo",
         "sogo_visible_n": "在 SOGo 中隱藏別名",
@@ -1171,7 +1172,7 @@
         "running": "運行中",
         "save": "儲存變更",
         "save_changes": "儲存變更",
-        "sender_acl_disabled": "<span class=\"label label-danger\">寄件人檢查已關閉</span>",
+        "sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">寄件人檢查已關閉</span>",
         "shared_aliases": "共享別名地址",
         "shared_aliases_desc": "共用別名不會受使用者的個別設定如垃圾過濾器和加密規則等影響。共享別名地址的垃圾信件過濾只能由管理員透過域名級別規則修改。",
         "show_sieve_filters": "顯示使用者啟用的 sieve 過濾器",
@@ -1231,7 +1232,8 @@
         "year": "年",
         "years": "年",
         "attribute": "屬性",
-        "pushover_sound": "聲音"
+        "pushover_sound": "聲音",
+        "value": "數值"
     },
     "warning": {
         "cannot_delete_self": "不能刪除已登入的使用者",
@@ -1282,6 +1284,9 @@
         "ays": "請確認您要刪除目前隊列中的所有項目。",
         "deliver_mail": "遞送",
         "queue_manager": "隊列管理器",
-        "unhold_mail_legend": "釋放選定的郵件以供投遞。 (需事先持有)"
+        "unhold_mail_legend": "釋放選定的郵件以供投遞。 (需事先持有)",
+        "hold_mail_legend": "保存選定的郵件。(防止進一步的交付嘗試)",
+        "hold_mail": "保留",
+        "unhold_mail": "取消保留"
     }
 }

+ 0 - 1
data/web/templates/base.twig

@@ -157,7 +157,6 @@
   var lang_danger = {{ lang_danger|raw }};
   var docker_timeout = {{ docker_timeout|raw }} * 1000;
   var mailcow_cc_role = '{{ mailcow_cc_role }}';
-  var last_login = '{{ last_login }}';
   var mailcow_info = {
     version_tag: '{{ mailcow_info.version_tag }}',
     last_version_tag: '{{ mailcow_info.last_version_tag }}',

+ 16 - 2
data/web/templates/edit/domain.twig

@@ -26,6 +26,15 @@
                   <input type="hidden" value="0" name="gal">
                   <input type="hidden" value="0" name="relay_all_recipients">
                   <input type="hidden" value="0" name="relay_unknown_only">
+                  <div class="row mb-4">
+                    <label class="control-label col-sm-2" for="domain">{{ lang.mailbox.domain }}</label>
+                    <div class="col-sm-10">
+                      <span class="d-block"><strong>{{ result.domain_h_name }}</strong></span>
+                      {% if result.domain_h_name != result.domain_name %}
+                      <small>{{ result.domain_name }}</small>
+                      {% endif %}
+                    </div>
+                  </div>
                   <div class="row mb-2" data-acl="{{ acl.domain_desc }}">
                     <label class="control-label col-sm-2" for="description">{{ lang.edit.description }}</label>
                     <div class="col-sm-10">
@@ -289,9 +298,9 @@
 {{ lang.edit.domain_footer_info_vars.custom }}</pre>
                     <form class="form-horizontal mt-4" data-id="domain_footer">
                       <div class="row mb-4">
-                        <label class="control-label col-sm-2" for="mbox_exclude">{{ lang.edit.mbox_exclude }}</label>
+                        <label class="control-label col-sm-2" for="exclude">{{ lang.edit.footer_exclude }}</label>
                         <div class="col-sm-10">
-                          <select data-live-search="true" data-width="100%" style="width:100%" id="editMboxExclude" name="mbox_exclude" size="10" multiple>
+                          <select data-live-search="true" data-width="100%" style="width:100%" id="editFooterExclude" name="exclude" size="10" multiple>
                             {% for mailbox in mailboxes %}
                               <option value="{{ mailbox }}" {% if mailbox in domain_footer.mbox_exclude %}selected{% endif %}>
                                 {{ mailbox }}
@@ -302,6 +311,11 @@
                                 {{ alias }}
                               </option>
                             {% endfor %}
+                            {% for alias_domain in alias_domains %}
+                              <option data-subtext="Alias-Domain" value="{{ alias_domain }}" {% if alias_domain in domain_footer.alias_domain_exclude %}selected{% endif %}>
+                                {{ alias_domain }}
+                              </option>
+                            {% endfor %}
                           </select>
                         </div>
                       </div>

+ 6 - 0
data/web/templates/modals/mailbox.twig

@@ -384,6 +384,12 @@
       </div>
       <div class="modal-body">
         <form class="form-horizontal" data-cached-form="true" data-id="add_domain" role="form">
+          <input type="hidden" value="0" name="gal">
+          <input type="hidden" value="0" name="active">
+          <input type="hidden" value="0" name="backupmx">
+          <input type="hidden" value="0" name="relay_all_recipients">
+          <input type="hidden" value="0" name="relay_unknown_only">
+
           <div class="row mb-2">
             <label class="control-label col-sm-2 text-sm-end text-sm-end" for="domain">{{ lang.add.domain }}</label>
             <div class="col-sm-10">

+ 16 - 15
docker-compose.yml

@@ -1,8 +1,7 @@
-version: '2.1'
 services:
 
     unbound-mailcow:
-      image: mailcow/unbound:1.21
+      image: mailcow/unbound:1.22
       environment:
         - TZ=${TZ}
         - SKIP_UNBOUND_HEALTHCHECK=${SKIP_UNBOUND_HEALTHCHECK:-n}
@@ -62,7 +61,7 @@ services:
             - redis
 
     clamd-mailcow:
-      image: mailcow/clamd:1.64
+      image: mailcow/clamd:1.66
       restart: always
       depends_on:
         unbound-mailcow:
@@ -81,7 +80,7 @@ services:
             - clamd
 
     rspamd-mailcow:
-      image: mailcow/rspamd:1.95
+      image: mailcow/rspamd:1.96
       stop_grace_period: 30s
       depends_on:
         - dovecot-mailcow
@@ -190,7 +189,7 @@ services:
             - phpfpm
 
     sogo-mailcow:
-      image: mailcow/sogo:nightly-20240603
+      image: mailcow/sogo:nightly-20240731
       environment:
         - DBNAME=${DBNAME}
         - DBUSER=${DBUSER}
@@ -237,7 +236,7 @@ services:
             - sogo
 
     dovecot-mailcow:
-      image: mailcow/dovecot:nightly-20240226
+      image: mailcow/dovecot:nightly-20240731
       depends_on:
         - mysql-mailcow
         - netfilter-mailcow
@@ -280,6 +279,7 @@ services:
         - REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
         - REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
         - COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-mailcow-dockerized}
+        - FLATCURVE_EXPERIMENTAL=${FLATCURVE_EXPERIMENTAL:-n}
       ports:
         - "${DOVEADM_PORT:-127.0.0.1:19991}:12345"
         - "${IMAP_PORT:-143}:143"
@@ -305,7 +305,7 @@ services:
         ofelia.job-exec.dovecot_sarules.schedule: "@every 24h"
         ofelia.job-exec.dovecot_sarules.command: "/bin/bash -c \"/usr/local/bin/sa-rules.sh\""
         ofelia.job-exec.dovecot_fts.schedule: "@every 24h"
-        ofelia.job-exec.dovecot_fts.command: "/usr/bin/curl http://solr:8983/solr/dovecot-fts/update?optimize=true"
+        ofelia.job-exec.dovecot_fts.command: "/bin/bash -c \"/usr/local/bin/gosu vmail /usr/local/bin/optimize-fts.sh\""
         ofelia.job-exec.dovecot_repl_health.schedule: "@every 5m"
         ofelia.job-exec.dovecot_repl_health.command: "/bin/bash -c \"/usr/local/bin/gosu vmail /usr/local/bin/repl_health.sh\""
       ulimits:
@@ -320,7 +320,7 @@ services:
             - dovecot
 
     postfix-mailcow:
-      image: mailcow/postfix:1.74
+      image: mailcow/postfix:1.75
       depends_on:
         mysql-mailcow:
           condition: service_started
@@ -424,13 +424,14 @@ services:
           condition: service_started
         unbound-mailcow:
           condition: service_healthy
-      image: mailcow/acme:1.87
+      image: mailcow/acme:1.88
       dns:
         - ${IPV4_NETWORK:-172.22.1}.254
       environment:
         - LOG_LINES=${LOG_LINES:-9999}
         - ACME_CONTACT=${ACME_CONTACT:-}
         - ADDITIONAL_SAN=${ADDITIONAL_SAN}
+        - AUTODISCOVER_SAN=${AUTODISCOVER_SAN:-y}
         - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
         - DBNAME=${DBNAME}
         - DBUSER=${DBUSER}
@@ -460,7 +461,7 @@ services:
             - acme
 
     netfilter-mailcow:
-      image: mailcow/netfilter:1.57
+      image: mailcow/netfilter:1.59
       stop_grace_period: 30s
       restart: always
       privileged: true
@@ -479,7 +480,7 @@ services:
         - /lib/modules:/lib/modules:ro
 
     watchdog-mailcow:
-      image: mailcow/watchdog:2.02
+      image: mailcow/watchdog:2.03
       dns:
         - ${IPV4_NETWORK:-172.22.1}.254
       tmpfs:
@@ -496,7 +497,6 @@ services:
         - mysql-mailcow
         - acme-mailcow
         - redis-mailcow
-
       environment:
         - IPV6_NETWORK=${IPV6_NETWORK:-fd4d:6169:6c63:6f77::/64}
         - LOG_LINES=${LOG_LINES:-9999}
@@ -551,7 +551,7 @@ services:
             - watchdog
 
     dockerapi-mailcow:
-      image: mailcow/dockerapi:2.07
+      image: mailcow/dockerapi:2.08
       security_opt:
         - label=disable
       restart: always
@@ -572,7 +572,7 @@ services:
     
     ##### Will be removed soon #####
     solr-mailcow:
-      image: mailcow/solr:nightly-20231011
+      image: mailcow/solr:1.8.3
       restart: always
       depends_on:
         - netfilter-mailcow
@@ -584,6 +584,7 @@ services:
         - TZ=${TZ}
         - SOLR_HEAP=${SOLR_HEAP:-1024}
         - SKIP_SOLR=${SKIP_SOLR:-y}
+        - FLATCURVE_EXPERIMENTAL=${FLATCURVE_EXPERIMENTAL:-n}
       networks:
         mailcow-network:
           aliases:
@@ -591,7 +592,7 @@ services:
     ################################
 
     olefy-mailcow:
-      image: mailcow/olefy:nightly-20231011
+      image: mailcow/olefy:1.13
       restart: always
       environment:
         - TZ=${TZ}

+ 7 - 0
generate_config.sh

@@ -336,6 +336,13 @@ MAILDIR_GC_TIME=7200
 
 ADDITIONAL_SAN=
 
+# Obtain certificates for autodiscover.* and autoconfig.* domains.
+# This can be useful to switch off in case you are in a scenario where a reverse proxy already handles those.
+# There are mixed scenarios where ports 80,443 are occupied and you do not want to share certs
+# between services. So acme-mailcow obtains for maildomains and all web-things get handled
+# in the reverse proxy.
+AUTODISCOVER_SAN=y
+
 # Additional server names for mailcow UI
 #
 # Specify alternative addresses for the mailcow UI to respond to

+ 2 - 2
helper-scripts/backup_and_restore.sh

@@ -55,10 +55,10 @@ ENV_FILE=${SCRIPT_DIR}/../.env
 THREADS=$(echo ${THREADS:-1})
 ARCH=$(uname -m)
 
-if ! [[ "${THREADS}" =~ ^[1-9]+$ ]] ; then
+if ! [[ "${THREADS}" =~ ^[1-9][0-9]?$ ]] ; then
   echo "Thread input is not a number!"
   exit 1
-elif [[ "${THREADS}" =~ ^[1-9]+$ ]] ; then
+elif [[ "${THREADS}" =~ ^[1-9][0-9]?$ ]] ; then
   echo "Using ${THREADS} Thread(s) for this run."
   echo "Notice: You can set the Thread count with the THREADS Variable before you run this script."
 fi

+ 0 - 3
helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml

@@ -1,4 +1,3 @@
-version: '2.1'
 services:
   unbound-mailcow:
     build: ./data/Dockerfiles/unbound
@@ -16,8 +15,6 @@ services:
     build:
       context: ./data/Dockerfiles/sogo
       dockerfile: Dockerfile
-      args:
-        - SOGO_DEBIAN_REPOSITORY=http://packages.inverse.ca/SOGo/nightly/5/debian/
 
   dovecot-mailcow:
     build: ./data/Dockerfiles/dovecot

+ 0 - 1
helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml

@@ -1,4 +1,3 @@
-version: '2.1'
 services:
 
     clamd-mailcow:

+ 1 - 2
helper-scripts/docker-compose.override.yml.d/EXTERNAL_MYSQL_SOCKET/docker-compose.override.yml

@@ -1,4 +1,3 @@
-version: '2.1'
 services:
 
     php-fpm-mailcow:
@@ -26,6 +25,6 @@ services:
         - /var/run/mysqld/mysqld.sock:/var/run/mysqld/mysqld.sock
 
     mysql-mailcow:
-      image: alpine:3.19
+      image: alpine:3.20
       command: /bin/true
       restart: "no"

+ 0 - 1
helper-scripts/docker-compose.override.yml.d/HAPROXY/docker-compose.override.yml

@@ -2,7 +2,6 @@
 ## Set haproxy_trusted_networks in Dovecots extra.conf!
 ##
 
-version: '2.1'
 services:
 
     dovecot-mailcow:

+ 34 - 1
helper-scripts/nextcloud.sh

@@ -1,6 +1,39 @@
 #!/usr/bin/env bash
 # renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?<version>.*)$
-NEXTCLOUD_VERSION=28.0.1
+NEXTCLOUD_VERSION=28.0.6
+
+display_warning() {
+    local message=("$@")
+    local max_length=0
+
+    for line in "${message[@]}"; do
+        if (( ${#line} > max_length )); then
+            max_length=${#line}
+        fi
+    done
+
+    local border=$(printf '%*s' "$((max_length + 4))" '' | tr ' ' '#')
+
+    echo -e "\e[31m${border}"
+    for line in "${message[@]}"; do
+        printf "\e[31m# %-*s #\n" "$max_length" "$line"
+    done
+    echo -e "\e[31m${border}"
+    echo -e "\e[0m"
+}
+
+display_warning "WARNING: This Script is deprecated and will be removed in December 2024!" \
+                "mailcow will drop this installation/maintenance script within December 2024..." \
+                "To ensure you can still use your Nextcloud Datas, please migrate to a standalone" \
+                "Nextcloud instance either on a new Host or this host." \
+                "You can either use Nextcloud in Docker or install it manually." \
+                " "\
+                "mailcow will NOT DELETE any Nextcloud Data, even when this script was removed!!"
+
+echo -e "Waiting 5 seconds before continuing..."
+
+
+sleep 5
 
 echo -ne "Checking prerequisites..."
 sleep 1

+ 13 - 0
update.sh

@@ -450,6 +450,7 @@ CONFIG_ARRAY=(
   "SKIP_CLAMD"
   "SKIP_IP_CHECK"
   "ADDITIONAL_SAN"
+  "AUTODISCOVER_SAN"
   "DOVEADM_PORT"
   "IPV4_NETWORK"
   "IPV6_NETWORK"
@@ -715,6 +716,18 @@ for option in ${CONFIG_ARRAY[@]}; do
       echo '# Comma separated list without spaces! Example: ADDITIONAL_SERVER_NAMES=a.b.c,d.e.f' >> mailcow.conf
       echo 'ADDITIONAL_SERVER_NAMES=' >> mailcow.conf
     fi
+
+  elif [[ ${option} == "AUTODISCOVER_SAN" ]]; then
+    if ! grep -q ${option} mailcow.conf; then
+      echo "Adding new option \"${option}\" to mailcow.conf"
+      echo '# Obtain certificates for autodiscover.* and autoconfig.* domains.' >> mailcow.conf
+      echo '# This can be useful to switch off in case you are in a scenario where a reverse proxy already handles those.' >> mailcow.conf
+      echo '# There are mixed scenarios where ports 80,443 are occupied and you do not want to share certs' >> mailcow.conf
+      echo '# between services. So acme-mailcow obtains for maildomains and all web-things get handled' >> mailcow.conf
+      echo '# in the reverse proxy.' >> mailcow.conf
+      echo 'AUTODISCOVER_SAN=y' >> mailcow.conf
+    fi
+
   elif [[ ${option} == "ACME_CONTACT" ]]; then
     if ! grep -q ${option} mailcow.conf; then
       echo "Adding new option \"${option}\" to mailcow.conf"