Compare commits

...

86 Commits

Author SHA1 Message Date
FreddleSpl0it
527f27d249 Merge pull request #6632 from mailcow/staging
Update 2025-07
2025-07-15 07:48:37 +02:00
FreddleSpl0it
02557b2098 Merge pull request #6631 from mailcow/fix/jinja2-rendering
[Dovecot] Use Jinja2 sandbox for rendering quota and quarantine notif…
2025-07-15 07:38:20 +02:00
milkmaker
4c7a9ed195 Translations update from Weblate (#6629)
* [Web] Updated lang.fr-fr.json

Co-authored-by: Tagada <githubtagada@cant.at>

* [Web] Updated lang.pl-pl.json

Co-authored-by: robsonek <admin@licytant.pl>

---------

Co-authored-by: Tagada <githubtagada@cant.at>
Co-authored-by: robsonek <admin@licytant.pl>
2025-07-13 16:20:40 +02:00
milkmaker
d5b30a7a08 [Web] Updated lang.pt-pt.json (#6622)
Co-authored-by: luiscanato <luiscanato@gmail.com>
2025-07-06 16:42:58 +02:00
FreddleSpl0it
b7acef4d9d Merge pull request #6617 from mailcow/fix/acme-contact
[ACME] Remove deprecated ACME_CONTACT variable
2025-07-03 12:49:17 +02:00
FreddleSpl0it
fc43c26c48 Remove obsolete ACME_CONTACT option and related comments from mailcow.conf 2025-07-03 12:38:28 +02:00
milkmaker
b12ce1eacd update postscreen_access.cidr (#6611) 2025-07-02 17:12:06 +02:00
FreddleSpl0it
ec6dbb099a [ACME] Remove deprecated ACME_CONTACT variable 2025-07-02 10:37:23 +02:00
FreddleSpl0it
2fbbbbe9a9 [Dovecot] Use Jinja2 sandbox for rendering quota and quarantine notifications 2025-07-02 08:59:29 +02:00
milkmaker
1e4f3c55d8 [Web] Updated lang.pt-pt.json (#6614)
Co-authored-by: luiscanato <luiscanato@gmail.com>
2025-07-01 17:14:24 +02:00
milkmaker
a0f5454c2a [Web] Updated lang.si-si.json (#6609)
Co-authored-by: Matjaž Tekavec <matjaz@moj-svet.si>
2025-06-29 18:12:59 +02:00
milkmaker
4e7adacda9 [Web] Updated lang.si-si.json (#6601)
Co-authored-by: Matjaž Tekavec <matjaz@moj-svet.si>
2025-06-24 20:06:38 +02:00
milkmaker
4c64cf18a6 [Web] Updated lang.si-si.json (#6600)
Co-authored-by: Matjaž Tekavec <matjaz@moj-svet.si>
2025-06-23 21:58:50 +02:00
DerLinkman
8a89f5c685 updated Readme (sponsors) 2025-06-23 10:36:49 +02:00
milkmaker
cc0e4fee9d [Web] Updated lang.si-si.json (#6599)
Co-authored-by: Matjaž Tekavec <matjaz@moj-svet.si>
2025-06-20 18:14:22 +02:00
milkmaker
5861c9af29 [Web] Updated lang.cs-cz.json (#6589) 2025-06-16 19:45:13 +02:00
milkmaker
dd475c0ab3 update postscreen_access.cidr (#6573) 2025-06-12 13:14:20 +02:00
milkmaker
407e9d3584 Translations update from Weblate (#6582)
* [Web] Updated lang.en-gb.json

[Web] Updated lang.en-gb.json

Co-authored-by: Filip Hajny <filip@hajny.net>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.cs-cz.json

Co-authored-by: Filip Hajny <filip@hajny.net>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.si-si.json

[Web] Updated lang.si-si.json

Co-authored-by: Matjaž Tekavec <matjaz@moj-svet.si>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.it-it.json

Co-authored-by: Stefano <stefano.vassena@gmail.com>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

---------

Co-authored-by: Filip Hajny <filip@hajny.net>
Co-authored-by: Matjaž Tekavec <matjaz@moj-svet.si>
Co-authored-by: Stefano <stefano.vassena@gmail.com>
2025-06-12 13:13:57 +02:00
DerLinkman
d4f899b091 compose: add selinux label to mysql-socket-vol to prevent "access denied" (#6560) 2025-05-26 11:35:34 +02:00
milkmaker
372923ae2f [Web] Updated lang.zh-cn.json (#6552)
Co-authored-by: Easton Man <me@eastonman.com>
2025-05-19 13:36:15 +02:00
milkmaker
3bd01190bf Translations update from Weblate (#6548)
* [Web] Updated lang.fr-fr.json

[Web] Updated lang.fr-fr.json

Co-authored-by: Samuel F. <20537389+samuelfranzini@users.noreply.github.com>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.ru-ru.json

[Web] Updated lang.ru-ru.json

[Web] Updated lang.ru-ru.json

Co-authored-by: Habetdin <15926758+Habetdin@users.noreply.github.com>
Co-authored-by: Peter <magic@kthx.at>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.zh-cn.json

Co-authored-by: Easton Man <me@eastonman.com>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.en-gb.json

Co-authored-by: Habetdin <15926758+Habetdin@users.noreply.github.com>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

---------

Co-authored-by: Samuel F. <20537389+samuelfranzini@users.noreply.github.com>
Co-authored-by: Habetdin <15926758+Habetdin@users.noreply.github.com>
Co-authored-by: Peter <magic@kthx.at>
Co-authored-by: Easton Man <me@eastonman.com>
2025-05-16 23:07:25 +02:00
FreddleSpl0it
1994b9895b Merge pull request #6537 from mailcow/staging
Update 2025-05_2
2025-05-13 10:16:30 +02:00
FreddleSpl0it
03d979c089 [Web] Fix get custom_login 2025-05-13 10:14:58 +02:00
FreddleSpl0it
798e6a4c00 Merge pull request #6535 from mailcow/staging
Update 2025-05
2025-05-13 09:58:32 +02:00
FreddleSpl0it
ffa2933873 increase Olefy, Rspamd and Watchdog docker images 2025-05-13 09:49:53 +02:00
FreddleSpl0it
7f47a3f00e Merge pull request #6530 from mailcow/feat/auto-create-user-option
[Web] Add identity_provider option to disable auto-creation of users …
2025-05-12 13:24:34 +02:00
FreddleSpl0it
1bcab9a9a5 Merge pull request #6518 from seclution/patch-2
fix: typo in default_template
2025-05-12 13:08:07 +02:00
FreddleSpl0it
1b2f424edc [Web] Add identity_provider option to disable auto-creation of users on login 2025-05-12 12:20:23 +02:00
krzsztf1
486b297409 Fix typo in rspamd rule in composites.conf (#6515)
Co-authored-by: Krzysztof Nowak <k.nowak@intalio.pl>
2025-05-09 18:33:19 +02:00
FreddleSpl0it
75d7f06b25 Merge pull request #6521 from mailcow/feat/login-quicklinks
[Web] Add quick links to other login pages and mailcow login toggle
2025-05-09 15:24:36 +02:00
FreddleSpl0it
ea0944d743 [Web] Add quick links to other login pages and option to disable mailcow login form 2025-05-09 15:13:44 +02:00
Kai Biebel
cb6ffe65c8 fix: typo in default_template 2025-05-09 11:24:49 +02:00
FreddleSpl0it
580dabd276 Merge pull request #6509 from mailcow/update/postscreen_access.cidr
[Postfix] update postscreen_access.cidr
2025-05-09 10:02:50 +02:00
FreddleSpl0it
846862aa80 Merge pull request #6506 from mrclschstr/staging
[Fix] Moving mails by functions.quarantine.inc.php to inbox failed
2025-05-09 10:00:56 +02:00
FreddleSpl0it
e7a1f24c78 Merge pull request #6483 from PseudoResonance/oauth2-redirect-extra-domain
Allow additional domains in OAuth2 redirect URLs
2025-05-09 09:48:08 +02:00
FreddleSpl0it
8ff0e029f0 Merge pull request #6398 from marvinruder/feat/skip-olefy
feat(olefy): Allow disabling Olefy
2025-05-08 15:34:51 +02:00
FreddleSpl0it
0680b21938 Merge pull request #6342 from mailcow/fix/6339
rspamd: remove .info from fishy tlds (default)
2025-05-08 14:36:39 +02:00
FreddleSpl0it
0c8e7bfeca Merge pull request #6376 from NickBouwhuis/staging
feat/replace bgp.he.net with bgp.tools
2025-05-08 14:31:57 +02:00
FreddleSpl0it
badcd27b93 Merge pull request #6485 from Habetdin/fix/update-legacy-links
Update legacy admin dashboard links
2025-05-08 14:16:44 +02:00
FreddleSpl0it
7d3ef3d67f Merge pull request #6487 from mailcow/fix/6469
[Web] Fix force password update at next login
2025-05-08 14:04:56 +02:00
FreddleSpl0it
5b89e253a6 Merge remote-tracking branch 'origin/staging' into fix/6469 2025-05-08 13:50:50 +02:00
FreddleSpl0it
a90f4c2a2e Merge pull request #6495 from Kuehn-Andreas/fix/redirection-after-login-with-skip-SOGo
Check if skip_sogo is not set before redirecting to SOGo
2025-05-08 11:53:47 +02:00
FreddleSpl0it
db7b917944 Merge pull request #6488 from mailcow/fix/6470
[Dovecot] Fix EAS login issue with app passwords and improve auth cache handling in Dovecot
2025-05-08 11:49:55 +02:00
FreddleSpl0it
401b744808 [Dovecot] return PASSDB_RESULT_PASSWORD_MISMATCH instead of PASSDB_RESULT_INTERNAL_FAILURE 2025-05-08 11:38:29 +02:00
milkmaker
0c83255573 update postscreen_access.cidr 2025-05-01 00:21:11 +00:00
Marcel Schuster
d55f0fc366 Update functions.quarantine.inc.php
Fix regex for quarantine release functions
2025-04-29 22:14:43 +02:00
milkmaker
06b3ba91a0 [Web] Updated lang.zh-cn.json (#6502)
Co-authored-by: Easton Man <me@eastonman.com>
2025-04-27 18:47:08 +02:00
DerLinkman
aa4125fe62 sogo: enabled SOGoEnableMailCleaning per default 2025-04-23 15:13:52 +02:00
Andreas Kühn
d8c6ed9191 Check if skip_sogo is not set before redirecting to SOGo 2025-04-22 14:23:33 +02:00
FreddleSpl0it
cb47fa406f [Web] Fix force password update at next login 2025-04-15 13:48:13 +02:00
FreddleSpl0it
c4d0f35008 [Dovecot] Fix EAS login and improve logging 2025-04-15 10:49:56 +02:00
Habetdin
0d3e8dd738 Update legacy admin dashboard links 2025-04-13 16:09:47 +03:00
PseudoResonance
692355a08a Allow additional domains in OAuth2 redirect URLs 2025-04-12 06:24:37 -07:00
renovate[bot]
a370499aaa Update dependency Imagick/imagick to v3.8.0 (#6480) 2025-04-11 08:30:54 +02:00
milkmaker
84f67d6608 Translations update from Weblate (#6478)
* [Web] Updated lang.de-de.json

Co-authored-by: Jonas Leiner <jonas.leiner.123@gmail.com>

* [Web] Updated lang.fr-fr.json

Co-authored-by: Neuronnexion <support@nnx.com>

---------

Co-authored-by: Jonas Leiner <jonas.leiner.123@gmail.com>
Co-authored-by: Neuronnexion <support@nnx.com>
2025-04-10 17:16:44 +02:00
milkmaker
4ac839cf49 Translations update from Weblate (#6463)
* [Web] Updated lang.hu-hu.json

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.lv-lv.json

[Web] Updated lang.lv-lv.json

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Edgars Andersons <Edgars+Mailcow+Weblate@gaitenis.id.lv>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Added lang.bg-bg.json

Co-authored-by: Peter <magic@kthx.at>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.tr-tr.json

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.uk-ua.json

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.zh-cn.json

Co-authored-by: Easton Man <me@eastonman.com>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

---------

Co-authored-by: Anonymous <noreply@weblate.org>
Co-authored-by: Edgars Andersons <Edgars+Mailcow+Weblate@gaitenis.id.lv>
Co-authored-by: Peter <magic@kthx.at>
Co-authored-by: Easton Man <me@eastonman.com>
2025-04-10 17:11:30 +02:00
FreddleSpl0it
b96a5b1efd [Web] Fix AJAX urls to absolute path 2025-04-09 08:07:46 +02:00
FreddleSpl0it
766c5e8580 [Dovecot] Ignore app passwords protocol access on SOGo request 2025-04-09 08:02:30 +02:00
FreddleSpl0it
3f493e043d Merge pull request #6468 from mailcow/staging
Update 2025-03b
2025-04-07 09:09:39 +02:00
FreddleSpl0it
3ddad9dee8 Merge pull request #6460 from mailcow/ui/improve-ldap-ssl-labels
[Web] Improve clarity of LDAP SSL/TLS settings
2025-04-07 08:58:19 +02:00
FreddleSpl0it
2c10c39bc4 [Web] Update 2FA Info tooltip 2025-04-07 08:06:43 +02:00
FreddleSpl0it
0eb8f38792 [Web] Update LDAP SSL/TLS tooltips 2025-04-07 07:59:43 +02:00
FreddleSpl0it
402bf53a5c [Web] Improve clarity of LDAP SSL/TLS settings 2025-04-04 13:18:42 +02:00
FreddleSpl0it
428a59dd3f Merge branch 'fix/dovecot-lua-timeout' into staging 2025-04-03 14:18:33 +02:00
FreddleSpl0it
153890b283 Merge pull request #6439 from mailcow/fix/6430
[SOGo] Use JS for mailcow logout
2025-04-03 12:57:24 +02:00
FreddleSpl0it
a741c2ba4a Merge pull request #6426 from sardaukar/fix/typo-on-backup-and-restore-script
Fix tiny typo
2025-04-03 12:41:46 +02:00
FreddleSpl0it
741e5c719f Merge pull request #6438 from mailcow/fix/6405
[Netfilter] Downgrade to 1.61
2025-04-03 12:39:48 +02:00
FreddleSpl0it
34e4f93db9 Merge pull request #6451 from mailcow/fix/6437
[Web] Fix transport routing test
2025-04-03 12:38:43 +02:00
FreddleSpl0it
3758135dc3 Merge pull request #6450 from mailcow/fix/sasl_logs
Fix sasl_logs
2025-04-03 12:38:13 +02:00
FreddleSpl0it
6794e6ff43 [Dovecot] Add service for authentication cache_key 2025-04-03 12:31:43 +02:00
FreddleSpl0it
62f816e64a [Web] Check app password before user password on web login 2025-04-03 12:19:04 +02:00
FreddleSpl0it
e65478076b [Web] Prevent user sync for mismatched authsource 2025-04-03 11:58:35 +02:00
FreddleSpl0it
ceeabded73 [Web] Fix transport routing test 2025-04-03 10:29:47 +02:00
FreddleSpl0it
805634f9a9 Fix sasl_logs 2025-04-03 10:19:30 +02:00
DerLinkman
a92832d115 update README.md to include first 50 and 100$ monthly sponsors 2025-04-02 14:39:24 +02:00
milkmaker
4c5f485587 update postscreen_access.cidr (#6443) 2025-04-01 22:00:11 +02:00
FreddleSpl0it
db3a577ae3 [Web] Fix password reset 2025-04-01 16:39:15 +02:00
FreddleSpl0it
e452917de9 [SOGo] Show mailcow Settings Button to SOGoSuperUsers 2025-03-31 12:14:43 +02:00
FreddleSpl0it
f37961b7d0 [SOGo] Use JS for mailcow logout 2025-03-31 11:32:01 +02:00
FreddleSpl0it
0157cbddaf [Netfilter] Downgrade to 1.61 2025-03-31 10:36:20 +02:00
Bruno Antunes
65d872cc14 Fix tiny typo 2025-03-27 20:21:25 +00:00
FreddleSpl0it
4ad2422810 [Dovecot] Increase Timeout for HTTP Login Request 2025-03-27 16:52:15 +01:00
Marvin A. Ruder
8408b82e9c Add new option with description to existing configuration files during next update
* Remove Olefy settings file from rspamd configuration
* Have rspamd container generate Olefy settings file at startup if not disabled

Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
2025-03-26 17:17:13 +01:00
Marvin A. Ruder
cd3b1ab828 Allow disabling Olefy
* Fixes #6389

Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
2025-03-25 20:24:33 +01:00
Nick Bouwhuis
ceebc56e62 feat/replace bgp.he.net with bgp.tools 2025-03-18 10:08:08 +00:00
DerLinkman
70190e5230 rspamd: remove .info from fishy tlds (default) 2025-02-28 15:38:05 +01:00
64 changed files with 2236 additions and 405 deletions

View File

@@ -13,6 +13,25 @@ You can also [get a SAL](https://www.servercow.de/mailcow?lang=en#sal) which is
Or just spread the word: moo.
## Many thanks to our GitHub Sponsors ❤️
A big thank you to everyone supporting us on GitHub Sponsors—your contributions mean the world to us! Special thanks to the following amazing supporters:
### 100$/Month Sponsors
<a href="https://www.colba.net/" target=_blank><img
src="https://avatars.githubusercontent.com/u/204464723" height="58"
/></a>
<a href="https://www.maehdros.com/" target=_blank><img
src="https://avatars.githubusercontent.com/u/173894712" height="58"
/></a>
<a href="https://macarne.com/" target=_blank><img
src="https://avatars.githubusercontent.com/u/149550368?s=200&v=4" height="58"
/></a>
### 50$/Month Sponsors
<a href="https://github.com/vnukhr" target=_blank><img
src="https://avatars.githubusercontent.com/u/7805987?s=52&v=4" height="58"
/></a>
## Info, documentation and support
Please see [the official documentation](https://docs.mailcow.email/) for installation and support instructions. 🐄

View File

@@ -159,18 +159,6 @@ while true; do
fi
if [[ ! -f ${ACME_BASE}/acme/account.pem ]]; then
log_f "Generating missing Lets Encrypt account key..."
if [[ ! -z ${ACME_CONTACT} ]]; then
if ! verify_email "${ACME_CONTACT}"; then
log_f "Invalid email address, will not start registration!"
sleep 365d
exec $(readlink -f "$0")
else
ACME_CONTACT_PARAMETER="--contact mailto:${ACME_CONTACT}"
log_f "Valid email address, using ${ACME_CONTACT} for registration"
fi
else
ACME_CONTACT_PARAMETER=""
fi
openssl genrsa 4096 > ${ACME_BASE}/acme/account.pem
else
log_f "Using existing Lets Encrypt account key ${ACME_BASE}/acme/account.pem"
@@ -299,7 +287,7 @@ while true; do
VALIDATED_CERTIFICATES+=("${CERT_NAME}")
# obtain server certificate if required
ACME_CONTACT_PARAMETER=${ACME_CONTACT_PARAMETER} DOMAINS=${SERVER_SAN_VALIDATED[@]} /srv/obtain-certificate.sh rsa
DOMAINS=${SERVER_SAN_VALIDATED[@]} /srv/obtain-certificate.sh rsa
RETURN="$?"
if [[ "$RETURN" == "0" ]]; then # 0 = cert created successfully
CERT_AMOUNT_CHANGED=1

View File

@@ -93,8 +93,8 @@ until dig letsencrypt.org +time=3 +tries=1 @unbound > /dev/null; do
sleep 2
done
log_f "Resolver OK"
log_f "Using command acme-tiny ${DIRECTORY_URL} ${ACME_CONTACT_PARAMETER} --account-key ${ACME_BASE}/acme/account.pem --disable-check --csr ${CSR} --acme-dir /var/www/acme/"
ACME_RESPONSE=$(acme-tiny ${DIRECTORY_URL} ${ACME_CONTACT_PARAMETER} \
log_f "Using command acme-tiny ${DIRECTORY_URL} --account-key ${ACME_BASE}/acme/account.pem --disable-check --csr ${CSR} --acme-dir /var/www/acme/"
ACME_RESPONSE=$(acme-tiny ${DIRECTORY_URL} \
--account-key ${ACME_BASE}/acme/account.pem \
--disable-check \
--csr ${CSR} \

View File

@@ -8,7 +8,8 @@ from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
import jinja2
from jinja2 import Template
from jinja2 import TemplateError
from jinja2.sandbox import SandboxedEnvironment
import json
import redis
import time
@@ -80,17 +81,22 @@ try:
if len(meta_query) == 0:
return
msg_count = len(meta_query)
env = SandboxedEnvironment()
if r.get('Q_HTML'):
try:
template = Template(r.get('Q_HTML'))
except:
print("Error: Cannot parse quarantine template, falling back to default template.")
with open('/templates/quarantine.tpl') as file_:
template = Template(file_.read())
try:
template = env.from_string(r.get('Q_HTML'))
except Exception:
print("Error: Cannot parse quarantine template, falling back to default template.")
with open('/templates/quarantine.tpl') as file_:
template = env.from_string(file_.read())
else:
with open('/templates/quarantine.tpl') as file_:
template = Template(file_.read())
html = template.render(meta=meta_query, username=rcpt, counter=msg_count, hostname=mailcow_hostname, quarantine_acl=quarantine_acl)
with open('/templates/quarantine.tpl') as file_:
template = env.from_string(file_.read())
try:
html = template.render(meta=meta_query, username=rcpt, counter=msg_count, hostname=mailcow_hostname, quarantine_acl=quarantine_acl)
except (jinja2.exceptions.SecurityError, TemplateError) as ex:
print(f"SecurityError or TemplateError in template rendering: {ex}")
return
text = html2text.html2text(html)
count = 0
while count < 15:

View File

@@ -6,7 +6,7 @@ from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
import jinja2
from jinja2 import Template
from jinja2.sandbox import SandboxedEnvironment
import redis
import time
import json
@@ -33,16 +33,24 @@ while True:
if r.get('QW_HTML'):
try:
template = Template(r.get('QW_HTML'))
except:
print("Error: Cannot parse quarantine template, falling back to default template.")
env = SandboxedEnvironment()
template = env.from_string(r.get('QW_HTML'))
except Exception:
print("Error: Cannot parse quota template, falling back to default template.")
with open('/templates/quota.tpl') as file_:
template = Template(file_.read())
env = SandboxedEnvironment()
template = env.from_string(file_.read())
else:
with open('/templates/quota.tpl') as file_:
template = Template(file_.read())
env = SandboxedEnvironment()
template = env.from_string(file_.read())
try:
html = template.render(username=username, percent=percent)
except (jinja2.exceptions.SecurityError, jinja2.TemplateError) as ex:
print(f"SecurityError or TemplateError in template rendering: {ex}")
sys.exit(1)
html = template.render(username=username, percent=percent)
text = html2text.html2text(html)
try:

View File

@@ -32,6 +32,13 @@ import time
import magic
import re
skip_olefy = os.getenv('SKIP_OLEFY', '')
if skip_olefy.lower() in ['yes', 'y']:
print("SKIP_OLEFY=y, skipping Olefy...")
time.sleep(365 * 24 * 60 * 60)
sys.exit(0)
# merge variables from /etc/olefy.conf and the defaults
olefy_listen_addr_string = os.getenv('OLEFY_BINDADDRESS', '127.0.0.1,::1')
olefy_listen_port = int(os.getenv('OLEFY_BINDPORT', '10050'))
@@ -113,7 +120,7 @@ def oletools( stream, tmp_file_name, lid ):
out = bytes(out.decode('utf-8', 'ignore').replace(' ', ' ').replace('\t', '').replace('\n', '').replace('XLMMacroDeobfuscator: pywin32 is not installed (only is required if you want to use MS Excel)', ''), encoding="utf-8")
failed = False
if out.__len__() < 30:
logger.error('{} olevba returned <30 chars - rc: {!r}, response: {!r}, error: {!r}'.format(lid,cmd_tmp.returncode,
logger.error('{} olevba returned <30 chars - rc: {!r}, response: {!r}, error: {!r}'.format(lid,cmd_tmp.returncode,
out.decode('utf-8', 'ignore'), err.decode('utf-8', 'ignore')))
out = b'[ { "error": "Unhandled error - too short olevba response" } ]'
failed = True

View File

@@ -5,7 +5,7 @@ LABEL maintainer = "The Infrastructure Company GmbH <info@servercow.de>"
# renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced extractVersion=^v(?<version>.*)$
ARG APCU_PECL_VERSION=5.1.24
# renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced extractVersion=(?<version>.*)$
ARG IMAGICK_PECL_VERSION=3.7.0
ARG IMAGICK_PECL_VERSION=3.8.0
# renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced extractVersion=^v(?<version>.*)$
ARG MAILPARSE_PECL_VERSION=3.1.8
# renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?<version>.*)$

View File

@@ -81,6 +81,27 @@ EOF
redis-cli -h redis-mailcow -a ${REDISPASS} --no-auth-warning SLAVEOF NO ONE
fi
if [[ "${SKIP_OLEFY}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
if [[ -f /etc/rspamd/local.d/external_services.conf ]]; then
rm /etc/rspamd/local.d/external_services.conf
fi
else
cat <<EOF > /etc/rspamd/local.d/external_services.conf
oletools {
# default olefy settings
servers = "olefy:10055";
# needs to be set explicitly for Rspamd < 1.9.5
scan_mime_parts = true;
# mime-part regex matching in content-type or filename
# block all macros
extended = true;
max_size = 3145728;
timeout = 20.0;
retransmits = 1;
}
EOF
fi
# Provide additional lua modules
ln -s /usr/lib/$(uname -m)-linux-gnu/liblua5.1-cjson.so.0.0.0 /usr/lib/rspamd/cjson.so

View File

@@ -1,20 +1,15 @@
59,65d58
< ng-show="::!activeUser.isSuperUser"
60,65d58
< var:ng-click="navButtonClick"
< ng-href="/user">
< <md-icon>build</md-icon>
< <md-tooltip><var:string label:value="mailcow"/></md-tooltip>
< <md-tooltip>mailcow <var:string label:value="Preferences"/></md-tooltip>
< </md-button>
< <md-button class="md-icon-button"
83c76
< onclick="document.getElementById('mc_logout').setAttribute('action', '/'); document.getElementById('mc_logout').submit();"
< onclick="mc_logout();"
---
> ng-show="::activeUser.path.logoff.length"
85c78
< ng-href="#">
---
> ng-href="{{::activeUser.path.logoff}}">
89,91d81
< <form method="POST" id="mc_logout" action="user">
< <input type="hidden" name="logout" value="1">
< </form>

View File

@@ -994,6 +994,7 @@ PID=$!
echo "Spawned cert_checks with PID ${PID}"
BACKGROUND_TASKS+=(${PID})
if [[ "${SKIP_OLEFY}" =~ ^([nN][oO]|[nN])+$ ]]; then
(
while true; do
if ! olefy_checks; then
@@ -1005,6 +1006,7 @@ done
PID=$!
echo "Spawned olefy_checks with PID ${PID}"
BACKGROUND_TASKS+=(${PID})
fi
(
while true; do

View File

@@ -69,29 +69,36 @@ require_once 'functions.acl.inc.php';
$isSOGoRequest = $post['real_rip'] == getenv('IPV4_NETWORK') . '.248';
$result = false;
$protocol = $post['protocol'];
if ($isSOGoRequest) {
$protocol = null;
// This is a SOGo Auth request. First check for SSO password.
$sogo_sso_pass = file_get_contents("/etc/sogo-sso/sogo-sso.pass");
if ($sogo_sso_pass === $post['password']){
error_log('MAILCOWAUTH: SOGo SSO auth for user ' . $post['username']);
set_sasl_log($post['username'], $post['real_rip'], "SOGO");
$result = true;
}
}
if ($result === false){
$result = apppass_login($post['username'], $post['password'], $protocol, array(
// If it's a SOGo Request, don't check for protocol access
$service = ($isSOGoRequest) ? false : array($post['service'] => true);
$result = apppass_login($post['username'], $post['password'], $service, array(
'is_internal' => true,
'remote_addr' => $post['real_rip']
));
if ($result) error_log('MAILCOWAUTH: App auth for user ' . $post['username']);
if ($result) {
error_log('MAILCOWAUTH: App auth for user ' . $post['username']);
set_sasl_log($post['username'], $post['real_rip'], $post['service']);
}
}
if ($result === false){
// Init Identity Provider
$iam_provider = identity_provider('init');
$iam_settings = identity_provider('get');
$result = user_login($post['username'], $post['password'], array('is_internal' => true));
if ($result) error_log('MAILCOWAUTH: User auth for user ' . $post['username']);
if ($result) {
error_log('MAILCOWAUTH: User auth for user ' . $post['username']);
set_sasl_log($post['username'], $post['real_rip'], $post['service']);
}
}
if ($result) {

View File

@@ -3,21 +3,20 @@ function auth_password_verify(request, password)
return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, "No such user"
end
json = require "cjson"
ltn12 = require "ltn12"
https = require "ssl.https"
https.TIMEOUT = 5
local json = require "cjson"
local ltn12 = require "ltn12"
local https = require "ssl.https"
https.TIMEOUT = 30
local req = {
username = request.user,
password = password,
real_rip = request.real_rip,
protocol = {}
service = request.service
}
req.protocol[request.service] = true
local req_json = json.encode(req)
local res = {}
local res = {}
local b, c = https.request {
method = "POST",
url = "https://nginx:9082",
@@ -29,11 +28,27 @@ function auth_password_verify(request, password)
sink = ltn12.sink.table(res),
insecure = true
}
local api_response = json.decode(table.concat(res))
if api_response.success == true then
-- Returning PASSDB_RESULT_PASSWORD_MISMATCH will reset the user's auth cache entry.
-- Returning PASSDB_RESULT_INTERNAL_FAILURE keeps the existing cache entry,
-- even if the TTL has expired. Useful to avoid cache eviction during backend issues.
if c ~= 200 and c ~= 401 then
dovecot.i_info("HTTP request failed with " .. c .. " for user " .. request.user)
return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, "Upstream error"
end
local response_str = table.concat(res)
local is_response_valid, response_json = pcall(json.decode, response_str)
if not is_response_valid then
dovecot.i_info("Invalid JSON received: " .. response_str)
return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, "Invalid response format"
end
if response_json.success == true then
return dovecot.auth.PASSDB_RESULT_OK, ""
end
return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, "Failed to authenticate"
end

View File

@@ -53,7 +53,7 @@ mail_shared_explicit_inbox = yes
mail_prefetch_count = 30
passdb {
driver = lua
args = file=/etc/dovecot/auth/passwd-verify.lua blocking=yes cache_key=%u:%w
args = file=/etc/dovecot/auth/passwd-verify.lua blocking=yes cache_key=%s:%u:%w
result_success = return-ok
result_failure = continue
result_internalfail = continue

View File

@@ -196,7 +196,7 @@ while (true) {
logMsg("err", "Could not create user " . $user['email']);
continue;
}
} else if ($row && intval($iam_settings['periodic_sync']) == 1) {
} else if ($row && intval($iam_settings['periodic_sync']) == 1 && $row['authsource'] == "keycloak") {
if ($mapper_key === false){
logMsg("warning", "No matching attribute mapping found for user " . $user['email']);
continue;

View File

@@ -168,7 +168,7 @@ foreach ($response as $user) {
logMsg("err", "Could not create user " . $user[$iam_settings['username_field']][0]);
continue;
}
} else if ($row && intval($iam_settings['periodic_sync']) == 1) {
} else if ($row && intval($iam_settings['periodic_sync']) == 1 && $row['authsource'] == "ldap") {
if ($mapper_key === false){
logMsg("warning", "No matching attribute mapping found for user " . $user[$iam_settings['username_field']][0]);
continue;

View File

@@ -1,6 +1,6 @@
# Whitelist generated by Postwhite v3.4 on Sat Mar 1 00:19:29 UTC 2025
# Whitelist generated by Postwhite v3.4 on Tue Jul 1 00:22:55 UTC 2025
# https://github.com/stevejenkins/postwhite/
# 2000 total rules
# 2105 total rules
2a00:1450:4000::/36 permit
2a01:111:f400::/48 permit
2a01:111:f403:8000::/50 permit
@@ -18,21 +18,39 @@
2a02:a60:0:5::/64 permit
2c0f:fb50:4000::/36 permit
2.207.151.53 permit
2.207.217.30 permit
3.64.237.68 permit
3.65.3.180 permit
3.70.123.177 permit
3.72.182.33 permit
3.74.81.189 permit
3.75.33.185 permit
3.93.157.0/24 permit
3.94.40.108 permit
3.129.120.190 permit
3.210.190.0/24 permit
3.211.80.218 permit
3.216.221.67 permit
3.221.209.22 permit
8.20.114.31 permit
8.25.194.0/23 permit
8.25.196.0/23 permit
8.36.116.0/24 permit
8.39.54.0/23 permit
8.39.54.250/31 permit
8.39.144.0/24 permit
8.40.222.0/23 permit
8.40.222.250/31 permit
12.130.86.238 permit
13.107.246.51 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
13.216.7.111 permit
13.216.54.180 permit
15.200.21.50 permit
15.200.44.248 permit
15.200.201.185 permit
@@ -45,9 +63,14 @@
18.97.1.184/29 permit
18.97.2.64/26 permit
18.156.89.250 permit
18.156.205.64 permit
18.157.243.190 permit
18.158.153.154 permit
18.194.95.56 permit
18.197.217.180 permit
18.198.96.88 permit
18.199.210.3 permit
18.207.52.234 permit
18.208.124.128/25 permit
18.216.232.154 permit
18.235.27.253 permit
@@ -60,8 +83,6 @@
20.59.80.4/30 permit
20.63.210.192/28 permit
20.69.8.108/30 permit
20.70.246.20 permit
20.76.201.171 permit
20.83.222.104/30 permit
20.88.157.184/30 permit
20.94.180.64/28 permit
@@ -70,14 +91,11 @@
20.98.194.68/30 permit
20.105.209.76/30 permit
20.107.239.64/30 permit
20.112.250.133 permit
20.118.139.208/30 permit
20.141.10.196 permit
20.185.214.0/27 permit
20.185.214.32/27 permit
20.185.214.64/27 permit
20.231.239.246 permit
20.236.44.162 permit
23.103.224.0/19 permit
23.249.208.0/20 permit
23.251.224.0/19 permit
@@ -89,6 +107,7 @@
23.253.183.147 permit
23.253.183.148 permit
23.253.183.150 permit
24.110.64.0/18 permit
27.123.204.128/30 permit
27.123.204.132/31 permit
27.123.204.148/30 permit
@@ -103,17 +122,49 @@
27.123.206.80/28 permit
31.25.48.222 permit
31.47.251.17 permit
31.186.239.0/24 permit
34.2.64.0/22 permit
34.2.68.0/23 permit
34.2.70.0/23 permit
34.2.71.64/26 permit
34.2.72.0/22 permit
34.2.75.0/26 permit
34.2.78.0/23 permit
34.2.80.0/23 permit
34.2.82.0/23 permit
34.2.84.0/24 permit
34.2.84.64/26 permit
34.2.85.0/24 permit
34.2.85.64/26 permit
34.2.86.0/23 permit
34.2.88.0/23 permit
34.2.90.0/23 permit
34.2.92.0/23 permit
34.2.94.0/23 permit
34.70.158.162 permit
34.74.74.140 permit
34.83.159.189 permit
34.141.160.224 permit
34.193.58.168 permit
34.195.217.107 permit
34.197.10.50 permit
34.197.254.9 permit
34.198.94.229 permit
34.198.218.121 permit
34.212.163.75 permit
34.215.104.144 permit
34.218.115.239 permit
34.218.116.3 permit
34.225.212.172 permit
35.83.148.184 permit
35.155.198.111 permit
35.158.23.94 permit
35.161.32.253 permit
35.162.73.231 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.228.216.85 permit
35.242.169.159 permit
37.188.97.188 permit
37.218.248.47 permit
@@ -128,9 +179,14 @@
40.233.83.78 permit
40.233.88.28 permit
44.206.138.57 permit
44.210.169.44 permit
44.217.45.156 permit
44.236.56.93 permit
44.238.220.251 permit
44.245.243.92 permit
44.246.1.125 permit
44.246.68.102 permit
44.246.77.92 permit
45.14.148.0/22 permit
46.19.170.16 permit
46.226.48.0/21 permit
@@ -183,6 +239,7 @@
46.243.88.177 permit
46.243.95.179 permit
46.243.95.180 permit
50.16.246.183 permit
50.18.45.249 permit
50.18.121.236 permit
50.18.121.248 permit
@@ -196,14 +253,23 @@
50.56.130.220 permit
50.56.130.221 permit
50.56.130.222 permit
50.112.246.219 permit
52.1.14.157 permit
52.5.230.59 permit
52.12.53.23 permit
52.13.214.179 permit
52.26.1.71 permit
52.27.5.72 permit
52.27.28.47 permit
52.28.63.81 permit
52.28.197.132 permit
52.34.181.151 permit
52.35.192.45 permit
52.36.138.31 permit
52.37.142.146 permit
52.42.203.116 permit
52.50.24.208 permit
52.57.120.243 permit
52.58.216.183 permit
52.59.143.3 permit
52.60.41.5 permit
@@ -246,15 +312,16 @@
54.174.63.0/24 permit
54.186.193.102 permit
54.191.223.56 permit
54.211.126.101 permit
54.213.20.246 permit
54.214.39.184 permit
54.240.0.0/18 permit
54.240.64.0/19 permit
54.240.96.0/19 permit
54.240.64.0/18 permit
54.241.16.209 permit
54.244.54.130 permit
54.244.242.0/24 permit
54.255.61.23 permit
56.124.6.228 permit
57.103.64.0/18 permit
62.13.128.0/24 permit
62.13.129.128/25 permit
@@ -270,6 +337,9 @@
63.128.21.0/24 permit
63.143.57.128/25 permit
63.143.59.128/25 permit
63.176.194.123 permit
63.178.132.221 permit
63.178.143.178 permit
64.18.0.0/20 permit
64.20.241.45 permit
64.69.212.0/24 permit
@@ -291,9 +361,6 @@
64.207.219.13 permit
64.207.219.14 permit
64.207.219.15 permit
64.207.219.24 permit
64.207.219.25 permit
64.207.219.26 permit
64.207.219.71 permit
64.207.219.72 permit
64.207.219.73 permit
@@ -303,9 +370,6 @@
64.207.219.77 permit
64.207.219.78 permit
64.207.219.79 permit
64.207.219.88 permit
64.207.219.89 permit
64.207.219.90 permit
64.207.219.135 permit
64.207.219.136 permit
64.207.219.137 permit
@@ -341,10 +405,11 @@
65.110.161.77 permit
65.123.29.213 permit
65.123.29.220 permit
65.154.166.0/24 permit
65.212.180.36 permit
66.102.0.0/20 permit
66.102.0.0/21 permit
66.119.150.192/26 permit
66.162.193.226/31 permit
66.163.184.0/24 permit
66.163.185.0/24 permit
66.163.186.0/24 permit
@@ -550,7 +615,6 @@
74.86.241.250/31 permit
74.112.67.243 permit
74.125.0.0/16 permit
74.202.227.40 permit
74.208.4.200 permit
74.208.4.201 permit
74.208.4.220 permit
@@ -1136,6 +1200,7 @@
99.83.190.102 permit
103.9.96.0/22 permit
103.28.42.0/24 permit
103.122.78.238 permit
103.151.192.0/23 permit
103.168.172.128/27 permit
103.237.104.0/22 permit
@@ -1270,6 +1335,7 @@
106.50.16.0/28 permit
107.20.18.111 permit
107.20.210.250 permit
107.22.191.150 permit
108.174.0.0/24 permit
108.174.0.215 permit
108.174.3.0/24 permit
@@ -1304,6 +1370,9 @@
117.120.16.0/21 permit
119.42.242.52/31 permit
119.42.242.156 permit
121.244.91.48 permit
121.244.91.52 permit
122.15.156.182 permit
123.126.78.64/29 permit
124.108.96.24/31 permit
124.108.96.28/31 permit
@@ -1352,7 +1421,6 @@
129.213.195.191 permit
130.61.9.72 permit
130.162.39.83 permit
130.211.0.0/22 permit
130.248.172.0/24 permit
130.248.173.0/24 permit
131.253.30.0/24 permit
@@ -1366,7 +1434,21 @@
134.170.141.64/26 permit
134.170.143.0/24 permit
134.170.174.0/24 permit
135.84.80.0/24 permit
135.84.81.0/24 permit
135.84.82.0/24 permit
135.84.83.0/24 permit
135.84.216.0/22 permit
136.143.160.0/24 permit
136.143.161.0/24 permit
136.143.162.0/24 permit
136.143.176.0/24 permit
136.143.177.0/24 permit
136.143.178.49 permit
136.143.182.0/23 permit
136.143.184.0/24 permit
136.143.188.0/24 permit
136.143.190.0/23 permit
136.147.128.0/20 permit
136.147.135.0/24 permit
136.147.176.0/20 permit
@@ -1381,6 +1463,7 @@
139.138.46.219 permit
139.138.57.55 permit
139.138.58.119 permit
139.167.79.86 permit
139.180.17.0/24 permit
140.238.148.191 permit
141.148.159.229 permit
@@ -1415,6 +1498,7 @@
146.20.215.0/24 permit
146.20.215.182 permit
146.88.28.0/24 permit
146.148.116.76 permit
147.154.32.0/25 permit
147.243.1.47 permit
147.243.1.48 permit
@@ -1496,8 +1580,13 @@
163.114.132.120 permit
163.114.134.16 permit
163.114.135.16 permit
163.116.128.0/17 permit
164.152.23.32 permit
164.152.25.241 permit
164.177.132.168/30 permit
165.173.128.0/24 permit
165.173.180.250/31 permit
165.173.182.250/31 permit
166.78.68.0/22 permit
166.78.68.221 permit
166.78.69.169 permit
@@ -1522,10 +1611,18 @@
168.138.5.36 permit
168.138.73.51 permit
168.138.77.31 permit
168.138.237.153 permit
168.245.0.0/17 permit
168.245.12.252 permit
168.245.46.9 permit
168.245.127.231 permit
169.148.129.0/24 permit
169.148.131.0/24 permit
169.148.142.10 permit
169.148.144.0/25 permit
169.148.144.10 permit
169.148.146.0/23 permit
169.148.188.182 permit
170.10.128.0/24 permit
170.10.129.0/24 permit
170.10.132.56/29 permit
@@ -1651,6 +1748,21 @@
193.123.56.63 permit
194.19.134.0/25 permit
194.64.234.129 permit
194.97.196.0/24 permit
194.97.196.3 permit
194.97.196.4 permit
194.97.196.11 permit
194.97.196.12 permit
194.97.204.0/24 permit
194.97.204.3 permit
194.97.204.4 permit
194.97.204.11 permit
194.97.204.12 permit
194.97.212.0/24 permit
194.97.212.3 permit
194.97.212.4 permit
194.97.212.11 permit
194.97.212.12 permit
194.106.220.0/23 permit
194.113.24.0/22 permit
194.154.193.192/27 permit
@@ -1667,6 +1779,14 @@
198.61.254.231 permit
198.178.234.57 permit
198.244.48.0/20 permit
198.244.56.107 permit
198.244.56.108 permit
198.244.56.109 permit
198.244.56.111 permit
198.244.56.112 permit
198.244.56.113 permit
198.244.56.114 permit
198.244.56.115 permit
198.244.59.30 permit
198.244.59.33 permit
198.244.59.35 permit
@@ -1679,7 +1799,16 @@
199.16.156.0/22 permit
199.33.145.1 permit
199.33.145.32 permit
199.34.22.36 permit
199.59.148.0/22 permit
199.67.80.2 permit
199.67.80.20 permit
199.67.82.2 permit
199.67.82.20 permit
199.67.84.0/24 permit
199.67.86.0/24 permit
199.67.88.0/24 permit
199.67.90.0/24 permit
199.101.161.130 permit
199.101.162.0/25 permit
199.122.120.0/21 permit
@@ -1736,9 +1865,11 @@
204.92.114.187 permit
204.92.114.203 permit
204.92.114.204/31 permit
204.216.164.202 permit
204.220.160.0/21 permit
204.220.168.0/21 permit
204.220.176.0/20 permit
204.220.181.105 permit
204.232.168.0/24 permit
205.139.110.0/24 permit
205.201.128.0/20 permit
@@ -1918,6 +2049,7 @@
216.17.150.242 permit
216.17.150.251 permit
216.24.224.0/20 permit
216.27.86.152/31 permit
216.39.60.154/31 permit
216.39.60.156/30 permit
216.39.60.160/30 permit
@@ -1955,6 +2087,8 @@
216.99.5.68 permit
216.109.114.32/27 permit
216.109.114.64/29 permit
216.113.162.65 permit
216.113.163.65 permit
216.128.126.97 permit
216.136.162.65 permit
216.136.162.120/29 permit
@@ -1982,12 +2116,30 @@
2001:0868:0100:0600::/64 permit
2001:4860:4000::/36 permit
2001:748:100:40::2:0/112 permit
2001:748:400:1300::3 permit
2001:748:400:1300::4 permit
2001:748:400:1301::0/64 permit
2001:748:400:1301::3 permit
2001:748:400:1301::4 permit
2001:748:400:2300::3 permit
2001:748:400:2300::4 permit
2001:748:400:2301::0/64 permit
2001:748:400:2301::3 permit
2001:748:400:2301::4 permit
2001:748:400:3300::3 permit
2001:748:400:3300::4 permit
2001:748:400:3301::0/64 permit
2001:748:400:3301::3 permit
2001:748:400:3301::4 permit
2404:6800:4000::/36 permit
2603:1010:3:3::5b permit
2603:1020:201:10::10f permit
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:13c0:0004:0000:0000:0000:0000:0000/116 permit
2607:f8b0:4000::/36 permit
2620:109:c003:104::/64 permit
2620:109:c003:104::215 permit

View File

@@ -24,7 +24,6 @@
/.+\.guru$/i
/.+\.icu$/i
/.+\.id$/i
/.+\.info$/i
/.+\.in.net$/i
/.+\.ir$/i
/.+\.jetzt$/i

View File

@@ -8,7 +8,7 @@ VIRUS_FOUND {
}
# Bad policy from free mail providers
FREEMAIL_POLICY_FAILURE {
expression = "FREEMAIL_FROM & !DMARC_POLICY_ALLOW & !MAILLIST& !WHITELISTED_FWD_HOST & -g+:policies";
expression = "FREEMAIL_FROM & !DMARC_POLICY_ALLOW & !MAILLIST & !WHITELISTED_FWD_HOST & -g+:policies";
score = 16.0;
}
# Applies to freemail with undisclosed recipients

View File

@@ -1,12 +0,0 @@
oletools {
# default olefy settings
servers = "olefy:10055";
# needs to be set explicitly for Rspamd < 1.9.5
scan_mime_parts = true;
# mime-part regex matching in content-type or filename
# block all macros
extended = true;
max_size = 3145728;
timeout = 20.0;
retransmits = 1;
}

View File

@@ -5,6 +5,16 @@ document.addEventListener('DOMContentLoaded', function () {
window.location.href = '/user';
}
});
// logout function
function mc_logout() {
fetch("/", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
body: "logout=1"
}).then(() => window.location.href = '/');
}
// Custom SOGo JS

View File

@@ -16,6 +16,9 @@
SOGoFoldersSendEMailNotifications = YES;
SOGoForwardEnabled = YES;
// Added with SOGo 5.12 - Allows users to cleanup there maildirectories by deleting mails oder than X
SOGoEnableMailCleaning = YES;
// Fixes "MODIFICATION_FAILED" error (HTTP 412) in Clients when accepting invitations from external services
SOGoDisableOrganizerEventCheck = YES;
@@ -91,7 +94,7 @@
//SoDebugBaseURL = YES;
//ImapDebugEnabled = YES;
//SOGoEASDebugEnabled = YES;
SOGoEASSearchInBody = YES; // Experimental. Enabled since 2023-10
SOGoEASSearchInBody = YES;
//LDAPDebugEnabled = YES;
//PGDebugEnabled = YES;
//MySQL4DebugEnabled = YES;

View File

@@ -18,6 +18,7 @@ elseif (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] !=
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';
$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
$clamd_status = (preg_match("/^([yY][eE][sS]|[yY])+$/", $_ENV["SKIP_CLAMD"])) ? false : true;
$olefy_status = (preg_match("/^([yY][eE][sS]|[yY])+$/", $_ENV["SKIP_OLEFY"])) ? false : true;
if (!isset($_SESSION['gal']) && $license_cache = $redis->Get('LICENSE_STATUS_CACHE')) {
@@ -33,6 +34,7 @@ $vmail_df = explode(',', (string)json_decode(docker('post', 'dovecot-mailcow', '
// containers
$containers_info = (array) docker('info');
if ($clamd_status === false) unset($containers_info['clamd-mailcow']);
if ($olefy_status === false) unset($containers_info['olefy-mailcow']);
ksort($containers_info);
$containers = array();
foreach ($containers_info as $container => $container_info) {
@@ -77,6 +79,7 @@ $template_data = [
'gal' => @$_SESSION['gal'],
'license_guid' => license('guid'),
'clamd_status' => $clamd_status,
'olefy_status' => $olefy_status,
'containers' => $containers,
'ip_check' => customize('get', 'ip_check'),
'lang_admin' => json_encode($lang['admin']),

View File

@@ -22,7 +22,8 @@ $_SESSION['index_query_string'] = $_SERVER['QUERY_STRING'];
$template = 'admin_index.twig';
$template_data = [
'login_delay' => @$_SESSION['ldelay']
'login_delay' => @$_SESSION['ldelay'],
'custom_login' => customize('get', 'custom_login'),
];
$js_minifier->add('/web/js/site/index.js');

View File

@@ -125,6 +125,7 @@ $template_data = [
'logo_specs' => customize('get', 'main_logo_specs'),
'logo_dark_specs' => customize('get', 'main_logo_dark_specs'),
'ip_check' => customize('get', 'ip_check'),
'custom_login' => customize('get', 'custom_login'),
'password_complexity' => password_complexity('get'),
'show_rspamd_global_filters' => @$_SESSION['show_rspamd_global_filters'],
'cors_settings' => $cors_settings,

View File

@@ -5847,6 +5847,7 @@ paths:
client_id: "mailcow_client"
client_secret: "*"
redirect_url: "https://mail.mailcow.tld"
redirect_url_extra: ["https://extramail.mailcow.tld"]
version: "26.1.3"
default_template: "Default"
mappers:
@@ -5900,6 +5901,9 @@ paths:
redirect_url:
description: The redirect URL that OIDC Provider will use after authentication. Required if `authsource` is keycloak or generic-oidc.
type: string
redirect_url_extra:
description: Additional redirect URLs that OIDC Provider can use after authentication if valid.
type: array
version:
description: Specifies the Keycloak version. Required if `authsource` is keycloak.
type: string
@@ -5990,6 +5994,7 @@ paths:
client_id: "mailcow_client"
client_secret: "Xy7GdPqvJ9m3R8sT2LkVZ5W1oNbCaYQf"
redirect_url: "https://mail.mailcow.tld"
redirect_url_extra: ["https://extramail.mailcow.tld"]
version: "26.1.3"
default_template: "Default"
mappers: ["small_mbox", "medium_mbox"]
@@ -6034,6 +6039,7 @@ paths:
client_id: "mailcow_client"
client_secret: "Xy7GdPqvJ9m3R8sT2LkVZ5W1oNbCaYQf"
redirect_url: "https://mail.mailcow.tld"
redirect_url_extra: ["https://extramail.mailcow.tld"]
client_scopes: "openid profile email mailcow_template"
default_template: "Default"
mappers: ["small_mbox", "medium_mbox"]

View File

@@ -85,7 +85,7 @@ if (count($records) == 0 || $records[0]['target'] != '') { ?>
<authentication>password-cleartext</authentication>
</outgoingServer>
<enable visiturl="https://<?=$mailcow_hostname; ?><?php if ($port != 443) echo ':'.$port; ?>/admin.php">
<enable visiturl="https://<?=$mailcow_hostname; ?><?php if ($port != 443) echo ':'.$port; ?>/admin">
<instruction>If you didn't change the password given to you by the administrator or if you didn't change it in a long time, please consider doing that now.</instruction>
<instruction lang="de">Sollten Sie das Ihnen durch den Administrator vergebene Passwort noch nicht geändert haben, empfehlen wir dies nun zu tun. Auch ein altes Passwort sollte aus Sicherheitsgründen geändert werden.</instruction>
</enable>

View File

@@ -22,6 +22,7 @@ $_SESSION['index_query_string'] = $_SERVER['QUERY_STRING'];
$template = 'domainadmin_index.twig';
$template_data = [
'login_delay' => @$_SESSION['ldelay'],
'custom_login' => customize('get', 'custom_login'),
];
$js_minifier->add('/web/js/site/index.js');

View File

@@ -9,25 +9,52 @@ function check_login($user, $pass, $app_passwd_data = false, $extra = null) {
// Try validate admin
if (!isset($role) || $role == "admin") {
$result = admin_login($user, $pass);
if ($result !== false) return $result;
if ($result !== false){
return $result;
}
}
// Try validate domain admin
if (!isset($role) || $role == "domain_admin") {
$result = domainadmin_login($user, $pass);
if ($result !== false) return $result;
if ($result !== false) {
return $result;
}
}
// Try validate app password
if (!isset($role) || $role == "app") {
$result = apppass_login($user, $pass, $app_passwd_data);
if ($result !== false) {
if ($app_passwd_data['eas'] === true) {
$service = 'EAS';
} elseif ($app_passwd_data['dav'] === true) {
$service = 'DAV';
} else {
$service = 'NONE';
}
$real_rip = ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR']);
set_sasl_log($user, $real_rip, $service, $pass);
return $result;
}
}
// Try validate user
if (!isset($role) || $role == "user") {
$result = user_login($user, $pass);
if ($result !== false) return $result;
}
// Try validate app password
if (!isset($role) || $role == "app") {
$result = apppass_login($user, $pass, $app_passwd_data);
if ($result !== false) return $result;
if ($result !== false) {
if ($app_passwd_data['eas'] === true) {
$service = 'EAS';
} elseif ($app_passwd_data['dav'] === true) {
$service = 'DAV';
} else {
$service = 'MAILCOWUI';
}
$real_rip = ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR']);
set_sasl_log($user, $real_rip, $service);
return $result;
}
}
// skip log and only return false if it's an internal request
@@ -215,6 +242,7 @@ function user_login($user, $pass, $extra = null){
return false;
}
$row['attributes'] = json_decode($row['attributes'], true);
switch ($row['authsource']) {
case 'keycloak':
// user authsource is keycloak, try using via rest flow
@@ -324,6 +352,11 @@ function user_login($user, $pass, $extra = null){
}
// verify password
if (verify_hash($row['password'], $pass) !== false) {
if (intval($row['attributes']['force_pw_update']) == 1) {
$_SESSION['pending_pw_update'] = true;
}
// check for tfa authenticators
$authenticators = get_tfa($user);
if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0 && !$is_internal) {
@@ -415,21 +448,7 @@ function apppass_login($user, $pass, $app_passwd_data, $extra = null){
// verify password
if (verify_hash($row['password'], $pass) !== false) {
if ($is_internal){
$remote_addr = $extra['remote_addr'];
} else {
$remote_addr = ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR']);
}
$service = strtoupper($is_app_passwd);
$stmt = $pdo->prepare("REPLACE INTO sasl_log (`service`, `app_password`, `username`, `real_rip`) VALUES (:service, :app_id, :username, :remote_addr)");
$stmt->execute(array(
':service' => $service,
':app_id' => $row['app_passwd_id'],
':username' => $user,
':remote_addr' => $remote_addr
));
$_SESSION['app_passwd_id'] = $row['app_passwd_id'];
unset($_SESSION['ldelay']);
return "user";
}
@@ -458,6 +477,9 @@ function keycloak_mbox_login_rest($user, $pass, $extra = null){
}
return false;
}
if (!$iam_provider) {
return false;
}
// get access_token for service account of mailcow client
$admin_token = identity_provider("get-keycloak-admin-token");
@@ -527,6 +549,17 @@ function keycloak_mbox_login_rest($user, $pass, $extra = null){
return 'user';
}
// check if login provisioning is enabled before creating user
if (!$iam_settings['login_provisioning']){
if (!$is_internal){
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, "Auto-create users on login is deactivated"),
'msg' => 'login_failed'
);
}
return false;
}
// check if matching attribute exist
if (empty($iam_settings['mappers']) || !$user_template || $mapper_key === false) {
if (!empty($iam_settings['default_template'])) {
@@ -640,10 +673,21 @@ function ldap_mbox_login($user, $pass, $extra = null){
return 'user';
}
// check if login provisioning is enabled before creating user
if (!$iam_settings['login_provisioning']){
if (!$is_internal){
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, "Auto-create users on login is deactivated"),
'msg' => 'login_failed'
);
}
return false;
}
// check if matching attribute exist
if (empty($iam_settings['mappers']) || !$user_template || $mapper_key === false) {
if (!empty($iam_settings['default_tempalte'])) {
$mbox_template = $iam_settings['default_tempalte'];
if (!empty($iam_settings['default_template'])) {
$mbox_template = $iam_settings['default_template'];
} else {
$_SESSION['return'][] = array(
'type' => 'danger',

View File

@@ -204,6 +204,35 @@ function customize($_action, $_item, $_data = null) {
'msg' => 'ip_check_opt_in_modified'
);
break;
case 'custom_login':
$hide_user_quicklink = ($_data['hide_user_quicklink'] == "1") ? 1 : 0;
$hide_domainadmin_quicklink = ($_data['hide_domainadmin_quicklink'] == "1") ? 1 : 0;
$hide_admin_quicklink = ($_data['hide_admin_quicklink'] == "1") ? 1 : 0;
$force_sso = ($_data['force_sso'] == "1") ? 1 : 0;
$custom_login = array(
"hide_user_quicklink" => $hide_user_quicklink,
"hide_domainadmin_quicklink" => $hide_domainadmin_quicklink,
"hide_admin_quicklink" => $hide_admin_quicklink,
"force_sso" => $force_sso,
);
try {
$redis->set('CUSTOM_LOGIN', json_encode($custom_login));
}
catch (RedisException $e) {
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, $_action, $_item, $_data),
'msg' => array('redis_error', $e)
);
return false;
}
$_SESSION['return'][] = array(
'type' => 'success',
'log' => array(__FUNCTION__, $_action, $_item, $_data),
'msg' => 'custom_login_modified'
);
break;
}
break;
case 'delete':
@@ -357,6 +386,20 @@ function customize($_action, $_item, $_data = null) {
return false;
}
break;
case 'custom_login':
try {
$custom_login = $redis->get('CUSTOM_LOGIN');
return $custom_login ? json_decode($custom_login, true) : array();
}
catch (RedisException $e) {
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, $_action, $_item, $_data),
'msg' => array('redis_error', $e)
);
return false;
}
break;
}
break;
}

View File

@@ -350,6 +350,34 @@ function last_login($action, $username, $sasl_limit_days = 7, $ui_offset = 1) {
}
}
function set_sasl_log($username, $real_rip, $service){
global $pdo;
try {
if (!empty($_SESSION['app_passwd_id'])) {
$app_password = $_SESSION['app_passwd_id'];
} else {
$app_password = 0;
}
$stmt = $pdo->prepare('REPLACE INTO `sasl_log` (`username`, `real_rip`, `service`, `app_password`) VALUES (:username, :real_rip, :service, :app_password)');
$stmt->execute(array(
':username' => $username,
':real_rip' => $real_rip,
':service' => $service,
':app_password' => $app_password
));
} catch (PDOException $e) {
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, $_data_log),
'msg' => array('mysql_error', $e)
);
return false;
}
return true;
}
function flush_memcached() {
try {
$m = new Memcached();
@@ -973,6 +1001,7 @@ function edit_user_account($_data) {
':password_hashed' => $password_hashed,
':username' => $username
));
$_SESSION['pending_pw_update'] = false;
update_sogo_static_view();
}
@@ -2258,12 +2287,14 @@ function identity_provider($_action = null, $_data = null, $_extra = null) {
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row){
switch ($row["key"]) {
case "redirect_url_extra":
case "mappers":
case "templates":
$settings[$row["key"]] = json_decode($row["value"]);
break;
case "use_ssl":
case "use_tls":
case "login_provisioning":
case "ignore_ssl_errors":
$settings[$row["key"]] = boolval($row["value"]);
break;
@@ -2272,6 +2303,10 @@ function identity_provider($_action = null, $_data = null, $_extra = null) {
break;
}
}
// set login_provisioning if not exists
if (!array_key_exists('login_provisioning', $settings)) {
$settings['login_provisioning'] = 1;
}
// return default client_scopes for generic-oidc if none is set
if ($settings["authsource"] == "generic-oidc" && empty($settings["client_scopes"])){
$settings["client_scopes"] = "openid profile email mailcow_template";
@@ -2336,7 +2371,8 @@ function identity_provider($_action = null, $_data = null, $_extra = null) {
return false;
}
$_data['ignore_ssl_error'] = isset($_data['ignore_ssl_error']) ? boolval($_data['ignore_ssl_error']) : false;
$_data['ignore_ssl_error'] = isset($_data['ignore_ssl_error']) ? boolval($_data['ignore_ssl_error']) : false;
$_data['login_provisioning'] = isset($_data['login_provisioning']) ? boolval($_data['login_provisioning']) : false;
switch ($_data['authsource']) {
case "keycloak":
$_data['server_url'] = (!empty($_data['server_url'])) ? rtrim($_data['server_url'], '/') : null;
@@ -2345,14 +2381,14 @@ function identity_provider($_action = null, $_data = null, $_extra = null) {
$_data['import_users'] = isset($_data['import_users']) ? intval($_data['import_users']) : 0;
$_data['sync_interval'] = (!empty($_data['sync_interval'])) ? intval($_data['sync_interval']) : 15;
$_data['sync_interval'] = $_data['sync_interval'] < 1 ? 1 : $_data['sync_interval'];
$required_settings = array('authsource', 'server_url', 'realm', 'client_id', 'client_secret', 'redirect_url', 'version', 'mailpassword_flow', 'periodic_sync', 'import_users', 'sync_interval', 'ignore_ssl_error');
$required_settings = array('authsource', 'server_url', 'realm', 'client_id', 'client_secret', 'redirect_url', 'version', 'mailpassword_flow', 'periodic_sync', 'import_users', 'sync_interval', 'ignore_ssl_error', 'login_provisioning');
break;
case "generic-oidc":
$_data['authorize_url'] = (!empty($_data['authorize_url'])) ? $_data['authorize_url'] : null;
$_data['token_url'] = (!empty($_data['token_url'])) ? $_data['token_url'] : null;
$_data['userinfo_url'] = (!empty($_data['userinfo_url'])) ? $_data['userinfo_url'] : null;
$_data['client_scopes'] = (!empty($_data['client_scopes'])) ? $_data['client_scopes'] : "openid profile email mailcow_template";
$required_settings = array('authsource', 'authorize_url', 'token_url', 'client_id', 'client_secret', 'redirect_url', 'userinfo_url', 'client_scopes', 'ignore_ssl_error');
$required_settings = array('authsource', 'authorize_url', 'token_url', 'client_id', 'client_secret', 'redirect_url', 'userinfo_url', 'client_scopes', 'ignore_ssl_error', 'login_provisioning');
break;
case "ldap":
$_data['host'] = (!empty($_data['host'])) ? str_replace(" ", "", $_data['host']) : "";
@@ -2366,7 +2402,7 @@ function identity_provider($_action = null, $_data = null, $_extra = null) {
$_data['use_tls'] = isset($_data['use_tls']) && !$_data['use_ssl'] ? boolval($_data['use_tls']) : false;
$_data['sync_interval'] = (!empty($_data['sync_interval'])) ? intval($_data['sync_interval']) : 15;
$_data['sync_interval'] = $_data['sync_interval'] < 1 ? 1 : $_data['sync_interval'];
$required_settings = array('authsource', 'host', 'port', 'basedn', 'username_field', 'filter', 'attribute_field', 'binddn', 'bindpass', 'periodic_sync', 'import_users', 'sync_interval', 'use_ssl', 'use_tls', 'ignore_ssl_error');
$required_settings = array('authsource', 'host', 'port', 'basedn', 'username_field', 'filter', 'attribute_field', 'binddn', 'bindpass', 'periodic_sync', 'import_users', 'sync_interval', 'use_ssl', 'use_tls', 'ignore_ssl_error', 'login_provisioning');
break;
}
@@ -2390,6 +2426,18 @@ function identity_provider($_action = null, $_data = null, $_extra = null) {
}
$pdo->commit();
// add redirect_url_extra
if (isset($_data['redirect_url_extra'])){
$_data['redirect_url_extra'] = (!is_array($_data['redirect_url_extra'])) ? array($_data['redirect_url_extra']) : $_data['redirect_url_extra'];
$redirect_url_extra = array_filter($_data['redirect_url_extra']);
$redirect_url_extra = json_encode($redirect_url_extra);
$stmt = $pdo->prepare("INSERT INTO identity_provider (`key`, `value`) VALUES ('redirect_url_extra', :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);");
$stmt->bindParam(':value', $redirect_url_extra);
$stmt->execute();
}
// add default template
if (isset($_data['default_template'])) {
$_data['default_template'] = (empty($_data['default_template'])) ? "" : $_data['default_template'];
@@ -2724,6 +2772,16 @@ function identity_provider($_action = null, $_data = null, $_extra = null) {
return true;
}
// user doesn't exist, check if login provisioning is enabled
if (!$iam_settings['login_provisioning']){
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, "Auto-create users on login is deactivated"),
'msg' => 'login_failed'
);
return false;
}
if (empty($iam_settings['mappers']) || empty($user_template) || $mapper_key === false){
if (!empty($iam_settings['default_template'])) {
$mbox_template = $iam_settings['default_template'];
@@ -2823,7 +2881,19 @@ function identity_provider($_action = null, $_data = null, $_extra = null) {
case "get-redirect":
if ($iam_settings['authsource'] != 'keycloak' && $iam_settings['authsource'] != 'generic-oidc')
return false;
$authUrl = $iam_provider->getAuthorizationUrl();
$options = [];
if (isset($iam_settings['redirect_url_extra'])) {
// check if the current domain is used in an extra redirect URL
$targetDomain = strtolower($_SERVER['HTTP_HOST']);
foreach ($iam_settings['redirect_url_extra'] as $testUrl) {
$testUrlParsed = parse_url($testUrl);
if (isset($testUrlParsed['host']) && strtolower($testUrlParsed['host']) == $targetDomain) {
$options['redirect_uri'] = $testUrl;
break;
}
}
}
$authUrl = $iam_provider->getAuthorizationUrl($options);
$_SESSION['oauth2state'] = $iam_provider->getState();
return $authUrl;
break;

View File

@@ -169,7 +169,7 @@ function quarantine($_action, $_data = null) {
}
}
elseif ($release_format == 'raw') {
$detail_row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/', 'X-Pre-Release-Spam-Flag $1', $detail_row['msg']);
$detail_row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/m', 'X-Pre-Release-Spam-Flag: $1', $detail_row['msg']);
$postfix_talk = array(
array('220', 'HELO quarantine' . chr(10)),
array('250', 'MAIL FROM: ' . $sender . chr(10)),
@@ -464,7 +464,7 @@ function quarantine($_action, $_data = null) {
}
}
elseif ($release_format == 'raw') {
$row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/', 'X-Pre-Release-Spam-Flag $1', $row['msg']);
$row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/m', 'X-Pre-Release-Spam-Flag: $1', $row['msg']);
$postfix_talk = array(
array('220', 'HELO quarantine' . chr(10)),
array('250', 'MAIL FROM: ' . $sender . chr(10)),

View File

@@ -76,7 +76,10 @@ if (isset($_POST["verify_tfa_login"])) {
$user_details = mailbox("get", "mailbox_details", $_SESSION['mailcow_cc_username']);
$is_dual = (!empty($_SESSION["dual-login"]["username"])) ? true : false;
if (intval($user_details['attributes']['sogo_access']) == 1 && !$is_dual) {
if (intval($user_details['attributes']['sogo_access']) == 1 &&
intval($user_details['attributes']['force_pw_update']) != 1 &&
getenv('SKIP_SOGO') != "y" &&
!$is_dual) {
header("Location: /SOGo/so/{$_SESSION['mailcow_cc_username']}");
die();
} else {
@@ -139,7 +142,10 @@ if (isset($_POST["login_user"]) && isset($_POST["pass_user"])) {
$user_details = mailbox("get", "mailbox_details", $login_user);
$is_dual = (!empty($_SESSION["dual-login"]["username"])) ? true : false;
if (intval($user_details['attributes']['sogo_access']) == 1 && !$is_dual) {
if (intval($user_details['attributes']['sogo_access']) == 1 &&
intval($user_details['attributes']['force_pw_update']) != 1 &&
getenv('SKIP_SOGO') != "y" &&
!$is_dual) {
header("Location: /SOGo/so/{$login_user}");
die();
} else {

View File

@@ -11,7 +11,7 @@ if (isset($_SESSION['mailcow_cc_role']) && isset($_SESSION['oauth2_request'])) {
elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'user') {
$user_details = mailbox("get", "mailbox_details", $_SESSION['mailcow_cc_username']);
$is_dual = (!empty($_SESSION["dual-login"]["username"])) ? true : false;
if (intval($user_details['attributes']['sogo_access']) == 1 && !$is_dual) {
if (intval($user_details['attributes']['sogo_access']) == 1 && !$is_dual && getenv('SKIP_SOGO') != "y") {
header("Location: /SOGo/so/{$_SESSION['mailcow_cc_username']}");
} else {
header("Location: /user");
@@ -33,16 +33,18 @@ $_SESSION['index_query_string'] = $_SERVER['QUERY_STRING'];
$has_iam_sso = false;
if ($iam_provider){
$has_iam_sso = identity_provider("get-redirect") ? true : false;
$iam_redirect_url = identity_provider("get-redirect");
$has_iam_sso = $iam_redirect_url ? true : false;
}
$custom_login = customize('get', 'custom_login');
$template = 'user_index.twig';
$template_data = [
'oauth2_request' => @$_SESSION['oauth2_request'],
'is_mobileconfig' => str_contains($_SESSION['index_query_string'], 'mobileconfig'),
'login_delay' => @$_SESSION['ldelay'],
'has_iam_sso' => $has_iam_sso
'has_iam_sso' => $has_iam_sso,
'custom_login' => $custom_login,
];
$js_minifier->add('/web/js/site/index.js');

View File

@@ -51,7 +51,7 @@ jQuery(function($){
$('.submit_rspamd_regex').attr({"disabled": true});
});
$("#show_rspamd_global_filters").click(function() {
$.get("inc/ajax/show_rspamd_global_filters.php");
$.get("/inc/ajax/show_rspamd_global_filters.php");
$("#confirm_show_rspamd_global_filters").hide();
$("#rspamd_global_filters").removeClass("d-none");
});
@@ -558,7 +558,7 @@ jQuery(function($){
} else if (table == 'oauth2clientstable') {
$.each(data, function (i, item) {
item.action = '<div class="btn-group">' +
'<a href="/edit.php?oauth2client=' + encodeURI(item.id) + '" class="btn btn-xs btn-xs-lg btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'<a href="/edit/oauth2client/' + encodeURI(item.id) + '" class="btn btn-xs btn-xs-lg btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'<a href="#" data-action="delete_selected" data-id="single-oauth2-client" data-api-url="delete/oauth2-client" data-item="' + encodeURI(item.id) + '" class="btn btn-xs btn-xs-lg btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
'</div>';
item.scope = "profile";
@@ -573,7 +573,7 @@ jQuery(function($){
item.action = '<div class="btn-group">' +
'<a href="/edit/domainadmin/' + encodeURI(item.username) + '" class="btn btn-xs btn-xs-lg btn-xs-third btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'<a href="#" data-action="delete_selected" data-id="single-domain-admin" data-api-url="delete/domain-admin" data-item="' + encodeURI(item.username) + '" class="btn btn-xs btn-xs-lg btn-xs-third btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
'<a href="/index.php?duallogin=' + encodeURIComponent(item.username) + '" class="btn btn-xs btn-xs-lg btn-xs-third btn-success"><i class="bi bi-person-fill"></i> Login</a>' +
'<a href="/domainadmin/?duallogin=' + encodeURIComponent(item.username) + '" class="btn btn-xs btn-xs-lg btn-xs-third btn-success"><i class="bi bi-person-fill"></i> Login</a>' +
'</div>';
});
} else if (table == 'adminstable') {
@@ -655,7 +655,7 @@ jQuery(function($){
$(this).html('<i class="bi bi-arrow-repeat icon-spin"></i> ');
$.ajax({
type: 'GET',
url: 'inc/ajax/relay_check.php',
url: '/inc/ajax/relay_check.php',
dataType: 'text',
data: $('#test_relayhost_form').serialize(),
complete: function (data) {
@@ -681,7 +681,7 @@ jQuery(function($){
$(this).html('<div class="spinner-border" role="status"><span class="visually-hidden">Loading...</span></div> ');
$.ajax({
type: 'GET',
url: 'inc/ajax/transport_check.php',
url: '/inc/ajax/transport_check.php',
dataType: 'text',
data: $('#test_transport_form').serialize(),
complete: function (data) {
@@ -789,6 +789,18 @@ jQuery(function($){
$('.iam_ldap_rolemap_del').click(async function(e){
deleteAttributeMappingRow(this, e);
});
$('.iam_redirect_add_keycloak').click(async function(e){
addRedirectUrlRow('#iam_keycloak_redirect_list', '.iam_keycloak_redirect_del', e);
});
$('.iam_redirect_add_generic').click(async function(e){
addRedirectUrlRow('#iam_generic_redirect_list', '.iam_generic_redirect_del', e);
});
$('.iam_keycloak_redirect_del').click(async function(e){
deleteRedirectUrlRow(this, e);
});
$('.iam_generic_redirect_del').click(async function(e){
deleteRedirectUrlRow(this, e);
});
// selecting identity provider
$('#iam_provider').on('change', function(){
// toggle password fields
@@ -833,4 +845,22 @@ jQuery(function($){
if ($(elem).parent().parent().parent().parent().children().length > 1)
$(elem).parent().parent().parent().remove();
}
function addRedirectUrlRow(list_id, del_class, e) {
e.preventDefault();
var parent = $(list_id)
$(parent).children().last().clone().appendTo(parent);
var newChild = $(parent).children().last();
$(newChild).find('input').val('');
$(del_class).off('click');
$(del_class).click(async function(e){
deleteRedirectUrlRow(this, e);
});
}
function deleteRedirectUrlRow(elem, e) {
e.preventDefault();
if ($(elem).parent().parent().parent().parent().children().length > 2)
$(elem).parent().parent().parent().remove();
}
});

View File

@@ -90,13 +90,7 @@ jQuery(function($){
console.log('error reading last logins');
},
success: function (data) {
$('.last-ui-login').html('');
$('.last-sasl-login').html('');
if (data.ui.time) {
$('.last-ui-login').html('<i class="bi bi-person-fill"></i> ' + lang.last_ui_login + ': ' + unix_time_format(data.ui.time));
} else {
$('.last-ui-login').text(lang.no_last_login);
}
if (data.sasl) {
$('.last-sasl-login').append('<ul class="list-group">');
$.each(data.sasl, function (i, item) {
@@ -104,7 +98,7 @@ jQuery(function($){
var local_datetime = datetime.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});
var service = '<div class="badge bg-secondary">' + item.service.toUpperCase() + '</div>';
var app_password = item.app_password ? ' <a href="/edit/app-passwd/' + item.app_password + '"><i class="bi bi-app-indicator"></i> ' + escapeHtml(item.app_password_name || "App") + '</a>' : '';
var real_rip = item.real_rip.startsWith("Web") ? item.real_rip : '<a href="https://bgp.he.net/ip/' + item.real_rip + '" target="_blank">' + item.real_rip + "</a>";
var real_rip = item.real_rip.startsWith("Web") ? item.real_rip : '<a href="https://bgp.tools/prefix/' + item.real_rip + '" target="_blank">' + item.real_rip + "</a>";
var ip_location = item.location ? ' <span class="flag-icon flag-icon-' + item.location.toLowerCase() + '"></span>' : '';
var ip_data = real_rip + ip_location + app_password;

View File

@@ -1976,6 +1976,9 @@ if (isset($_GET['query'])) {
case "ip_check":
process_edit_return(customize('edit', 'ip_check', $attr));
break;
case "custom_login":
process_edit_return(customize('edit', 'custom_login', $attr));
break;
case "self":
if ($_SESSION['mailcow_cc_role'] == "domainadmin") {
process_edit_return(domain_admin('edit', $attr));

View File

@@ -0,0 +1 @@
{}

View File

@@ -1,7 +1,7 @@
{
"acl": {
"alias_domains": "Doménové aliasy",
"app_passwds": "Hesla aplikací",
"app_passwds": "Správa hesel aplikací",
"bcc_maps": "BCC mapy",
"delimiter_action": "Zacházení s označkovanou poštou",
"domain_desc": "Změnit popis domény",
@@ -82,12 +82,12 @@
"password": "Heslo",
"password_repeat": "Potvrzení nového hesla (opakujte)",
"port": "Port",
"post_domain_add": "Po přidání nové domény je nutné restartovat SOGo kontejner!",
"post_domain_add": "Po přidání nové domény se musí restartovat kontejner SOGo!<br><br>Je také třeba ověřit nastavení DNS nové domény. Po ověření restartujte kontejner \"acme-mailcow\", aby se vygenerovaly certifikáty domény (autoconfig.&lt;domain&gt;, autodiscover.&lt;domain&gt;).<br>Tento krok je volitelný, a provede se automaticky každých 24 hodin.",
"private_comment": "Soukromý komentář",
"public_comment": "Veřejný komentář",
"quota_mb": "Kvóta (MiB)",
"relay_all": "Předávání všech příjemců",
"relay_all_info": "<small>Pokud se rozhodnete <b>nepředávat</b> všechny příjemce, musíte přidat prázdnou mailovou schránku pro každého příjemce, který se má předávat.</small>",
"relay_all_info": "Pokud se rozhodnete <b>nepředávat</b> všechny příjemce, musíte přidat prázdnou mailovou schránku pro každého příjemce, který se má předávat.",
"relay_domain": "Předávání domény",
"relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> U této domény lze pro konkrétní cíl nastavit transportní mapu. Není-li nastavena, použije se MX záznam.",
"relay_unknown_only": "Předávat jen neexistující schránky. Doručení do existujících proběhne lokálně.",
@@ -183,7 +183,7 @@
"f2b_ban_time": "Doba blokování (s)",
"f2b_blacklist": "Sítě/hostitelé na blacklistu",
"f2b_filter": "Regex filtre",
"f2b_list_info": "Síť nebo hostitelé na blacklistu mají vždy větší váhu než položky na whitelistu. Blacklist se sestavuje vždy při startu kontejneru.",
"f2b_list_info": "Síť nebo hostitelé na blacklistu mají vždy větší váhu než položky na whitelistu. <b>Každá úprava seznamů trvá pár sekund.</b>",
"f2b_max_attempts": "Max. pokusů",
"f2b_netban_ipv4": "Rozsah IPv4 podsítě k zablokování (8-32)",
"f2b_netban_ipv6": "Rozsah IPv6 podsítě k zablokování (8-128)",
@@ -256,7 +256,7 @@
"quarantine_exclude_domains": "Vyloučené domény a doménové aliasy",
"quarantine_max_age": "Maximální stáří ve dnech<br><small>Hodnota musí být rovna nebo větší než 1 den.</small>",
"quarantine_max_score": "Neposílat notifikace pokud je spam skóre větší než hodnota:<br><small>Výchozí je 9999.0</small>",
"quarantine_max_size": "Maximální velikost v MiB (větší prvky budou smazány)<br />0 <b>neznamená</b> neomezeno.",
"quarantine_max_size": "Maximální velikost v MiB (větší prvky budou smazány)<br /><small>0 <b>neznamená</b> neomezeno.</small>",
"quarantine_notification_html": "Šablona upozornění:<br><small>Ponechte prázdné, aby se obnovila výchozí šablona.</small>",
"quarantine_notification_sender": "Odesílatel upozornění",
"quarantine_notification_subject": "Předmět upozornění",
@@ -264,7 +264,7 @@
"quarantine_release_format": "Formát propuštěných položek",
"quarantine_release_format_att": "Jako příloha",
"quarantine_release_format_raw": "Nezměněný originál",
"quarantine_retention_size": "Počet zadržených zpráv na mailovou schránku<br />0 znamená <b>neaktivní</b>.",
"quarantine_retention_size": "Počet zadržených zpráv na mailovou schránku<br /><small>0 znamená <b>neaktivní</b>.</small>",
"quota_notification_html": "Šablona upozornění:<br><small>Ponechte prázdné, aby se obnovila výchozí šablona.</small>",
"quota_notification_sender": "Odesílatel upozornění",
"quota_notification_subject": "Předmět upozornění",
@@ -283,7 +283,7 @@
"relay_rcpt": "\"Komu:\" adresa",
"relay_run": "Provést test",
"relayhosts": "Transporty podle odesílatele",
"relayhosts_hint": "Zde definujte transporty podle odesílatele, jež pak můžete použít v nastavení domény.<br>\r\nProtokol transportu je vždy \"smtp:\". Bere se v potaz uživatelské nastavení odchozího TLS.",
"relayhosts_hint": "Zde definujte transporty podle odesílatele, jež pak můžete použít v nastavení domény.<br>\nProtokol transportu je vždy \"smtp:\" a použije se TLS, je-li nabídnuto. Zabalené TLS (SMTPS) se nepodporuje. Bere se v potaz uživatelské nastavení odchozího TLS.<br>\nTýká se vybraných domén včetně doménových aliasů.",
"remove": "Smazat",
"remove_row": "Smazat řádek",
"reset_default": "Obnovit výchozí nastavení",
@@ -299,7 +299,7 @@
"rsettings_preset_2": "Postmasteři chtějí dostávat spam",
"rsettings_preset_3": "Povolit jen určité odesílatele pro schránku (např. jen interní schránka)",
"rsettings_preset_4": "Deaktivujte Rspamd pro doménu",
"rspamd_com_settings": "<a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd dokumentace</a>\r\n - Název nastavení bude automaticky vygenerován, viz níže uvedené předvolby.",
"rspamd_com_settings": "Název nastavení se vygeneruje automaticky, viz ukázky nastavení níže. Více informací viz <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd dokumentace</a>",
"rspamd_global_filters": "Mapa globálních filtrů",
"rspamd_global_filters_agree": "Budu opatrný!",
"rspamd_global_filters_info": "Mapa globálních filtrů obsahuje jiné globální black- a whitelisty.",
@@ -324,8 +324,8 @@
"to_top": "Zpět na začátek",
"transport_dest_format": "Formát: example.org, .example.org, *, box@example.org (vícero položek lze oddělit čárkou)",
"transport_maps": "Transportní mapy",
"transport_test_rcpt_info": "&#8226; Na otestování odchozí pošty je možné použít null@hosted.mailcow.de jako adresáta",
"transports_hint": " Položka transportní mapy <b>přebíjí</b> transportní mapu podle odesílatele</b>.<br>\r\n→ Uživatelské nastavení odchozího TLS se ignoruje a lze je výhradně vynutit mapováním TLS pravidel.<br>\r\n→ Protokol transportu je vždy \"smtp:\".<br>\r\n→ Adresy, jež odpovídají výrazu \"/localhost$/\", se vždy předají přes \"local:\", takže nejsou zahrnuty do definice cíle \"*\".<br>\r\n→ Pro stanovení přihlašovacích údajů dalšího skoku, např. \"[host]:25\", bude Postfix <b>vždy</b> hledat nejdříve \"host\" a teprve pak \"[host]:25\". Kvůli tomu nelze použít současně \"host\" a \"[host]:25\"",
"transport_test_rcpt_info": "&#8226; K otestování předávání pošty ven použijte null@hosted.mailcow.de.",
"transports_hint": "&#8226; Položka transportní mapy <b>přebíjí</b> transportní mapu podle odesílatele</b>.<br>\n&#8226; Transporty založené na MX mají přednost.<br>\n&#8226; Uživatelské nastavení odchozího TLS se ignoruje a lze je vynutit výhradně mapou TLS pravidel.<br>\n&#8226; Transportní služnou pro tyto transporty je vždy \"smtp:\" a použije se TLS, je-li nabídnuto. Zabalené TLS (SMTPS) se nepodporuje.<br>\n&#8226; Adresy, jež odpovídají výrazu \"/localhost$/\", se vždy předají přes \"local:\", takže nejsou zahrnuty do definice cíle \"*\".<br>\n&#8226; Pro stanovení přihlašovacích údajů dalšího skoku, např. \"[host]:25\", bude Postfix <b>vždy</b> hledat nejdříve \"host\" a teprve pak \"[host]:25\". Kvůli tomu nelze použít současně \"host\" a \"[host]:25\".",
"ui_footer": "Pata stránka (HTML povoleno)",
"ui_header_announcement": "Oznámení",
"ui_header_announcement_active": "Nastavit jako aktivní",
@@ -344,17 +344,70 @@
"validate_license_now": "Ověřit GUID na licenčním serveru",
"verify": "Ověřit",
"yes": "&#10003;",
"f2b_ban_time_increment": "Délka banu je prodlužována s každým dalším banem",
"f2b_max_ban_time": "Maximální délka banu (s)",
"f2b_ban_time_increment": "Délka bloku se prodlužuje s každým dalším zablokováním",
"f2b_max_ban_time": "Maximální délka bloku (s)",
"cors_settings": "Nastavení CORS",
"queue_unban": "zrušit ban",
"queue_unban": "odblokovat",
"password_reset_info": "Pokud není zadán žádný e-mail pro obnovení, nelze tuto funkci použít.",
"password_reset_settings": "Nastavení obnovení hesla",
"password_settings": "Nastavení hesel",
"password_reset_tmpl_html": "HTML šablona",
"password_reset_tmpl_text": "Textová šablona",
"reset_password_vars": "<code>{{link}}</code> Vygenerovaný odkaz pro obnovení hesla<br><code>{{username}}</code> Název mailboxu uživatele, který požádal o resetování hesla.<br><code>{{username2}}</code> Název schránky pro obnovení<br><code>{{date}}</code> Datum podání žádosti o obnovení hesla<br><code>{{token_lifetime}}</code> Délka životnosti tokenu v minutách<br><code>{{hostname}}</code> Název serveru mailcow",
"restore_template": "Ponechte prázdné pro obnovení výchozí šablony."
"restore_template": "Ponechte prázdné pro obnovení výchozí šablony.",
"copy_to_clipboard": "Text zkopírován do schránky!",
"iam_login_provisioning": "Automaticky vytvořit uživatele při přihlášení",
"user_quicklink": "Skrýt zkratku na přihlášení uživatele",
"domainadmin_quicklink": "Skrýt zkratku na přihlášení správce domény",
"iam_auth_flow_info": "Kromě metody autorizačního kódu (Authorization Code Flow, výchozího v Keycloaku), jež se používá pro SSO, podporuje mailcow také metody autentizaci přímo pomocí přihlašovacích údajů. The metoda Mailpassword Flow se pokusí ověřit přihlašovací údaje uživatele přímo v Admin REST API Keycloaku. mailcow získá hash hesla z atributu <code>mailcow_password</code> , namapovaného v Keycloaku.",
"iam_default_template_description": "Nemá-li uživatel přiřazenu šablonu, použije se výchozí šablona k vytvoření schránky, ale ne k její úpravě či aktualizaci.",
"iam_userinfo_url": "Koncový bod pro informace o uživatelích",
"iam_redirect_url": "URL přesměrování",
"user_link": "Odkaz pro uživatele",
"force_sso_text": "Je-li nastaven externí poskytovatel OIDC, zapnutím této volby skryjete výchozí přihlašovací formulář. Zůstane vidět jen tlačítko pro SSO",
"iam_mapping": "Mapování atributů",
"iam_bindpass": "Heslo pro bind",
"iam_periodic_full_sync": "Pravidelná úplná synchronizace",
"iam_port": "Port",
"iam_realm": "Realm",
"iam_rest_flow": "Mailpassword Flow",
"iam_server_url": "URL serveru",
"iam_sso": "Single Sign-On",
"iam_sync_interval": "Interval synchronizace/importu (min)",
"iam_test_connection": "Test spojení",
"iam_token_url": "Koncový bod pro tokeny",
"iam_username_field": "Pole uživatelského jména",
"iam_binddn": "Doména pro bind",
"iam_use_ssl": "Používat SSL",
"iam_use_tls": "Používat StartTLS",
"iam_version": "Verze",
"quicklink_text": "Zobrazení zkratek k dalším přihlašovacím stránkám",
"iam_use_tls_info": "Je-li zapnuto TLS, musí se používat standardní port pro LDAP (389). Port SSL nelze použít.",
"ignore_ssl_error": "Ignorovat chyby SSL",
"iam_use_ssl_info": "Je-li zapnuto SSL a nastaven port 389, použije se automaticky port 636.",
"task": "Úloha",
"app_hide": "Skrýt při přihlášení",
"admin_quicklink": "Skrýt zkratku na přihlášení správce",
"allowed_methods": "Access-Control-Allow-Methods",
"allowed_origins": "Access-Control-Allow-Origin",
"login_page": "Přihlašovací stránka",
"f2b_manage_external": "Spravovat Fail2Ban externě",
"f2b_manage_external_info": "Fail2ban bude udržovat seznam zakázaných adres, ale nebude aktivně nastavovat pravidla blokování. Pro blokování použijte seznam adres níže.",
"filter": "Filtr",
"force_sso": "Vypnout přihlášení mailcow a ponechat jen SSO",
"iam": "Poskytovatel identity",
"iam_attribute_field": "Pole atributu",
"iam_authorize_url": "Autorizační koncový bod",
"iam_basedn": "Doména (Base DN)",
"iam_client_id": "ID klienta",
"iam_client_secret": "Tajný kód klienta",
"iam_client_scopes": "Scopes klienta",
"iam_default_template": "Výchozí šablona",
"iam_description": "Nastavení externího poskytovatele ověření<br>Schránky uživatele se vytvoří po prvním přihlášení automaticky, pokud je tedy nastaveno mapování atributů.",
"iam_extra_permission": "Aby vše fungovalo, musí mít mailcow klient v Keycloaku nastavený <code>servisní účet</code> a povolení <code>view-users</code>.",
"iam_host": "Hostitel",
"iam_host_info": "Zadejte jeden či více hostitelů, oddělte čárkou.",
"iam_import_users": "Importovat uživatele"
},
"danger": {
"access_denied": "Přístup odepřen nebo jsou neplatná data ve formuláři",
@@ -408,7 +461,7 @@
"is_alias": "%s je již známa jako adresa aliasu",
"is_alias_or_mailbox": "%s je již známa jako adresa aliasu, mailové schránky nebo aliasu rozvedeného z aliasu domény.",
"is_spam_alias": "%s je již známa jako adresa spamového aliasu",
"last_key": "Nelze smazat poslední klíč",
"last_key": "Nelze smazat poslední klíč, vypněte tedy celé TFA.",
"login_failed": "Přihlášení selhalo",
"mailbox_defquota_exceeds_mailbox_maxquota": "Výchozí kvóta překračuje maximální kvótu schránky\"",
"mailbox_invalid": "Název mailové schránky je neplatný",
@@ -486,7 +539,16 @@
"demo_mode_enabled": "Demo režim je zapnutý",
"recovery_email_failed": "Nepodařilo se odeslat e-mail pro obnovení. Obraťte se prosím na svého správce.",
"password_reset_invalid_user": "Mailbox nebyl nalezen nebo není nastaven žádný e-mail pro obnovu",
"password_reset_na": "Obnovení hesla není v současné době k dispozici. Obraťte se prosím na svého správce."
"password_reset_na": "Obnovení hesla není v současné době k dispozici. Obraťte se prosím na svého správce.",
"generic_server_error": "Došlo k nečekané chybě. Obraťte se na vašeho správce.",
"to_invalid": "Adresát nemůže být prázdný",
"authsource_in_use": "Poskytovatele identity nelze změnit nebo odstranit, neboť se právě používá pro jednoho či více uživatelů.",
"iam_test_connection": "Spojení selhalo",
"img_dimensions_exceeded": "Obrázek je větší než povolené rozměry",
"img_size_exceeded": "Obrázek má větší než povolenou velikost souboru",
"invalid_reset_token": "Neplatný resetovací token",
"required_data_missing": "Chybí potřebný údaj %s",
"reset_token_limit_exceeded": "Byl překročen limit na reset tokeny. Zkuste to později."
},
"datatables": {
"emptyTable": "Tabulka neobsahuje žádná data",
@@ -548,7 +610,8 @@
"update_failed": "Nepodařilo se zkontrolovat aktualizace",
"wip": "Nedokončená vývojová verze",
"memory": "Paměť",
"container_disabled": "Kontejner je zastaven nebo zakázán"
"container_disabled": "Kontejner je zastaven nebo zakázán",
"cores": "jádra"
},
"diagnostics": {
"cname_from_a": "Hodnota odvozena z A/AAAA záznamu. Lze použít, pokud záznam ukazuje na správný zdroj.",
@@ -569,7 +632,7 @@
"alias": "Upravit alias",
"allow_from_smtp": "Umožnit pouze těmto IP adresám používat <b>SMTP</b>",
"allow_from_smtp_info": "Nechte prázdné pro povolení všech odesílatelů.<br>IPv4/IPv6 adresy a sítě.",
"allowed_protocols": "Povolené protokoly",
"allowed_protocols": "Povolené protokoly pro přímá spojení (netýká se protokolů na změnu hesla)",
"app_name": "Název aplikace",
"app_passwd": "Heslo aplikace",
"app_passwd_protocols": "Povolené protokoly pro hesla aplikací",
@@ -607,7 +670,7 @@
"inactive": "Neaktivní",
"kind": "Druh",
"last_modified": "Naposledy změněn",
"lookup_mx": "Cíl je regulární výraz který se shoduje s MX záznamem (<code>.*\\.google\\.com</code> směřuje veškerou poštu na MX které jsou cílem pro google.com přes tento skok)",
"lookup_mx": "Cíl je regulární výraz, jenž se porovná s MX záznamem (např. <code>.*\\.google\\.com</code> na tento skok nasměruje veškerou poštu s MX, jež končí na *.google.com)",
"mailbox": "Úprava mailové schránky",
"mailbox_quota_def": "Výchozí kvóta schránky",
"mailbox_relayhost_info": "Aplikované jen na uživatelskou schránku a přímé aliasy, přepisuje předávající server domény.",
@@ -641,7 +704,7 @@
"ratelimit": "Omezení přenosu",
"redirect_uri": "URL přesměrování/odvolání",
"relay_all": "Předávání všech příjemců",
"relay_all_info": "<small>Pokud se rozhodnete <b>nepředávat</b> všechny příjemce, musíte přidat prázdnou mailovou schránku pro každého příjemce, který se má předávat.</small>",
"relay_all_info": "Pokud se rozhodnete <b>nepředávat</b> všechny příjemce, musíte přidat prázdnou mailovou schránku pro každého příjemce, který se má předávat.",
"relay_domain": "Předávání domény",
"relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> U této domény lze pro konkrétní cíl nastavit transportní mapu. Není-li nastavena, použije se MX záznam.",
"relay_unknown_only": "Předávat jen neexistující schránky. Doručení do existujících proběhne lokálně.",
@@ -666,7 +729,7 @@
"spam_score": "Nastavte vlastní skóre spamu",
"subfolder2": "Synchronizace do podsložky v cílovém umístění<br><small>(prázdné = nepoužívat podsložku)</small>",
"syncjob": "Upravit synchronizační úlohu",
"target_address": "Cílová adresa/y<br /> <small>(oddělte čárkou)</small>",
"target_address": "Cílová adresa/y <small>(oddělte čárkou)</small>",
"target_domain": "Cílová doména",
"timeout1": "Časový limit pro připojení ke vzdálenému serveru",
"timeout2": "Časový limit pro připojení k lokálnímu serveru",
@@ -690,7 +753,13 @@
"custom_attributes": "Vlastní atributy",
"footer_exclude": "Vyloučit ze zápatí",
"domain_footer_skip_replies": "Ignorovat patičku u odpovědí na e-maily",
"password_recovery_email": "E-mail pro obnovu hesla"
"password_recovery_email": "E-mail pro obnovu hesla",
"mailbox_rename": "Přejmenovat schránku",
"mailbox_rename_agree": "Mám vytvořenou zálohu.",
"mailbox_rename_warning": "DŮLEŽITÉ! Vytvořte si zálohu schránky, než ji přejmenujete.",
"mailbox_rename_alias": "Automaticky vytvořit alias",
"mailbox_rename_title": "Nový název zdejší schránky",
"pushover": "Pushover"
},
"fido2": {
"confirm": "Potvrdit",
@@ -711,7 +780,7 @@
"cancel": "Zrušit",
"confirm_delete": "Potvdit smazání",
"delete_now": "Smazat",
"delete_these_items": "Prosím potvrďte změny objektu id:",
"delete_these_items": "Prosím potvrďte změny objektu id",
"hibp_check": "Ověřit heslo v databázi hacknutých hesel haveibeenpwned.com",
"hibp_nok": "Nalezeno! Toto je potenciálně nebezpečné heslo!",
"hibp_ok": "Nebyla nalezena žádná shoda.",
@@ -720,12 +789,12 @@
"restart_container": "Restartovat kontejner",
"restart_container_info": "<b>Důležité:</b> Šetrný restart může chvíli trvat, prosím čekejte...",
"restart_now": "Restartovat nyní",
"restarting_container": "Restartuje se kontejner, může to chvilku trvat..."
"restarting_container": "Restartuje se kontejner, může to chvilku trvat"
},
"header": {
"administration": "Hlavní nastavení",
"apps": "Aplikace",
"debug": "Systémové informace",
"debug": "Informace",
"email": "E-Mail",
"mailcow_system": "Systém",
"mailcow_config": "Nastavení",
@@ -753,7 +822,14 @@
"new_password": "Nové heslo",
"new_password_confirm": "Ověření nového hesla",
"reset_password": "Obnovit heslo",
"request_reset_password": "Požádat o změnu hesla"
"request_reset_password": "Požádat o změnu hesla",
"login_domainadmintext": "Přihlášení správce domény",
"login_linkstext": "Hledáte jinou přihlašovací stránku?",
"login_usertext": "Přihlášení uživatele",
"login_admintext": "Přihlášení správce",
"login_user": "Přihlášení uživatele",
"login_dadmin": "Přihlášení správce domény",
"login_admin": "Přihlášení správce"
},
"mailbox": {
"action": "Akce",
@@ -785,7 +861,7 @@
"bcc": "BCC",
"bcc_destination": "Cíl kopie",
"bcc_destinations": "Cíl kopií",
"bcc_info": "Skryté kopie (Mapa BCC) se používá pro tiché předávání kopií všech zpráv na jinou adresu. Při použití skryté kopie typu <i>Přijatý e-mail</i> budou přeposlány všechny maily směřující na dotyčnou adresu nebo doménu.\nU typu <i>Odeslaný e-mail</i> budou přeposlány všechny maily odeslané z dotyčné adresy nebo domény.\nPokud selže přeposlání na cílovou adresu, tak odesílatel o tom nebude informován.",
"bcc_info": "Skrytá kopie (mapa BCC) se používá pro tiché předávání kopií všech zpráv na jinou adresu. Mapa příjemců se použije, funguje-li je místní cíl jako adresát zprávy. Totéž platí pro mapy odesílatelů.\nMístní cíl se nedozví, selže-li doručení na cíl BCC.",
"bcc_local_dest": "Týká se",
"bcc_map": "Skrytá kopie",
"bcc_map_type": "Typ skryté kopie",
@@ -840,7 +916,7 @@
"last_run_reset": "Znovu naplánovat",
"mailbox": "Mailová schránka",
"mailbox_defaults": "Výchozí nastavení",
"mailbox_defaults_info": "Definuje výchozí nastavení pro nové schránky",
"mailbox_defaults_info": "Definuje výchozí nastavení pro nové schránky.",
"mailbox_defquota": "Výchozí velikost schránky",
"mailbox_templates": "Šablony schránek",
"mailbox_quota": "Max. velikost schránky",
@@ -860,7 +936,7 @@
"private_comment": "Soukromý komentář",
"public_comment": "Veřejný komentář",
"q_add_header": "Složka nevyžádaná pošta",
"q_all": "Všechny kategorie",
"q_all": " Nevyžádaná pošta a Odmítnuta",
"q_reject": "Odmítnuta",
"quarantine_category": "Kategorie oznámení karantény",
"quarantine_notification": "Upozornění z karantény",
@@ -869,7 +945,7 @@
"recipient_map": "Mapa příjemce",
"recipient_map_info": "Mapy příjemců slouží k nahrazení cílové adresy zprávy před doručením.",
"recipient_map_new": "Nový přijemce",
"recipient_map_new_info": "Cílová adresa mapy příjemce musí být emailová adresa nebo název domény.",
"recipient_map_new_info": "Cílovou adresou mapy příjemců musí být emailová adresa nebo název domény.",
"recipient_map_old": "Původní příjemce",
"recipient_map_old_info": "Původní příjemce musí být platná emailová adresa nebo název domény.",
"recipient_maps": "Mapy příjemců",
@@ -888,7 +964,7 @@
"sieve_preset_5": "Automatický odpovídač (dovolená)",
"sieve_preset_6": "Odmítnout zprávu s odpovědí",
"sieve_preset_7": "Přesměrovat a ponechat/zahodit",
"sieve_preset_8": "Zahodit zprávu poslanou na alias, do něhož patří i odesílatel",
"sieve_preset_8": "Zprávu od určitého odesílatele přesměrovat, označit jako přečtenou a uložit do složky",
"sieve_preset_header": "Vizte následující ukázková pravidla. Více informací na <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipedii</a>.",
"sogo_visible": "Alias dostupný v SOGo",
"sogo_visible_n": "Skrýt alias v SOGo",
@@ -928,7 +1004,8 @@
"waiting": "Čekání",
"weekly": "Každý týden",
"yes": "&#10003;",
"relay_unknown": "Předávání neexistujících schránek"
"relay_unknown": "Předávání neexistujících schránek",
"iam": "Poskytovatel identity"
},
"oauth2": {
"access_denied": "K udělení přístupu se přihlašte jako vlastník mailové schránky.",
@@ -936,7 +1013,7 @@
"deny": "Zamítnout",
"permit": "Ověřit aplikaci",
"profile": "Profil",
"profile_desc": "Zobrazit osobní údaje: uživ. jméno, jméno, datum vytvoření a úpravy, stav",
"profile_desc": "Zobrazit osobní údaje: uživ. jméno, celé jméno, datum vytvoření a úpravy, stav",
"scope_ask_permission": "Aplikace požádala o následující oprávnění"
},
"quarantine": {
@@ -1066,7 +1143,7 @@
"logged_in_as": "Přihlášen jako %s",
"mailbox_added": "Mailová schránka %s přidána",
"mailbox_modified": "Změny mailové schránky %s uloženy",
"mailbox_removed": "Mailová schránka %s odebrána",
"mailbox_removed": "Mailová schránka %s odstraněna",
"nginx_reloaded": "Nginx reload byl úspěšný",
"object_modified": "Změny objektu %s uloženy",
"password_policy_saved": "Politika hesel byla úspěšně uložena",
@@ -1100,7 +1177,14 @@
"verified_yotp_login": "Yubico OTP přihlášení ověřeno",
"cors_headers_edited": "Nastavení CORS byla uložena",
"domain_footer_modified": "Změny patičky domény %s byly uloženy",
"recovery_email_sent": "E-mail k obnovení byl odeslán na adresu %s"
"recovery_email_sent": "E-mail k obnovení byl odeslán na adresu %s",
"custom_login_modified": "Úpravy přihlašování úspěšně uloženy",
"domain_add_dkim_available": "Klíč DKIM už existoval",
"f2b_banlist_refreshed": "Seznam zákazů úspěšně obnoven.",
"iam_test_connection": "Spojení úspěšně navázano",
"ip_check_opt_in_modified": "Kontrola IP adresy úspěšně uložena",
"mailbox_renamed": "Schránka přejmenována z %s na %s",
"password_changed_success": "Heslo úspěšně změněno"
},
"tfa": {
"api_register": "%s používá Yubico Cloud API. Prosím získejte API klíč pro své Yubico <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">ZDE</a>",
@@ -1116,7 +1200,7 @@
"none": "Deaktivovat",
"reload_retry": "- (znovu načtěte stránku, opakuje-li se chyba)",
"scan_qr_code": "Prosím načtěte následující kód svou aplikací na ověření nebo zadejte kód ručně.",
"select": "Prosím vyberte...",
"select": "Vyberte prosím",
"set_tfa": "Nastavení způsobu dvoufaktorového ověření",
"start_webauthn_validation": "Zahájit inicializaci",
"tfa": "Dvoufaktorové ověření (TFA)",
@@ -1125,7 +1209,10 @@
"webauthn": "WebAuthn ověření",
"waiting_usb_auth": "<i>Čeká se na USB zařízení...</i><br><br>Prosím stiskněte tlačítko na svém WebAuthn USB zařízení.",
"waiting_usb_register": "<i>Čeká se na USB zařízení...</i><br><br>Prosím zadejte své heslo výše a potvrďte WebAuthn registraci stiskem tlačítka na svém WebAuthn USB zařízení.",
"yubi_otp": "Yubico OTP ověření"
"yubi_otp": "Yubico OTP ověření",
"u2f_deprecated": "Zdá se, že váš klíč byl registrován zastaralou metodou U2F. Dojde k deaktivaci dvoufaktorové autentifikace a smazání klíče.",
"authenticators": "Autentifikátory",
"u2f_deprecated_important": "Registrujte svůj klíč novou metodou WebAuthn ve správě správců."
},
"user": {
"action": "Akce",
@@ -1141,7 +1228,7 @@
"alias_time_left": "Zbývající čas",
"alias_valid_until": "Platný do",
"aliases_also_send_as": "Smí odesílat také jako uživatel",
"aliases_send_as_all": "Nekontrolovat přístup odesílatele pro následující doménu(y) a jejich aliasy domény:",
"aliases_send_as_all": "Nekontrolovat přístup odesílatele pro následující doménu(y) a jejich aliasy",
"allowed_protocols": "Povolené protokoly",
"app_hint": "Hesla aplikací jsou alternativní heslo pro přihlášení k IMAP, SMTP, CalDAV, CardDAV a EAS. Uživatelské jméno zůstává stejné.<br>SOGo však nelze s heslem aplikace použít.",
"app_name": "Název aplikace",
@@ -1162,8 +1249,8 @@
"description": "Popis",
"delete_ays": "Potvrďte odstranění.",
"direct_aliases": "Přímé aliasy",
"direct_aliases_desc": "Na přímé aliasy se uplatňuje filtr spamu a nastavení pravidel TLS",
"direct_protocol_access": "Tento uživatel mailové schránky má <b>přímý externí přístup</b> k následujícím protokolům a aplikacím. Toto nastavení je řízeno správcem. Pro udělení přístupu k jednotlivým protokolům a aplikacím lze vytvořit hesla aplikací.<br>Tlačítko \"Webmailu\" zajišťuje jednotné přihlášení k SOGo a je vždy k dispozici.",
"direct_aliases_desc": "Na přímé aliasy se uplatňuje filtr spamu a nastavení pravidel TLS.",
"direct_protocol_access": "Tento uživatel mailové schránky má <b>přímý externí přístup</b> k následujícím protokolům a aplikacím. Toto nastavení je řízeno správcem. Pro udělení přístupu k jednotlivým protokolům a aplikacím lze vytvořit hesla aplikací.<br>Tlačítko \"Webmail\" zajišťuje jednotné přihlášení k SOGo a je vždy k dispozici.",
"eas_reset": "Smazat mezipaměť zařízení ActiveSync",
"eas_reset_help": "Obnovení mezipaměti zařízení pomůže zpravidla obnovit poškozený profil služby ActiveSync.<br><b>Upozornění:</b> Všechna data budou opětovně stažena!",
"eas_reset_now": "Smazat",
@@ -1204,7 +1291,7 @@
"no_last_login": "Žádný záznam o přihlášení",
"no_record": "Žádný záznam",
"open_logs": "Otevřít záznam",
"open_webmail_sso": "Webmailu",
"open_webmail_sso": "Webmail",
"password": "Heslo",
"password_now": "Současné heslo (pro potvrzení změny)",
"password_repeat": "Heslo (znovu)",
@@ -1241,8 +1328,8 @@
"spamfilter": "Filtr spamu",
"spamfilter_behavior": "Hodnocení",
"spamfilter_bl": "Seznam zakázaných adres (blacklist)",
"spamfilter_bl_desc": "Zakázané emailové adresy <b>budou vždy klasifikovány jako spam a odmítnuty</b>. Lze použít zástupné znaky (*). Filtr se použije pouze na přímé aliasy (s jednou cílovou mailovou schránkou), s výjimkou doménových košů a samotné mailové schránky.",
"spamfilter_default_score": "Výchozí hodnoty:",
"spamfilter_bl_desc": "Zakázané emailové adresy budou <b>vždy</b> klasifikovány jako spam a odmítnuty. Odmítnutá pošta <b>nebude</b> uložena do karantény. Lze použít zástupné znaky (*). Filtr se použije pouze na přímé aliasy (s jednou cílovou poštovní schránkou), s výjimkou doménových košů a samotné poštovní schránky.",
"spamfilter_default_score": "Výchozí hodnoty",
"spamfilter_green": "Zelená: tato zpráva není spam",
"spamfilter_hint": "První hodnota představuje \"nízké spam skóre\" a druhá \"vysoké spam skóre\".",
"spamfilter_red": "Červená: Tato zpráva je spam a server ji odmítne",
@@ -1274,7 +1361,7 @@
"tag_in_subject": "V předmětu",
"text": "Text",
"title": "Předmět",
"tls_enforce_in": "Vynutit TLS pro příchozí poštu ",
"tls_enforce_in": "Vynutit TLS pro příchozí poštu",
"tls_enforce_out": "Vynutit TLS pro odchozí poštu",
"tls_policy": "Politika šifrování",
"tls_policy_warning": "<strong>Varování:</strong> Pokud se rozhodnete vynutit šifrovaný přenos pošty, může dojít ke ztrátě e-mailů.<br>Zprávy, které nesplňují tuto politiku, budou mailovým systémem odmítnuty.<br>Tato volba ovlivňuje primární e-mailovou adresu (přihlašovací jméno), všechny adresy odvozené z doménových aliasů i aliasy, jež mají tuto mailovou schránku jako cíl.",
@@ -1290,7 +1377,13 @@
"years": "let",
"pushover_sound": "Zvukové upozornění",
"password_reset_info": "Pokud není zadán e-mail pro obnovení hesla, nelze tuto funkci použít.",
"pw_recovery_email": "E-mail pro obnovení hesla"
"pw_recovery_email": "E-mail pro obnovení hesla",
"tfa_info": "Dvoufaktorová autentizace vám pomáhá chránit svůj účet. Je-li zapnuta, musíte si vytvořit aplikační hesla pro aplikace, jež dvoufaktorovou autentizaci nepodporují (např. poštovní klienti).",
"attribute": "Atribut",
"authentication": "Autentifikace",
"overview": "Přehled",
"protocols": "Protokoly",
"value": "Hodnota"
},
"warning": {
"cannot_delete_self": "Nelze smazat právě přihlášeného uživatele",

View File

@@ -134,6 +134,7 @@
"admin_domains": "Domain-Zuweisungen",
"admins": "Administratoren",
"admins_ldap": "LDAP-Administratoren",
"admin_quicklink": "Quicklink zur Admin-Loginseite ausblenden",
"advanced_settings": "Erweiterte Einstellungen",
"api_allow_from": "IP-Adressen oder Netzwerke (CIDR Notation) für Zugriff auf API",
"api_info": "Die API befindet sich noch in Entwicklung, die Dokumentation kann unter <a href=\"/api\">/api</a> abgerufen werden.",
@@ -155,6 +156,7 @@
"credentials_transport_warning": "<b>Warnung</b>: Das Hinzufügen einer neuen Regel bewirkt die Aktualisierung der Authentifizierungsdaten aller vorhandenen Einträge mit identischem Next Hop.",
"customer_id": "Kunde",
"customize": "UI-Anpassung",
"login_page": "Login-Seite",
"destination": "Ziel",
"dkim_add_key": "ARC/DKIM-Key hinzufügen",
"dkim_domains_selector": "Selector",
@@ -173,6 +175,7 @@
"domain": "Domain",
"domain_admin": "Administrator hinzufügen",
"domain_admins": "Domain-Administratoren",
"domainadmin_quicklink": "Quicklink zur Domainadmin-Loginseite ausblenden",
"domain_s": "Domain(s)",
"duplicate": "Duplizieren",
"duplicate_dkim": "DKIM duplizieren",
@@ -195,6 +198,8 @@
"f2b_retry_window": "Wiederholungen im Zeitraum von (s)",
"f2b_whitelist": "Whitelist für Netzwerke und Hosts",
"filter_table": "Tabelle filtern",
"force_sso_text": "Wenn ein externer OIDC-Provider konfiguriert ist, blendet diese Option die mailcow Loginform aus und zeigt nur den Single Sign-On-Button an.",
"force_sso": "mailcow Login deaktivieren und nur Single Sign-On anzeigen",
"forwarding_hosts": "Weiterleitungs-Hosts",
"forwarding_hosts_add_hint": "Sie können entweder IPv4-/IPv6-Adressen, Netzwerke in CIDR-Notation, Hostnamen (die zu IP-Adressen aufgelöst werden), oder Domainnamen (die zu IP-Adressen aufgelöst werden, indem ihr SPF-Record abgefragt wird oder, in dessen Abwesenheit, ihre MX-Records) angeben.",
"forwarding_hosts_hint": "Eingehende Nachrichten werden von den hier gelisteten Hosts bedingungslos akzeptiert. Diese Hosts werden dann nicht mit DNSBLs abgeglichen oder Greylisting unterworfen. Von ihnen empfangener Spam wird nie abgelehnt, optional kann er aber in den Spam-Ordner einsortiert werden. Die übliche Verwendung für diese Funktion ist, um Mailserver anzugeben, auf denen eine Weiterleitung zu Ihrem mailcow-Server eingerichtet wurde.",
@@ -222,6 +227,7 @@
"iam_host": "Host",
"iam_host_info": "Gib einen oder mehrere LDAP-Hosts ein, getrennt durch Kommas.",
"iam_import_users": "Importiere Benutzer",
"iam_login_provisioning": "Benutzer beim Login erstellen",
"iam_mapping": "Attribut Mapping",
"iam_bindpass": "Bind Passwort",
"iam_periodic_full_sync": "Vollsynchronisation",
@@ -238,7 +244,9 @@
"iam_username_field": "Username Feld",
"iam_binddn": "Bind DN",
"iam_use_ssl": "Benutze SSL",
"iam_use_tls": "Benutze TLS",
"iam_use_ssl_info": "Wenn SSL aktiviert ist und der Port auf 389 gesetzt wurde, wird dieser automatisch auf 636 geändert.",
"iam_use_tls": "Benutze StartTLS",
"iam_use_tls_info": "Wenn TLS aktiviert wird, muss der Standardport deines LDAP-Servers (389) verwendet werden. SSL-Ports können dabei nicht verwendet werden.",
"iam_version": "Version",
"ignore_ssl_error": "Ignoriere SSL Fehler",
"import": "Importieren",
@@ -306,6 +314,7 @@
"quarantine_release_format_att": "Als Anhang",
"quarantine_release_format_raw": "Unverändertes Original",
"quarantine_retention_size": "Rückhaltungen pro Mailbox:<br><small>0 bedeutet <b>inaktiv</b>.</small>",
"quicklink_text": "Quicklinks zu anderen Login-Seiten unter der Loginform ein- oder ausblenden",
"quota_notification_html": "Benachrichtigungs-E-Mail Inhalt:<br><small>Leer lassen, um Standard-Template wiederherzustellen.</small>",
"quota_notification_sender": "Benachrichtigungs-E-Mail Absender",
"quota_notification_subject": "Benachrichtigungs-E-Mail Betreff",
@@ -385,6 +394,7 @@
"unchanged_if_empty": "Unverändert, wenn leer",
"upload": "Hochladen",
"username": "Benutzername",
"user_quicklink": "Quicklink zur Benutzer-Loginseite ausblenden",
"validate_license_now": "GUID erneut verifizieren",
"verify": "Verifizieren",
"yes": "&#10003;",
@@ -396,7 +406,8 @@
"allowed_methods": "Access-Control-Allow-Methods",
"allowed_origins": "Access-Control-Allow-Origin",
"logo_dark_label": "Invertiert für den Darkmode",
"logo_normal_label": "Normal"
"logo_normal_label": "Normal",
"user_link": "Nutzer-Link"
},
"danger": {
"access_denied": "Zugriff verweigert oder unvollständige/ungültige Daten",
@@ -804,9 +815,13 @@
"forgot_password": "> Passwort vergessen?",
"invalid_pass_reset_token": "Der Rücksetz-Token für das Passwort ist ungültig oder abgelaufen.<br>Bitte fordern Sie einen neuen Link zur Passwortwiederherstellung an.",
"login": "Anmelden",
"login_user": "Benutzer Anmelden",
"login_dadmin": "Domain-Administrator Anmelden",
"login_admin": "Administrator Anmelden",
"login_linkstext": "Nicht der richtige Login?",
"login_usertext": "Als Benutzer anmelden",
"login_domainadmintext": "Als Domainadmin anmelden",
"login_admintext": "Als Admin anmelden",
"login_user": "Anmeldung als Benutzer",
"login_dadmin": "Anmeldung als Domain-Administrator",
"login_admin": "Anmeldung als Administrator",
"mobileconfig_info": "Bitte als Mailbox-Benutzer einloggen, um das Verbindungsprofil herunterzuladen.",
"new_password": "Neues Passwort",
"new_password_confirm": "Neues Passwort bestätigen",
@@ -989,7 +1004,8 @@
"syncjob_EXIT_TLS_FAILURE": "Problem mit verschlüsselter Verbindung",
"syncjob_EXIT_AUTHENTICATION_FAILURE": "Authentifizierungsproblem",
"syncjob_EXIT_OVERQUOTA": "Ziel Mailbox ist über dem Limit",
"syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Kann keine Verbindung zum Zielserver herstellen"
"syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Kann keine Verbindung zum Zielserver herstellen",
"iam": "Identitätsanbieter"
},
"oauth2": {
"access_denied": "Bitte als Mailbox-Nutzer einloggen, um den Zugriff via OAuth2 zu erlauben.",
@@ -1092,6 +1108,7 @@
"bcc_edited": "BCC-Map-Eintrag %s wurde geändert",
"bcc_saved": "BCC- Map-Eintrag wurde gespeichert",
"cors_headers_edited": "CORS Einstellungen wurden erfolgreich gespeichert",
"custom_login_modified": "Login Anpassung wurde erfolgreich gespeichert",
"db_init_complete": "Datenbankinitialisierung abgeschlossen",
"delete_filter": "Filter-ID %s wurde gelöscht",
"delete_filters": "Filter gelöscht: %s",
@@ -1333,7 +1350,7 @@
"tag_in_subfolder": "In Unterordner",
"tag_in_subject": "In Betreff",
"text": "Text",
"tfa_info": "Zwei-Faktor-Authentifizierung hilft dabei, Ihr Konto zu schützen. Wenn Sie sie aktivieren, benötigen Sie möglicherweise App-Passwörter, um sich bei Apps oder Diensten anzumelden, die die Zwei-Faktor-Authentifizierung nicht unterstützen (z.B. Mailclients).",
"tfa_info": "Zwei-Faktor-Authentifizierung hilft dabei, Ihr Konto zu schützen. Wenn Sie sie aktivieren, benötigen Sie App-Passwörter, um sich bei Apps oder Diensten anzumelden, die die Zwei-Faktor-Authentifizierung nicht unterstützen (z.B. Mailclients).",
"title": "Title",
"tls_enforce_in": "TLS eingehend erzwingen",
"tls_enforce_out": "TLS ausgehend erzwingen",

View File

@@ -134,6 +134,7 @@
"admin_domains": "Domain assignments",
"admins": "Administrators",
"admins_ldap": "LDAP Administrators",
"admin_quicklink": "Hide Quicklink to Admin Login Page",
"advanced_settings": "Advanced settings",
"allowed_methods": "Access-Control-Allow-Methods",
"allowed_origins": "Access-Control-Allow-Origin",
@@ -161,6 +162,7 @@
"credentials_transport_warning": "<b>Warning</b>: Adding a new transport map entry will update the credentials for all entries with a matching next hop column.",
"customer_id": "Customer ID",
"customize": "Customize",
"login_page": "Login Page",
"destination": "Destination",
"dkim_add_key": "Add ARC/DKIM key",
"dkim_domains_selector": "Selector",
@@ -179,6 +181,7 @@
"domain": "Domain",
"domain_admin": "Domain administrator",
"domain_admins": "Domain administrators",
"domainadmin_quicklink": "Hide Quicklink to Domainadmin Login Page",
"domain_s": "Domain/s",
"duplicate": "Duplicate",
"duplicate_dkim": "Duplicate DKIM record",
@@ -202,6 +205,8 @@
"f2b_whitelist": "Whitelisted networks/hosts",
"filter": "Filter",
"filter_table": "Filter table",
"force_sso_text": "If an external OIDC provider is configured, this option hides the default mailcow login forms and only shows the Single Sign-On button",
"force_sso": "Disable mailcow Login and show only Single Sign-On",
"forwarding_hosts": "Forwarding Hosts",
"forwarding_hosts_add_hint": "You can either specify IPv4/IPv6 addresses, networks in CIDR notation, host names (which will be resolved to IP addresses), or domain names (which will be resolved to IP addresses by querying SPF records or, in their absence, MX records).",
"forwarding_hosts_hint": "Incoming messages are unconditionally accepted from any hosts listed here. These hosts are then not checked against DNSBLs or subjected to greylisting. Spam received from them is never rejected, but optionally it can be filed into the Junk folder. The most common use for this is to specify mail servers on which you have set up a rule that forwards incoming emails to your mailcow server.",
@@ -229,6 +234,7 @@
"iam_host": "Host",
"iam_host_info": "Enter one or more LDAP hosts, separated by commas.",
"iam_import_users": "Import Users",
"iam_login_provisioning": "Auto-create users on login",
"iam_mapping": "Attribute Mapping",
"iam_bindpass": "Bind Password",
"iam_periodic_full_sync": "Periodic Full Sync",
@@ -245,7 +251,9 @@
"iam_username_field": "Username Field",
"iam_binddn": "Bind DN",
"iam_use_ssl": "Use SSL",
"iam_use_tls": "Use TLS",
"iam_use_ssl_info": "If enabling SSL, and port is set to 389, it will be automatically overridden to use 636.",
"iam_use_tls": "Use StartTLS",
"iam_use_tls_info": "If enabling TLS, you must use the default port for your LDAP server (389). SSL ports cannot be used.",
"iam_version": "Version",
"ignore_ssl_error": "Ignore SSL Errors",
"import": "Import",
@@ -315,6 +323,7 @@
"quarantine_release_format_att": "As attachment",
"quarantine_release_format_raw": "Unmodified original",
"quarantine_retention_size": "Retentions per mailbox:<br><small>0 indicates <b>inactive</b>.</small>",
"quicklink_text": "Show or hide quick links to other login pages under the login form",
"quota_notification_html": "Notification email template:<br><small>Leave empty to restore default template.</small>",
"quota_notification_sender": "Notification email sender",
"quota_notification_subject": "Notification email subject",
@@ -396,6 +405,7 @@
"upload": "Upload",
"username": "Username",
"user_link": "User-Link",
"user_quicklink": "Hide Quicklink to User Login Page",
"validate_license_now": "Validate GUID against license server",
"verify": "Verify",
"yes": "&#10003;"
@@ -807,6 +817,10 @@
"forgot_password": "> Forgot Password?",
"invalid_pass_reset_token": "The reset password token is invalid or has expired.<br>Please request a new password reset link.",
"login": "Login",
"login_linkstext": "Not the correct login?",
"login_usertext": "Log in as user",
"login_domainadmintext": "Log in as domain admin",
"login_admintext": "Log in as admin",
"login_user": "User Login",
"login_dadmin": "Domain-Administrator Login",
"login_admin": "Administrator Login",
@@ -1103,6 +1117,7 @@
"bcc_edited": "BCC map entry %s edited",
"bcc_saved": "BCC map entry saved",
"cors_headers_edited": "CORS settings have been saved",
"custom_login_modified": "Login customisation was saved successfully",
"db_init_complete": "Database initialization completed",
"delete_filter": "Deleted filters ID %s",
"delete_filters": "Deleted filters: %s",
@@ -1355,7 +1370,7 @@
"tag_in_subfolder": "In subfolder",
"tag_in_subject": "In subject",
"text": "Text",
"tfa_info": "Two-factor authentication helps protect your account. If you enable it, you may need app passwords to log in to apps or services that don't support two-factor authentication (e.g. Mailclients).",
"tfa_info": "Two-factor authentication helps protect your account. If you enable it, you need app passwords to log in to apps or services that don't support two-factor authentication (e.g. Mailclients).",
"title": "Title",
"tls_enforce_in": "Enforce TLS incoming",
"tls_enforce_out": "Enforce TLS outgoing",

View File

@@ -359,7 +359,55 @@
"service": "Service",
"success": "Succès",
"cors_settings": "Paramètres CORS",
"login_time": "Horodatage de connexion"
"login_time": "Horodatage de connexion",
"domainadmin_quicklink": "Masquer le lien rapide vers la page de connexion de l'administrateur du domaine",
"force_sso_text": "Si un fournisseur OIDC externe est configuré, cette option masque les formulaires de connexion par défaut de mailcow et n'affiche que le bouton Singe Sign-On",
"app_hide": "Masquer pour la connexion",
"admin_quicklink": "Masquer le lien rapide vers la page de connexion de l'administrateur",
"login_page": "Page de connexion",
"force_sso": "Désactiver la connexion mailcow et n'afficher que Singe Sign-On",
"iam_attribute_field": "Champ d'attribut",
"iam_authorize_url": "Endpoint d'autorisation",
"iam_auth_flow": "Flow d'authentification",
"iam_auth_flow_info": "Outre le flux de code d'autorisation (flux standard dans Keycloak), qui est utilisé pour la connexion unique, mailcow prend également en charge le flux d'authentification avec des informations d'identification directes. Le flux Mailpassword tente de valider les informations d'identification de l'utilisateur en utilisant l'API REST de Keycloak Admin. mailcow récupère le mot de passe haché dans l'attribut <code>mailcow_password</code>, qui est mappé dans Keycloak.",
"iam_basedn": "Base DN",
"iam_client_id": "ID Client",
"iam_client_secret": "Secret Client",
"iam_use_ssl": "Utiliser SSL",
"iam_redirect_url": "Url de redirection",
"iam_use_ssl_info": "Si le protocole SSL est activé et que le port est défini sur 389, il sera automatiquement remplacé par 636.",
"iam_use_tls_info": "Si vous activez TLS, vous devez utiliser le port par défaut de votre serveur LDAP (389). Les ports SSL ne peuvent pas être utilisés.",
"iam_version": "Version",
"ignore_ssl_error": "Ignorer les erreurs SSL",
"iam_login_provisioning": "Créer automatiquement l'utilisateur à la connexion",
"iam_mapping": "Mapping des attributs",
"iam_bindpass": "Lier le mot de passe",
"iam_periodic_full_sync": "Synchronisation complète périodique",
"iam_port": "Port",
"iam_realm": "Realm",
"iam_rest_flow": "Flow Mailpassword",
"iam_server_url": "URL du serveur",
"iam_sso": "Single Sign-On",
"iam_sync_interval": "Interval de Sync / Import (min)",
"iam_test_connection": "Test de connexion",
"iam_token_url": "Endpoint Token",
"iam_userinfo_url": "Endpoint User info",
"iam_username_field": "Champ du nom d'utilisateur",
"iam_binddn": "Bind DN",
"iam_use_tls": "Utiliser StartTLS",
"quicklink_text": "Afficher ou masquer les liens rapides vers d'autres pages de connexion sous le formulaire de connexion",
"task": "Tâche",
"user_link": "Lien utilisateur",
"user_quicklink": "Masquer le lien rapide vers la page de connexion de l'utilisateur",
"iam_client_scopes": "Scopes Client",
"iam_default_template": "Template par défaut",
"iam_default_template_description": "Si aucun modèle n'est attribué à un utilisateur, le modèle par défaut sera utilisé pour créer la boîte aux lettres, mais pas pour la mettre à jour.",
"iam_description": "Configurer un fournisseur externe pour l'authentification<br>Les boîtes aux lettres des utilisateurs seront automatiquement créées lors de leur première connexion, à condition qu'un mappage d'attributs ait été défini.",
"iam_extra_permission": "Pour que les paramètres suivants fonctionnent, le client mailcow dans Keycloak a besoin d'un <code>Compte de service</code> et de l'autorisation de <code>voir les utilisateurs</code>.",
"iam_host": "Hôte",
"iam_host_info": "Saisissez un ou plusieurs hôtes LDAP, séparés par des virgules.",
"iam_import_users": "Importer des utilisateurs",
"filter": "Filtrer"
},
"danger": {
"access_denied": "Accès refusé ou données de formulaire non valides",
@@ -496,7 +544,11 @@
"password_reset_invalid_user": "Boîte mail introuvable ou aucune adresse de récupération n'a été définie",
"password_reset_na": "La réinitialisation des mots de passe est actuellement indisponible. Veuillez contacter votre administrateur.",
"reset_token_limit_exceeded": "Le nombre limite de jetons de réinitialisation a été dépassé. Veuillez réessayer plus tard.",
"to_invalid": "Le destinataire ne doit pas être vide"
"to_invalid": "Le destinataire ne doit pas être vide",
"generic_server_error": "Une erreur de serveur inattendue s'est produite. Veuillez contacter votre administrateur.",
"authsource_in_use": "Le fournisseur d'identité ne peut pas être modifié ou supprimé car il est actuellement utilisé par un ou plusieurs utilisateurs.",
"iam_test_connection": "Échec de la connexion",
"required_data_missing": "La donnée requise %s est manquante"
},
"debug": {
"chart_this_server": "Graphique (ce serveur)",
@@ -553,7 +605,7 @@
"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",
"allowed_protocols": "Protocoles autorisés pour l'accès direct de l'utilisateur (n'affecte pas les protocoles de mot de passe de l'application)",
"app_name": "Nom de l'application",
"app_passwd": "Mot de passe de l'application",
"automap": "Tenter de cibler automatiquement les dossiers (« Sent items », « Sent » => « Sent » etc.)",
@@ -672,7 +724,7 @@
"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.",
"sogo_access_info": "Après s'être connecté, l'utilisateur est automatiquement redirigé vers SOGo.",
"admin": "Modifier l'administrateur",
"password_recovery_email": "Adresse email de récupération",
"mailbox_rename_title": "Nouveau nom de la partie locale de la boîte de réception",
@@ -680,7 +732,7 @@
"mailbox_rename_agree": "J'ai fait une sauvegarde.",
"mailbox_rename_warning": "IMPORTANT ! Faites une sauvegarde avant de renommer la boîte de réception.",
"mailbox_rename_alias": "Créer un alias automatiquement",
"sogo_access": "Autoriser la connexion directe à SOGo",
"sogo_access": "Redirection directe vers SOGo",
"pushover": "Pushover",
"pushover_sound": "Son"
},
@@ -730,7 +782,14 @@
"new_password": "Nouveau mot de passe",
"new_password_confirm": "Confirmer le nouveau mot de passe",
"reset_password": "Réinitialiser le mot de passe",
"request_reset_password": "Demander le changement du mot de passe"
"request_reset_password": "Demander le changement du mot de passe",
"login_user": "Connexion Utilisateur",
"login_dadmin": "Connexion Administrateur de domaine",
"login_admin": "Connexion Administrateur",
"login_linkstext": "L'identifiant n'est pas correct ?",
"login_usertext": "Se connecter en tant qu'utilisateur",
"login_domainadmintext": "Se connecter en tant qu'administrateur du domaine",
"login_admintext": "Se connecter en tant qu'administrateur"
},
"mailbox": {
"action": "Action",
@@ -836,7 +895,7 @@
"recipient_map_new": "Nouveau destinataire",
"recipient_map_new_info": "La destination de la carte du destinataire doit être une adresse de courriel valide ou un nom de domaine.",
"recipient_map_old": "Destinataire original",
"recipient_map_old_info": "Une carte de destination originale doit être une adresse de courriel valide ou un nom de domaine.",
"recipient_map_old_info": "La destination originale des cartes des destinataires 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",
@@ -905,7 +964,8 @@
"template": "Modèle",
"syncjob_check_log": "Vérifier le journal",
"recipient": "Destinataire",
"open_logs": "Afficher les journaux"
"open_logs": "Afficher les journaux",
"iam": "Fournisseur d'identité"
},
"oauth2": {
"access_denied": "Veuillez vous connecter en tant que propriétaire de la boîte de réception pour accorder laccès via Oauth2.",
@@ -1076,7 +1136,9 @@
"recovery_email_sent": "Email de réinitialisation envoyé à %s",
"mailbox_renamed": "La boîte de réception a été renommée de %s à %s",
"template_modified": "Les modifications au modèle %s ont été enregistrées",
"password_policy_saved": "La politique de mot de passe a été enregistrée avec succès"
"password_policy_saved": "La politique de mot de passe a été enregistrée avec succès",
"custom_login_modified": "La personnalisation de la connexion a été sauvegardée avec succès",
"iam_test_connection": "Connexion réussie"
},
"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\">ici</a>",
@@ -1256,8 +1318,8 @@
"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",
"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",
@@ -1286,7 +1348,9 @@
"open_logs": "Afficher les journaux",
"pushover_sound": "Son",
"mailbox_general": "Général",
"mailbox_settings": "Paramètres"
"mailbox_settings": "Paramètres",
"tfa_info": "L'authentification à deux facteurs permet de protéger votre compte. Si vous l'activez, vous aurez besoin de mots de passe d'application pour vous connecter à des applications ou des services qui ne prennent pas en charge l'authentification à deux facteurs (par exemple les clients e-mails).",
"overview": "Vue d'ensemble"
},
"warning": {
"cannot_delete_self": "Impossible de supprimer lutilisateur connecté",

View File

@@ -590,4 +590,4 @@
"app_name": "Alkalmazás neve",
"app_passwd_protocols": "Engedélyezett protokollok az alkalmazás jelszavához"
}
}
}

View File

@@ -353,7 +353,30 @@
"password_settings": "Impostazioni della password",
"queue_unban": "sblocca",
"restore_template": "Lasciare vuoto per ripristinare il modello predefinito.",
"logo_normal_label": "Normale"
"logo_normal_label": "Normale",
"app_hide": "Nascondi per il login",
"ip_check_disabled": "Il controllo IP è disabilitato. Puoi abilitarlo sotto <br><strong>Sistema > Configurazione > Opzioni > Personalizza </strong>",
"ip_check_opt_in": "Attiva l'utilizzo dei servizi di terze parti <strong>ipv4.mailcow.email</strong> e <strong> ipv6.mailcow.email</strong> per risolvere gli indirizzi IP esterni",
"iam_login_provisioning": "Creazione automatica di utenti al login",
"iam_port": "Porta",
"iam_redirect_url": "URL di reindirizzamento",
"iam_server_url": "URL server",
"iam_sso": "Single Sign-On",
"iam_test_connection": "Test connessione",
"iam_use_ssl": "Usa SSL",
"iam_use_tls": "Usa StartTLS",
"iam_version": "Versione",
"ignore_ssl_error": "Ignorare gli errori SSL",
"task": "Attività",
"login_page": "Pagina di accesso",
"filter": "Filtro",
"iam_attribute_field": "Campo attributo",
"iam_authorize_url": "Endpoint di autorizzazione",
"iam_auth_flow": "Flusso di autenticazione",
"iam_client_id": "ID cliente",
"iam_default_template": "Template predefinito",
"iam_host": "Host",
"iam_import_users": "Importa utenti"
},
"danger": {
"access_denied": "Accesso negato o form di login non corretto",
@@ -484,7 +507,11 @@
"password_reset_invalid_user": "La casella di posta elettronica non è stata trovata o non è stata impostata un'e-mail di recupero",
"password_reset_na": "Il recupero della password non è attualmente disponibile. Contattare l'amministratore.",
"recovery_email_failed": "Impossibile inviare un'e-mail di recupero. Contattare l'amministratore.",
"to_invalid": "Il destinatario non deve essere vuoto"
"to_invalid": "Il destinatario non deve essere vuoto",
"iam_test_connection": "Connessione non riuscita",
"webauthn_authenticator_failed": "L'autenticator selezionato non è stato trovato",
"webauthn_username_failed": "L'authenticator selezionato appartiene ad un altro account",
"webauthn_publickey_failed": "Nessuna chiave pubblica è stata salvata per l'authenticator selezionato"
},
"debug": {
"chart_this_server": "Grafico (questo server)",
@@ -655,7 +682,10 @@
"domain_footer_html": "Piè di pagina HTML",
"domain_footer_plain": "Piè di pagina PLAIN",
"footer_exclude": "Escludi dal piè di pagina",
"password_recovery_email": "E-mail di recupero password"
"password_recovery_email": "E-mail di recupero password",
"mailbox_rename": "Rinominare la casella mail",
"mailbox_rename_agree": "Ho creato un backup.",
"mailbox_rename_alias": "Creare alias automaticamente"
},
"fido2": {
"confirm": "Conferma",
@@ -717,7 +747,11 @@
"forgot_password": "> Password dimenticata?",
"new_password": "Nuova password",
"new_password_confirm": "Conferma la nuova password",
"reset_password": "Ripristino della password"
"reset_password": "Ripristino della password",
"login_linkstext": "Non è il login corretto?",
"login_usertext": "Accedere come utente",
"login_domainadmintext": "Accedere come domain admin",
"login_admintext": "Accedere come admin"
},
"mailbox": {
"action": "Azione",

View File

@@ -16,7 +16,16 @@
"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"
"protocol_access": "Protokola piekļuves maiņa",
"pw_reset": "Ļaut atiestatīt mailcow lietotāja paroli",
"ratelimit": "Piekļuves biežuma ierobežojums",
"quarantine": "Karantīnas darbības",
"quarantine_attachments": "Karantīnas pielikumi",
"quarantine_category": "Mainīt karantīnas paziņojumu kategoriju",
"quarantine_notification": "Mainīt karantīnas paziņojumus",
"smtp_ip_access": "Mainīt SMTP atļautos saimniekdatorus",
"sogo_access": "Atļaut SOGo piekļuves pārvaldību",
"sogo_profile_reset": "Atiestatīt SOGo profilu"
},
"add": {
"activate_filter_warn": "Visi pārējie filtri tiks deaktivizēti, kad aktīvs ir atzīmēts.",
@@ -24,8 +33,8 @@
"add": "Pievienot",
"add_domain_only": "Tikai pievienot domēnu",
"add_domain_restart": "Pievienot domēnu un restartēt SOGo",
"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_address": "Aizstājadrese/s",
"alias_address_info": "<small>Pilna epasta adrese/s vai @example.com, lai notvertu visus domēna ziņojumus (atdalītas ar komatu). <b>Tikai mailcow domēni</b>.</small>",
"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.)",
@@ -63,15 +72,17 @@
"skipcrossduplicates": "Izlaist dublētus ziņojumus pa mapēm (pirmais nāk, pirmais kalpo)",
"syncjob": "Pievienot sinhronizācijas darbu",
"syncjob_hint": "Ņemiet vērā, ka parole ir jāuzglabā vienkāršā tekstā!",
"target_address": "Iet uz adresēm",
"target_address_info": "<small>Pilna epasta addrese/s (comma-separated).</small>",
"target_address": "Mērķa adreses",
"target_address_info": "<small>Pilna epasta adrese/s (atdalītas ar komatu).</small>",
"target_domain": "Mērķa domēns",
"username": "Lietotājvārds",
"validate": "Apstiprināt",
"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.",
"domain_matches_hostname": "Domēns %s atbilst saimniekdatora nosaukumam",
"disable_login": "Neļaut pieteikšanos (ienākošais pasts joprojām tiks pieņemts)"
"disable_login": "Neļaut pieteikšanos (ienākošais pasts joprojām tiks pieņemts)",
"app_password": "Pievienot lietotnes paroli",
"app_passwd_protocols": "Atļautie lietotnes paroles protokoli"
},
"admin": {
"access": "Pieeja",
@@ -114,7 +125,7 @@
"f2b_whitelist": "Baltā saraksta tīkls/hosts",
"filter_table": "Filtru tabula",
"forwarding_hosts": "Hostu pārsūtīšana",
"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_add_hint": "Var norādīt vai nu IPv4/IPv6 adreses, 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": "Pārrakstīt palīdzības tekstu zem pieteikšanās maskas (var izmantot HTML)",
"host": "Hosts",
@@ -142,7 +153,7 @@
"recipients": "Adresāts",
"refresh": "Atsvaidzināt",
"regen_api_key": "Reģenerēt API atslēgu",
"relay_from": "\"No:\" addrese",
"relay_from": "\"No:\" adrese",
"relay_run": "Palaist testu",
"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",
@@ -222,7 +233,8 @@
"targetd_not_found": "Mērķa domēns nav atrasts",
"username_invalid": "Lietotājvārds nevar tikt izmantots",
"validity_missing": "Lūdzu piešķiriet derīguma termiņu",
"domain_cannot_match_hostname": "Domēns nevar atbilst saimniekdatora nosaukumam"
"domain_cannot_match_hostname": "Domēns nevar atbilst saimniekdatora nosaukumam",
"app_passwd_id_invalid": "Lietotnes paroles Id %s ir nederīgs"
},
"diagnostics": {
"cname_from_a": "Vērtība, kas iegūta no A/AAAA ieraksta. Tas tiek atbalstīts tik ilgi, kamēr ieraksts norāda uz pareizo resursu.",
@@ -257,7 +269,7 @@
"hostname": "Saimniekdatora nosaukums",
"inactive": "Neaktīvs",
"kind": "Veids",
"mailbox": "Rediģēt pastkasti",
"mailbox": "Labot pastkasti",
"max_aliases": "Lielākais aizstājvārdu skaits",
"max_mailboxes": "Maks. iespējamās pastkastes",
"max_quota": "Maks. kvota uz pastkasti (MiB)",
@@ -283,8 +295,8 @@
"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>",
"syncjob": "Labot sinhronizācijas darbu",
"target_address": "Mērķa adrese/s <small>(atdalītas ar komatu)</small>",
"target_domain": "Mērķa domēns",
"title": "Labot priekšmetu",
"unchanged_if_empty": "Ja neizmainīts atstājiet tukšu",
@@ -300,8 +312,11 @@
"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.",
"mbox_rl_info": "Šis pieprasījumu ierobežojums tiek piemērots SASL pieteikšanās vārdam, tas atbilst jebkurai \"from\" adresei, ko izmanto lietotājs, kurš ir pieteicies. Pastkastes pieprasījumu ierobežojums pārraksta domēna mēroga pieprasījumu ierobežojumu.",
"sogo_access": "Nodrošināt tiešu pieteikšanās piekļuvi SOGo",
"disable_login": "Neļaut pieteikšanos (ienākošais pasts joprojām tiks pieņemts)"
"sogo_access": "Tieša pārvirzīšana uz SOGo",
"disable_login": "Neļaut pieteikšanos (ienākošais pasts joprojām tiks pieņemts)",
"app_passwd_protocols": "Atļautie lietotnes paroles protokoli",
"allowed_protocols": "Atļautie protokoli tiešai lietotāja piekļuvei (neietekmē lietotnes paroles protokolus)",
"app_passwd": "Lietotnes parole"
},
"footer": {
"cancel": "Atcelt",
@@ -508,7 +523,9 @@
"verified_fido2_login": "Apliecināta FIDO2 pieteikšanās",
"verified_webauthn_login": "Apliecināta WebAuthn pieteikšanās",
"verified_totp_login": "Apliecināta TOTP pieteikšanās",
"verified_yotp_login": "Apliecināta Yubico OTP pieteikšanās"
"verified_yotp_login": "Apliecināta Yubico OTP pieteikšanās",
"app_passwd_removed": "Noņemta lietotnes parole ar Id %s",
"app_passwd_added": "Pievienota jauna lietotnes parole"
},
"tfa": {
"api_register": "%s izmanto Yubico Cloud API. Lūdzu iegūstiet API atslēgu priekš Jūsu atslēgas<a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">here</a>",
@@ -523,7 +540,7 @@
"scan_qr_code": "Lūdzu, skenējiet šo kodu ar savu autentifikācijas lietojumprogrammu vai ievadiet kodu manuāli.",
"select": "Lūdzu izvēlaties",
"set_tfa": "Uzstādīt difi faktoru autentifik;acijas metodi",
"tfa": "Divu faktoru autentifikācija",
"tfa": "Divpakāpju pieteikšanās",
"totp": "Uz laiku bāzēta vienreizēja parole (Google Autentifikātors utt.)",
"webauthn": "WebAuthn autentifikācija",
"waiting_usb_auth": "<i>Gaida USB ierīci...</i><br><br>Lūdzu, tagad nospiežiet pogu uz Jūsu WebAuthn USB ierīces.",
@@ -618,12 +635,18 @@
"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).",
"app_hint": "Lietotņu paroles ir aizstājējparoles, lai pieteiktos IMAP, SMTP, CalDAV, CardDAV un EAS. Lietotājvārds paliek nemainīgs. SOGo tīmekļa pasts nav pieejams ar lietotņu parolēm.",
"direct_protocol_access": "Šim pastkastes lietotājam ir <b> tieša, ārēja piekļuve</b> zemāk uzskaitītajiem protokoliem un lietotnēm. Šo iestatījumu pārrauga pārvaldītājs. Lietotņu paroles var izveidot, lai nodrošinātu piekļuvi atsevišķiem protokoliem un lietotnēm.<br>Poga \"Pieteikties tīmekļa pastā\" nodrošina vienotu pieteikšanos SOGo un vienmēr ir pieejama.",
"direct_protocol_access": "Šim pastkastes lietotājam ir <b> tieša, ārēja piekļuve</b> zemāk uzskaitītajiem protokoliem un lietotnēm. Šo iestatījumu pārrauga pārvaldītājs. Lietotņu paroles var izveidot, lai nodrošinātu piekļuvi atsevišķiem protokoliem un lietotnēm.<br>Poga \"Tīmekļa pasts\" nodrošina vienotu pieteikšanos SOGo un vienmēr ir pieejama.",
"last_ui_login": "Pēdējā pieteikšanās saskarnē",
"login_history": "Pieteikšanās vēsture",
"no_last_login": "Nav informācijas par pēdējām pieteikšanās saskarnē reizēm",
"open_webmail_sso": "Pieteikšanās tīmekļa pastā",
"last_mail_login": "Pēdējā pasta pieteikšanās"
"open_webmail_sso": "Tīmekļa pasts",
"last_mail_login": "Pēdējā pasta pieteikšanās",
"change_password_hint_app_passwords": "Kontā ir %d lietotņu paroles, kas netiks mainītas. Lai pārvaldītu tās, jādodas uz cilni \"Lietotņu paroles\".",
"with_app_password": "ar lietotnes paroli",
"apple_connection_profile_with_app_password": "Jauna lietotnes parole ir izveidota un pievienota profilam, lai ierīces iestatīšanas laikā nebūtu nepieciešams ievadīt paroli. Lūgums nekopīgot datni, jo tā nodrošina pilnu piekļuvi pastkastei.",
"tfa_info": "Divpakāpju autentificēšanās palīdz aizsargāt kontu.Ja tā ir iespējota, var būt nepieciešamas lietotņu paroles, lai pieteiktos lietotnēs vai pakalpojumos, kas nenodrošina divpakāpju autentificēšanos (piem., e-pasta klienti).",
"app_passwds": "Lietotņu paroles",
"create_app_passwd": "Izveidot lietotnes paroli"
},
"datatables": {
"paginate": {
@@ -657,4 +680,4 @@
"fido2": {
"fido2_auth": "Pieteikties ar FIDO2"
}
}
}

View File

@@ -2,7 +2,8 @@
"acl": {
"sogo_profile_reset": "Usuń profil SOGo (webmail)",
"syncjobs": "Polecenie synchronizacji",
"alias_domains": "Dodaj aliasy domen"
"alias_domains": "Dodaj aliasy domen",
"delimiter_action": "Akcja oparta na separatorze"
},
"add": {
"active": "Aktywny",
@@ -430,4 +431,4 @@
"weekly": "Co tydzień",
"weeks": "Tygodnie"
}
}
}

View File

@@ -1,7 +1,7 @@
{
"add": {
"active": "Ativo",
"add": "Salvar",
"add": "Guardar",
"alias_address": "Apelidos:",
"alias_address_info": "<small>Endereço de email completo ou @example.com, para uma conta coringa -catch all. (separado por vírgula). <b>apenas domínios cadastrados</b>.</small>",
"alias_domain": "Encaminhamento de Domínio",
@@ -17,7 +17,7 @@
"max_mailboxes": "Máximo de contas:",
"password": "Senha:",
"password_repeat": "Confirmar a senha (repetir):",
"port": "Port",
"port": "Porta",
"quota_mb": "Espaço (MiB):",
"relay_all": "Relay para todas as contas",
"relay_all_info": "<small>Se <b>não</b> selecionar para retransmitir todas as contas, você deve adicionar uma (\"blind\") para cada conta que será direcionada.</small>",
@@ -27,13 +27,26 @@
"target_address": "Encaminhar para:",
"target_address_info": "<small>Endereço de email completo (separado por vírgulas).</small>",
"target_domain": "Domínio de Destino:",
"username": "Administrador"
"username": "Nome de utilizador",
"app_name": "Nome da App",
"destination": "Destino",
"generate": "gerar",
"private_comment": "Comentário privado",
"inactive": "Inativo",
"public_comment": "Comentário público",
"sieve_desc": "Breve descrição",
"sieve_type": "Tipo de filtro",
"subscribeall": "Subscrever todas as pastas",
"syncjob": "Adicionar sincronização",
"validate": "Validar",
"validation_success": "Validado com sucesso",
"app_passwd_protocols": "Protocolos permitidos para senha de aplicação"
},
"admin": {
"access": "Acessos",
"action": "Ação",
"active": "Ativo",
"add": "Salvar",
"add": "Adicionar",
"add_domain_admin": "Adicionar administrador de domínio(s)",
"admin": "Administrador",
"admin_details": "Editar informações do administrator",
@@ -58,7 +71,47 @@
"search_domain_da": "Selecione o(s) domínio(s)",
"spamfilter": "Filtro de Spam",
"unchanged_if_empty": "Deixar em branco para não alterar",
"username": "Administrador"
"username": "Administrador",
"add_row": "Adicionar linha",
"add_transport": "Adicionar transporte",
"change_logo": "Alterar logo",
"filter": "Filtro",
"iam_port": "Porta",
"iam_use_ssl": "Usar SSL",
"iam_version": "Versão",
"import": "Importar",
"import_private_key": "Importar chave privada",
"message": "Mensagem",
"dkim_private_key": "Chave privada",
"customize": "Personalizar",
"destination": "Destino",
"dkim_from": "De",
"activate_api": "Ativar API",
"add_admin": "Adicionar administrador",
"admins": "Administradores",
"advanced_settings": "Configurações avançadas",
"api_key": "Chave API",
"api_read_only": "Acesso leitura",
"api_read_write": "Acesso leitura e escrita",
"login_page": "Página de login",
"dkim_key_missing": "Chave em falta",
"dkim_key_valid": "Chave válida",
"dkim_to": "Para",
"domain_admin": "Administrador de dominio",
"domain_s": "Dominio(s)",
"duplicate": "Duplicar",
"duplicate_dkim": "Duplicar registo DKIM",
"empty": "Sem resultados",
"excludes": "Excluir estes recipientes",
"f2b_filter": "Filtros de regex",
"from": "De",
"generate": "gerar",
"html": "HTML",
"iam_import_users": "Importar Utilizadores",
"ui_header_announcement_content": "Texto (HTML permitido)",
"ui_footer": "Rodapé (HTML permitido)",
"activate_send": "Ativar botão de envio",
"help_text": "Anular texto de ajuda abaixo da máscara de login (HTML permitido)"
},
"danger": {
"access_denied": "Acesso negado ou dados inválidos",
@@ -97,7 +150,10 @@
"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 utilizador inválido",
"validity_missing": "Você deve definir um período de validade"
"validity_missing": "Você deve definir um período de validade",
"comment_too_long": "Comentário demasiado longo, máximo 160 chars permitidos",
"ip_list_empty": "Lista de IPs permitidos não pode estar vazia",
"last_key": "A última tecla não pode ser apagada, por favor desactivar a TFA."
},
"edit": {
"active": "Ativo",
@@ -129,7 +185,9 @@
"target_domain": "Domínio de Destino:",
"title": "Editar dos Objetos",
"unchanged_if_empty": "Deixar em branco para não modificar",
"username": "Administrador"
"username": "Administrador",
"app_passwd_protocols": "Protocolos permitidos para palavra-passe de aplicação",
"allowed_protocols": "Protocolos permitidos para acesso direto do utilizador (não afeta os protocolos de palavra-passe da aplicação)"
},
"footer": {
"loading": "Aguarde..."
@@ -186,11 +244,15 @@
"target_domain": "Domínio Destino",
"tls_enforce_in": "Forçar TLS na entrada",
"tls_enforce_out": "Forçar TLS na saída",
"username": "Utilizador"
"username": "Utilizador",
"allowed_protocols": "Protocolos permitidos",
"activate": "Ativar",
"deactivate": "Desativar"
},
"quarantine": {
"action": "Ação",
"remove": "Remover"
"remove": "Remover",
"check_hash": "Pesquisar hash de ficheiro @ VT"
},
"queue": {
"queue_manager": "Queue Manager"
@@ -269,6 +331,31 @@
"user_settings": "Configurações do utilizador",
"username": "Administrador",
"week": "Semana",
"weeks": "Semanas"
"weeks": "Semanas",
"aliases_also_send_as": "Também autorizado a enviar como utilizador",
"app_hint": "As senhas de aplicação são senhas alternativas para o seu login IMAP, SMTP, CalDAV, CardDAV e EAS. O nome de utilizador permanece inalterado. O webmail SOGo não está disponível através de passwords de aplicação.",
"allowed_protocols": "Protocolos permitidos"
},
"acl": {
"tls_policy": "Política de TLS",
"quarantine_attachments": "Anexos de quarentena",
"filters": "Filtros",
"smtp_ip_access": "Mudar anfitriões permitidos para SMTP"
},
"warning": {
"no_active_admin": "Não é possível desactivar o último administrador activo"
},
"tfa": {
"u2f_deprecated": "Parece que a sua chave foi registada usando o método U2F depreciado. Desactivaremos dois factores-autenticação para si e apagaremos a sua Chave.",
"none": "Desativar"
},
"datatables": {
"search": "Procurar:",
"info": "A mostrar _START_ a _END_ de _TOTAL_ entradas",
"infoEmpty": "A mostrar 0 a 0 de 0 entradas",
"aria": {
"sortAscending": ": activar para ordenar a coluna ascendente",
"sortDescending": ": activar para ordenar a coluna descendente"
}
}
}
}

View File

@@ -359,7 +359,56 @@
"username": "Имя пользователя",
"validate_license_now": "Получить лицензию на основе GUID с сервера лицензий",
"verify": "Проверить",
"yes": "&#10003;"
"yes": "&#10003;",
"force_sso_text": "Если настроен внешний провайдер OIDC, эта опция скрывает стандартные формы входа mailcow и показывает только кнопку Singe Sign-On",
"domainadmin_quicklink": "Скрыть ссылку на вход для администраторов домена",
"iam_periodic_full_sync": "Периодическая полная синхронизация",
"iam_sync_interval": "Интервал синхронизации/импорта (мин)",
"iam_use_tls_info": "При включённом TLS необходимо использовать стандартный порт LDAP-сервера (389). Порты SSL не подходят.",
"iam_use_ssl_info": "При включённом SSL, если указан порт 389, то вместо него автоматически будет использоваться порт 636.",
"quicklink_text": "Показать или скрыть ссылки для быстрого перехода к другим страницам входа под формой авторизации",
"iam_login_provisioning": "Автоматическое создание пользователей при входе в систему",
"iam_mapping": "Сопоставление атрибутов",
"iam_bindpass": "Bind пароль",
"iam_port": "Порт",
"iam_realm": "Realm",
"iam_redirect_url": "URL переадресации",
"iam_rest_flow": "Поток Mailpassword",
"iam_server_url": "URL сервера",
"iam_sso": "Технология единого входа (SSO)",
"iam_token_url": "Token endpoint",
"iam_userinfo_url": "User info endpoint",
"iam_username_field": "Поле имени пользователя",
"iam_binddn": "Bind DN",
"iam_use_ssl": "Использовать SSL",
"iam_use_tls": "Использовать StartTLS",
"iam_version": "Версия",
"ignore_ssl_error": "Игнорировать ошибки SSL",
"task": "Задача",
"user_link": "Пользовательская ссылка",
"user_quicklink": "Скрыть ссылку на вход для пользователей",
"app_hide": "Скрыть для входа",
"iam_test_connection": "Проверка соединения",
"login_page": "Страница входа",
"filter": "Фильтр",
"force_sso": "Отключить mailcow авторизацию и показывать только Singe Sign-On",
"iam": "Провайдер идентификации",
"iam_attribute_field": "Поле атрибута",
"iam_authorize_url": "Конечная точка авторизации",
"iam_auth_flow": "Процесс аутентификации",
"iam_auth_flow_info": "В дополнение к потоку кода авторизации (стандартный поток в Keycloak), который используется для Single-Sign On входа, mailcow также поддерживает поток аутентификации с непосредственными учетными данными. Поток Mailpassword пытается проверить учетные данные пользователя с помощью REST API администратора Keycloak. mailcow извлекает хешированный пароль из атрибута <code>mailcow_password</code>, который отображается в Keycloak.",
"iam_basedn": "Base DN",
"iam_client_id": "ID клиента",
"iam_client_secret": "Секрет клиента",
"iam_client_scopes": "Области действия клиента",
"iam_default_template": "Шаблон по умолчанию",
"iam_default_template_description": "Если пользователю не назначен шаблон, шаблон по умолчанию будет использоваться при создании почтового ящика, но не при обновлении почтового ящика.",
"iam_description": "Настройка внешнего провайдера для аутентификации<br>Почтовые ящики пользователей будут автоматически создаваться при первом входе в систему, если было задано сопоставление атрибутов.",
"iam_extra_permission": "Для работы следующих настроек клиенту mailcow в Keycloak необходима <code>служебная учетная запись</code> и разрешение на <code>просмотр пользователей</code>.",
"iam_host": "Хост",
"iam_host_info": "Укажите один или несколько LDAP-хостов через запятую.",
"iam_import_users": "Импорт пользователей",
"admin_quicklink": "Скрыть ссылку на вход для администраторов"
},
"danger": {
"access_denied": "Доступ запрещён, или указаны неверные данные",
@@ -496,7 +545,11 @@
"webauthn_publickey_failed": "Для выбранного аутентификатора не был сохранен открытый ключ",
"webauthn_username_failed": "Выбранный аутентификатор принадлежит другой учетной записи",
"webauthn_verification_failed": "Ошибка валидации WebAuthn: %s",
"yotp_verification_failed": "Ошибка валидации Yubico OTP: %s"
"yotp_verification_failed": "Ошибка валидации Yubico OTP: %s",
"generic_server_error": "На сервере произошла непредвиденная ошибка. Пожалуйста, свяжитесь с вашим администратором.",
"authsource_in_use": "Поставщик идентификационных данных не может быть изменен или удален, так как в данный момент он используется одним или несколькими пользователями.",
"iam_test_connection": "Ошибка соединения",
"required_data_missing": "Отсутствуют необходимые данные %s"
},
"datatables": {
"collapse_all": "Свернуть все",
@@ -581,7 +634,7 @@
"alias": "Изменить псевдоним",
"allow_from_smtp": "Разрешить использование <b>SMTP</b> только для этих IP",
"allow_from_smtp_info": "Укажите IPv4/IPv6 адреса и/или подсети.<br>Оставьте поле пустым, чтобы разрешить отправку с любых адресов.",
"allowed_protocols": "Разрешённые протоколы",
"allowed_protocols": "Разрешённые протоколы для прямого доступа пользователей (не влияет на протоколы паролей приложений)",
"app_name": "Название приложения",
"app_passwd": "Пароль приложения",
"app_passwd_protocols": "Разрешенные протоколы для пароля приложения",
@@ -771,7 +824,14 @@
"password": "Пароль",
"request_reset_password": "Запросить восстановление пароля",
"reset_password": "Восстановление пароля",
"username": "Имя пользователя"
"username": "Имя пользователя",
"login_linkstext": "Неправильный логин?",
"login_usertext": "Войти как пользователь",
"login_domainadmintext": "Войти как администратор домена",
"login_admintext": "Войти как администратор",
"login_user": "Вход для пользователей",
"login_dadmin": "Вход для администраторов домена",
"login_admin": "Вход для администраторов"
},
"mailbox": {
"action": "Действия",
@@ -946,7 +1006,8 @@
"username": "Имя пользователя",
"waiting": "В ожидании",
"weekly": "Раз в неделю",
"yes": "&#10003;"
"yes": "&#10003;",
"iam": "Поставщик идентификационных данных"
},
"oauth2": {
"access_denied": "Пожалуйста, войдите в систему как владелец почтового аккаунта, чтобы получить доступ через OAuth2.",
@@ -1124,7 +1185,9 @@
"verified_fido2_login": "Авторизация FIDO2 пройдена",
"verified_totp_login": "Авторизация TOTP пройдена",
"verified_webauthn_login": "Авторизация WebAuthn пройдена",
"verified_yotp_login": "Авторизация Yubico OTP пройдена"
"verified_yotp_login": "Авторизация Yubico OTP пройдена",
"iam_test_connection": "Успешное соединение",
"custom_login_modified": "Настройки входа успешно сохранены"
},
"tfa": {
"api_register": "%s использует Yubico Cloud API. Пожалуйста, получите ключ API для вашего ключа <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">здесь</a>",
@@ -1191,7 +1254,7 @@
"delete_ays": "Пожалуйста, подтвердите удаление",
"direct_aliases": "Личные псевдонимы",
"direct_aliases_desc": "На личные псевдонимы распространяются фильтры нежелательной почты и параметры политики TLS.",
"direct_protocol_access": "Этот пользователь почтового ящика имеет <b>прямой, внешний доступ</b> к следующим протоколам и приложениям. Эта настройка контролируется вашим администратором. Для предоставления доступа к отдельным протоколам и приложениям могут быть созданы пароли приложений.<br> Кнопка \"Вход в веб-почту\" обеспечивает единый вход в SOGo и всегда доступна.",
"direct_protocol_access": "Этот пользователь почтового ящика имеет <b>прямой, внешний доступ</b> к следующим протоколам и приложениям. Эта настройка контролируется вашим администратором. Для предоставления доступа к отдельным протоколам и приложениям могут быть созданы пароли приложений.<br> Кнопка \"Веб-почта\" обеспечивает единый вход в SOGo и всегда доступна.",
"eas_reset": "Сбросить кеш ActiveSync устройств",
"eas_reset_help": "Во многих случаях сброс кеша устройств помогает восстановить повреждённый профиль ActiveSync.<br><b>Внимание:</b> все письма, календари и контакты будут загружены заново на все ваши устройства!",
"eas_reset_now": "Сбросить кеш сейчас",
@@ -1319,7 +1382,11 @@
"weeks": "недели",
"with_app_password": "с паролем приложения",
"year": "год",
"years": "лет"
"years": "лет",
"authentication": "Аутентификация",
"tfa_info": "Двухфакторная аутентификация помогает защитить вашу учетную запись. Если вы включите эту функцию, вам понадобятся пароли приложений для входа в приложения или службы, которые не поддерживают двухфакторную аутентификацию (например, почтовые клиенты).",
"protocols": "Протоколы",
"overview": "Обзор"
},
"warning": {
"cannot_delete_self": "Вы не можете удалить сами себя",

View File

@@ -352,13 +352,69 @@
"allowed_origins": "Upravljanje-dostopa-Dovoljeni-Viri",
"copy_to_clipboard": "Besedilo kopirano v odložišče!",
"f2b_manage_external": "Zunanje upravljanje Fail2Ban",
"f2b_manage_external_info": "Fail2ban bo še vedno vzdrževal seznam prepovedi, vendar ne bo aktivno nastavil pravil za blokiranje prometa. Uporabite spodnji ustvarjeni seznam prepovedi za zunanje blokiranje prometa."
"f2b_manage_external_info": "Fail2ban bo še vedno vzdrževal seznam prepovedi, vendar ne bo aktivno nastavil pravil za blokiranje prometa. Uporabite spodnji ustvarjeni seznam prepovedi za zunanje blokiranje prometa.",
"force_sso_text": "Če je konfiguriran zunanji ponudnik OIDC, ta možnost skrije privzete obrazce za prijavo v Mailcow in prikaže samo gumb za enotno prijavo",
"app_hide": "Skrij za prijavo",
"iam_login_provisioning": "Samodejno ustvarjanje uporabnikov ob prijavi",
"admin_quicklink": "Skrij hitro povezavo do strani za prijavo skrbnika",
"login_page": "Prijavna stran",
"domainadmin_quicklink": "Skrij hitro povezavo do strani za prijavo v Skrbnik domen",
"filter": "Filter",
"force_sso": "Onemogoči prijavo v mailcow in prikaži samo enotno prijavo",
"iam": "Ponudnik identitete",
"iam_attribute_field": "Polje atributa",
"iam_authorize_url": "Končna točka avtorizacije",
"iam_auth_flow": "Potek preverjanja pristnosti",
"iam_auth_flow_info": "Poleg toka avtorizacijske kode (standardni tok v Keycloaku), ki se uporablja za prijavo z enotno prijavo, mailcow podpira tudi tok preverjanja pristnosti z neposrednimi poverilnicami. Tok Mailpassword poskuša preveriti uporabnikove poverilnice z uporabo REST API-ja Keycloak Admin. mailcow pridobi zgoščeno geslo iz atributa <code>mailcow_password</code>, ki je preslikan v Keycloaku.",
"iam_basedn": "Osnovni DN",
"iam_client_id": "ID odjemalca",
"iam_client_secret": "Skrivnost odjemalca",
"iam_client_scopes": "Obsegi odjemalcev",
"iam_default_template": "Privzeta predloga",
"iam_default_template_description": "Če uporabniku ni dodeljena nobena predloga, bo privzeta predloga uporabljena za ustvarjanje nabiralnika, ne pa za posodabljanje nabiralnika.",
"iam_description": "Konfigurirajte zunanjega ponudnika za preverjanje pristnosti<br>Uporabnikovi poštni nabiralniki bodo samodejno ustvarjeni ob prvi prijavi, če je nastavljeno preslikavanje atributov.",
"iam_extra_permission": "Za delovanje naslednjih nastavitev potrebuje odjemalec mailcow v Keycloaku <code>Servisni račun</code> in dovoljenje za <code>ogled uporabnikov</code>.",
"iam_host": "Gostitelj",
"iam_host_info": "Vnesite enega ali več gostiteljev LDAP, ločenih z vejicami.",
"iam_import_users": "Uvozi uporabnike",
"iam_use_tls_info": "Če omogočite TLS, morate uporabiti privzeta vrata za strežnik LDAP (389). Vrat SSL ni mogoče uporabiti.",
"iam_sync_interval": "Interval sinhronizacije / uvoza (min)",
"user_quicklink": "Skrij hitro povezavo do strani za prijavo uporabnika",
"iam_use_ssl_info": "Če omogočite SSL in so vrata nastavljena na 389, bodo samodejno prepisana na uporabo 636.",
"iam_mapping": "Preslikava atributov",
"iam_bindpass": "Vezano geslo",
"iam_periodic_full_sync": "Periodična popolna sinhronizacija",
"iam_port": "Vrata",
"iam_redirect_url": "Preusmeri URL",
"iam_rest_flow": "Tok gesla za pošto",
"iam_server_url": "URL strežnika",
"iam_sso": "Enotna prijava",
"iam_test_connection": "Preizkus povezave",
"iam_token_url": "Končna točka žetona",
"iam_userinfo_url": "Končna točka z uporabniškimi podatki",
"iam_username_field": "Polje z uporabniškim imenom",
"iam_binddn": "Povezava DN",
"iam_use_ssl": "Uporabi SSL",
"iam_use_tls": "Uporabi StartTLS",
"iam_version": "Različica",
"ignore_ssl_error": "Prezri napake SSL",
"password_reset_info": "Če ni naveden e-poštni naslov za obnovitev, te funkcije ni mogoče uporabiti.",
"password_reset_settings": "Nastavitve za obnovitev gesla",
"password_reset_tmpl_html": "Predloga HTML",
"password_reset_tmpl_text": "Predloga besedila",
"password_settings": "Nastavitve gesla",
"quicklink_text": "Prikaži ali skrij hitre povezave do drugih strani za prijavo pod prijavnim obrazcem",
"reset_password_vars": "<code>{{link}}<code> Ustvarjena povezava za ponastavitev gesla<br><code>{{username}}<code> Ime nabiralnika uporabnika, ki je zahteval ponastavitev gesla<br><code>{{username2}}<code> Ime obnovitvenega nabiralnika<br><code>{{date}}<code> Datum zahteve za ponastavitev gesla<br><code>{{token_lifetime}}<code> Življenjska doba žetona v minutah<br><code>{{hostname}}<code> Ime gostitelja mailcow",
"restore_template": "Za obnovitev privzete predloge pustite polje prazno.",
"task": "Naloga",
"user_link": "Uporabniška povezava",
"iam_realm": "Realm"
},
"danger": {
"alias_goto_identical": "Alias in goto naslov morata biti identična",
"aliasd_targetd_identical": "Alias domena ne sme biti enaka ciljni domeni: %s",
"bcc_exists": "BCC preslikava obstaja za vrsto %s",
"dkim_domain_or_sel_exists": "DKIM ključ za \"%s\" obstaja in ne bo prepisan.",
"dkim_domain_or_sel_exists": "DKIM ključ za \"%s\" obstaja in ne bo prepisan",
"domain_quota_m_in_use": "Kvota domene mora biti večja ali enaka %s MiB",
"extra_acl_invalid_domain": "Zunanji pošiljatelj \"%s\" uporablja neveljavno domeno",
"global_map_write_error": "Ni mogoče zapisati ID globalne preslikave %s: %s",
@@ -375,8 +431,8 @@
"app_passwd_id_invalid": "ID gesla aplikacije %s je neveljaven",
"bcc_empty": "BCC cilj ne more biti prazen",
"bcc_must_be_email": "BCC cilj %s ni veljaven e-poštni naslov",
"comment_too_long": "Komentar je predolg, dovoljeno je največ 100 znakov.",
"defquota_empty": "Privzeta kvota na poštni predal ne more biti 0",
"comment_too_long": "Komentar je predolg, dovoljeno je največ 160 znakov",
"defquota_empty": "Privzeta kvota na poštni predal ne more biti 0.",
"description_invalid": "Opis resursa za %s ni veljaven",
"dkim_domain_or_sel_invalid": "Domena ali izbirnik DKIM ni veljaven: %s",
"domain_cannot_match_hostname": "Domena se ne more ujemati z imenom gostitelja",
@@ -414,9 +470,9 @@
"invalid_recipient_map_old": "Naveden neveljaven izvirni prejemnik: %s",
"ip_list_empty": "Seznam dovoljenih IPjev ne sme biti prazen",
"is_alias": "%s je že znan kot alias naslov",
"is_alias_or_mailbox": "%s je že znan kot alias, poštni naslov, ali alias izveden iz alias domene",
"is_alias_or_mailbox": "%s je že znan kot alias, poštni naslov, ali alias izveden iz alias domene.",
"is_spam_alias": "%s že obstaja kot začasen alias (spam alias naslov)",
"last_key": "Zadnji ključ ne more biti izbrisan, prosim raje deaktivirajte dvofaktorsko avtentikacijo (TFA)",
"last_key": "Zadnji ključ ne more biti izbrisan, prosim raje deaktivirajte dvofaktorsko avtentikacijo (TFA).",
"login_failed": "Prijava ni uspela",
"mailbox_defquota_exceeds_mailbox_maxquota": "Privzeta kvota presega najvišjo omejitev",
"mailbox_invalid": "Ime poštnega predala ni veljavno",
@@ -428,7 +484,7 @@
"map_content_empty": "Preslikava vsebine ne more biti prazna",
"max_alias_exceeded": "Preseženo največje število aliasov",
"max_mailbox_exceeded": "Preseženo največje število poštnih predalov (%d od %d)",
"maxquota_empty": "Največja kvota na poštni predal ne more biti 0",
"maxquota_empty": "Največja kvota na poštni predal ne more biti 0.",
"mysql_error": "Napaka MySQL: %s",
"network_host_invalid": "Nepravilno omrežje ali gostitel: %s",
"next_hop_interferes": "% moti naslednji skok %s",
@@ -483,7 +539,17 @@
"cors_invalid_origin": "Naveden neveljaven Allow-Origin",
"invalid_recipient_map_new": "Naveden neveljaven nov prejemnik: %s",
"img_dimensions_exceeded": "Slika presega največje dovoljene dimenzije",
"img_size_exceeded": "Slika presega največjo dovoljeno velikost datoteke"
"img_size_exceeded": "Slika presega največjo dovoljeno velikost datoteke",
"iam_test_connection": "Povezava ni uspela",
"authsource_in_use": "Ponudnika identitete ni mogoče spremeniti ali izbrisati, ker ga trenutno uporablja eden ali več uporabnikov.",
"password_reset_na": "Obnovitev gesla trenutno ni na voljo. Obrnite se na skrbnika.",
"generic_server_error": "Prišlo je do nepričakovane napake strežnika. Obrnite se na skrbnika.",
"invalid_reset_token": "Neveljaven žeton za ponastavitev",
"password_reset_invalid_user": "Poštni predal ni bil najden ali pa ni nastavljen e-poštni naslov za obnovitev",
"recovery_email_failed": "E-poštnega sporočila za obnovitev ni bilo mogoče poslati. Obrnite se na skrbnika.",
"required_data_missing": "Manjkajo zahtevani podatki %s",
"reset_token_limit_exceeded": "Omejitev žetonov za ponastavitev je bila presežena. Poskusite znova pozneje.",
"to_invalid": "Polje za prejemnika ne sme biti prazno"
},
"debug": {
"containers_info": "Informacije o vsebniku (containerju)",
@@ -583,8 +649,8 @@
"pushover_sender_array": "Upoštevaj samo sledeče e-poštne naslove pošiljateljev <small>(ločeni z vejico)</small>",
"mbox_rl_info": "Ta omejitev velja za SASL uporabniško ime, preverja se ujemanje s katerim koli \"from\" naslovom, ki ga uporablja prijavljeni uporabnik. Omejitev pošiljanja za poštni predal preglasi pravilo omejitve za domeno.",
"kind": "Tip",
"client_secret": "Client secret",
"comment_info": "Zasebni komentar ni viden uporabniku, javni komentar pa je viden kot tooltip v uporabnikovem pregledu.",
"client_secret": "Skrivnost odjemalca",
"comment_info": "Zasebni komentar ni viden uporabniku, javni komentar pa se prikaže kot opis orodja, ko nanj v pregledu uporabnika zadržite miško",
"created_on": "Ustvarjeno",
"custom_attributes": "Atributi po meri",
"delete1": "Izbriši na viru, ko je končano",
@@ -601,11 +667,11 @@
"pushover_verify": "Preveri poverilnice",
"quota_mb": "Omejitev (MiB)",
"quota_warning_bcc": "BCC za sporočilo z opozorilom omejitve",
"quota_warning_bcc_info": "Opozorila bodo poslana kot ločene kopije sledim prejemnikom. K naslovu sporočila bo dodano uporabniško ime v oklepajih, npr. <code>Opozorilo omejitve (user@example.com)</code>",
"quota_warning_bcc_info": "Opozorila bodo poslana kot ločene kopije naslednjim prejemnikom. Zadevi bo v oklepaju dodano ustrezno uporabniško ime, na primer: <code>Opozorilo o kvoti (uporabnik@example.com)</code>.",
"ratelimit": "Omejitev pošiljanja",
"advanced_settings": "Napredne nastavitve",
"allow_from_smtp_info": "Pustite prazno da dovolite vse pošiljatelje.<br>IPv4/IPv6 naslovi in omrežja.",
"allowed_protocols": "Dovoljeni protokoli",
"allowed_protocols": "Dovoljeni protokoli za neposreden dostop uporabnikov (ne vpliva na protokole za gesla aplikacij)",
"app_name": "Ime aplikacije",
"app_passwd": "Geslo aplikacije",
"app_passwd_protocols": "Dovoljeni protokoli za geslo aplikacije",
@@ -647,12 +713,691 @@
"public_comment": "Javni komentar",
"pushover": "Pushover",
"pushover_evaluate_x_prio": "Eskaliraj visoko prednostno pošto [<code>X-Priority: 1</code>]",
"pushover_info": "Nastavitve potisnih obvestil bodo veljala za vsa čisto (ne spam) elektronsko pošto dostavljeno v <b>%s</b> vključno z aliasi (deljeni, nedeljeni, označeni)",
"pushover_info": "Nastavitve potisnih obvestil bodo veljale za vso čisto (ne neželeno) pošto, dostavljeno na <b>%s</b>, vključno z vzdevki (v skupni rabi, brez skupne rabe, označeni).",
"pushover_only_x_prio": "Upoštevaj samo pošto z visoko prioriteto [<code>X-Priority: 1</code>]",
"pushover_sender_regex": "Upoštevaj sledeči regex za pošiljatelja",
"pushover_text": "Besedilo obvestila",
"pushover_sound": "Zvok",
"encryption": "Šifriranje",
"alias": "Uredi alias"
"alias": "Uredi alias",
"relayhost": "Prenosi, odvisni od pošiljatelja",
"mailbox_rename_alias": "Samodejno ustvari vzdevek",
"sender_acl_info": "Če lahko uporabnik poštnega predala A pošilja kot uporabnik poštnega predala B, se naslov pošiljatelja v SOGo ne prikaže samodejno kot izbirno polje \"od\".<br>\n Uporabnik poštnega predala B mora v SOGo ustvariti pooblastilo, da lahko uporabnik poštnega predala A izbere svoj naslov kot pošiljatelja. Če želite pooblastiti poštni predal v SOGo, uporabite meni (tri pike) desno od imena vašega poštnega predala v zgornjem levem kotu v pogledu pošte. To vedenje ne velja za vzdevke.",
"redirect_uri": "URL za preusmeritev/povratni klic",
"relay_all": "Posreduj vsem prejemnikom",
"relay_unknown_only": "Posreduj samo neobstoječe poštne nabiralnike. Obstoječi poštni nabiralniki bodo dostavljeni lokalno.",
"relay_domain": "Posreduj to domeno",
"remove": "Odstrani",
"resource": "Vir",
"mailbox_rename_title": "Novo ime lokalnega poštnega predala",
"password_recovery_email": "E-poštno sporočilo za obnovitev gesla",
"relay_all_info": "↪ Če se odločite, da <b>ne</b> želite posredovati vseh prejemnikov, boste morali za vsakega posameznega prejemnika, ki ga želite posredovati, dodati (\"slepi\") poštni predal.",
"relay_transport_info": "<div class=\"badge fs-6 bg-info\">Informacije</div> Za to domeno lahko določite transportne zemljevide za cilj po meri. Če niso nastavljeni, bo izvedeno iskanje MX.",
"save": "Shrani spremembe",
"scope": "Obseg",
"sender_acl": "Dovoli pošiljanje kot",
"sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">Preverjanje pošiljatelja je onemogočeno</span>",
"sieve_type": "Vrsta filtra",
"skipcrossduplicates": "Preskoči podvojena sporočila med mapami (po principu \"kdor prej pride, prej melje\")",
"sogo_access": "Neposredno posredovanje na SOGo",
"sogo_access_info": "Po prijavi je uporabnik samodejno preusmerjen na SOGo.",
"sogo_visible": "Vzdevek je viden v SOGo",
"sogo_visible_info": "Ta možnost vpliva samo na objekte, ki jih je mogoče prikazati v SOGo (naslovi aliasov v skupni rabi ali brez nje, ki kažejo na vsaj en lokalni poštni predal). Če je skrita, vzdevek ne bo prikazan kot izbirni pošiljatelj v SOGo.",
"spam_alias": "Ustvarjanje ali spreminjanje časovno omejenih vzdevkovnih naslovov",
"spam_filter": "Filter neželene pošte",
"spam_policy": "Dodajanje ali odstranjevanje elementov na beli/črni seznam",
"spam_score": "Nastavite oceno neželene pošte po meri",
"subfolder2": "Sinhroniziraj v podmapo na cilju<br><small>(prazno = ne uporabi podmape)</small>",
"syncjob": "Urejanje sinhronizacijskega opravila",
"target_address": "Pojdi na naslov/e <small>(ločeno z vejico)</small>",
"target_domain": "Ciljna domena",
"timeout1": "Časovna omejitev za povezavo z oddaljenim gostiteljem",
"timeout2": "Časovna omejitev za povezavo z lokalnim gostiteljem",
"title": "Urejanje predmeta",
"unchanged_if_empty": "Če ni spremenjeno, pustite prazno",
"username": "Uporabniško ime",
"validate_save": "Potrdi in shrani",
"mailbox_rename": "Preimenuj poštni predal",
"mailbox_rename_agree": "Ustvaril/a sem varnostno kopijo.",
"mailbox_rename_warning": "POMEMBNO! Pred preimenovanjem nabiralnika ustvarite varnostno kopijo.",
"sieve_desc": "Kratek opis"
},
"footer": {
"restart_container_info": "<b>Pomembno:</b> Ugoden ponovni zagon lahko traja nekaj časa, zato počakajte, da se konča.",
"delete_these_items": "Prosimo, potrdite spremembe naslednjega ID-ja objekta",
"confirm_delete": "Potrdi brisanje",
"delete_now": "Izbriši zdaj",
"hibp_check": "Preverite na haveibeenpwned.com",
"hibp_nok": "Ujema se! To je potencialno nevarno geslo!",
"hibp_ok": "Ni najdenega ujemanja.",
"loading": "Prosim, počakajte...",
"nothing_selected": "Nič izbranega",
"restart_container": "Znova zaženite zabojnik",
"restart_now": "Znova zaženi zdaj",
"restarting_container": "Ponovni zagon zabojnika, to lahko traja nekaj časa",
"cancel": "Prekliči"
},
"login": {
"password": "Geslo",
"invalid_pass_reset_token": "Žeton za ponastavitev gesla je neveljaven ali je potekel.<br>Zahtevajte novo povezavo za ponastavitev gesla.",
"back_to_mailcow": "Nazaj v mailcow",
"delayed": "Prijava je bila zakasnjena za %s sekund.",
"fido2_webauthn": "Prijava FIDO2/WebAuthent",
"forgot_password": "> Ste pozabili geslo?",
"login": "Prijava",
"login_linkstext": "Ni pravilna prijava?",
"login_usertext": "Prijava kot uporabnik",
"login_domainadmintext": "Prijava kot skrbnik domene",
"login_admintext": "Prijava kot skrbnik",
"login_user": "Prijava uporabnika",
"login_dadmin": "Prijava skrbnika domene",
"login_admin": "Prijava skrbnika",
"mobileconfig_info": "Za prenos zahtevanega profila povezave Apple se prijavite kot uporabnik poštnega predala.",
"new_password": "Novo geslo",
"new_password_confirm": "Potrdi novo geslo",
"other_logins": "ali se prijavite s/z",
"reset_password": "Ponastavi geslo",
"request_reset_password": "Zahteva za spremembo gesla",
"username": "Uporabniško ime"
},
"mailbox": {
"last_mail_login": "Zadnja prijava v e-pošto",
"deactivate": "Deaktiviraj",
"domain_admins": "Skrbniki domen",
"kind": "Prijazno",
"mailbox_defaults_info": "Določite privzete nastavitve za nove poštne nabiralnike.",
"allowed_protocols": "Dovoljeni protokoli",
"add_alias": "Dodaj vzdevek",
"mins_interval": "Interval (min)",
"recipient_map_info": "Zemljevidi prejemnikov se uporabljajo za zamenjavo naslova prejemnika v sporočilu, preden je dostavljeno.",
"add_domain_record_first": "Najprej dodajte domeno",
"booking_ltnull": "Neomejeno, vendar se ob rezervaciji prikaži kot zasedeno",
"alias_domain_alias_hint": "Vzdevki se na vzdevke domen samodejno <b>ne</b> uporabijo. Naslov vzdevka <code>my-alias@domain</code> <b>ne</b> pokriva naslova <code>my-alias@alias-domain</code> (kjer je \"vzdevek domene\" namišljeni vzdevek domene za \"domeno\").<br>Za preusmeritev pošte v zunanji nabiralnik uporabite filter sito (glejte zavihek »Filtri« ali uporabite SOGo -> Posrednik). Za samodejno dodajanje manjkajočih vzdevkov uporabite \"Razširi vzdevek čez domene vzdevkov\".",
"q_all": " ob premiku v mapo Neželena pošta in ob zavrnitvi",
"bcc_info": "BCC zemljevidi se uporabljajo za tiho posredovanje kopij vseh sporočil na drug naslov. Vnos vrste preslikave prejemnika se uporablja, kadar lokalni cilj deluje kot prejemnik pošte. Preslikave pošiljatelja delujejo po istem načelu.<br>\n Lokalni cilj ne bo obveščen o neuspeli dostavi.",
"force_pw_update": "Vsiljena posodobitev gesla ob naslednji prijavi",
"recipient_map_new_info": "Cilj zemljevida prejemnika mora biti veljaven e-poštni naslov ali ime domene.",
"recipient_map_old_info": "Izvirni cilj prejemnika mora biti veljaven e-poštni naslov ali ime domene.",
"action": "Dejanje",
"activate": "Aktiviraj",
"active": "Aktivno",
"add": "Dodaj",
"add_alias_expand": "Razširi vzdevek nad vzdevki domen",
"add_bcc_entry": "Dodaj zemljevid BCC",
"add_domain": "Dodaj domeno",
"add_domain_alias": "Dodaj vzdevek domene",
"add_filter": "Dodaj filter",
"add_mailbox": "Dodaj poštni predal",
"add_recipient_map_entry": "Dodaj zemljevid prejemnikov",
"add_resource": "Dodaj vir",
"add_template": "Dodaj predlogo",
"add_tls_policy_map": "Dodaj zemljevid pravilnikov TLS",
"address_rewriting": "Prepisovanje naslovov",
"alias": "Vzdevek",
"alias_domain_backupmx": "Vzdevek domene ni aktiven za posredovalno domeno",
"aliases": "Vzdevki",
"all_domains": "Vse domene",
"allow_from_smtp": "Dovoli samo tem IP-jem uporabo <b>SMTP</b>",
"allow_from_smtp_info": "Pustite prazno, da dovolite vse pošiljatelje.<br>Naslovi in omrežja IPv4/IPv6.",
"backup_mx": "Posredovalna domena",
"bcc": "BCC",
"bcc_destination": "Ciljna stran BCC",
"bcc_destinations": "Ciljna stran BCC",
"bcc_local_dest": "Lokalni cilj",
"bcc_map": "BCC zemljevid",
"bcc_map_type": "BCC tip",
"bcc_maps": "BCC zemljevidi",
"bcc_rcpt_map": "Zemljevid prejemnikov",
"bcc_sender_map": "Zemljevid pošiljatelja",
"bcc_to_rcpt": "Preklopi na vrsto zemljevida prejemnika",
"bcc_to_sender": "Preklopi na vrsto zemljevida pošiljatelja",
"bcc_type": "BCC tip",
"booking_null": "Vedno prikaži kot brezplačno",
"booking_0_short": "Vedno prost",
"booking_custom": "Točna omejitev na število rezervacij po meri",
"booking_custom_short": "Trda omejitev",
"booking_lt0_short": "Mehka omejitev",
"catch_all": "Zajemi vse",
"created_on": "Ustvarjeno dne",
"daily": "Dnevno",
"description": "Opis",
"disable_login": "Prepreči prijavo (dohodna pošta je še vedno sprejeta)",
"disable_x": "Onemogoči",
"dkim_domains_selector": "Izbirnik",
"dkim_key_length": "Dolžina ključa DKIM (biti)",
"domain": "Domena",
"domain_aliases": "Vzdevki domen",
"domain_templates": "Predloge domen",
"domain_quota": "Kvota",
"domain_quota_total": "Celotna kvota domene",
"domains": "Domene",
"edit": "Uredi",
"empty": "Ni rezultatov",
"enable_x": "Omogoči",
"filters": "Filtri",
"fname": "Polno ime",
"gal": "Globalni seznam naslovov",
"goto_ham": "Uči se kot <b>ham</b>",
"goto_spam": "Uči se kot <b>spam</b>",
"hourly": "Urno",
"iam": "Ponudnik identitete",
"in_use": "V uporabi (%)",
"inactive": "Neaktivno",
"insert_preset": "Vstavi primer prednastavitve \"%s\"",
"last_modified": "Zadnja sprememba",
"last_pw_change": "Zadnja sprememba gesla",
"last_run_reset": "Načrtuj naslednje",
"mailbox": "Poštni nabiralnik",
"mailbox_defaults": "Privzete nastavitve",
"mailbox_defquota": "Privzeta velikost poštnega nabiralnika",
"mailbox_templates": "Predloge poštnih nabiralnikov",
"mailbox_quota": "Največja velikost poštnega nabiralnika",
"mailboxes": "Poštni nabiralniki",
"max_aliases": "Največje število vzdevkov",
"max_mailboxes": "Največje možno število poštnih predalov",
"max_quota": "Največja kvota na poštni predal",
"msg_num": "Sporočilo #",
"multiple_bookings": "Več rezervacij",
"never": "Nikoli",
"no": "&#10005;",
"no_record": "Ni zapisa za objekt %s",
"no_record_single": "Ni zapisa",
"open_logs": "Odpri dnevnike",
"owner": "Lastnik",
"private_comment": "Zasebni komentar",
"public_comment": "Javni komentar",
"q_add_header": "ko je premaknjeno v mapo Neželena pošta",
"q_reject": "ob zavrnitvi",
"quarantine_category": "Kategorija obvestil o karanteni",
"quarantine_notification": "Obvestila o karanteni",
"quick_actions": "Dejanja",
"recipient": "Prejemnik",
"recipient_map": "Zemljevid prejemnikov",
"recipient_map_new": "Nov prejemnik",
"recipient_map_old": "Prvotni prejemnik",
"recipient_maps": "Zemljevidi prejemnikov",
"relay_all": "Posreduj vsem prejemnikom",
"relay_unknown": "Posredovanje neznanih poštnih predalov",
"remove": "Odstrani",
"resources": "Viri",
"running": "V teku",
"sender": "Pošiljatelj",
"set_postfilter": "Označi kot postfilter",
"set_prefilter": "Označi kot predfilter",
"sieve_preset_1": "Zavrzi pošto z verjetno nevarnimi vrstami datotek",
"filter_table": "Filtriraj tabelo",
"excludes": "Izključuje",
"last_run": "Zadnji zagon",
"sieve_preset_2": "Vedno označi e-pošto določenega pošiljatelja kot videno",
"target_address": "Pojdi na naslov",
"syncjob_EXIT_TLS_FAILURE": "Težava s šifrirano povezavo",
"syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Ni mogoče vzpostaviti povezave z oddaljenim strežnikom",
"tls_map_parameters_info": "Prazno ali parametri, na primer: protocols=!SSLv2 ciphers=medium exclude=3DES",
"tls_policy_maps_enforced_tls": "Ti pravilniki bodo preglasili tudi vedenje uporabnikov poštnih predalov, ki vsiljujejo odhodne povezave TLS. Če spodaj ni pravilnika, bodo ti uporabniki uporabili privzete vrednosti, določene kot <code>smtp_tls_mandatory_protocols</code> in <code>smtp_tls_mandatory_ciphers</code>.",
"spam_aliases": "Začasni vzdevek",
"sieve_preset_3": "Tiho zavrzite, ustavite vso nadaljnjo obdelavo s presejanjem",
"sieve_preset_4": "Vloži v mapo PREJETO, preskoči nadaljnjo obdelavo s sitastimi filtri",
"sieve_preset_5": "Samodejni odzivnik (dopust)",
"sieve_preset_6": "Zavrni pošto z odgovorom",
"sieve_preset_7": "Preusmeritev in ohrani/opusti",
"sieve_preset_8": "Preusmeritev e-pošte od določenega pošiljatelja, označitev kot prebrano in razvrščanje v podmapo",
"sieve_preset_header": "Spodaj si oglejte primere prednastavitev. Za več podrobnosti glejte <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipedijo</a>.",
"sogo_visible": "Vzdevek je viden v SOGo",
"sogo_visible_n": "Skrij vzdevek v SOGo",
"sogo_visible_y": "Prikaži vzdevek v SOGo",
"stats": "Statistika",
"status": "Stanje",
"sync_jobs": "Sinhronizacija opravil",
"syncjob_check_log": "Preveri dnevnik",
"syncjob_last_run_result": "Rezultat zadnjega zagona",
"syncjob_EX_OK": "Uspešno",
"syncjob_EXIT_CONNECTION_FAILURE": "Težava s povezavo",
"syncjob_EXIT_AUTHENTICATION_FAILURE": "Težava z overjanjem",
"syncjob_EXIT_OVERQUOTA": "Ciljni poštni predal presega kvoto",
"table_size_show_n": "Prikaži %s elementov",
"target_domain": "Ciljna domena",
"template": "Predloga",
"tls_enforce_in": "Uveljavi dohodni TLS",
"tls_enforce_out": "Uveljavi odhodni TLS",
"tls_map_dest": "Cilj",
"tls_map_dest_info": "Primeri: example.org, .example.org, [mail.example.org]:25",
"tls_map_parameters": "Parametri",
"tls_map_policy": "Politika",
"tls_policy_maps": "Zemljevidi pravilnikov TLS",
"syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Napačno uporabniško ime ali geslo",
"templates": "Predloge",
"tls_policy_maps_long": "Preglasitve zemljevidov pravilnikov odhodnega TLS",
"table_size": "Velikost tabele",
"toggle_all": "Preklopi vse",
"username": "Uporabniško ime",
"waiting": "Čakanje",
"yes": "&#10003;",
"weekly": "Tedensko",
"sieve_info": "Na uporabnika lahko shranite več filtrov, vendar je lahko hkrati aktiven le en predfilter in en postfilter.<br>\nVsak filter bo obdelan v opisanem vrstnem redu. Niti neuspešen skript niti izdan ukaz »keep;« ne bosta ustavila obdelave nadaljnjih skript. Spremembe globalnih skriptov sita bodo sprožile ponovni zagon Dovecota.<br><br>Globalni predfilter sita &#8226; Predfilter &#8226; Uporabniški skripti &#8226; Postfilter &#8226; Globalni postfilter sita",
"tls_policy_maps_info": "Ta preslikava pravilnikov preglasi pravila odhodnega prenosa TLS neodvisno od uporabnikovih nastavitev pravilnikov TLS.<br>\n Za več informacij preverite <a href=\"http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps\" target=\"_blank\">dokumentacijo »smtp_tls_policy_maps«</a>."
},
"fido2": {
"known_ids": "Znani ID-ji",
"set_fido2_touchid": "Registrirajte Touch ID na Apple M1",
"confirm": "Potrdi",
"fido2_auth": "Prijava s FIDO2",
"fido2_success": "Naprava je bila uspešno registrirana",
"fido2_validation_failed": "Preverjanje ni uspelo",
"fn": "Prijazno ime",
"none": "Onemogočeno",
"register_status": "Status registracije",
"rename": "Preimenuj",
"set_fido2": "Registrirajte napravo FIDO2",
"set_fn": "Nastavi prijazno ime",
"start_fido2_validation": "Začni validacijo FIDO2"
},
"info": {
"session_expires": "Vaša seja bo potekla čez približno 15 sekund",
"awaiting_tfa_confirmation": "Čakam na potrditev TFA",
"no_action": "Ni veljavnih ukrepov"
},
"header": {
"administration": "Konfiguracija in podrobnosti",
"apps": "Aplikacije",
"debug": "Informacije",
"email": "E-pošta",
"mailcow_system": "Sistem",
"mailcow_config": "Konfiguracija",
"quarantine": "Karantena",
"restart_netfilter": "Znova zaženite omrežni filter",
"restart_sogo": "Znova zaženite SOGo",
"user_settings": "Uporabniške nastavitve"
},
"quarantine": {
"learn_spam_delete": "Uči se kot neželena pošta in izbriši",
"medium_danger": "Srednje",
"notified": "Obveščen",
"low_danger": "Nizko",
"qinfo": "Sistem karantene bo zavrnjeno pošto shranil v zbirko podatkov (pošiljatelj ne bo imel vtisa, da je bila pošta dostavljena), prav tako pa bo pošto, ki bo dostavljena kot kopija, shranil v mapo »Neželena pošta« v nabiralniku.\n<br>»Uči kot neželeno pošto in izbriši« bo sporočilo prepoznal kot neželeno pošto prek Bayesovega izreka in izračunal tudi mehke zgoščene vrednosti, da bi v prihodnje zavrnil podobna sporočila.\n<br>Upoštevajte, da je učenje več sporočil lahko odvisno od vašega sistema zamudno.<br>Elementi na črnem seznamu so izključeni iz karantene.",
"junk_folder": "Mapa z neželeno pošto",
"action": "Dejanje",
"atts": "Priloge",
"check_hash": "Iskanje zgoščene vrednosti datoteke @ VT",
"confirm": "Potrdi",
"confirm_delete": "Potrdite brisanje tega elementa.",
"danger": "Nevarnost",
"deliver_inbox": "Dostavi v mapo »Prejeto«",
"disabled_by_config": "Trenutna konfiguracija sistema onemogoča funkcionalnost karantene. Nastavite »število hranjenj na poštni predal« in »največjo velikost« za elemente karantene.",
"download_eml": "Prenesi (.eml)",
"empty": "Ni rezultatov",
"high_danger": "Visoko",
"info": "Informacija",
"neutral_danger": "Nevtralno",
"qhandler_success": "Zahteva je bila uspešno poslana v sistem. Zdaj lahko zaprete okno.",
"qid": "Rspamd QID",
"qitem": "Predmet iz karantene",
"spam_score": "Rezultat",
"text_from_html_content": "Vsebina (pretvorjen html)",
"quarantine": "Karantena",
"quick_delete_link": "Odpri povezavo za hitro brisanje",
"quick_info_link": "Odpri povezavo z informacijami",
"quick_release_link": "Odpri povezavo za hitro objavo",
"rcpt": "Prejemnik",
"received": "Prejeto",
"recipients": "Prejemniki",
"refresh": "Osveži",
"rejected": "Zavrnjeno",
"release": "Izdaja",
"release_body": "Vaše sporočilo smo priložili kot datoteko eml temu sporočilu.",
"release_subject": "Potencialno škodljiv predmet v karanteni %s",
"remove": "Odstrani",
"rewrite_subject": "Prepiši zadevo",
"rspamd_result": "Rezultat Rspamd",
"sender": "Pošiljatelj (SMTP)",
"sender_header": "Pošiljatelj (glava »Od«)",
"settings_info": "Največje število elementov za karanteno: %s<br>Največja velikost e-pošte: %s MiB",
"show_item": "Prikaži element",
"spam": "Neželena pošta",
"subj": "Zadeva",
"table_size": "Velikost tabele",
"table_size_show_n": "Prikaži %s elementov",
"text_plain_content": "Vsebina (besedilo/navadno)",
"toggle_all": "Preklopi vse",
"type": "Vrsta",
"quick_actions": "Dejanja"
},
"oauth2": {
"access_denied": "Za odobritev dostopa prek OAuth2 se prijavite kot lastnik poštnega predala.",
"authorize_app": "Avtorizacija aplikacije",
"deny": "Zavrni",
"permit": "Avtorizacija aplikacije",
"profile": "Profil",
"profile_desc": "Ogled osebnih podatkov: uporabniško ime, polno ime, ustvarjeno, spremenjeno, aktivno",
"scope_ask_permission": "Aplikacija je zahtevala naslednja dovoljenja"
},
"queue": {
"info": "Čakalna vrsta pošte vsebuje vsa e-poštna sporočila, ki čakajo na dostavo. Če je e-poštno sporočilo dlje časa obtičalo v čakalni vrsti, ga sistem samodejno izbriše.<br>Sporočilo o napaki ustreznega e-poštnega sporočila vsebuje informacije o tem, zakaj sporočila ni bilo mogoče dostaviti.",
"delete": "Izbriši vse",
"flush": "Izprazni čakalno vrsto",
"legend": "Funkcije dejanj čakalne vrste pošte:",
"ays": "Potrdite, da želite izbrisati vse elemente iz trenutne čakalne vrste.",
"deliver_mail": "Dostavi",
"deliver_mail_legend": "Poskusi ponovne dostave izbranih e-poštnih sporočil.",
"hold_mail": "Zadrži",
"hold_mail_legend": "Zadrži izbrano pošto. (Prepreči nadaljnje poskuse dostave)",
"queue_manager": "Upravitelj čakalnih vrst",
"show_message": "Prikaži sporočilo",
"unban": "odblokiraj čakalno vrsto",
"unhold_mail": "Nezadrži",
"unhold_mail_legend": "Sprosti izbrana sporočila za dostavo. (Zahteva predhodno zadržanje)"
},
"success": {
"eas_reset": "Naprave ActiveSync za uporabnika %s so bile ponastavljene",
"alias_added": "Dodan je bil vzdevek %s (%d)",
"app_passwd_added": "Dodano novo geslo za aplikacijo",
"domain_add_dkim_available": "Ključ DKIM je že obstajal",
"custom_login_modified": "Prilagoditev prijave je bila uspešno shranjena",
"rl_saved": "Omejitev hitrosti za objekt %s je shranjena",
"domain_admin_modified": "Spremembe skrbnika domene %s so bile shranjene",
"license_modified": "Spremembe licence so bile shranjene",
"pushover_settings_edited": "Nastavitve Pushoverja so bile uspešno nastavljene, preverite poverilnice.",
"mailbox_renamed": "Poštni nabiralnik je bil preimenovan iz %s v %s",
"recovery_email_sent": "E-poštno sporočilo za obnovitev je bilo poslano na %s",
"relayhost_removed": "Vnos na zemljevidu %s je bil odstranjen",
"acl_saved": "ACL za objekt %s shranjen",
"admin_added": "Dodan je bil skrbnik %s",
"admin_api_modified": "Spremembe API-ja so bile shranjene",
"admin_modified": "Spremembe skrbnika so bile shranjene",
"admin_removed": "Administrator %s je bil odstranjen",
"alias_domain_removed": "Vzdevek domene %s je bil odstranjen",
"alias_modified": "Spremembe vzdevka %s so bile shranjene",
"alias_removed": "Vzdevek %s je bil odstranjen",
"aliasd_added": "Dodan vzdevek domene %s",
"aliasd_modified": "Spremembe vzdevka domene %s so bile shranjene",
"app_links": "Shranjene spremembe povezav aplikacij",
"app_passwd_removed": "Odstranjen ID gesla za aplikacijo %s",
"bcc_deleted": "Vnosi na zemljevidu BCC so izbrisani: %s",
"bcc_edited": "Vnos na zemljevidu BCC %s je bil urejen",
"db_init_complete": "Inicializacija baze podatkov končana",
"delete_filter": "Izbrisani filtri ID %s",
"delete_filters": "Izbrisani filtri: %s",
"deleted_syncjob": "Izbrisan ID sinhronizacijskega opravila %s",
"deleted_syncjobs": "Izbrisana opravila sinhronizacije: %s",
"dkim_added": "Ključ DKIM %s je bil shranjen",
"dkim_duplicated": "Ključ DKIM za domeno %s je bil kopiran v %s",
"dkim_removed": "Ključ DKIM %s je bil odstranjen",
"domain_added": "Dodana domena %s",
"domain_admin_added": "Dodan je bil skrbnik domene %s",
"domain_admin_removed": "Skrbnik domene %s je bil odstranjen",
"domain_footer_modified": "Spremembe v nogi domene %s so bile shranjene",
"domain_modified": "Spremembe domene %s so bile shranjene",
"domain_removed": "Domena %s je bila odstranjena",
"dovecot_restart_success": "Dovecot je bil uspešno ponovno zagnan",
"f2b_banlist_refreshed": "ID seznama prepovedanih je bil uspešno osvežen.",
"f2b_modified": "Spremembe parametrov Fail2ban so bile shranjene",
"forwarding_host_added": "Dodan je bil posredovalni gostitelj %s",
"forwarding_host_removed": "Gostitelj za posredovanje %s je bil odstranjen",
"global_filter_written": "Filter je bil uspešno zapisan v datoteko",
"hash_deleted": "Zgoščena vrednost je izbrisana",
"iam_test_connection": "Povezava je bila uspešna",
"ip_check_opt_in_modified": "Preverjanje IP-ja je bilo uspešno shranjeno",
"item_deleted": "Element %s je bil uspešno izbrisan",
"items_deleted": "Element %s je bil uspešno izbrisan",
"items_released": "Izbrani elementi so bili izdani",
"logged_in_as": "Prijavljen kot %s",
"mailbox_added": "Dodan je bil poštni predal %s",
"mailbox_modified": "Spremembe poštnega nabiralnika %s so bile shranjene",
"mailbox_removed": "Poštni nabiralnik %s je bil odstranjen",
"nginx_reloaded": "Nginx je bil ponovno naložen",
"object_modified": "Spremembe objekta %s so bile shranjene",
"password_policy_saved": "Pravilnik o geslih je bil uspešno shranjen",
"password_changed_success": "Geslo je bilo uspešno spremenjeno",
"qlearn_spam": "Sporočilo z ID-jem %s je bilo prepoznano kot neželena pošta in izbrisano",
"queue_command_success": "Ukaz za čakalno vrsto je bil uspešno zaključen",
"recipient_map_entry_deleted": "ID zemljevida prejemnika %s je bil izbrisan",
"recipient_map_entry_saved": "Vnos zemljevida prejemnika »%s« je bil shranjen",
"relayhost_added": "Dodan je bil vnos na zemljevid %s",
"reset_main_logo": "Ponastavi na privzeti logotip",
"resource_added": "Dodan je bil vir %s",
"resource_modified": "Spremembe poštnega nabiralnika %s so bile shranjene",
"resource_removed": "Vir %s je bil odstranjen",
"rspamd_ui_pw_set": "Geslo uporabniškega vmesnika Rspamd je bilo uspešno nastavljeno",
"settings_map_added": "Dodan vnos nastavitev zemljevida",
"settings_map_removed": "Odstranjen ID zemljevida nastavitev %s",
"sogo_profile_reset": "Profil SOGo za uporabnika %s je bil ponastavljen",
"template_added": "Dodana predloga %s",
"template_modified": "Spremembe predloge %s so bile shranjene",
"template_removed": "ID predloge %s je bil izbrisan",
"tls_policy_map_entry_deleted": "ID zemljevida pravilnika TLS %s je bil izbrisan",
"tls_policy_map_entry_saved": "Vnos zemljevida pravilnika TLS »%s« je bil shranjen",
"ui_texts": "Shranjene spremembe besedil uporabniškega vmesnika",
"upload_success": "Datoteka je bila uspešno naložena",
"verified_fido2_login": "Preverjena prijava v FIDO2",
"verified_totp_login": "Preverjena prijava v TOTP",
"verified_webauthn_login": "Preverjena prijava v WebAuth",
"verified_yotp_login": "Preverjena prijava z enkratnim geslom Yubico",
"bcc_saved": "Vnos na zemljevidu BCC je shranjen",
"cors_headers_edited": "Nastavitve CORS so bile shranjene",
"item_released": "Izdan je bil element %s",
"saved_settings": "Shranjene nastavitve",
"learned_ham": "Uspešno naučen ID %s kot zaželjen"
},
"start": {
"imap_smtp_server_auth_info": "Prosimo, uporabite svoj celoten e-poštni naslov in mehanizem za preverjanje pristnosti PLAIN.<br>\nVaši podatki za prijavo bodo šifrirani z obveznim šifriranjem na strani strežnika.",
"help": "Prikaži/skrij ploščo s pomočjo"
},
"tfa": {
"api_register": "%s uporablja Yubico Cloud API. Pridobite API ključ za svoj ključ <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">tukaj</a>",
"authenticators": "Preverjevalniki pristnosti",
"confirm": "Potrdi",
"delete_tfa": "Onemogoči TFA",
"disable_tfa": "Onemogoči TFA do naslednje uspešne prijave",
"enter_qr_code": "Vaša koda TOTP, če vaša naprava ne more skenirati kod QR",
"error_code": "Koda napake",
"confirm_totp_token": "Spremembe potrdite z vnosom ustvarjenega žetona",
"tfa": "Dvofaktorska avtentikacija",
"webauthn": "Preverjanje pristnosti WebAuthn",
"none": "Deaktiviraj",
"init_webauthn": "Inicializacija, prosim počakajte...",
"key_id": "Identifikator za vašo napravo",
"key_id_totp": "Identifikator za vaš ključ",
"reload_retry": "- (če napaka vztraja, znova zaženite brskalnik)",
"scan_qr_code": "Prosimo, skenirajte naslednjo kodo z aplikacijo za preverjanje pristnosti ali jo vnesite ročno.",
"select": "Prosimo, izberite",
"set_tfa": "Nastavite metodo dvofaktorske avtentikacije",
"start_webauthn_validation": "Začni validacijo",
"tfa_token_invalid": "Žeton TFA neveljaven",
"totp": "Enkratno geslo na podlagi časa (Google Authenticator, Authy itd.)",
"u2f_deprecated": "Zdi se, da je bil vaš ključ registriran z zastarelo metodo U2F. Deaktivirali bomo dvofaktorsko overjanje in izbrisali vaš ključ.",
"u2f_deprecated_important": "Prosimo, registrirajte svoj ključ v skrbniški plošči z novo metodo WebAuthn.",
"waiting_usb_auth": "<i>Čakanje na napravo USB ...</i><br><br>Zdaj se dotaknite gumba na napravi USB.",
"waiting_usb_register": "<i>Čakanje na napravo USB ...</i><br><br>Vnesite svoje geslo zgoraj in potrdite registracijo tako, da tapnete gumb na napravi USB.",
"yubi_otp": "Avtentikacija z enkratnim geslom Yubico"
},
"ratelimit": {
"disabled": "Onemogočeno",
"second": "sporočil / sekundo",
"minute": "sporočil / minuto",
"hour": "sporočil / uro",
"day": "sporočil / dan"
},
"user": {
"create_syncjob": "Ustvari novo sinhronizacijsko opravilo",
"open_webmail_sso": "Spletna pošta",
"attribute": "Atribut",
"description": "Opis",
"direct_aliases_desc": "Na neposredne vzdevke vplivajo nastavitve filtra neželene pošte in pravilnika TLS.",
"direct_protocol_access": "Ta uporabnik poštnega predala ima <b>neposreden zunanji dostop</b> do naslednjih protokolov in aplikacij. To nastavitev nadzoruje vaš skrbnik. Za dostop do posameznih protokolov in aplikacij je mogoče ustvariti gesla za aplikacije.<br>Gumb »Spletna pošta« omogoča enotno prijavo v SOGo in je vedno na voljo.",
"shared_aliases_desc": "Na uporabniške nastavitve, kot sta filter neželene pošte ali pravilnik za šifriranje, ne vplivajo skupni vzdevki. Ustrezne filtre neželene pošte lahko nastavi le skrbnik kot pravilnik za celotno domeno.",
"force_pw_update": "Za dostop do storitev, povezanih s skupinsko programsko opremo, <b>morate</b> nastaviti novo geslo.",
"new_password": "Novo geslo",
"password_reset_info": "Če ni naveden e-poštni naslov za obnovitev gesla, te funkcije ni mogoče uporabiti.",
"pushover_sender_array": "Upoštevajte naslednje e-poštne naslove pošiljateljev <small>(ločeni z vejico)</small>",
"tag_help_explain": "V podmapi: pod mapo INBOX (\"INBOX/Facebook\") bo ustvarjena nova podmapa, poimenovana po oznaki.<br>\nV zadevi: ime oznake bo dodano pred zadevo e-poštnega sporočila, na primer: \"[Facebook] Moje novice\".",
"pushover_vars": "Če filter pošiljatelja ni definiran, bodo upoštevana vsa e-poštna sporočila.<br>Filtre regularnih izrazov in natančna preverjanja pošiljateljev je mogoče definirati posamično in bodo obravnavana zaporedno. Niso odvisna drug od drugega.<br>Uporabne spremenljivke za besedilo in naslov (upoštevajte pravilnike o varstvu podatkov)",
"quarantine_notification_info": "Ko je obvestilo poslano, bodo elementi označeni kot »obveščeni« in za ta določen element ne bodo poslana nobena nadaljnja obvestila.",
"verify": "Preveri",
"spamfilter_bl_desc": "E-poštni naslovi na črnem seznamu, ki jih <b>vedno</b> razvrstite kot neželeno pošto in zavrnete. Zavrnjena pošta <b>ne</b> bo kopirana v karanteno. Uporabite lahko nadomestne znake. Filter se uporabi samo za neposredne vzdevke (vzdevke z enim samim ciljnim nabiralnikom), izključujoč vseobsegajoče vzdevke in sam nabiralnik.",
"spamfilter_wl_desc": "E-poštni naslovi na belem seznamu so programirani tako, da se <b>nikoli</b> ne razvrstijo kot neželena pošta. Uporabijo se lahko nadomestni znaki. Filter se uporabi samo za neposredne vzdevke (vzdevke z enim samim ciljnim poštnim predalom), izključujoč vseobsegajoče vzdevke in sam poštni predal.",
"tls_policy_warning": "<strong>Opozorilo:</strong> Če se odločite za uveljavitev šifriranega prenosa pošte, lahko izgubite e-pošto.<br>Sporočila, ki ne ustrezajo pravilniku, bo poštni sistem zavrnil s popolno napako.<br>Ta možnost velja za vaš primarni e-poštni naslov (prijavno ime), vse naslove, izpeljane iz vzdevkov domen, in vzdevke, <b>ki imajo samo ta en poštni predal</b> kot cilj.",
"allowed_protocols": "Dovoljeni protokoli",
"title": "Naslov",
"action": "Dejanje",
"active": "Aktivno",
"active_sieve": "Aktiven filter",
"advanced_settings": "Napredne nastavitve",
"alias": "Vzdevek",
"alias_create_random": "Generiraj naključne vzdevke",
"alias_extend_all": "Podaljšaj vzdevek za 1 uro",
"alias_full_date": "d.m.Y, H:i:s T",
"alias_remove_all": "Odstrani vse vzdevke",
"alias_select_validity": "Obdobje veljavnosti",
"alias_time_left": "Preostali čas",
"alias_valid_until": "Veljavno do",
"aliases_also_send_as": "Pošiljanje je dovoljeno tudi kot uporabnik",
"aliases_send_as_all": "Ne preverjaj dostopa pošiljatelja za naslednje domene in njihove vzdevke",
"app_hint": "Gesla aplikacij so alternativna gesla za prijavo v IMAP, SMTP, CalDAV, CardDAV in EAS. Uporabniško ime ostane nespremenjeno. Spletna pošta SOGo ni na voljo prek gesel aplikacij.",
"app_name": "Ime aplikacije",
"app_passwds": "Gesla aplikacij",
"apple_connection_profile": "Profil povezave Apple",
"apple_connection_profile_complete": "Ta profil povezave vključuje parametre IMAP in SMTP ter poti CalDAV (koledarji) in CardDAV (stiki) za napravo Apple.",
"apple_connection_profile_mailonly": "Ta profil povezave vključuje konfiguracijske parametre IMAP in SMTP za napravo Apple.",
"apple_connection_profile_with_app_password": "Novo geslo za aplikacijo se ustvari in doda v profil, tako da pri nastavitvi naprave ni treba vnesti gesla. Datoteke ne delite, saj omogoča poln dostop do vašega nabiralnika.",
"authentication": "Avtentikacija",
"change_password": "Spremeni geslo",
"change_password_hint_app_passwords": "Vaš račun ima %d gesel aplikacij, ki ne bodo spremenjena. Če jih želite upravljati, odprite zavihek Gesla aplikacij.",
"clear_recent_successful_connections": "Jasno vidne uspešne povezave",
"client_configuration": "Prikaži vodnike za konfiguracijo e-poštnih odjemalcev in pametnih telefonov",
"create_app_passwd": "Ustvari geslo za aplikacijo",
"created_on": "Ustvarjeno dne",
"daily": "Dnevno",
"day": "dan",
"delete_ays": "Prosimo, potrdite postopek brisanja.",
"direct_aliases": "Neposredni vzdevki",
"eas_reset": "Ponastavi predpomnilnik naprave ActiveSync",
"eas_reset_help": "V mnogih primerih bo ponastavitev predpomnilnika naprave pomagala obnoviti pokvarjen profil ActiveSync.<br><b>Pozor:</b> Vsi elementi bodo ponovno preneseni!",
"eas_reset_now": "Ponastavi zdaj",
"edit": "Uredi",
"email": "E-pošta",
"email_and_dav": "E-pošta, koledarji in stiki",
"empty": "Ni rezultatov",
"encryption": "Šifriranje",
"excludes": "Izključuje",
"expire_in": "Poteče čez",
"fido2_webauthn": "FIDO2/WebAuthn",
"from": "od",
"generate": "ustvari",
"hour": "ura",
"hourly": "Urno",
"hours": "ure",
"in_use": "Uporabljeno",
"interval": "Interval",
"is_catch_all": "Vseobsegajoča povezava za domeno/e",
"last_mail_login": "Zadnja prijava v e-pošto",
"last_pw_change": "Zadnja sprememba gesla",
"last_run": "Zadnji zagon",
"last_ui_login": "Zadnja prijava v uporabniški vmesnik",
"loading": "Nalaganje ...",
"login_history": "Zgodovina prijav",
"mailbox": "Poštni nabiralnik",
"mailbox_details": "Podrobnosti",
"mailbox_general": "Splošno",
"mailbox_settings": "Nastavitve",
"messages": "sporočila",
"month": "mesec",
"months": "meseci",
"never": "Nikoli",
"new_password_repeat": "Potrditveno geslo (ponovite)",
"no_active_filter": "Ni aktivnega filtra",
"no_last_login": "Ni zadnjih podatkov za prijavo v uporabniški vmesnik",
"no_record": "Ni zapisa",
"open_logs": "Odpri dnevnike",
"overview": "Pregled",
"password": "Geslo",
"password_now": "Trenutno geslo (potrdite spremembe)",
"password_repeat": "Geslo (ponovite)",
"protocols": "Protokoli",
"pushover_evaluate_x_prio": "Eskalacija e-pošte z visoko prioriteto [<code>X-Priority: 1</code>]",
"pushover_info": "Nastavitve potisnih obvestil bodo veljale za vso čisto (ne neželeno) pošto, dostavljeno na <b>%s</b>, vključno z vzdevki (v skupni rabi, brez skupne rabe, označeni).",
"pushover_only_x_prio": "Upoštevaj samo pošto z visoko prioriteto [<code>X-Priority: 1</code>]",
"pushover_sender_regex": "Poišči ujemanje pošiljateljev z naslednjim regularnim izrazom",
"pushover_text": "Besedilo obvestila",
"pushover_title": "Naslov obvestila",
"pushover_sound": "Zvok",
"pushover_verify": "Preverite poverilnice",
"pw_recovery_email": "E-poštno sporočilo za obnovitev gesla",
"q_add_header": "Mapa z neželeno pošto",
"q_reject": "Zavrnjeno",
"quarantine_category": "Kategorija obvestil o karanteni",
"quarantine_category_info": "Kategorija obvestil »Zavrnjeno« vključuje zavrnjeno pošto, medtem ko »Mapa z neželeno pošto« obvesti uporabnika o e-pošti, ki je bila premaknjena v mapo z neželeno pošto.",
"quarantine_notification": "Obvestila o karanteni",
"recent_successful_connections": "Videne uspešne povezave",
"remove": "Odstrani",
"running": "V teku",
"save": "Shrani spremembe",
"save_changes": "Shrani spremembe",
"sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">Preverjanje pošiljatelja je onemogočeno</span>",
"shared_aliases": "Skupni vzdevki",
"show_sieve_filters": "Prikaži filter sita aktivnega uporabnika",
"sogo_profile_reset": "Ponastavi profil SOGo",
"sogo_profile_reset_help": "S tem boste uničili uporabnikov profil SOGo in <b>nepovratno izbrisali vse stike in podatke koledarja</b>.",
"sogo_profile_reset_now": "Ponastavi profil zdaj",
"spam_aliases": "Začasni vzdevki e-pošte",
"spam_score_reset": "Ponastavi na privzete nastavitve strežnika",
"spamfilter": "Filter neželene pošte",
"spamfilter_behavior": "Ocena",
"spamfilter_bl": "Črna lista",
"spamfilter_default_score": "Privzete vrednosti",
"spamfilter_green": "Zelena: to sporočilo ni neželena pošta",
"spamfilter_hint": "Prva vrednost opisuje »nizko oceno neželene pošte«, druga pa »visoko oceno neželene pošte«.",
"spamfilter_red": "Rdeča: To sporočilo je neželena pošta in ga bo strežnik zavrnil.",
"spamfilter_table_action": "Dejanje",
"spamfilter_table_add": "Dodaj element",
"spamfilter_table_domain_policy": "ni na voljo (pravilnik domene)",
"spamfilter_table_empty": "Ni podatkov za prikaz",
"spamfilter_table_remove": "odstrani",
"spamfilter_table_rule": "Pravilo",
"spamfilter_wl": "Bela lista",
"spamfilter_yellow": "Rumena: to sporočilo je morda neželena pošta, označeno bo kot neželena pošta in premaknjeno v mapo z neželeno pošto",
"status": "Stanje",
"sync_jobs": "Sinhronizacija opravil",
"syncjob_check_log": "Preveri dnevnik",
"syncjob_last_run_result": "Rezultat zadnjega zagona",
"syncjob_EXIT_CONNECTION_FAILURE": "Težava s povezavo",
"syncjob_EXIT_TLS_FAILURE": "Težava s šifrirano povezavo",
"syncjob_EXIT_AUTHENTICATION_FAILURE": "Težava z overjanjem",
"syncjob_EXIT_OVERQUOTA": "Ciljni poštni predal presega kvoto",
"syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Ni mogoče vzpostaviti povezave z oddaljenim strežnikom",
"syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Napačno uporabniško ime ali geslo",
"tag_handling": "Nastavitev obravnave označene pošte",
"tag_help_example": "Primer označenega e-poštnega naslova: jaz<b>+Facebook</b>@example.org",
"tag_in_none": "Ne naredi ničesar",
"tag_in_subfolder": "V podmapi",
"tag_in_subject": "V zadevi",
"text": "Besedilo",
"tfa_info": "Dvofaktorska avtentikacija pomaga zaščititi vaš račun. Če jo omogočite, boste za prijavo v aplikacije ali storitve, ki ne podpirajo dvofaktorske avtentikacije (npr. poštni odjemalci), potrebovali gesla za aplikacije.",
"tls_enforce_in": "Uveljavi dohodni TLS",
"tls_enforce_out": "Uveljavi odhodni TLS",
"tls_policy": "Pravilnik o šifriranju",
"user_settings": "Uporabniške nastavitve",
"username": "Uporabniško ime",
"value": "Vrednost",
"week": "teden",
"weekly": "Tedensko",
"weeks": "tedni",
"with_app_password": "z geslom za aplikacijo",
"year": "leto",
"years": "leta",
"waiting": "Čakanje",
"q_all": "Vse kategorije",
"syncjob_EX_OK": "Uspeh"
},
"warning": {
"cannot_delete_self": "Prijavljenega uporabnika ni mogoče izbrisati",
"domain_added_sogo_failed": "Domena je bila dodana, vendar ponovni zagon SOGo ni uspel. Preverite dnevnike strežnika.",
"dovecot_restart_failed": "Dovecota ni uspelo znova zagnati, preverite dnevnike.",
"fuzzy_learn_error": "Napaka učenja mehkega zgoščevanja: %s",
"hash_not_found": "Zgoščena vrednost ni bila najdena ali je bila že izbrisana",
"ip_invalid": "Preskočen neveljaven IP: %s",
"is_not_primary_alias": "Preskočen neprimarni vzdevek %s",
"no_active_admin": "Zadnjega aktivnega skrbnika ni mogoče deaktivirati",
"quota_exceeded_scope": "Kvota domene presežena: V tem obsegu domene je mogoče ustvariti le neomejeno število poštnih predalov.",
"session_token": "Neveljaven žeton obrazca: Neujemanje žetonov",
"session_ua": "Neveljaven žeton obrazca: Napaka pri preverjanju uporabniškega agenta"
}
}

View File

@@ -1309,4 +1309,4 @@
"q_reject": "Reddedildi",
"week": "Hafta"
}
}
}

View File

@@ -1307,4 +1307,4 @@
},
"collapse_all": "Згорнути все"
}
}
}

View File

@@ -108,7 +108,8 @@
"timeout2": "本地主机连接超时时间",
"username": "用户名",
"validate": "验证",
"validation_success": "验证成功"
"validation_success": "验证成功",
"dry": "模拟同步Dry run"
},
"admin": {
"access": "权限管理",
@@ -358,7 +359,53 @@
"ip_check_disabled": "IP 检查已禁用。你可透过以下路径启用<br> <strong>系统 > 配置 > 选项 > 页面自定义</strong>",
"queue_unban": "解除封禁",
"allowed_methods": "访问控制允许方式",
"allowed_origins": "访问控制允许原"
"allowed_origins": "访问控制允许原",
"iam": "身份识别提供者",
"iam_attribute_field": "Attribute 域",
"iam_authorize_url": "Authorization endpoint",
"iam_auth_flow": "认证流程",
"iam_basedn": "Base DN",
"iam_client_id": "客户端 ID",
"iam_client_secret": "客户端凭据",
"iam_client_scopes": "客户端 Scopes",
"iam_default_template": "默认模板",
"iam_default_template_description": "如果未为用户分配模板,则在创建邮箱时将使用默认模板,但在更新邮箱时不会使用默认模板。",
"iam_description": "配置外部认证提供者<br>如果已设置好属性映射,用户在首次登录时将会自动创建其 Mailbox。",
"iam_host": "Host",
"iam_host_info": "请输入一个或多个 LDAP 主机,使用英文逗号分隔。",
"iam_import_users": "导入用户",
"iam_mapping": "属性映射",
"iam_bindpass": "密码绑定Bind Password",
"iam_periodic_full_sync": "周期性全量同步",
"iam_port": "端口",
"iam_realm": "Realm",
"iam_redirect_url": "重定向 Url",
"iam_rest_flow": "Mailpassword 流程",
"iam_server_url": "服务器 Url",
"iam_sso": "单点登录SSO",
"iam_sync_interval": "同步/导入周期min",
"iam_test_connection": "测试连接",
"iam_token_url": "Token endpoint",
"iam_userinfo_url": "User info endpoint",
"iam_username_field": "Username 域",
"iam_binddn": "Bind DN",
"iam_use_ssl": "使用 SSL",
"iam_use_tls": "使用 StartTLS",
"iam_version": "版本",
"ignore_ssl_error": "忽略 SSL 错误",
"iam_auth_flow_info": "除了在单点登录SSO中使用的 Authorization Code 流程(在 Keycloak 中是标准流程之外mailcow 还支持使用 Credentials 的身份认证流程。Mailpassword 流程尝试通过 Keycloak 的 Admin REST API 验证用户凭据mailcow 会从 Keycloak 中的 <code>mailcow_password</code> 属性中获取哈希后的密码。",
"filter": "过滤",
"iam_extra_permission": "要使以下设置生效Keycloak 中的 mailcow 客户端需要一个 <code>服务账户Service account</code> 以及 <code>查看用户view-users</code> 的权限。",
"domainadmin_quicklink": "隐藏指向域管理员登陆页面的快捷链接",
"force_sso_text": "如果配置了外部的 OIDC 认证,这个选项隐藏默认的 mailcow 登陆界面只显示单点登录SSO的按钮",
"iam_login_provisioning": "登录时自动创建用户",
"login_page": "登陆页面",
"iam_use_ssl_info": "如果使用了 SSL且端口被设置为 389该端口将自动被覆盖为 636。",
"quicklink_text": "显示或隐藏登陆表单下面指向其他登陆页面的快捷链接",
"user_quicklink": "隐藏指向用户登陆页面的快捷链接",
"admin_quicklink": "隐藏指向管理员登陆页面的快捷链接",
"force_sso": "强制要求单点登录SSO",
"user_link": "自定义链接"
},
"danger": {
"access_denied": "访问被拒绝或者表单数据无效",
@@ -495,7 +542,11 @@
"webauthn_authenticator_failed": "找不到所选的 authenticator",
"webauthn_publickey_failed": "没有为选定的身份验证器保存公钥",
"webauthn_username_failed": "所选的 authenticator 属于另一个账户",
"demo_mode_enabled": "演示模式已开启"
"demo_mode_enabled": "演示模式已开启",
"generic_server_error": "服务器错误。请联系您的管理员。",
"authsource_in_use": "由于当前有一个或多个用户正在使用该身份提供者IDP因此无法更改或删除。",
"iam_test_connection": "连接失败",
"required_data_missing": "缺少需要的 %s 数据"
},
"debug": {
"chart_this_server": "图表 (此服务器)",
@@ -640,7 +691,7 @@
"sieve_desc": "简短描述",
"sieve_type": "过滤器类型",
"skipcrossduplicates": "跳过其他文件夹中已存在的邮件(保留已经存在的邮件)",
"sogo_access": "直接转发给 SOGo",
"sogo_access": "直接转 SOGo",
"sogo_access_info": "登录后,用户会自动跳转到 SOGo。",
"sogo_visible": "SOGo 显示的别名",
"sogo_visible_info": "此设置只影响 SOGo 上可显示的对象 (指向本地邮箱的共享或非共享别名地址)。如果设置为隐藏,则别名地址不会作为可选发件人的下拉项显示。",
@@ -744,7 +795,14 @@
"new_password_confirm": "确认新密码",
"reset_password": "重置密码",
"request_reset_password": "请求重置密码",
"invalid_pass_reset_token": "密码重置 token 无效或已过期。<br> 请重新获取新的密码重置链接。"
"invalid_pass_reset_token": "密码重置 token 无效或已过期。<br> 请重新获取新的密码重置链接。",
"login_user": "用户登录",
"login_dadmin": "域管理员登录",
"login_admin": "管理员登录",
"login_linkstext": "不是正确的登陆页面?",
"login_usertext": "以用户身份登陆",
"login_domainadmintext": "以域管理员身份登陆",
"login_admintext": "以管理员身份登陆"
},
"mailbox": {
"action": "操作",
@@ -848,7 +906,7 @@
"recipient_map": "收件人映射",
"recipient_map_info": "收件人映射用于在邮件被发送前替换收件人的地址。",
"recipient_map_new": "新收件人",
"recipient_map_new_info": "收件人必须为合法的邮地址。",
"recipient_map_new_info": "收件人映射的目标必须为合法的邮地址或域名。",
"recipient_map_old": "原收件人",
"recipient_map_old_info": "原收件人必须为合法的邮箱地址。",
"recipient_maps": "收件人映射",
@@ -919,7 +977,8 @@
"max_quota": "每个信箱的最大容量配额",
"relay_unknown": "转发未知信箱",
"templates": "模板",
"template": "模板"
"template": "模板",
"iam": "身份提供者IDP"
},
"oauth2": {
"access_denied": "请作为邮箱所有者登录以使用 OAuth2 授权。",
@@ -950,7 +1009,7 @@
"neutral_danger": "无危险等级",
"notified": "已发送通知",
"qhandler_success": "已成功向系统发送请求,现在你可以关闭这个窗口了。",
"qid": "Rspamd QID",
"qid": "Rspamd 队列IDQID",
"qinfo": "隔离系统会把已被拒绝接收的邮件以及作为拷贝发送到垃圾箱的邮件保存到数据库中 (发件人<em>不</em>会知道)。\r\n <br>\"学习为垃圾并删除\" 会根据贝叶斯定理将消息作为垃圾学习并计算其模糊特征以拒绝未来收到相似消息。\r\n <br>请注意,这取决于你的系统资源,学习多个消息可能会花费较长时间。<br>黑名单中项目会被隔离系统排除。",
"qitem": "隔离项目",
"quarantine": "隔离",
@@ -1097,7 +1156,9 @@
"recovery_email_sent": "重置邮件已发送至 %s",
"template_added": "新增了模板 %s",
"template_modified": "模板 %s 的修改已保存",
"template_removed": "模板 ID %s 已删除"
"template_removed": "模板 ID %s 已删除",
"iam_test_connection": "连接成功",
"custom_login_modified": "登陆选项保存成功"
},
"tfa": {
"api_register": "%s 使用了 Yubico Cloud API请<a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">在此</a>为你的密钥获取 API 密钥",
@@ -1292,7 +1353,11 @@
"password_reset_info": "如果不提供密码重置邮箱,此功能将无法使用。",
"pushover_sound": "声音",
"value": "值",
"attribute": "属性"
"attribute": "属性",
"protocols": "协议",
"authentication": "认证",
"tfa_info": "两步验证有助于保护您的账户安全。启用后,对于不支持两步验证的应用程序或服务(例如邮件客户端),需要使用应用专用密码进行登录。",
"overview": "概览"
},
"warning": {
"cannot_delete_self": "不能删除已登录的用户",
@@ -1332,4 +1397,4 @@
"loadingRecords": "加载中...",
"zeroRecords": "未找到符合条件的记录"
}
}
}

View File

@@ -1,5 +1,6 @@
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.user.inc.php';
if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'admin') {
header('Location: /admin/dashboard');

View File

@@ -94,7 +94,8 @@ elseif (isset($_SERVER['HTTP_X_ORIGINAL_URI']) && strcasecmp(substr($_SERVER['HT
!empty($email) &&
filter_var($email, FILTER_VALIDATE_EMAIL) &&
is_array($_SESSION[$session_var_user_allowed]) &&
in_array($email, $_SESSION[$session_var_user_allowed])
in_array($email, $_SESSION[$session_var_user_allowed]) &&
!$_SESSION['pending_pw_update']
) {
$username = $email;
$password = file_get_contents("/etc/sogo-sso/sogo-sso.pass");

View File

@@ -51,7 +51,41 @@
</div></p>
</form>
</div>
<legend>{{ lang.admin.app_links }}</legend><hr />
<legend style="padding-top:20px" unselectable="on">{{ lang.admin.login_page }}</legend><hr />
<div>
<form class="form" data-id="custom_login" role="form" method="post">
<p class="text-muted">{{ lang.admin.quicklink_text }}</p>
<div class="ms-2 mb-1">
<input class="form-check-input" type="checkbox" value="1" name="hide_user_quicklink" id="hide_user_quicklink" {% if custom_login.hide_user_quicklink == 1 %}checked{% endif %}>
<label class="form-check-label" for="hide_user_quicklink">
{{ lang.admin.user_quicklink|raw }}
</label>
</div>
<div class="ms-2 mb-1">
<input class="form-check-input" type="checkbox" value="1" name="hide_domainadmin_quicklink" id="hide_domainadmin_quicklink" {% if custom_login.hide_domainadmin_quicklink == 1 %}checked{% endif %}>
<label class="form-check-label" for="hide_domainadmin_quicklink">
{{ lang.admin.domainadmin_quicklink|raw }}
</label>
</div>
<div class="ms-2 mb-4">
<input class="form-check-input" type="checkbox" value="1" name="hide_admin_quicklink" id="hide_admin_quicklink" {% if custom_login.hide_admin_quicklink == 1 %}checked{% endif %}>
<label class="form-check-label" for="hide_admin_quicklink">
{{ lang.admin.admin_quicklink|raw }}
</label>
</div>
<p class="text-muted">{{ lang.admin.force_sso_text|raw }}</p>
<div class="ms-2 mb-4">
<input class="form-check-input" type="checkbox" value="1" name="force_sso" id="force_sso" {% if custom_login.force_sso == 1 %}checked{% endif %}>
<label class="form-check-label" for="force_sso">
{{ lang.admin.force_sso|raw }}
</label>
</div>
<p><div class="btn-group">
<button class="btn btn-sm btn-xs-half d-block d-sm-inline btn-success" data-action="edit_selected" data-item="admin" data-id="custom_login" data-reload="no" data-api-url='edit/custom_login' data-api-attr='{}' href="#"><i class="bi bi-check-lg"></i> {{ lang.admin.save }}</button>
</div></p>
</form>
</div>
<legend style="padding-top:20px">{{ lang.admin.app_links }}</legend><hr />
<p class="text-muted">{{ lang.admin.merged_vars_hint|raw }}</p>
<form class="form-inline" data-id="app_links" role="form" method="post">
<table class="table table-condensed" style="white-space: nowrap;" id="app_link_table">

View File

@@ -110,7 +110,7 @@
<p>
<span class="badge fs-7 bg-info d-block d-sm-inline-block">
<i class="bi bi-funnel-fill"></i>
<a href="https://bgp.he.net/ip/{{ active_ban.ip }}" target="_blank">
<a href="https://bgp.tools/prefix/{{ active_ban.ip }}" target="_blank">
{{ active_ban.network }}
</a>
({{ active_ban.banned_until }})
@@ -130,7 +130,7 @@
<p>
<span class="badge fs-7 bg-danger d-block d-sm-inline-block">
<i class="bi bi-funnel-fill"></i>
<a href="https://bgp.he.net/ip/{{ perm_ban.ip }}" target="_blank">
<a href="https://bgp.tools/prefix/{{ perm_ban.ip }}" target="_blank">
{{ perm_ban.network }}
</a>
</span>

View File

@@ -64,10 +64,42 @@
</div>
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<label class="control-label" for="iam_keycloak_redirecturl">{{ lang.admin.iam_redirect_url }}:</label>
<label class="control-label">{{ lang.admin.iam_redirect_url }}:</label>
</div>
<div class="col-12 col-md-9 col-lg-4">
<input type="text" class="form-control" id="iam_keycloak_redirecturl" name="redirect_url" value="{{ iam_settings.redirect_url }}" required>
<div class="row px-2 align-items-center">
<span class="col-10 p-0 pe-2">
<input type="text" class="form-control" name="redirect_url" value="{{ iam_settings.redirect_url }}" required>
</span>
<div class="col-2 p-0 d-flex">
<button class="btn btn-sm d-block d-sm-inline btn-secondary ms-auto iam_redirect_add_keycloak"><i class="bi bi-plus-lg"></i></button>
</div>
</div>
</div>
</div>
<div class="row mb-2" id="iam_keycloak_redirect_list">
<input type="hidden" name="redirect_url_extra" value="">
{% for key, url in iam_settings.redirect_url_extra %}
<div class="offset-md-3 col-12 col-md-9 col-lg-4 mb-2">
<div class="row px-2">
<div class="col-10 p-0 pe-2">
<input type="text" class="form-control me-2" name="redirect_url_extra" value="{{ iam_settings.redirect_url_extra[key] }}">
</div>
<div class="col-2 p-0 d-flex">
<button class="iam_keycloak_redirect_del btn btn-sm d-block d-sm-inline btn-secondary ms-auto"><i class="bi bi-x-lg"></i></button>
</div>
</div>
</div>
{% endfor %}
<div class="offset-md-3 col-12 col-md-9 col-lg-4 mb-2">
<div class="row px-2">
<div class="col-10 p-0 pe-2">
<input type="text" class="form-control me-2" name="redirect_url_extra" value="">
</div>
<div class="col-2 p-0 d-flex">
<button class="iam_keycloak_redirect_del btn btn-sm d-block d-sm-inline btn-secondary ms-auto"><i class="bi bi-x-lg"></i></button>
</div>
</div>
</div>
</div>
<div class="row mb-4">
@@ -187,6 +219,16 @@
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<label class="control-label">{{ lang.admin.iam_login_provisioning }}</label>
</div>
<div class="col-12 col-md-9">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" name="login_provisioning" value="1" {% if iam_settings.login_provisioning == 1 %}checked{% endif %}>
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<label class="control-label">{{ lang.admin.iam_periodic_full_sync }}</label>
@@ -274,10 +316,42 @@
</div>
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<label class="control-label" for="iam_redirect_url">{{ lang.admin.iam_redirect_url }}:</label>
<label class="control-label">{{ lang.admin.iam_redirect_url }}:</label>
</div>
<div class="col-12 col-md-9 col-lg-4">
<input type="text" class="form-control" id="iam_redirect_url" name="redirect_url" value="{{ iam_settings.redirect_url }}" required>
<div class="row px-2 align-items-center">
<span class="col-10 p-0 pe-2">
<input type="text" class="form-control" name="redirect_url" value="{{ iam_settings.redirect_url }}" required>
</span>
<div class="col-2 p-0 d-flex">
<button class="btn btn-sm d-block d-sm-inline btn-secondary ms-auto iam_redirect_add_generic"><i class="bi bi-plus-lg"></i></button>
</div>
</div>
</div>
</div>
<div class="row mb-2" id="iam_generic_redirect_list">
<input type="hidden" name="redirect_url_extra" value="">
{% for key, url in iam_settings.redirect_url_extra %}
<div class="offset-md-3 col-12 col-md-9 col-lg-4 mb-2">
<div class="row px-2">
<div class="col-10 p-0 pe-2">
<input type="text" class="form-control me-2" name="redirect_url_extra" value="{{ iam_settings.redirect_url_extra[key] }}">
</div>
<div class="col-2 p-0 d-flex">
<button class="iam_generic_redirect_del btn btn-sm d-block d-sm-inline btn-secondary ms-auto"><i class="bi bi-x-lg"></i></button>
</div>
</div>
</div>
{% endfor %}
<div class="offset-md-3 col-12 col-md-9 col-lg-4 mb-2">
<div class="row px-2">
<div class="col-10 p-0 pe-2">
<input type="text" class="form-control me-2" name="redirect_url_extra" value="">
</div>
<div class="col-2 p-0 d-flex">
<button class="iam_generic_redirect_del btn btn-sm d-block d-sm-inline btn-secondary ms-auto"><i class="bi bi-x-lg"></i></button>
</div>
</div>
</div>
</div>
<div class="row mb-4">
@@ -366,7 +440,7 @@
</div>
</div>
</div>
<div class="row mb-4">
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<label class="control-label">{{ lang.admin.ignore_ssl_error }}</label>
</div>
@@ -376,6 +450,16 @@
</div>
</div>
</div>
<div class="row mb-4">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<label class="control-label">{{ lang.admin.iam_login_provisioning }}</label>
</div>
<div class="col-12 col-md-9">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" name="login_provisioning" value="1" {% if iam_settings.login_provisioning == 1 %}checked{% endif %}>
</div>
</div>
</div>
<div class="row mt-4 mb-2">
<div class="offset-md-3 col-12 col-md-9 d-flex flex-wrap">
<div class="btn-group mb-2">
@@ -392,11 +476,11 @@
<input type="hidden" name="authsource" value="ldap">
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<i style="font-size: 16px; cursor: pointer;" class="bi bi-patch-question-fill m-2 ms-0" data-bs-toggle="tooltip" data-bs-html="true" data-bs-placement="bottom" title="{{ lang.admin.iam_host_info }}"></i>
<i style="font-size: 16px; cursor: pointer;" class="bi bi-patch-question-fill mx-2 ms-0" data-bs-toggle="tooltip" data-bs-html="true" data-bs-placement="bottom" title="{{ lang.admin.iam_host_info }}"></i>
<label class="control-label" for="iam_ldap_host">{{ lang.admin.iam_host }}:</label>
</div>
<div class="col-12 col-md-9 col-lg-4 d-flex">
<input type="text" class="form-control" id="iam_ldap_host" name="host" value="{{ iam_settings.host }}" required>
<input type="text" class="form-control" id="iam_ldap_host" name="host" value="{{ iam_settings.host }}" required>
</div>
</div>
<div class="row mb-2">
@@ -409,21 +493,37 @@
</div>
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<i style="font-size: 16px; cursor: pointer;" class="bi bi-patch-question-fill mx-2 ms-0" data-bs-toggle="tooltip" data-bs-html="true" data-bs-placement="bottom" title="{{ lang.admin.iam_use_ssl_info }}"></i>
<label class="control-label">{{ lang.admin.iam_use_ssl }}</label>
</div>
<div class="col-12 col-md-9">
<div class="col-12 col-md-9 d-flex align-items-center">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" name="use_ssl" value="1" {% if iam_settings.use_ssl == 1 %}checked{% endif %}>
<input class="form-check-input"
type="checkbox"
role="switch"
id="use_ssl"
name="use_ssl"
value="1"
onchange="if(this.checked) document.getElementById('use_tls').checked = false"
{% if iam_settings.use_ssl == 1 %}checked{% endif %}>
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<i style="font-size: 16px; cursor: pointer;" class="bi bi-patch-question-fill mx-2 ms-0" data-bs-toggle="tooltip" data-bs-html="true" data-bs-placement="bottom" title="{{ lang.admin.iam_use_tls_info }}"></i>
<label class="control-label">{{ lang.admin.iam_use_tls }}</label>
</div>
<div class="col-12 col-md-9">
<div class="col-12 col-md-9 d-flex align-items-center">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" name="use_tls" value="1" {% if iam_settings.use_tls == 1 %}checked{% endif %}>
<input class="form-check-input"
type="checkbox"
role="switch"
id="use_tls"
name="use_tls"
value="1"
onchange="if(this.checked) document.getElementById('use_ssl').checked = false"
{% if iam_settings.use_tls == 1 %}checked{% endif %}>
</div>
</div>
</div>
@@ -566,6 +666,16 @@
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<label class="control-label">{{ lang.admin.iam_login_provisioning }}</label>
</div>
<div class="col-12 col-md-9">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" name="login_provisioning" value="1" {% if iam_settings.login_provisioning == 1 %}checked{% endif %}>
</div>
</div>
</div>
<div class="row mb-2">
<div class="col-md-3 d-flex align-items-center justify-content-md-end">
<label class="control-label">{{ lang.admin.iam_periodic_full_sync }}</label>

View File

@@ -5,13 +5,28 @@
{% block content %}
<div class="row mb-4" style="margin-top: 60px">
<div class="col-12 col-md-7 col-lg-6 col-xl-5 ms-auto me-auto">
<div class="card">
<div class="card-header d-flex align-items-center">
<div class="card-header d-flex align-items-center text-break">
<i class="bi bi-person-fill me-2"></i> {{ lang.login.login_admin }}
<div class="ms-auto form-check form-switch my-auto d-flex align-items-center">
<label class="form-check-label"><i class="bi bi-moon-fill"></i></label>
<input class="form-check-input ms-2" type="checkbox" id="dark-mode-toggle">
</div>
<div class="ms-4 d-grid d-sm-block">
<button type="button" {% if available_languages|length == 1 %}disabled="true"{% endif %} class="text-secondary btn p-0 border-0 bg-transparent ms-auto dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="flag-icon flag-icon-{{ mailcow_locale[-2:] }}"></span>
</button>
<ul class="dropdown-menu ms-auto login">
{% for key, val in available_languages %}
<li>
<a class="dropdown-item {% if mailcow_locale == key %}active{% endif %}" href="?{{ query_string({'lang': key}) }}">
<span class="flag-icon flag-icon-{{ key[-2:] }}"></span>{{ val }}
</a>
</li>
{% endfor %}
</ul>
</div>
</div>
<div class="card-body">
<div class="text-center mailcow-logo mb-4">
@@ -37,23 +52,10 @@
</div>
</div>
<div class="d-flex justify-content-between mt-4" style="position: relative">
<button type="submit" class="btn btn-xs-lg btn-success" value="Login">{{ lang.login.login }}</button> <div class="d-grid d-sm-block">
<button type="button" {% if available_languages|length == 1 %}disabled="true"{% endif %} class="btn btn-secondary ms-auto dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="flag-icon flag-icon-{{ mailcow_locale[-2:] }}"></span>
</button>
<ul class="dropdown-menu ms-auto login">
{% for key, val in available_languages %}
<li>
<a class="dropdown-item {% if mailcow_locale == key %}active{% endif %}" href="?{{ query_string({'lang': key}) }}">
<span class="flag-icon flag-icon-{{ key[-2:] }}"></span>{{ val }}
</a>
</li>
{% endfor %}
</ul>
</div>
<button type="submit" class="btn btn-xs-lg btn-success w-100 mt-2 mx-auto" style="max-width: 400px;" value="Login">{{ lang.login.login }}</button>
</div>
</form>
<div class="hr-title mt-5"><strong>{{ lang.login.other_logins }}</strong></div>
<div class="hr-title"><strong>{{ lang.login.other_logins }}</strong></div>
<div class="d-flex flex-column align-items-center">
<a class="btn btn-xs-lg btn-secondary w-100" style="max-width: 400px;" href="#" id="fido2-login"><i class="bi bi-shield-fill-check"></i> {{ lang.login.fido2_webauthn }}</a>
</div>
@@ -86,6 +88,15 @@
{% endif %}
</div>
</div>
{% if custom_login.hide_user_quicklink != 1 or custom_login.hide_domainadmin_quicklink != 1 %}
<p class="text-center mt-3 text-muted" style="font-size: 0.9rem;">
{{ lang.login.login_linkstext }}<br>
{% if custom_login.hide_user_quicklink != 1 %}<a href="/">{{ lang.login.login_usertext }}</a>{% endif %}
{% if custom_login.hide_user_quicklink != 1 and custom_login.hide_domainadmin_quicklink != 1 %}|{% endif %}
{% if custom_login.hide_domainadmin_quicklink != 1 %}<a href="/domainadmin">{{ lang.login.login_domainadmintext }}</a>{% endif %}
</p>
{% endif %}
</div>
</div>
{% endblock %}

View File

@@ -5,13 +5,28 @@
{% block content %}
<div class="row mb-4" style="margin-top: 60px">
<div class="col-12 col-md-7 col-lg-6 col-xl-5 ms-auto me-auto">
<div class="card">
<div class="card-header d-flex align-items-center">
<div class="card-header d-flex align-items-center text-break">
<i class="bi bi-person-fill me-2"></i> {{ lang.login.login_dadmin }}
<div class="ms-auto form-check form-switch my-auto d-flex align-items-center">
<label class="form-check-label"><i class="bi bi-moon-fill"></i></label>
<input class="form-check-input ms-2" type="checkbox" id="dark-mode-toggle">
</div>
<div class="ms-4 d-grid d-sm-block">
<button type="button" {% if available_languages|length == 1 %}disabled="true"{% endif %} class="text-secondary btn p-0 border-0 bg-transparent ms-auto dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="flag-icon flag-icon-{{ mailcow_locale[-2:] }}"></span>
</button>
<ul class="dropdown-menu ms-auto login">
{% for key, val in available_languages %}
<li>
<a class="dropdown-item {% if mailcow_locale == key %}active{% endif %}" href="?{{ query_string({'lang': key}) }}">
<span class="flag-icon flag-icon-{{ key[-2:] }}"></span>{{ val }}
</a>
</li>
{% endfor %}
</ul>
</div>
</div>
<div class="card-body">
<div class="text-center mailcow-logo mb-4">
@@ -37,23 +52,10 @@
</div>
</div>
<div class="d-flex justify-content-between mt-4" style="position: relative">
<button type="submit" class="btn btn-xs-lg btn-success" value="Login">{{ lang.login.login }}</button> <div class="d-grid d-sm-block">
<button type="button" {% if available_languages|length == 1 %}disabled="true"{% endif %} class="btn btn-secondary ms-auto dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="flag-icon flag-icon-{{ mailcow_locale[-2:] }}"></span>
</button>
<ul class="dropdown-menu ms-auto login">
{% for key, val in available_languages %}
<li>
<a class="dropdown-item {% if mailcow_locale == key %}active{% endif %}" href="?{{ query_string({'lang': key}) }}">
<span class="flag-icon flag-icon-{{ key[-2:] }}"></span>{{ val }}
</a>
</li>
{% endfor %}
</ul>
</div>
<button type="submit" class="btn btn-xs-lg btn-success w-100 mt-2 mx-auto" style="max-width: 400px;" value="Login">{{ lang.login.login }}</button>
</div>
</form>
<div class="hr-title mt-5"><strong>{{ lang.login.other_logins }}</strong></div>
<div class="hr-title"><strong>{{ lang.login.other_logins }}</strong></div>
<div class="d-flex flex-column align-items-center">
<a class="btn btn-xs-lg btn-secondary w-100" style="max-width: 400px;" href="#" id="fido2-login"><i class="bi bi-shield-fill-check"></i> {{ lang.login.fido2_webauthn }}</a>
</div>
@@ -86,6 +88,15 @@
{% endif %}
</div>
</div>
{% if custom_login.hide_user_quicklink != 1 or custom_login.hide_admin_quicklink != 1 %}
<p class="text-center mt-3 text-muted" style="font-size: 0.9rem;">
{{ lang.login.login_linkstext }}<br>
{% if custom_login.hide_user_quicklink != 1 %}<a href="/">{{ lang.login.login_usertext }}</a>{% endif %}
{% if custom_login.hide_user_quicklink != 1 and custom_login.hide_admin_quicklink != 1 %}|{% endif %}
{% if custom_login.hide_admin_quicklink != 1 %}<a href="/admin">{{ lang.login.login_admintext }}</a>{% endif %}
</p>
{% endif %}
</div>
</div>
{% endblock %}

View File

@@ -184,7 +184,7 @@
</div>
{% endif %}
</div>
<div class="ms-auto col-xl-3 col-lg-5 col-md-12 col-12 d-flex flex-column well flex-grow-1">
<div class="ms-auto col-xl-3 col-lg-5 col-md-12 col-12 d-flex flex-column well flex-grow-1" id="recent-logins">
<legend class="d-flex">
<span>{{ lang.user.recent_successful_connections }}</span>
<div id="spinner-last-login" class="ms-auto my-auto spinner-border spinner-border-sm d-none" role="status">
@@ -192,7 +192,6 @@
</div>
</legend>
<hr>
<h6 class="last-ui-login"></h6>
<div class="d-flex">
<span class="clear-last-logins mt-auto mb-2">
{{ lang.user.clear_recent_successful_connections }}

View File

@@ -5,13 +5,30 @@
{% block content %}
<div class="row mb-4" style="margin-top: 60px">
<div class="col-12 col-md-7 col-lg-6 col-xl-5 ms-auto me-auto">
<div class="card">
<div class="card-header d-flex align-items-center">
<div class="card-header d-flex align-items-center text-break">
<i class="bi bi-person-fill me-2"></i> {{ lang.login.login_user }}
<div class="ms-auto form-check form-switch my-auto d-flex align-items-center">
<label class="form-check-label"><i class="bi bi-moon-fill"></i></label>
<input class="form-check-input ms-2" type="checkbox" id="dark-mode-toggle">
</div>
{% if not oauth2_request %}
<div class="ms-4 d-grid d-sm-block">
<button type="button" {% if available_languages|length == 1 %}disabled="true"{% endif %} class="text-secondary btn p-0 border-0 bg-transparent ms-auto dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="flag-icon flag-icon-{{ mailcow_locale[-2:] }}"></span>
</button>
<ul class="dropdown-menu ms-auto login">
{% for key, val in available_languages %}
<li>
<a class="dropdown-item {% if mailcow_locale == key %}active{% endif %}" href="?{{ query_string({'lang': key}) }}">
<span class="flag-icon flag-icon-{{ key[-2:] }}"></span>{{ val }}
</a>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
</div>
<div class="card-body">
<div class="text-center mailcow-logo mb-4">
@@ -25,6 +42,7 @@
{% if is_mobileconfig %}
<div class="my-4 alert alert-info ">{{ lang.login.mobileconfig_info }}</div>
{% endif %}
{% if custom_login.force_sso != 1 %}
<form method="post" autofill="off">
<div class="d-flex mt-3">
<label class="visually-hidden" for="login_user">{{ lang.login.username }}</label>
@@ -40,35 +58,22 @@
<input name="pass_user" type="password" id="pass_user" class="form-control" placeholder="{{ lang.login.password }}" required="" autocomplete="current-password">
</div>
</div>
<div class="mt-2 text-muted" style="font-size: 0.9rem;">
<a href="/reset-password">{{ lang.login.forgot_password }}</a>
</div>
<div class="d-flex justify-content-between mt-4" style="position: relative">
<button type="submit" class="btn btn-xs-lg btn-success" value="Login">{{ lang.login.login }}</button>
{% if not oauth2_request %}
<div class="d-grid d-sm-block">
<button type="button" {% if available_languages|length == 1 %}disabled="true"{% endif %} class="btn btn-secondary ms-auto dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="flag-icon flag-icon-{{ mailcow_locale[-2:] }}"></span>
</button>
<ul class="dropdown-menu ms-auto login">
{% for key, val in available_languages %}
<li>
<a class="dropdown-item {% if mailcow_locale == key %}active{% endif %}" href="?{{ query_string({'lang': key}) }}">
<span class="flag-icon flag-icon-{{ key[-2:] }}"></span>{{ val }}
</a>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
<button type="submit" class="btn btn-xs-lg btn-success w-100 mt-2 mx-auto" style="max-width: 400px;" value="Login">{{ lang.login.login }}</button>
</div>
</form>
<div class="mt-3">
<a href="/reset-password">{{ lang.login.forgot_password }}</a>
</div>
<div class="hr-title mt-5"><strong>{{ lang.login.other_logins }}</strong></div>
<div class="hr-title"><strong>{{ lang.login.other_logins }}</strong></div>
{% endif %}
<div class="d-flex flex-column align-items-center">
{% if has_iam_sso %}
<a class="btn btn-xs-lg btn-secondary w-100 mt-2" style="max-width: 400px;" href="/?iam_sso=1"><i class="bi bi-cloud-arrow-up-fill"></i> {{ lang.admin.iam_sso }}</a>
{% endif %}
{% if custom_login.force_sso != 1 %}
<a class="btn btn-xs-lg btn-secondary w-100 mt-2" style="max-width: 400px;" href="#" id="fido2-login"><i class="bi bi-shield-fill-check"></i> {{ lang.login.fido2_webauthn }}</a>
{% endif %}
</div>
{% if login_delay %}
<p><div class="my-4 alert alert-info">{{ lang.login.delayed|format(login_delay) }}</b></div></p>
@@ -96,9 +101,20 @@
{% endfor %}
{% endfor %}
</div>
<div>
</div>
{% endif %}
</div>
</div>
{% if custom_login.hide_admin_quicklink != 1 or custom_login.hide_domainadmin_quicklink != 1 %}
<p class="text-center mt-3 text-muted" style="font-size: 0.9rem;">
{{ lang.login.login_linkstext }}<br>
{% if custom_login.hide_admin_quicklink != 1 %}<a href="/admin">{{ lang.login.login_admintext }}</a>{% endif %}
{% if custom_login.hide_admin_quicklink != 1 and custom_login.hide_domainadmin_quicklink != 1 %}|{% endif %}
{% if custom_login.hide_domainadmin_quicklink != 1 %}<a href="/domainadmin">{{ lang.login.login_domainadmintext }}</a>{% endif %}
</p>
{% endif %}
</div>
</div>
{% if not oauth2_request and ui_texts.help_text %}

View File

@@ -24,7 +24,7 @@ services:
stop_grace_period: 45s
volumes:
- mysql-vol-1:/var/lib/mysql/
- mysql-socket-vol-1:/var/run/mysqld/
- mysql-socket-vol-1:/var/run/mysqld/:z
- ./data/conf/mysql/:/etc/mysql/conf.d/:ro,Z
environment:
- TZ=${TZ}
@@ -84,7 +84,7 @@ services:
- clamd
rspamd-mailcow:
image: ghcr.io/mailcow/rspamd:2.1
image: ghcr.io/mailcow/rspamd:2.2
stop_grace_period: 30s
depends_on:
- dovecot-mailcow
@@ -134,7 +134,7 @@ services:
- ./data/web/inc/functions.ratelimit.inc.php:/mailcowauth/functions.ratelimit.inc.php:z
- ./data/web/inc/functions.acl.inc.php:/mailcowauth/functions.acl.inc.php:z
- rspamd-vol-1:/var/lib/rspamd
- mysql-socket-vol-1:/var/run/mysqld/
- mysql-socket-vol-1:/var/run/mysqld/:z
- ./data/conf/sogo/:/etc/sogo/:z
- ./data/conf/rspamd/meta_exporter:/meta_exporter:ro,z
- ./data/conf/phpfpm/crons:/crons:z
@@ -176,6 +176,7 @@ services:
- COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-mailcow-dockerized}
- SKIP_FTS=${SKIP_FTS:-y}
- SKIP_CLAMD=${SKIP_CLAMD:-n}
- SKIP_OLEFY=${SKIP_OLEFY:-n}
- SKIP_SOGO=${SKIP_SOGO:-n}
- ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n}
- MASTER=${MASTER:-y}
@@ -199,7 +200,7 @@ services:
- phpfpm
sogo-mailcow:
image: ghcr.io/mailcow/sogo:1.131
image: ghcr.io/mailcow/sogo:1.133
environment:
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
@@ -229,7 +230,7 @@ services:
- ./data/conf/sogo/custom-fulllogo.png:/usr/lib/GNUstep/SOGo/WebServerResources/img/sogo-logo.png:z
- ./data/conf/sogo/custom-theme.js:/usr/lib/GNUstep/SOGo/WebServerResources/js/theme.js:z
- ./data/conf/sogo/custom-sogo.js:/usr/lib/GNUstep/SOGo/WebServerResources/js/custom-sogo.js:z
- mysql-socket-vol-1:/var/run/mysqld/
- mysql-socket-vol-1:/var/run/mysqld/:z
- sogo-web-vol-1:/sogo_web
- sogo-userdata-backup-vol-1:/sogo_backup
labels:
@@ -250,7 +251,7 @@ services:
- sogo
dovecot-mailcow:
image: ghcr.io/mailcow/dovecot:2.33
image: ghcr.io/mailcow/dovecot:2.34
depends_on:
- mysql-mailcow
- netfilter-mailcow
@@ -271,7 +272,7 @@ services:
- ./data/conf/rspamd/custom/:/etc/rspamd/custom:z
- ./data/assets/templates:/templates:z
- rspamd-vol-1:/var/lib/rspamd
- mysql-socket-vol-1:/var/run/mysqld/
- mysql-socket-vol-1:/var/run/mysqld/:z
environment:
- DOVECOT_MASTER_USER=${DOVECOT_MASTER_USER:-}
- DOVECOT_MASTER_PASS=${DOVECOT_MASTER_PASS:-}
@@ -350,7 +351,7 @@ services:
- postfix-vol-1:/var/spool/postfix
- crypt-vol-1:/var/lib/zeyple
- rspamd-vol-1:/var/lib/rspamd
- mysql-socket-vol-1:/var/run/mysqld/
- mysql-socket-vol-1:/var/run/mysqld/:z
environment:
- LOG_LINES=${LOG_LINES:-9999}
- TZ=${TZ}
@@ -439,12 +440,11 @@ services:
condition: service_started
unbound-mailcow:
condition: service_healthy
image: ghcr.io/mailcow/acme:1.92
image: ghcr.io/mailcow/acme:1.93
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}
@@ -469,7 +469,7 @@ services:
- ./data/web/.well-known/acme-challenge:/var/www/acme:z
- ./data/assets/ssl:/var/lib/acme/:z
- ./data/assets/ssl-example:/var/lib/ssl-example/:ro,Z
- mysql-socket-vol-1:/var/run/mysqld/
- mysql-socket-vol-1:/var/run/mysqld/:z
restart: always
networks:
mailcow-network:
@@ -477,7 +477,7 @@ services:
- acme
netfilter-mailcow:
image: ghcr.io/mailcow/netfilter:1.62
image: ghcr.io/mailcow/netfilter:1.61
stop_grace_period: 30s
restart: always
privileged: true
@@ -497,14 +497,14 @@ services:
- /lib/modules:/lib/modules:ro
watchdog-mailcow:
image: ghcr.io/mailcow/watchdog:2.07
image: ghcr.io/mailcow/watchdog:2.08
dns:
- ${IPV4_NETWORK:-172.22.1}.254
tmpfs:
- /tmp
volumes:
- rspamd-vol-1:/var/lib/rspamd
- mysql-socket-vol-1:/var/run/mysqld/
- mysql-socket-vol-1:/var/run/mysqld/:z
- postfix-vol-1:/var/spool/postfix
- ./data/assets/ssl:/etc/ssl/mail/:ro,z
restart: always
@@ -538,6 +538,7 @@ services:
- IP_BY_DOCKER_API=${IP_BY_DOCKER_API:-0}
- CHECK_UNBOUND=${CHECK_UNBOUND:-1}
- SKIP_CLAMD=${SKIP_CLAMD:-n}
- SKIP_OLEFY=${SKIP_OLEFY:-n}
- SKIP_LETS_ENCRYPT=${SKIP_LETS_ENCRYPT:-n}
- SKIP_SOGO=${SKIP_SOGO:-n}
- HTTPS_PORT=${HTTPS_PORT:-443}
@@ -589,7 +590,7 @@ services:
- dockerapi
olefy-mailcow:
image: ghcr.io/mailcow/olefy:1.14
image: ghcr.io/mailcow/olefy:1.15
restart: always
environment:
- TZ=${TZ}
@@ -601,6 +602,7 @@ services:
- OLEFY_LOGLVL=20
- OLEFY_MINLENGTH=500
- OLEFY_DEL_TMP=1
- SKIP_OLEFY=${SKIP_OLEFY:-n}
networks:
mailcow-network:
aliases:

View File

@@ -382,6 +382,10 @@ SKIP_UNBOUND_HEALTHCHECK=n
SKIP_CLAMD=${SKIP_CLAMD}
# Skip Olefy (olefy-mailcow) anti-virus for Office documents (Rspamd will auto-detect a missing Olefy container) - y/n
SKIP_OLEFY=n
# Skip SOGo: Will disable SOGo integration and therefore webmail, DAV protocols and ActiveSync support (experimental, unsupported, not fully implemented) - y/n
SKIP_SOGO=n
@@ -494,13 +498,6 @@ DOVECOT_MASTER_USER=
# LEAVE EMPTY IF UNSURE
DOVECOT_MASTER_PASS=
# Let's Encrypt registration contact information
# Optional: Leave empty for none
# This value is only used on first order!
# Setting it at a later point will require the following steps:
# https://docs.mailcow.email/troubleshooting/debug-reset_tls/
ACME_CONTACT=
# WebAuthn device manufacturer verification
# After setting WEBAUTHN_ONLY_TRUSTED_VENDORS=y only devices from trusted manufacturers are allowed
# root certificates can be placed for validation under mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates

View File

@@ -236,7 +236,7 @@ function restore() {
if [[ $(find "${RESTORE_LOCATION}" \( -name '*x86*' -o -name '*aarch*' \) -exec basename {} \; | sed 's/^\.//' | sed 's/^\.//') == "" ]]; then
echo -e "\e[33mCould not find a architecture signature of the loaded backup... Maybe the backup was done before the multiarch update?"
sleep 2
echo -e "Continuing anyhow. If rspamd is crashing opon boot try remove the rspamd volume with docker volume rm ${CMPS_PRJ}_rspamd-vol-1 after you've stopped the stack.\e[0m"
echo -e "Continuing anyhow. If rspamd is crashing upon boot try remove the rspamd volume with docker volume rm ${CMPS_PRJ}_rspamd-vol-1 after you've stopped the stack.\e[0m"
sleep 2
docker stop $(docker ps -qf name=rspamd-mailcow)
docker run -i --name mailcow-backup --rm \

View File

@@ -323,6 +323,7 @@ adapt_new_options() {
"WATCHDOG_EXTERNAL_CHECKS"
"WATCHDOG_SUBJECT"
"SKIP_CLAMD"
"SKIP_OLEFY"
"SKIP_IP_CHECK"
"ADDITIONAL_SAN"
"DOVEADM_PORT"
@@ -352,7 +353,6 @@ adapt_new_options() {
"DOVECOT_MASTER_PASS"
"MAILCOW_PASS_SCHEME"
"ADDITIONAL_SERVER_NAMES"
"ACME_CONTACT"
"WATCHDOG_VERBOSE"
"WEBAUTHN_ONLY_TRUSTED_VENDORS"
"SPAMHAUS_DQS_KEY"
@@ -598,16 +598,6 @@ adapt_new_options() {
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} == "ACME_CONTACT" ]]; then
if ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
echo '# Lets Encrypt registration contact information' >> mailcow.conf
echo '# Optional: Leave empty for none' >> mailcow.conf
echo '# This value is only used on first order!' >> mailcow.conf
echo '# Setting it at a later point will require the following steps:' >> mailcow.conf
echo '# https://docs.mailcow.email/troubleshooting/debug-reset_tls/' >> mailcow.conf
echo 'ACME_CONTACT=' >> mailcow.conf
fi
elif [[ ${option} == "WEBAUTHN_ONLY_TRUSTED_VENDORS" ]]; then
if ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
@@ -760,6 +750,27 @@ detect_major_update() {
fi
}
remove_obsolete_options() {
OBSOLETE_OPTIONS=(
"ACME_CONTACT"
)
for option in "${OBSOLETE_OPTIONS[@]}"; do
if [[ "$option" == "ACME_CONTACT" ]]; then
sed -i '/^# Lets Encrypt registration contact information/d' mailcow.conf
sed -i "/^# Let's Encrypt registration contact information/d" mailcow.conf
sed -i '/^# Optional: Leave empty for none/d' mailcow.conf
sed -i '/^# This value is only used on first order!/d' mailcow.conf
sed -i '/^# Setting it at a later point will require the following steps:/d' mailcow.conf
sed -i '/^# https:\/\/docs.mailcow.email\/troubleshooting\/debug-reset_tls\//d' mailcow.conf
sed -i '/^ACME_CONTACT=.*/d' mailcow.conf
sed -i '/^#ACME_CONTACT=.*/d' mailcow.conf
else
sed -i "/^${option}=.*/d" mailcow.conf
sed -i "/^#${option}=.*/d" mailcow.conf
fi
done
}
############## End Function Section ##############
# Check permissions
@@ -967,6 +978,7 @@ CONFIG_ARRAY=(
"WATCHDOG_EXTERNAL_CHECKS"
"WATCHDOG_SUBJECT"
"SKIP_CLAMD"
"SKIP_OLEFY"
"SKIP_IP_CHECK"
"ADDITIONAL_SAN"
"AUTODISCOVER_SAN"
@@ -994,7 +1006,6 @@ CONFIG_ARRAY=(
"DOVECOT_MASTER_PASS"
"MAILCOW_PASS_SCHEME"
"ADDITIONAL_SERVER_NAMES"
"ACME_CONTACT"
"WATCHDOG_VERBOSE"
"WEBAUTHN_ONLY_TRUSTED_VENDORS"
"SPAMHAUS_DQS_KEY"
@@ -1230,17 +1241,6 @@ for option in "${CONFIG_ARRAY[@]}"; do
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"
echo '# Lets Encrypt registration contact information' >> mailcow.conf
echo '# Optional: Leave empty for none' >> mailcow.conf
echo '# This value is only used on first order!' >> mailcow.conf
echo '# Setting it at a later point will require the following steps:' >> mailcow.conf
echo '# https://docs.mailcow.email/troubleshooting/debug-reset_tls/' >> mailcow.conf
echo 'ACME_CONTACT=' >> mailcow.conf
fi
elif [[ "${option}" == "WEBAUTHN_ONLY_TRUSTED_VENDORS" ]]; then
if ! grep -q "${option}" mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
@@ -1278,6 +1278,18 @@ for option in "${CONFIG_ARRAY[@]}"; do
echo '# CAUTION: Disabling this may expose container ports to other neighbors on the same subnet, even if the ports are bound to localhost' >> mailcow.conf
echo 'DISABLE_NETFILTER_ISOLATION_RULE=n' >> mailcow.conf
fi
elif [[ "${option}" == "SKIP_CLAMD" ]]; then
if ! grep -q "${option}" mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
echo '# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n' >> mailcow.conf
echo 'SKIP_CLAMD=n' >> mailcow.conf
fi
elif [[ "${option}" == "SKIP_OLEFY" ]]; then
if ! grep -q "${option}" mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
echo '# Skip Olefy (olefy-mailcow) anti-virus for Office documents (Rspamd will auto-detect a missing Olefy container) - y/n' >> mailcow.conf
echo 'SKIP_OLEFY=n' >> mailcow.conf
fi
elif [[ "${option}" == "REDISPASS" ]]; then
if ! grep -q "${option}" mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
@@ -1474,6 +1486,7 @@ done
[[ -f data/conf/nginx/ZZZ-ejabberd.conf ]] && rm data/conf/nginx/ZZZ-ejabberd.conf
migrate_solr_config_options
adapt_new_options
remove_obsolete_options
# Silently fixing remote url from andryyy to mailcow
# git remote set-url origin https://github.com/mailcow/mailcow-dockerized