Compare commits

...

73 Commits

Author SHA1 Message Date
Patrick Schult
36b5cccd18 Merge pull request #5819 from mailcow/staging
2024-04
2024-04-04 08:50:58 +02:00
Patrick Schult
9decfa9c31 Merge pull request #5818 from mailcow/fix/web
[Web] fix exception handler and rspamd_maps function
2024-04-04 08:19:58 +02:00
FreddleSpl0it
3aee2b6cf5 [Web] use SEC_FETCH_DEST header instead of Referer to block api requests 2024-04-03 11:43:48 +02:00
Patrick Schult
17d797cee4 Merge pull request #5751 from mailcow/fix/rspamd-rewrite-ct
[Rspamd] milter update Content-Type and Content-Transfer-Encoding header
2024-04-03 10:49:21 +02:00
Patrick Schult
75550eeea3 Merge pull request #5812 from mailcow/limit-local-addrs
[Rspamd] Set local_addrs lo mailcow networks
2024-04-03 10:48:46 +02:00
FreddleSpl0it
0d09c86c12 [Web] fix invalid rspamd map check 2024-04-03 10:08:18 +02:00
FreddleSpl0it
2db8f482db [Web] escape html of alert messages 2024-04-03 10:07:36 +02:00
FreddleSpl0it
00d4b32a1b [Web] deny api calls from sogo 2024-04-03 10:06:43 +02:00
milkmaker
8a82bab1f3 [Web] Updated lang.tr-tr.json (#5815)
Co-authored-by: Uğurcan Albayrak <canalbayrakugur@gmail.com>
2024-04-02 18:04:30 +02:00
milkmaker
237a25e6b0 update postscreen_access.cidr (#5811) 2024-04-02 02:20:31 +02:00
milkmaker
5dc836671d [Web] Updated lang.tr-tr.json (#5813)
[Web] Updated lang.tr-tr.json

Co-authored-by: Uğurcan Albayrak <canalbayrakugur@gmail.com>
Co-authored-by: evrenkoksal <evrenkoksal@gmail.com>
2024-04-01 21:57:15 +02:00
Dmitriy Alekseev
26be1cb602 Set local_addrs in Rspamd 2024-04-01 11:28:06 +03:00
yvan-algoo
dc7a48cbf9 Update French translation (#5805)
* Fix some typo in French translation

* Fix typo error introduced in last commit

* Fixed another typo introduced in my first commit
2024-03-30 01:10:12 +01:00
milkmaker
52455be815 Translations update from Weblate (#5810)
* [Web] Updated lang.lt-lt.json

[Web] Updated lang.lt-lt.json

[Web] Updated lang.lt-lt.json

[Web] Updated lang.lt-lt.json

[Web] Updated lang.lt-lt.json

[Web] Updated lang.lt-lt.json

[Web] Added lang.lt-lt.json

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

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

[Web] Updated lang.lv-lv.json

[Web] Updated lang.lv-lv.json

[Web] Updated lang.lv-lv.json

Co-authored-by: Edgars Andersons <Edgars+Mailcow+Weblate@gaitenis.id.lv>
Co-authored-by: Edgars Počs <edgars.pocs@dna.lv>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

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

[Web] Updated lang.tr-tr.json

[Web] Updated lang.tr-tr.json

[Web] Updated lang.tr-tr.json

[Web] Updated lang.tr-tr.json

[Web] Updated lang.tr-tr.json

Co-authored-by: evrenkoksal <evrenkoksal@gmail.com>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* Add lt-lt in vars.inc.php

---------

Co-authored-by: Ari Archer <ari@ari.lt>
Co-authored-by: Peter <magic@kthx.at>
Co-authored-by: Edgars Andersons <Edgars+Mailcow+Weblate@gaitenis.id.lv>
Co-authored-by: Edgars Počs <edgars.pocs@dna.lv>
Co-authored-by: evrenkoksal <evrenkoksal@gmail.com>
2024-03-30 01:09:22 +01:00
Niklas Meyer
bbbdcfb625 Merge pull request #5743 from mailcow/fix-5742
Remove one GmbH in Dockerfiles
2024-03-20 09:37:45 +01:00
Niklas Meyer
b054a57e16 Merge pull request #5770 from mailcow/update/postscreen_access.cidr
[Postfix] update postscreen_access.cidr
2024-03-19 10:19:54 +01:00
aaadddfgh
fd73b3ad88 Update lang.zh-cn.json (#5789)
Change a better translation
2024-03-13 15:53:37 +01:00
milkmaker
8c0637b556 [Web] Updated lang.lv-lv.json (#5777)
Co-authored-by: Edgars Andersons <Edgars+Mailcow+Weblate@gaitenis.id.lv>
2024-03-05 17:57:55 +01:00
DerLinkman
d92ffe8fc7 helper: remove old SOGo repo to not break builds on ARM64 2024-03-01 11:41:11 +01:00
milkmaker
e0eb3a4f13 update postscreen_access.cidr 2024-03-01 00:14:54 +00:00
Niklas Meyer
1fb0060a73 Merge pull request #5765 from mailcow/feat/sogo-5.10
sogo: upgrade to 5.10.0
2024-02-27 08:22:19 +01:00
DerLinkman
d7430bf516 sogo: add new options to sogo.conf for update 5.10.0 2024-02-26 17:17:34 +01:00
DerLinkman
35f039a119 sogo: update to 5.10.0 2024-02-26 16:55:13 +01:00
milkmaker
79432a40d7 Translations update from Weblate (#5762)
* [Web] Updated lang.es-es.json

Co-authored-by: Fernando Dilland <fernandodilland@gmail.com>

* [Web] Updated lang.nb-no.json

Co-authored-by: Christer Solstrand Johannessen <csjoh@users.noreply.translate.mailcow.email>

---------

Co-authored-by: Fernando Dilland <fernandodilland@gmail.com>
Co-authored-by: Christer Solstrand Johannessen <csjoh@users.noreply.translate.mailcow.email>
2024-02-25 19:51:57 +01:00
FreddleSpl0it
98cdb95bc0 [Rspamd] milter update Content-Type and Content-Transfer-Encoding header after need_rewrite_ct 2024-02-19 11:20:19 +01:00
renovate[bot]
6f4720e1ea chore(deps): update thollander/actions-comment-pull-request action to v2.5.0 (#5747) 2024-02-17 11:42:30 +01:00
Peter
6a807b7799 Remove one GmbH 2024-02-15 17:43:01 +01:00
Patrick Schult
8d4ef147d2 Merge pull request #5741 from mailcow/staging
2024-02
2024-02-15 11:27:09 +01:00
milkmaker
8ed6217d1c Translations update from Weblate (#5740)
* [Web] Language file updated by 'Cleanup translation files' addon

[Web] Updated lang.it-it.json

ui: fixed broken Links to docs

ui: fix wrong docs links

Co-authored-by: DerLinkman <niklas.meyer@servercow.de>
Co-authored-by: Michele Caputo <michele@caputoweb.xyz>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Language file updated by 'Cleanup translation files' addon

Co-authored-by: milkmaker <milkmaker@mailcow.de>

---------

Co-authored-by: DerLinkman <niklas.meyer@servercow.de>
Co-authored-by: Michele Caputo <michele@caputoweb.xyz>
2024-02-14 20:11:51 +01:00
milkmaker
7dae4a976d Translations update from Weblate (#5732)
* ui: fix wrong docs links

* ui: fixed broken Links to docs

* [Web] Updated lang.nb-no.json

[Web] Updated lang.nb-no.json

[Web] Updated lang.nb-no.json

[Web] Added lang.nb-no.json

Co-authored-by: Christer Solstrand Johannessen <csjoh@users.noreply.translate.mailcow.email>
Co-authored-by: Peter <magic@kthx.at>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

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

[Web] Updated lang.fr-fr.json

Co-authored-by: Alix ANNERAUD <alix.anneraud@outlook.fr>
Co-authored-by: William Blondel <contact@williamblondel.fr>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

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

Co-authored-by: Michele Caputo <michele@caputoweb.xyz>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

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

Co-authored-by: BallBill <BallBill@users.noreply.translate.mailcow.email>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* [Web] Updated lang.pt-br.json

[Web] Updated lang.pt-br.json

[Web] Updated lang.pt-br.json

[Web] Updated lang.pt-br.json

Co-authored-by: Abner Santana <abnerss@outlook.com>
Co-authored-by: milkmaker <milkmaker@mailcow.de>

* Add Norwegian in vars.inc.php

---------

Co-authored-by: DerLinkman <niklas.meyer@servercow.de>
Co-authored-by: Christer Solstrand Johannessen <csjoh@users.noreply.translate.mailcow.email>
Co-authored-by: Peter <magic@kthx.at>
Co-authored-by: Alix ANNERAUD <alix.anneraud@outlook.fr>
Co-authored-by: William Blondel <contact@williamblondel.fr>
Co-authored-by: Michele Caputo <michele@caputoweb.xyz>
Co-authored-by: BallBill <BallBill@users.noreply.translate.mailcow.email>
Co-authored-by: Abner Santana <abnerss@outlook.com>
2024-02-14 20:09:10 +01:00
FreddleSpl0it
3b83949ba3 [Netfilter] Update to 1.58 2024-02-14 13:58:07 +01:00
Patrick Schult
d8baadb991 Merge pull request #5679 from Habetdin/staging
[Netfilter] respect ban time limits
2024-02-14 11:37:24 +01:00
Patrick Schult
7d3f9fa407 Merge pull request #5727 from mailcow/fix/domain-wide-footer
[Rspamd] apply domain wide footer to alias domains
2024-02-14 09:43:04 +01:00
Patrick Schult
705d144a85 Merge pull request #5729 from mailcow/feat/readable-domainnames
[Web] display human readable domainnames instead of punycode
2024-02-14 09:36:20 +01:00
Patrick Schult
ff05cff36c Merge pull request #5730 from mailcow/fix/add-domain-gal
[Web] fix setting unchecked checkboxes on domain adding
2024-02-14 09:34:21 +01:00
Patrick Schult
861fa7b145 Merge pull request #5728 from mailcow/fix/debug-tz
[Web] fix blank /debug page with invalid timezone
2024-02-14 09:32:17 +01:00
FreddleSpl0it
d65a0bba44 [ClamAV] Update to 1.2.2 2024-02-13 09:16:38 +01:00
FreddleSpl0it
dac1bd88dc [Web] fix setting unchecked checkboxes 2024-02-09 15:17:02 +01:00
FreddleSpl0it
288dbfa37c [Web] display human readable domainnames instead of punycode 2024-02-09 15:13:45 +01:00
FreddleSpl0it
a0e55cb9b1 [Web] fix blank /debug page with invalid timezone 2024-02-09 15:08:21 +01:00
FreddleSpl0it
86ba019ca0 [Rspamd] apply domain wide footer to alias domains 2024-02-09 14:59:14 +01:00
DerLinkman
3cb9c2ece5 ui: fix wrong docs links
ui: fixed broken Links to docs
2024-02-09 08:11:20 +01:00
Habetdin
1787c53d98 [Netfilter] respect ban time limits 2024-02-09 01:57:09 +03:00
Niklas Meyer
8ae762a8c8 Merge pull request #5717 from mailcow/staging
2024-01e
2024-02-08 15:58:47 +01:00
DerLinkman
63426c3cd0 unbound: remove netcat check & package 2024-02-08 15:55:26 +01:00
DerLinkman
e184713c67 added action for support label in issues 2024-02-08 13:06:02 +01:00
Niklas Meyer
1926625297 Merge pull request #5711 from amorfo77/master
[Netfilter] set IP check more relaxed on NFTables.py
2024-02-08 12:36:03 +01:00
DerLinkman
63bb8e8cef unbound: increase check interval to 30s 2024-02-08 12:23:46 +01:00
DerLinkman
583c5b48a0 dovecot: bump to docker image 1.28.1 2024-02-07 17:29:36 +01:00
DerLinkman
d08ccbce78 dovecot: fix wrong timestamps inside logs 2024-02-07 17:28:49 +01:00
DerLinkman
5a9702771c [SOGo] Fixed SOGo crash on older kernels < 5.10.0-X 2024-02-07 17:18:20 +01:00
eb91d9905b fix typpo in chain order message 2024-02-07 15:48:49 +01:00
38cc85fa4c set strict=False 2024-02-07 15:36:04 +01:00
FreddleSpl0it
77e6ef218c [Netfilter] Update to 1.57 2024-02-05 09:54:16 +01:00
FreddleSpl0it
464b6f2e93 [Netfilter] fix redis logs 2024-02-05 09:47:19 +01:00
Niklas Meyer
20c90642f9 Merge pull request #5700 from mailcow/staging
[Netfilter] fix mailcow isolation rule for iptables
2024-02-02 17:49:49 +01:00
FreddleSpl0it
57e67ea8f7 [Netfilter] fix mailcow isolation rule for iptables 2024-02-02 17:40:44 +01:00
Niklas Meyer
c9e9628383 Merge pull request #5699 from mailcow/staging
2024-01d
2024-02-02 17:08:45 +01:00
DerLinkman
909f07939e dovecot: bump version for repl fix 2024-02-02 17:06:31 +01:00
FreddleSpl0it
a310493485 [Dovecot] fix repl_health.sh 2024-02-02 16:52:41 +01:00
Niklas Meyer
1e09df20b6 Merge pull request #5689 from mailcow/staging
2024-01c
2024-02-02 15:52:33 +01:00
Patrick Schult
087481ac12 Merge pull request #5696 from mailcow/fix/netfilter
[Netfilter] add mailcow isolation rule to MAILCOW chain
2024-02-02 14:33:01 +01:00
FreddleSpl0it
c941e802d4 [Netfilter] only perform cleanup at exit if SIGTERM was recieved 2024-02-02 12:57:21 +01:00
FreddleSpl0it
39589bd441 [Netfilter] only perform cleanup at exit if SIGTERM was recieved 2024-02-02 12:46:50 +01:00
DerLinkman
2e57325dde docker-compose.yml: Bump dovecot + netfilter version 2024-02-02 11:27:46 +01:00
FreddleSpl0it
2072301d89 [Netfilter] only perform cleanup at exit if SIGTERM was recieved 2024-02-02 11:08:44 +01:00
FreddleSpl0it
b236fd3ac6 [Netfilter] add mailcow isolation rule to MAILCOW chain
[Netfilter] add mailcow rule to docker-user chain

[Netfilter] add mailcow isolation rule to MAILCOW chain

[Netfilter] add mailcow isolation rule to MAILCOW chain

[Netfilter] set mailcow isolation rule before redis

[Netfilter] clear bans in redis after connecting

[Netfilter] simplify mailcow isolation rule for compatibility with iptables-nft

[Netfilter] stop container after mariadb, redis, dovecot, solr

[Netfilter] simplify mailcow isolation rule for compatibility with iptables-nft

[Netfilter] add exception for mailcow isolation rule for HA setups

[Netfilter] add exception for mailcow isolation rule for HA setups

[Netfilter] add DISABLE_NETFILTER_ISOLATION_RULE

[Netfilter] fix wrong var name

[Netfilter] add DISABLE_NETFILTER_ISOLATION_RULE to update and generate_config sh
2024-02-02 10:10:11 +01:00
Niklas Meyer
b968695e31 Merge pull request #5686 from mailcow/update/postscreen_access.cidr
[Postfix] update postscreen_access.cidr
2024-02-01 08:58:35 +01:00
Niklas Meyer
694f1d1623 Merge pull request #5688 from mailcow/fix/sogo-authenticated-users
sogo: fix ACL allow authenticated users + rebuild on Bookworm
2024-02-01 08:42:53 +01:00
DerLinkman
93e4d58606 sogo: fix ACL allow authenticated users + rebuild on Bookworm 2024-02-01 08:41:11 +01:00
milkmaker
cc77caad67 update postscreen_access.cidr 2024-02-01 00:13:56 +00:00
renovate[bot]
f74573f5d0 chore(deps): update peter-evans/create-pull-request action to v6 (#5683)
Signed-off-by: milkmaker <milkmaker@mailcow.de>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-01-31 16:14:42 +01:00
DerLinkman
deb6f0babc issue: added architecture as dropdown 2024-01-23 08:46:06 +01:00
65 changed files with 2688 additions and 407 deletions

View File

@@ -62,6 +62,16 @@ body:
- nightly
validations:
required: true
- type: dropdown
attributes:
label: "Which architecture are you using?"
description: "#### `uname -m`"
multiple: false
options:
- x86
- ARM64 (aarch64)
validations:
required: true
- type: input
attributes:
label: "Operating System:"

View File

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

View File

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

View File

@@ -22,7 +22,7 @@ jobs:
bash helper-scripts/update_postscreen_whitelist.sh
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.mailcow_action_Update_postscreen_access_cidr_pat }}
commit-message: update postscreen_access.cidr

1
.gitignore vendored
View File

@@ -13,6 +13,7 @@ data/conf/dovecot/acl_anyone
data/conf/dovecot/dovecot-master.passwd
data/conf/dovecot/dovecot-master.userdb
data/conf/dovecot/extra.conf
data/conf/dovecot/mail_replica.conf
data/conf/dovecot/global_sieve_*
data/conf/dovecot/last_login
data/conf/dovecot/lua

View File

@@ -1,6 +1,6 @@
FROM alpine:3.18
LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
ARG PIP_BREAK_SYSTEM_PACKAGES=1
RUN apk upgrade --no-cache \

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
FROM alpine:3.19
LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^(?<version>.*)$
ARG GOSU_VERSION=1.16

View File

@@ -335,6 +335,15 @@ sys.exit()
EOF
fi
# Set mail_replica for HA setups
if [[ -n ${MAILCOW_REPLICA_IP} && -n ${DOVEADM_REPLICA_PORT} ]]; then
cat <<EOF > /etc/dovecot/mail_replica.conf
# Autogenerated by mailcow
mail_replica = tcp:${MAILCOW_REPLICA_IP}:${DOVEADM_REPLICA_PORT}
EOF
fi
# 401 is user dovecot
if [[ ! -s /mail_crypt/ecprivkey.pem || ! -s /mail_crypt/ecpubkey.pem ]]; then
openssl ecparam -name prime256v1 -genkey | openssl pkey -out /mail_crypt/ecprivkey.pem

View File

@@ -11,7 +11,7 @@ fi
# Is replication active?
# grep on file is less expensive than doveconf
if ! grep -qi mail_replica /etc/dovecot/dovecot.conf; then
if [ -n ${MAILCOW_REPLICA_IP} ]; then
${REDIS_CMDLINE} SET DOVECOT_REPL_HEALTH 1 > /dev/null
exit
fi

View File

@@ -7,6 +7,7 @@ options {
use_fqdn(no);
owner("root"); group("adm"); perm(0640);
stats(freq(0));
keep_timestamp(no);
bad_hostname("^gconfd$");
};
source s_dgram {

View File

@@ -7,6 +7,7 @@ options {
use_fqdn(no);
owner("root"); group("adm"); perm(0640);
stats(freq(0));
keep_timestamp(no);
bad_hostname("^gconfd$");
};
source s_dgram {

View File

@@ -21,28 +21,6 @@ from modules.IPTables import IPTables
from modules.NFTables import NFTables
# connect to redis
while True:
try:
redis_slaveof_ip = os.getenv('REDIS_SLAVEOF_IP', '')
redis_slaveof_port = os.getenv('REDIS_SLAVEOF_PORT', '')
if "".__eq__(redis_slaveof_ip):
r = redis.StrictRedis(host=os.getenv('IPV4_NETWORK', '172.22.1') + '.249', decode_responses=True, port=6379, db=0)
else:
r = redis.StrictRedis(host=redis_slaveof_ip, decode_responses=True, port=redis_slaveof_port, db=0)
r.ping()
except Exception as ex:
print('%s - trying again in 3 seconds' % (ex))
time.sleep(3)
else:
break
pubsub = r.pubsub()
# rename fail2ban to netfilter
if r.exists('F2B_LOG'):
r.rename('F2B_LOG', 'NETFILTER_LOG')
# globals
WHITELIST = []
BLACKLIST= []
@@ -50,18 +28,10 @@ bans = {}
quit_now = False
exit_code = 0
lock = Lock()
# init Logger
logger = Logger(r)
# init backend
backend = sys.argv[1]
if backend == "nftables":
logger.logInfo('Using NFTables backend')
tables = NFTables("MAILCOW", logger)
else:
logger.logInfo('Using IPTables backend')
tables = IPTables("MAILCOW", logger)
chain_name = "MAILCOW"
r = None
pubsub = None
clear_before_quit = False
def refreshF2boptions():
@@ -144,8 +114,6 @@ def ban(address):
global lock
refreshF2boptions()
BAN_TIME = int(f2boptions['ban_time'])
BAN_TIME_INCREMENT = bool(f2boptions['ban_time_increment'])
MAX_ATTEMPTS = int(f2boptions['max_attempts'])
RETRY_WINDOW = int(f2boptions['retry_window'])
NETBAN_IPV4 = '/' + str(f2boptions['netban_ipv4'])
@@ -180,7 +148,7 @@ def ban(address):
if bans[net]['attempts'] >= MAX_ATTEMPTS:
cur_time = int(round(time.time()))
NET_BAN_TIME = BAN_TIME if not BAN_TIME_INCREMENT else BAN_TIME * 2 ** bans[net]['ban_counter']
NET_BAN_TIME = calcNetBanTime(bans[net]['ban_counter'])
logger.logCrit('Banning %s for %d minutes' % (net, NET_BAN_TIME / 60 ))
if type(ip) is ipaddress.IPv4Address and int(f2boptions['manage_external']) != 1:
with lock:
@@ -250,17 +218,21 @@ def clear():
with lock:
tables.clearIPv4Table()
tables.clearIPv6Table()
r.delete('F2B_ACTIVE_BANS')
r.delete('F2B_PERM_BANS')
pubsub.unsubscribe()
try:
if r is not None:
r.delete('F2B_ACTIVE_BANS')
r.delete('F2B_PERM_BANS')
except Exception as ex:
logger.logWarn('Error clearing redis keys F2B_ACTIVE_BANS and F2B_PERM_BANS: %s' % ex)
def watch():
logger.logInfo('Watching Redis channel F2B_CHANNEL')
pubsub.subscribe('F2B_CHANNEL')
global pubsub
global quit_now
global exit_code
logger.logInfo('Watching Redis channel F2B_CHANNEL')
pubsub.subscribe('F2B_CHANNEL')
while not quit_now:
try:
for item in pubsub.listen():
@@ -280,6 +252,7 @@ def watch():
ban(addr)
except Exception as ex:
logger.logWarn('Error reading log line from pubsub: %s' % ex)
pubsub = None
quit_now = True
exit_code = 2
@@ -302,12 +275,11 @@ def snat6(snat_target):
tables.snat6(snat_target, os.getenv('IPV6_NETWORK', 'fd4d:6169:6c63:6f77::/64'))
def autopurge():
global f2boptions
while not quit_now:
time.sleep(10)
refreshF2boptions()
BAN_TIME = int(f2boptions['ban_time'])
MAX_BAN_TIME = int(f2boptions['max_ban_time'])
BAN_TIME_INCREMENT = bool(f2boptions['ban_time_increment'])
MAX_ATTEMPTS = int(f2boptions['max_attempts'])
QUEUE_UNBAN = r.hgetall('F2B_QUEUE_UNBAN')
if QUEUE_UNBAN:
@@ -315,9 +287,9 @@ def autopurge():
unban(str(net))
for net in bans.copy():
if bans[net]['attempts'] >= MAX_ATTEMPTS:
NET_BAN_TIME = BAN_TIME if not BAN_TIME_INCREMENT else BAN_TIME * 2 ** bans[net]['ban_counter']
NET_BAN_TIME = calcNetBanTime(bans[net]['ban_counter'])
TIME_SINCE_LAST_ATTEMPT = time.time() - bans[net]['last_attempt']
if TIME_SINCE_LAST_ATTEMPT > NET_BAN_TIME or TIME_SINCE_LAST_ATTEMPT > MAX_BAN_TIME:
if TIME_SINCE_LAST_ATTEMPT > NET_BAN_TIME:
unban(net)
def mailcowChainOrder():
@@ -331,6 +303,16 @@ def mailcowChainOrder():
if quit_now: return
quit_now, exit_code = tables.checkIPv6ChainOrder()
def calcNetBanTime(ban_counter):
global f2boptions
BAN_TIME = int(f2boptions['ban_time'])
MAX_BAN_TIME = int(f2boptions['max_ban_time'])
BAN_TIME_INCREMENT = bool(f2boptions['ban_time_increment'])
NET_BAN_TIME = BAN_TIME if not BAN_TIME_INCREMENT else BAN_TIME * 2 ** ban_counter
NET_BAN_TIME = max([BAN_TIME, min([NET_BAN_TIME, MAX_BAN_TIME])])
return NET_BAN_TIME
def isIpNetwork(address):
try:
ipaddress.ip_network(address, False)
@@ -403,21 +385,76 @@ def blacklistUpdate():
permBan(net=net, unban=True)
time.sleep(60.0 - ((time.time() - start_time) % 60.0))
def quit(signum, frame):
global quit_now
quit_now = True
def sigterm_quit(signum, frame):
global clear_before_quit
clear_before_quit = True
sys.exit(exit_code)
def berfore_quit():
if clear_before_quit:
clear()
if pubsub is not None:
pubsub.unsubscribe()
if __name__ == '__main__':
refreshF2boptions()
atexit.register(berfore_quit)
signal.signal(signal.SIGTERM, sigterm_quit)
# init Logger
logger = Logger()
# init backend
backend = sys.argv[1]
if backend == "nftables":
logger.logInfo('Using NFTables backend')
tables = NFTables(chain_name, logger)
else:
logger.logInfo('Using IPTables backend')
tables = IPTables(chain_name, logger)
# In case a previous session was killed without cleanup
clear()
# Reinit MAILCOW chain
# Is called before threads start, no locking
logger.logInfo("Initializing mailcow netfilter chain")
tables.initChainIPv4()
tables.initChainIPv6()
if os.getenv("DISABLE_NETFILTER_ISOLATION_RULE").lower() in ("y", "yes"):
logger.logInfo(f"Skipping {chain_name} isolation")
else:
logger.logInfo(f"Setting {chain_name} isolation")
tables.create_mailcow_isolation_rule("br-mailcow", [3306, 6379, 8983, 12345], os.getenv("MAILCOW_REPLICA_IP"))
# connect to redis
while True:
try:
redis_slaveof_ip = os.getenv('REDIS_SLAVEOF_IP', '')
redis_slaveof_port = os.getenv('REDIS_SLAVEOF_PORT', '')
if "".__eq__(redis_slaveof_ip):
r = redis.StrictRedis(host=os.getenv('IPV4_NETWORK', '172.22.1') + '.249', decode_responses=True, port=6379, db=0)
else:
r = redis.StrictRedis(host=redis_slaveof_ip, decode_responses=True, port=redis_slaveof_port, db=0)
r.ping()
pubsub = r.pubsub()
except Exception as ex:
print('%s - trying again in 3 seconds' % (ex))
time.sleep(3)
else:
break
logger.set_redis(r)
# rename fail2ban to netfilter
if r.exists('F2B_LOG'):
r.rename('F2B_LOG', 'NETFILTER_LOG')
# clear bans in redis
r.delete('F2B_ACTIVE_BANS')
r.delete('F2B_PERM_BANS')
refreshF2boptions()
watch_thread = Thread(target=watch)
watch_thread.daemon = True
watch_thread.start()
@@ -460,9 +497,6 @@ if __name__ == '__main__':
whitelistupdate_thread.daemon = True
whitelistupdate_thread.start()
signal.signal(signal.SIGTERM, quit)
atexit.register(clear)
while not quit_now:
time.sleep(0.5)

View File

@@ -1,5 +1,6 @@
import iptc
import time
import os
class IPTables:
def __init__(self, chain_name, logger):
@@ -211,3 +212,41 @@ class IPTables:
target = rule.create_target("SNAT")
target.to_source = snat_target
return rule
def create_mailcow_isolation_rule(self, _interface:str, _dports:list, _allow:str = ""):
try:
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), self.chain_name)
# insert mailcow isolation rule
rule = iptc.Rule()
rule.in_interface = f'!{_interface}'
rule.out_interface = _interface
rule.protocol = 'tcp'
rule.create_target("DROP")
match = rule.create_match("multiport")
match.dports = ','.join(map(str, _dports))
if rule in chain.rules:
chain.delete_rule(rule)
chain.insert_rule(rule, position=0)
# insert mailcow isolation exception rule
if _allow != "":
rule = iptc.Rule()
rule.src = _allow
rule.in_interface = f'!{_interface}'
rule.out_interface = _interface
rule.protocol = 'tcp'
rule.create_target("ACCEPT")
match = rule.create_match("multiport")
match.dports = ','.join(map(str, _dports))
if rule in chain.rules:
chain.delete_rule(rule)
chain.insert_rule(rule, position=0)
return True
except Exception as e:
self.logger.logCrit(f"Error adding {self.chain_name} isolation: {e}")
return False

View File

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

View File

@@ -1,5 +1,6 @@
import nftables
import ipaddress
import os
class NFTables:
def __init__(self, chain_name, logger):
@@ -40,6 +41,7 @@ class NFTables:
exit_code = 2
if chain_position > 0:
chain_position += 1
self.logger.logCrit(f'MAILCOW target is in position {chain_position} in the {filter_table} {chain} table, restarting container to fix it...')
err = True
exit_code = 2
@@ -266,6 +268,17 @@ class NFTables:
return self.nft_exec_dict(delete_command)
def delete_filter_rule(self, _family:str, _chain: str, _handle:str):
delete_command = self.get_base_dict()
_rule_opts = {'family': _family,
'table': 'filter',
'chain': _chain,
'handle': _handle }
_delete = {'delete': {'rule': _rule_opts} }
delete_command["nftables"].append(_delete)
return self.nft_exec_dict(delete_command)
def snat_rule(self, _family: str, snat_target: str, source_address: str):
chain_name = self.nft_chain_names[_family]['nat']['postrouting']
@@ -297,8 +310,8 @@ class NFTables:
rule_handle = rule["handle"]
break
dest_net = ipaddress.ip_network(source_address)
target_net = ipaddress.ip_network(snat_target)
dest_net = ipaddress.ip_network(source_address, strict=False)
target_net = ipaddress.ip_network(snat_target, strict=False)
if rule_found:
saddr_ip = rule["expr"][0]["match"]["right"]["prefix"]["addr"]
@@ -309,9 +322,9 @@ class NFTables:
target_ip = rule["expr"][3]["snat"]["addr"]
saddr_net = ipaddress.ip_network(saddr_ip + '/' + str(saddr_len))
daddr_net = ipaddress.ip_network(daddr_ip + '/' + str(daddr_len))
current_target_net = ipaddress.ip_network(target_ip)
saddr_net = ipaddress.ip_network(saddr_ip + '/' + str(saddr_len), strict=False)
daddr_net = ipaddress.ip_network(daddr_ip + '/' + str(daddr_len), strict=False)
current_target_net = ipaddress.ip_network(target_ip, strict=False)
match = all((
dest_net == saddr_net,
@@ -381,7 +394,7 @@ class NFTables:
break
return chain_handle
def get_rules_handle(self, _family: str, _table: str, chain_name: str):
def get_rules_handle(self, _family: str, _table: str, chain_name: str, _comment_filter = "mailcow"):
rule_handle = []
# Command: 'nft list chain {family} {table} {chain_name}'
_chain_opts = {'family': _family, 'table': _table, 'name': chain_name}
@@ -397,7 +410,7 @@ class NFTables:
rule = _object["rule"]
if rule["family"] == _family and rule["table"] == _table and rule["chain"] == chain_name:
if rule.get("comment") and rule["comment"] == "mailcow":
if rule.get("comment") and rule["comment"] == _comment_filter:
rule_handle.append(rule["handle"])
return rule_handle
@@ -405,7 +418,7 @@ class NFTables:
json_command = self.get_base_dict()
expr_opt = []
ipaddr_net = ipaddress.ip_network(ipaddr)
ipaddr_net = ipaddress.ip_network(ipaddr, strict=False)
right_dict = {'prefix': {'addr': str(ipaddr_net.network_address), 'len': int(ipaddr_net.prefixlen) } }
left_dict = {'payload': {'protocol': _family, 'field': 'saddr'} }
@@ -439,6 +452,8 @@ class NFTables:
continue
rule = _object["rule"]["expr"][0]["match"]
if not "payload" in rule["left"]:
continue
left_opt = rule["left"]["payload"]
if not left_opt["protocol"] == _family:
continue
@@ -454,7 +469,7 @@ class NFTables:
current_rule_net = ipaddress.ip_network(current_rule_ip)
# ip to ban
candidate_net = ipaddress.ip_network(ipaddr)
candidate_net = ipaddress.ip_network(ipaddr, strict=False)
if current_rule_net == candidate_net:
rule_handle = _object["rule"]["handle"]
@@ -493,3 +508,152 @@ class NFTables:
position+=1
return position if rule_found else False
def create_mailcow_isolation_rule(self, _interface:str, _dports:list, _allow:str = ""):
family = "ip"
table = "filter"
comment_filter_drop = "mailcow isolation"
comment_filter_allow = "mailcow isolation allow"
json_command = self.get_base_dict()
# Delete old mailcow isolation rules
handles = self.get_rules_handle(family, table, self.chain_name, comment_filter_drop)
for handle in handles:
self.delete_filter_rule(family, self.chain_name, handle)
handles = self.get_rules_handle(family, table, self.chain_name, comment_filter_allow)
for handle in handles:
self.delete_filter_rule(family, self.chain_name, handle)
# insert mailcow isolation rule
_match_dict_drop = [
{
"match": {
"op": "!=",
"left": {
"meta": {
"key": "iifname"
}
},
"right": _interface
}
},
{
"match": {
"op": "==",
"left": {
"meta": {
"key": "oifname"
}
},
"right": _interface
}
},
{
"match": {
"op": "==",
"left": {
"payload": {
"protocol": "tcp",
"field": "dport"
}
},
"right": {
"set": _dports
}
}
},
{
"counter": {
"packets": 0,
"bytes": 0
}
},
{
"drop": None
}
]
rule_drop = { "insert": { "rule": {
"family": family,
"table": table,
"chain": self.chain_name,
"comment": comment_filter_drop,
"expr": _match_dict_drop
}}}
json_command["nftables"].append(rule_drop)
# insert mailcow isolation allow rule
if _allow != "":
_match_dict_allow = [
{
"match": {
"op": "==",
"left": {
"payload": {
"protocol": "ip",
"field": "saddr"
}
},
"right": _allow
}
},
{
"match": {
"op": "!=",
"left": {
"meta": {
"key": "iifname"
}
},
"right": _interface
}
},
{
"match": {
"op": "==",
"left": {
"meta": {
"key": "oifname"
}
},
"right": _interface
}
},
{
"match": {
"op": "==",
"left": {
"payload": {
"protocol": "tcp",
"field": "dport"
}
},
"right": {
"set": _dports
}
}
},
{
"counter": {
"packets": 0,
"bytes": 0
}
},
{
"accept": None
}
]
rule_allow = { "insert": { "rule": {
"family": family,
"table": table,
"chain": self.chain_name,
"comment": comment_filter_allow,
"expr": _match_dict_allow
}}}
json_command["nftables"].append(rule_allow)
success = self.nft_exec_dict(json_command)
if success == False:
self.logger.logCrit(f"Error adding {self.chain_name} isolation")
return False
return True

View File

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

View File

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

View File

@@ -1,7 +1,8 @@
FROM debian:bullseye-slim
LABEL maintainer "The Infrastructure Company GmbH GmbH <info@servercow.de>"
LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
ARG DEBIAN_FRONTEND=noninteractive
ARG DEBIAN_VERSION=bullseye
ARG SOGO_DEBIAN_REPOSITORY=http://www.axis.cz/linux/debian
# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^(?<version>.*)$
ARG GOSU_VERSION=1.17
@@ -21,7 +22,7 @@ RUN echo "Building from repository $SOGO_DEBIAN_REPOSITORY" \
syslog-ng-core \
syslog-ng-mod-redis \
dirmngr \
netcat \
netcat-traditional \
psmisc \
wget \
patch \
@@ -32,7 +33,7 @@ RUN echo "Building from repository $SOGO_DEBIAN_REPOSITORY" \
&& mkdir /usr/share/doc/sogo \
&& touch /usr/share/doc/sogo/empty.sh \
&& apt-key adv --keyserver keys.openpgp.org --recv-key 74FFC6D72B925A34B5D356BDF8A27B36A6E2EAE9 \
&& echo "deb [trusted=yes] ${SOGO_DEBIAN_REPOSITORY} bullseye sogo-v5" > /etc/apt/sources.list.d/sogo.list \
&& echo "deb [trusted=yes] ${SOGO_DEBIAN_REPOSITORY} ${DEBIAN_VERSION} sogo-v5" > /etc/apt/sources.list.d/sogo.list \
&& apt-get update && apt-get install -y --no-install-recommends \
sogo \
sogo-activesync \

View File

@@ -150,6 +150,8 @@ cat <<EOF > /var/lib/sogo/GNUstep/Defaults/sogod.plist
<string>YES</string>
<key>SOGoEncryptionKey</key>
<string>${RAND_PASS}</string>
<key>OCSAdminURL</key>
<string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_admin</string>
<key>OCSCacheFolderURL</key>
<string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_cache_folder</string>
<key>OCSEMailAlarmsFolderURL</key>

View File

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

View File

@@ -50,27 +50,6 @@ function check_dns() {
}
# Simple Netcat Check to connect to common webports
function check_netcat() {
declare -a domains=("mailcow.email" "github.com" "hub.docker.com")
declare -a ports=("80" "443")
for domain in "${domains[@]}" ; do
for port in "${ports[@]}" ; do
nc -z -w 2 $domain $port
if [ $? -ne 0 ]; then
log_to_file "Healthcheck: Could not reach $domain on Port $port... Gave up!"
log_to_file "Please check your internet connection or firewall rules to fix this error."
return 1
fi
done
done
log_to_file "Healthcheck: Netcat Checks WORKING properly!"
return 0
}
if [[ ${SKIP_UNBOUND_HEALTHCHECK} == "y" ]]; then
log_to_file "Healthcheck: ALL CHECKS WERE SKIPPED! Unbound is healthy!"
exit 0
@@ -89,11 +68,5 @@ if [ $? -ne 0 ]; then
exit 1
fi
check_netcat
if [ $? -ne 0 ]; then
exit 1
fi
log_to_file "Healthcheck: ALL CHECKS WERE SUCCESSFUL! Unbound is healthy!"
exit 0

View File

@@ -247,6 +247,9 @@ plugin {
mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
mail_log_fields = uid box msgid size
mail_log_cached_only = yes
# Try set mail_replica
!include_try /etc/dovecot/mail_replica.conf
}
service quota-warning {
executable = script /usr/local/bin/quota_notify.py

View File

@@ -1,9 +1,10 @@
# Whitelist generated by Postwhite v3.4 on Mon Jan 1 00:15:22 UTC 2024
# Whitelist generated by Postwhite v3.4 on Mon Apr 1 00:15:02 UTC 2024
# https://github.com/stevejenkins/postwhite/
# 2052 total rules
# 2009 total rules
2a00:1450:4000::/36 permit
2a01:111:f400::/48 permit
2a01:111:f403:8000::/50 permit
2a01:111:f403:8000::/51 permit
2a01:111:f403::/49 permit
2a01:111:f403:c000::/51 permit
2a01:111:f403:f000::/52 permit
@@ -43,9 +44,10 @@
18.198.96.88 permit
18.208.124.128/25 permit
18.216.232.154 permit
18.234.1.244 permit
18.236.40.242 permit
18.236.56.161 permit
20.51.6.32/30 permit
20.51.98.61 permit
20.52.52.2 permit
20.52.128.133 permit
20.59.80.4/30 permit
@@ -90,23 +92,22 @@
27.123.204.172 permit
27.123.204.188/30 permit
27.123.204.192 permit
27.123.206.0/24 permit
27.123.206.50/31 permit
27.123.206.56/29 permit
27.123.206.76/30 permit
27.123.206.80/28 permit
31.25.48.222 permit
34.195.217.107 permit
34.202.239.6 permit
34.212.163.75 permit
34.215.104.144 permit
34.218.116.3 permit
34.225.212.172 permit
34.247.168.44 permit
35.161.32.253 permit
35.167.93.243 permit
35.176.132.251 permit
35.190.247.0/24 permit
35.191.0.0/16 permit
35.242.169.159 permit
37.218.248.47 permit
37.218.249.47 permit
37.218.251.62 permit
@@ -116,13 +117,12 @@
40.92.0.0/16 permit
40.107.0.0/16 permit
40.112.65.63 permit
40.117.80.0/24 permit
43.228.184.0/22 permit
44.206.138.57 permit
44.209.42.157 permit
44.236.56.93 permit
44.238.220.251 permit
46.19.168.0/23 permit
46.19.170.16 permit
46.226.48.0/21 permit
46.228.36.37 permit
46.228.36.38/31 permit
@@ -162,7 +162,6 @@
46.228.38.144/29 permit
46.228.38.152/31 permit
46.228.38.154 permit
46.228.39.0/24 permit
46.228.39.64/27 permit
46.228.39.96/30 permit
46.228.39.100/30 permit
@@ -188,6 +187,7 @@
51.137.58.21 permit
51.140.75.55 permit
51.144.100.179 permit
52.1.14.157 permit
52.5.230.59 permit
52.27.5.72 permit
52.27.28.47 permit
@@ -206,7 +206,6 @@
52.95.49.88/29 permit
52.96.91.34 permit
52.96.111.82 permit
52.96.172.98 permit
52.96.214.50 permit
52.96.222.194 permit
52.96.222.226 permit
@@ -243,22 +242,17 @@
54.174.63.0/24 permit
54.186.193.102 permit
54.191.223.56 permit
54.194.61.95 permit
54.195.113.45 permit
54.213.20.246 permit
54.214.39.184 permit
54.216.77.168 permit
54.221.227.204 permit
54.240.0.0/18 permit
54.240.64.0/19 permit
54.240.96.0/19 permit
54.241.16.209 permit
54.244.54.130 permit
54.244.242.0/24 permit
54.246.232.180 permit
54.255.61.23 permit
62.13.128.0/24 permit
62.13.128.150 permit
62.13.128.196 permit
62.13.129.128/25 permit
62.13.136.0/22 permit
62.13.140.0/22 permit
@@ -266,12 +260,12 @@
62.13.148.0/23 permit
62.13.150.0/23 permit
62.13.152.0/23 permit
62.13.159.196 permit
62.17.146.128/26 permit
62.179.121.0/24 permit
62.201.172.0/27 permit
62.201.172.32/27 permit
62.253.227.114 permit
63.32.13.159 permit
63.80.14.0/23 permit
63.111.28.137 permit
63.128.21.0/24 permit
@@ -286,10 +280,6 @@
64.79.155.193 permit
64.79.155.205 permit
64.79.155.206 permit
64.89.44.85 permit
64.89.45.80 permit
64.89.45.194 permit
64.89.45.196 permit
64.127.115.252 permit
64.132.88.0/23 permit
64.132.92.0/24 permit
@@ -377,7 +367,6 @@
66.135.215.0/24 permit
66.135.222.1 permit
66.162.193.226/31 permit
66.163.184.0/21 permit
66.163.184.0/24 permit
66.163.185.0/24 permit
66.163.186.0/24 permit
@@ -390,7 +379,6 @@
66.196.80.112/28 permit
66.196.80.144/29 permit
66.196.80.193 permit
66.196.81.0/24 permit
66.196.81.104/29 permit
66.196.81.112/29 permit
66.196.81.120 permit
@@ -405,7 +393,6 @@
66.196.81.228/30 permit
66.196.81.232/31 permit
66.196.81.234 permit
66.211.168.230/31 permit
66.211.170.88/29 permit
66.211.184.0/23 permit
66.218.74.64/30 permit
@@ -434,12 +421,10 @@
66.249.80.0/20 permit
67.23.31.6 permit
67.72.99.26 permit
67.195.22.0/24 permit
67.195.22.113 permit
67.195.22.116/30 permit
67.195.23.144/30 permit
67.195.23.148 permit
67.195.60.0/24 permit
67.195.60.45 permit
67.195.60.46/31 permit
67.195.60.48/31 permit
@@ -447,7 +432,6 @@
67.195.60.146 permit
67.195.60.155 permit
67.195.60.156 permit
67.195.87.0/24 permit
67.195.87.64 permit
67.195.87.81 permit
67.195.87.82/31 permit
@@ -472,7 +456,6 @@
67.228.37.4/30 permit
67.231.145.42 permit
67.231.153.30 permit
68.142.230.0/24 permit
68.142.230.64/31 permit
68.142.230.69 permit
68.142.230.70/31 permit
@@ -488,10 +471,6 @@
69.65.42.195 permit
69.65.49.192/29 permit
69.72.32.0/20 permit
69.72.40.93 permit
69.72.40.94/31 permit
69.72.40.96/30 permit
69.72.47.205 permit
69.147.84.227 permit
69.162.98.0/24 permit
69.169.224.0/20 permit
@@ -531,7 +510,6 @@
72.30.237.180/30 permit
72.30.237.184/31 permit
72.30.237.204/30 permit
72.30.238.0/23 permit
72.30.238.116/30 permit
72.30.238.120/31 permit
72.30.238.128 permit
@@ -562,12 +540,7 @@
72.30.239.228/31 permit
72.30.239.244/30 permit
72.30.239.248/31 permit
72.34.168.76 permit
72.34.168.80 permit
72.34.168.85 permit
72.34.168.86 permit
72.52.72.32/28 permit
74.6.128.0/21 permit
74.6.128.0/24 permit
74.6.129.0/24 permit
74.6.130.0/24 permit
@@ -594,14 +567,14 @@
74.112.67.243 permit
74.125.0.0/16 permit
74.202.227.40 permit
74.208.4.192/26 permit
74.208.5.64/26 permit
74.208.122.0/26 permit
74.208.4.200 permit
74.208.4.201 permit
74.208.4.220 permit
74.208.4.221 permit
74.209.250.0/24 permit
75.2.70.75 permit
76.223.128.0/19 permit
76.223.176.0/20 permit
77.238.176.0/22 permit
77.238.176.0/24 permit
77.238.177.0/24 permit
77.238.178.0/24 permit
@@ -624,19 +597,25 @@
77.238.189.148/30 permit
81.7.169.128/25 permit
81.223.46.0/27 permit
82.165.159.0/24 permit
82.165.159.0/26 permit
82.165.229.31 permit
82.165.229.130 permit
82.165.230.21 permit
82.165.230.22 permit
82.165.159.2 permit
82.165.159.3 permit
82.165.159.4 permit
82.165.159.12 permit
82.165.159.13 permit
82.165.159.14 permit
82.165.159.34 permit
82.165.159.35 permit
82.165.159.40 permit
82.165.159.41 permit
82.165.159.42 permit
82.165.159.45 permit
82.165.159.130 permit
82.165.159.131 permit
84.116.6.0/23 permit
84.116.36.0/24 permit
84.116.50.0/23 permit
85.158.136.0/21 permit
86.61.88.25 permit
87.198.219.130 permit
87.198.219.153 permit
87.238.80.0/21 permit
87.248.103.12 permit
87.248.103.21 permit
@@ -676,6 +655,7 @@
87.253.232.0/21 permit
89.22.108.0/24 permit
91.211.240.0/22 permit
94.169.2.0/23 permit
94.245.112.0/27 permit
94.245.112.10/31 permit
95.131.104.0/21 permit
@@ -689,7 +669,6 @@
98.136.44.181 permit
98.136.44.182/31 permit
98.136.44.184 permit
98.136.164.0/24 permit
98.136.164.36/31 permit
98.136.164.64/29 permit
98.136.164.72/30 permit
@@ -697,7 +676,6 @@
98.136.164.78 permit
98.136.172.32/30 permit
98.136.172.36/31 permit
98.136.185.0/24 permit
98.136.185.29 permit
98.136.185.42/31 permit
98.136.185.46 permit
@@ -732,7 +710,6 @@
98.136.215.184 permit
98.136.215.208/30 permit
98.136.215.212/31 permit
98.136.217.0/24 permit
98.136.217.1 permit
98.136.217.2 permit
98.136.217.3 permit
@@ -742,14 +719,12 @@
98.136.217.12/30 permit
98.136.217.16/30 permit
98.136.217.20/30 permit
98.136.218.0/24 permit
98.136.218.39 permit
98.136.218.40/29 permit
98.136.218.48/28 permit
98.136.218.67 permit
98.136.218.68/30 permit
98.136.218.72/30 permit
98.137.12.0/24 permit
98.137.12.48/30 permit
98.137.12.52/31 permit
98.137.12.54 permit
@@ -787,7 +762,6 @@
98.137.13.132 permit
98.137.13.137 permit
98.137.13.138 permit
98.137.64.0/21 permit
98.137.64.0/24 permit
98.137.65.0/24 permit
98.137.66.0/24 permit
@@ -811,7 +785,6 @@
98.138.83.176/31 permit
98.138.83.179 permit
98.138.83.180/31 permit
98.138.84.0/22 permit
98.138.84.37 permit
98.138.84.38/31 permit
98.138.84.40/29 permit
@@ -852,7 +825,6 @@
98.138.87.148/31 permit
98.138.87.192/30 permit
98.138.87.196/31 permit
98.138.88.0/22 permit
98.138.88.105 permit
98.138.88.106 permit
98.138.88.128/30 permit
@@ -892,7 +864,6 @@
98.138.91.2/31 permit
98.138.91.4/31 permit
98.138.91.6 permit
98.138.100.0/23 permit
98.138.100.220/30 permit
98.138.100.224/30 permit
98.138.100.228/31 permit
@@ -902,7 +873,6 @@
98.138.104.100 permit
98.138.104.112/30 permit
98.138.104.116 permit
98.138.120.0/24 permit
98.138.120.36/30 permit
98.138.120.48/28 permit
98.138.197.46/31 permit
@@ -995,12 +965,10 @@
98.138.213.238/31 permit
98.138.213.240/31 permit
98.138.213.242 permit
98.138.215.0/24 permit
98.138.215.12/30 permit
98.138.215.16/28 permit
98.138.217.216/30 permit
98.138.217.220/31 permit
98.138.226.0/24 permit
98.138.226.30/31 permit
98.138.226.56/29 permit
98.138.226.64/30 permit
@@ -1026,21 +994,18 @@
98.138.227.108/31 permit
98.138.227.128/30 permit
98.138.227.132/31 permit
98.138.229.0/24 permit
98.138.229.24/29 permit
98.138.229.32/31 permit
98.138.229.122/31 permit
98.138.229.138/31 permit
98.138.229.154/31 permit
98.138.229.170/31 permit
98.139.164.0/24 permit
98.139.164.96/30 permit
98.139.164.100/30 permit
98.139.164.104/29 permit
98.139.164.112/30 permit
98.139.172.112/30 permit
98.139.172.116/31 permit
98.139.175.0/24 permit
98.139.175.65 permit
98.139.175.66/31 permit
98.139.175.68/30 permit
@@ -1065,10 +1030,8 @@
98.139.210.196/31 permit
98.139.210.202/31 permit
98.139.210.204/30 permit
98.139.211.0/24 permit
98.139.211.160/30 permit
98.139.211.192/28 permit
98.139.212.0/23 permit
98.139.212.160/28 permit
98.139.212.176/29 permit
98.139.212.184/30 permit
@@ -1083,7 +1046,6 @@
98.139.214.155 permit
98.139.214.156/30 permit
98.139.214.221 permit
98.139.215.0/24 permit
98.139.215.228/31 permit
98.139.215.230 permit
98.139.215.248/30 permit
@@ -1142,14 +1104,12 @@
98.139.220.243 permit
98.139.220.245 permit
98.139.220.253 permit
98.139.221.0/24 permit
98.139.221.43 permit
98.139.221.60/30 permit
98.139.221.156/30 permit
98.139.221.232/30 permit
98.139.221.236/31 permit
98.139.221.250 permit
98.139.244.0/24 permit
98.139.244.47 permit
98.139.244.49 permit
98.139.244.50/31 permit
@@ -1230,7 +1190,6 @@
106.10.146.52/31 permit
106.10.146.224/30 permit
106.10.146.228/31 permit
106.10.148.0/24 permit
106.10.148.48/30 permit
106.10.148.52/31 permit
106.10.148.68/30 permit
@@ -1243,7 +1202,6 @@
106.10.149.30 permit
106.10.149.160/30 permit
106.10.149.164/31 permit
106.10.150.0/23 permit
106.10.150.23 permit
106.10.150.24/30 permit
106.10.150.28/31 permit
@@ -1282,7 +1240,6 @@
106.10.151.250/31 permit
106.10.151.252/31 permit
106.10.151.254 permit
106.10.167.0/24 permit
106.10.167.72 permit
106.10.167.128/27 permit
106.10.167.160/28 permit
@@ -1304,7 +1261,6 @@
106.10.174.120/30 permit
106.10.174.154/31 permit
106.10.174.156/30 permit
106.10.176.0/24 permit
106.10.176.32/29 permit
106.10.176.48 permit
106.10.176.112 permit
@@ -1323,7 +1279,6 @@
106.10.196.43 permit
106.10.196.44/30 permit
106.10.196.48 permit
106.10.240.0/22 permit
106.10.240.0/24 permit
106.10.241.0/24 permit
106.10.242.0/24 permit
@@ -1331,6 +1286,7 @@
106.10.244.0/24 permit
106.39.212.64/29 permit
106.50.16.0/28 permit
107.20.210.250 permit
108.174.0.0/24 permit
108.174.0.215 permit
108.174.3.0/24 permit
@@ -1349,7 +1305,6 @@
111.221.112.0/21 permit
112.19.199.64/29 permit
112.19.242.64/29 permit
116.214.12.0/24 permit
116.214.12.47 permit
116.214.12.48/31 permit
116.214.12.56/31 permit
@@ -1368,7 +1323,6 @@
121.244.91.48 permit
122.15.156.182 permit
123.126.78.64/29 permit
124.108.96.0/24 permit
124.108.96.24/31 permit
124.108.96.28/31 permit
124.108.96.70/31 permit
@@ -1430,6 +1384,7 @@
135.84.216.0/22 permit
136.143.160.0/24 permit
136.143.161.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
@@ -1480,6 +1435,7 @@
148.105.0.0/16 permit
148.105.8.0/21 permit
149.72.0.0/16 permit
149.72.223.204 permit
149.72.248.236 permit
149.97.173.180 permit
150.230.98.160 permit
@@ -1537,7 +1493,6 @@
161.71.64.0/20 permit
162.247.216.0/22 permit
163.47.180.0/22 permit
163.47.180.0/23 permit
163.114.130.16 permit
163.114.132.120 permit
164.177.132.168 permit
@@ -1564,8 +1519,6 @@
167.89.75.164 permit
167.89.101.2 permit
167.89.101.192/28 permit
167.216.129.210 permit
167.216.131.180 permit
167.220.67.232/29 permit
168.138.5.36 permit
168.138.73.51 permit
@@ -1577,6 +1530,7 @@
169.148.131.0/24 permit
169.148.142.10 permit
169.148.144.0/25 permit
169.148.144.10 permit
170.10.68.0/22 permit
170.10.128.0/24 permit
170.10.129.0/24 permit
@@ -1614,8 +1568,7 @@
182.50.76.0/22 permit
182.50.78.64/28 permit
183.240.219.64/29 permit
185.4.120.0/23 permit
185.4.122.0/24 permit
185.4.120.0/22 permit
185.12.80.0/22 permit
185.58.84.93 permit
185.80.93.204 permit
@@ -1625,9 +1578,6 @@
185.189.236.0/22 permit
185.211.120.0/22 permit
185.250.236.0/22 permit
185.250.239.148 permit
185.250.239.168 permit
185.250.239.190 permit
188.125.68.132 permit
188.125.68.152/31 permit
188.125.68.156 permit
@@ -1638,7 +1588,6 @@
188.125.68.184 permit
188.125.68.186 permit
188.125.68.192 permit
188.125.69.0/24 permit
188.125.69.105 permit
188.125.69.110 permit
188.125.69.112 permit
@@ -1681,9 +1630,6 @@
192.0.64.0/18 permit
192.18.139.154 permit
192.30.252.0/22 permit
192.64.236.0/24 permit
192.64.237.0/24 permit
192.64.238.0/24 permit
192.161.144.0/20 permit
192.162.87.0/24 permit
192.237.158.0/23 permit
@@ -1721,7 +1667,6 @@
198.37.144.0/20 permit
198.37.152.186 permit
198.61.254.0/23 permit
198.61.254.21 permit
198.61.254.231 permit
198.178.234.57 permit
198.244.48.0/20 permit
@@ -1764,7 +1709,6 @@
203.188.194.251 permit
203.188.195.240/30 permit
203.188.195.244/31 permit
203.188.197.0/24 permit
203.188.197.193 permit
203.188.197.194/31 permit
203.188.197.196/30 permit
@@ -1774,7 +1718,6 @@
203.188.197.216/29 permit
203.188.197.232/29 permit
203.188.197.240/29 permit
203.188.200.0/24 permit
203.188.200.56/31 permit
203.188.200.58 permit
203.188.200.60/30 permit
@@ -1794,7 +1737,6 @@
204.14.232.0/21 permit
204.14.232.64/28 permit
204.14.234.64/28 permit
204.29.186.0/23 permit
204.75.142.0/24 permit
204.79.197.212 permit
204.92.114.187 permit
@@ -1859,11 +1801,7 @@
208.43.21.28/30 permit
208.43.21.64/29 permit
208.43.21.72/30 permit
208.46.212.80 permit
208.46.212.208/31 permit
208.46.212.210 permit
208.64.132.0/22 permit
208.71.40.0/24 permit
208.71.40.63 permit
208.71.40.64/31 permit
208.71.40.174/31 permit
@@ -1882,7 +1820,6 @@
208.71.41.172/31 permit
208.71.41.188/30 permit
208.71.41.192/31 permit
208.71.42.0/24 permit
208.71.42.190/31 permit
208.71.42.192/28 permit
208.71.42.208/30 permit
@@ -1890,10 +1827,9 @@
208.71.42.214 permit
208.72.249.240/29 permit
208.74.204.0/22 permit
208.74.204.5 permit
208.74.204.9 permit
208.75.120.0/22 permit
208.75.121.246 permit
208.75.122.246 permit
208.82.237.96/29 permit
208.82.237.104/31 permit
208.82.238.96/29 permit
@@ -1906,16 +1842,11 @@
209.46.117.168 permit
209.46.117.179 permit
209.61.151.0/24 permit
209.61.151.236 permit
209.61.151.249 permit
209.61.151.251 permit
209.67.98.46 permit
209.67.98.59 permit
209.85.128.0/17 permit
212.82.96.0/24 permit
212.82.96.32/27 permit
212.82.96.64/29 permit
212.82.98.0/24 permit
212.82.98.32/29 permit
212.82.98.64/27 permit
212.82.98.96/30 permit
@@ -1952,12 +1883,41 @@
212.82.111.228/31 permit
212.82.111.230 permit
212.123.28.40 permit
212.227.15.0/24 permit
212.227.15.0/25 permit
212.227.17.0/27 permit
212.227.126.128/25 permit
212.227.15.3 permit
212.227.15.4 permit
212.227.15.5 permit
212.227.15.6 permit
212.227.15.14 permit
212.227.15.15 permit
212.227.15.18 permit
212.227.15.19 permit
212.227.15.25 permit
212.227.15.26 permit
212.227.15.29 permit
212.227.15.44 permit
212.227.15.45 permit
212.227.15.46 permit
212.227.15.47 permit
212.227.15.50 permit
212.227.15.52 permit
212.227.15.53 permit
212.227.15.54 permit
212.227.15.55 permit
212.227.17.11 permit
212.227.17.12 permit
212.227.17.18 permit
212.227.17.19 permit
212.227.17.20 permit
212.227.17.21 permit
212.227.17.22 permit
212.227.17.26 permit
212.227.17.28 permit
212.227.17.29 permit
212.227.126.224 permit
212.227.126.225 permit
212.227.126.226 permit
212.227.126.227 permit
213.46.255.0/24 permit
213.165.64.0/23 permit
213.199.128.139 permit
213.199.128.145 permit
213.199.138.181 permit
@@ -1968,7 +1928,6 @@
216.17.150.251 permit
216.22.15.224/27 permit
216.24.224.0/20 permit
216.39.60.0/23 permit
216.39.60.154/31 permit
216.39.60.156/30 permit
216.39.60.160/30 permit
@@ -1986,7 +1945,6 @@
216.39.61.170 permit
216.39.61.175 permit
216.39.61.238/31 permit
216.39.62.0/24 permit
216.39.62.32/28 permit
216.39.62.48/29 permit
216.39.62.56/30 permit
@@ -2006,7 +1964,6 @@
216.98.158.0/24 permit
216.99.5.67 permit
216.99.5.68 permit
216.109.114.0/24 permit
216.109.114.32/27 permit
216.109.114.64/29 permit
216.113.160.0/24 permit
@@ -2021,10 +1978,10 @@
216.203.30.55 permit
216.203.33.178/31 permit
216.205.24.0/24 permit
216.221.160.0/19 permit
216.239.32.0/19 permit
217.72.192.64/26 permit
217.72.192.248/29 permit
217.72.207.0/27 permit
217.72.192.77 permit
217.72.192.78 permit
217.77.141.52 permit
217.77.141.59 permit
217.175.194.0/24 permit

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -12,7 +12,8 @@ $alertbox_log_parser = alertbox_log_parser($_SESSION);
$alerts = [];
if (is_array($alertbox_log_parser)) {
foreach ($alertbox_log_parser as $log) {
$message = strtr($log['msg'], ["\n" => '', "\r" => '', "\t" => '<br>']);
$message = htmlspecialchars($log['msg'], ENT_QUOTES);
$message = strtr($message, ["\n" => '', "\r" => '', "\t" => '<br>']);
$alerts[trim($log['type'], '"')][] = trim($message, '"');
}
$alert = array_filter(array_unique($alerts));

View File

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

View File

@@ -143,6 +143,7 @@ function rspamd_maps($_action, $_data = null) {
return false;
}
$maps = (array)$_data['map'];
$valid_maps = array();
foreach ($maps as $map) {
foreach ($RSPAMD_MAPS as $rspamd_map_type) {
if (!in_array($map, $rspamd_map_type)) {
@@ -151,9 +152,12 @@ function rspamd_maps($_action, $_data = null) {
'log' => array(__FUNCTION__, $_action, '-'),
'msg' => array('global_map_invalid', $map)
);
continue;
} else {
array_push($valid_maps, $map);
}
}
}
foreach ($valid_maps as $map) {
try {
if (file_exists('/rspamd_custom_maps/' . $map)) {
$map_content = trim($_data['rspamd_map_data']);

View File

@@ -3,7 +3,7 @@ function init_db_schema() {
try {
global $pdo;
$db_version = "08012024_1442";
$db_version = "26022024_1433";
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
@@ -273,6 +273,7 @@ function init_db_schema() {
"html" => "LONGTEXT",
"plain" => "LONGTEXT",
"mbox_exclude" => "JSON NOT NULL DEFAULT ('[]')",
"alias_domain_exclude" => "JSON NOT NULL DEFAULT ('[]')",
"skip_replies" => "TINYINT(1) NOT NULL DEFAULT '0'"
),
"keys" => array(
@@ -978,6 +979,18 @@ function init_db_schema() {
),
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
),
"sogo_admin" => array(
"cols" => array(
"c_key" => "VARCHAR(255) NOT NULL DEFAULT ''",
"c_content" => "mediumtext NOT NULL",
),
"keys" => array(
"primary" => array(
"" => array("c_key")
)
),
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
),
"pushover" => array(
"cols" => array(
"username" => "VARCHAR(255) NOT NULL",

View File

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

View File

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

View File

@@ -47,6 +47,12 @@ function api_log($_data) {
}
}
// Block requests not intended for direct API use by checking the 'Sec-Fetch-Dest' header.
if (isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] !== 'empty') {
header('HTTP/1.1 403 Forbidden');
exit;
}
if (isset($_GET['query'])) {
$query = explode('/', $_GET['query']);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -52,7 +52,7 @@
"delete2duplicates": "Supprimer les doubles à destination",
"description": "Description",
"destination": "Destination",
"disable_login": "Désactiver l'authentification (les mails entrants resteront acceptés)",
"disable_login": "Désactiver l'authentification (les e-mails entrants resteront acceptés)",
"domain": "domaine",
"domain_matches_hostname": "Le domaine %s correspond à la machine (hostname)",
"domain_quota_m": "Quota total du domaine (Mo)",
@@ -107,7 +107,8 @@
"validation_success": "Validation réussie",
"bcc_dest_format": "La destination Cci doit être une seule adresse e-mail valide.<br>Si vous avez besoin d'envoyer une copie à plusieurs adresses, créez un alias et utilisez-le ici.",
"tags": "Etiquettes",
"app_passwd_protocols": "Protocoles autorisés pour le mot de passe de l'application"
"app_passwd_protocols": "Protocoles autorisés pour le mot de passe de l'application",
"dry": "Simuler la synchronisation"
},
"admin": {
"access": "Accès",
@@ -169,7 +170,7 @@
"domain_s": "Domaine(s)",
"duplicate": "Dupliquer",
"duplicate_dkim": "Dupliquer l'enregistrement DKIM",
"edit": "Editer",
"edit": "Éditer",
"empty": "Aucun résultat",
"excludes": "Exclure ces destinataires",
"f2b_ban_time": "Durée du bannissement (s)",
@@ -209,7 +210,7 @@
"link": "Lien",
"loading": "Veuillez patienter…",
"logo_info": "Votre image sera redimensionnée à une hauteur de 40 pixels pour la barre de navigation du haut et à un maximum de 250 pixels en largeur pour la page d'accueil. Un graphique extensible est fortement recommandé.",
"lookup_mx": "Faire correspondre la destination à MX (.outlook.com pour acheminer tous les messages ciblés vers un MX * .outlook.com sur ce tronçon)",
"lookup_mx": "Faire correspondre la destination à MX (<code>.*\\.google\\.com</code> pour acheminer tous les messages ciblés vers un MX se terminant par google.com sur ce tronçon)",
"main_name": "\"mailcow UI\" nom",
"merged_vars_hint": "Les lignes grisées ont été importées depuis <code>vars.(local.)inc.php</code> et ne peuvent pas être modifiées.",
"message": "Message",
@@ -330,7 +331,14 @@
"logo_normal_label": "Normal",
"logo_dark_label": "Inversé pour le mode sombre",
"allowed_methods": "Access-Control-Allow-Methods",
"allowed_origins": "Access-Control-Allow-Origin"
"allowed_origins": "Access-Control-Allow-Origin",
"copy_to_clipboard": "Texte copié dans le presse-papier !",
"password_policy_special_chars": "Doit contenir des caractères spéciaux",
"rsettings_preset_4": "Désactiver Rspamd pour un domaine",
"oauth2_apps": "Applications OAuth2",
"password_length": "Longueur des mots de passe",
"password_policy_chars": "Doit contenir au moins une lettre",
"password_policy_length": "La longueur minimale du mot de passe est de %d"
},
"danger": {
"access_denied": "Accès refusé ou données de formulaire non valides",
@@ -344,7 +352,7 @@
"app_passwd_id_invalid": "Le mot de passe ID %s de l'application est non valide",
"bcc_empty": "La destination BCC destination ne peut pas être vide",
"bcc_exists": "Une carte de transport BCC %s existe pour le type %s",
"bcc_must_be_email": "Le destination BCC %s n'est pas une adresse mail valide",
"bcc_must_be_email": "Le destination BCC %s n'est pas une adresse e-mail valide",
"comment_too_long": "Le commentaire est trop long, 160 caractère max sont permis",
"defquota_empty": "Le quota par défaut par boîte ne doit pas être 0.",
"description_invalid": "La description des ressources pour %s est non valide",
@@ -454,7 +462,9 @@
"demo_mode_enabled": "Le mode de démonstration est activé",
"template_exists": "La template %s existe déja",
"template_id_invalid": "Le numéro de template %s est invalide",
"template_name_invalid": "Le nom de la template est invalide"
"template_name_invalid": "Le nom de la template est invalide",
"img_dimensions_exceeded": "L'image dépasse les dimensions maximales",
"img_size_exceeded": "L'image dépasse la taille maximale de fichier"
},
"debug": {
"chart_this_server": "Graphique (ce serveur)",
@@ -483,7 +493,7 @@
"cname_from_a": "Valeur dérivée de lenregistrement A/AAAA. Ceci est supporté tant que lenregistrement indique la bonne ressource.",
"dns_records": "Enregistrements DNS",
"dns_records_24hours": "Veuillez noter que les modifications apportées au DNS peuvent prendre jusquà 24 heures pour que leurs états actuels soient correctement reflétés sur cette page. Il est conçu comme un moyen pour vous de voir facilement comment configurer vos enregistrements DNS et de vérifier si tous vos enregistrements sont correctement stockés dans les DNS.",
"dns_records_docs": "Veuillez également consulter <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">la documentation</a>.",
"dns_records_docs": "Veuillez également consulter <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">la documentation</a>.",
"dns_records_data": "Données correcte",
"dns_records_name": "Nom",
"dns_records_status": "Etat courant",
@@ -493,7 +503,7 @@
"edit": {
"active": "Actif",
"advanced_settings": "Réglages avancés",
"alias": "Editer les alias",
"alias": "Éditer les alias",
"allow_from_smtp": "Restreindre l'utilisation de <b>SMTP</b> à ces adresses IP",
"allow_from_smtp_info": "Laissez vide pour autoriser tous les expéditeurs.<br>Adresses IPv4/IPv6 et réseaux.",
"allowed_protocols": "Protocoles autorisés",
@@ -511,12 +521,12 @@
"delete_ays": "Veuillez confirmer le processus de suppression.",
"description": "Description",
"disable_login": "Refuser louverture de session (le courrier entrant est toujours accepté)",
"domain": "Edition du domaine",
"domain_admin": "Edition de l'administrateur du domaine",
"domain": "Édition du domaine",
"domain_admin": "Édition de l'administrateur du domaine",
"domain_quota": "Quota du domaine",
"domains": "Domaines",
"dont_check_sender_acl": "Désactiver la vérification de lexpéditeur pour le domaine %s (+ alias de domaines)",
"edit_alias_domain": "Edition des alias de domaine",
"edit_alias_domain": "Édition des alias de domaine",
"encryption": "Cryptage",
"exclude": "Exclure des objets (regex)",
"extended_sender_acl": "Adresses de lexpéditeur externe",
@@ -532,7 +542,7 @@
"inactive": "Inactif",
"kind": "Type",
"last_modified": "Dernière modification",
"mailbox": "Edition de la boîte mail",
"mailbox": "Édition de la boîte mail",
"mailbox_quota_def": "Quota par défaut de la boîte",
"max_aliases": "Nombre max. d'alias",
"max_mailboxes": "Nombre max. de boîtes possibles",
@@ -588,7 +598,7 @@
"target_domain": "Domaine cible",
"timeout1": "Délai de connexion à lhôte distant",
"timeout2": "Délai de connexion à lhôte local",
"title": "Editer l'objet",
"title": "Éditer l'objet",
"unchanged_if_empty": "Si non modifié, laisser en blanc",
"username": "Nom d'utilisateur",
"validate_save": "Valider et sauver",
@@ -689,7 +699,7 @@
"domain_quota": "Quota",
"domain_quota_total": "Quota total du domaine",
"domains": "Domaines",
"edit": "Editer",
"edit": "Éditer",
"empty": "Pas de résulats",
"enable_x": "Activer",
"excludes": "Exclut",
@@ -1081,7 +1091,7 @@
"sync_jobs": "Jobs de synchronisation",
"tag_handling": "Régler la manipulation du courrier étiqueté",
"tag_help_example": "Exemple pour une adresse e-mail étiquetée : me<b>+Facebook</b>@example.org",
"tag_help_explain": "Dans un sous-dossier : un nouveau sous-dossier nommé selon l'étiquette sera créé sous INBOX (\"INBOX/Facebook\").<br>\nDans le sujet : le nom des balises sera ajouté au début du sujet du mail, exemple : \"[Facebook] My News\".",
"tag_help_explain": "Dans un sous-dossier : un nouveau sous-dossier nommé selon l'étiquette sera créé sous INBOX (\"INBOX/Facebook\").<br>\nDans le sujet : le nom des balises sera ajouté au début du sujet de l'e-mail, exemple : \"[Facebook] My News\".",
"tag_in_none": "Ne rien faire",
"tag_in_subfolder": "Dans un sous dossier",
"tag_in_subject": "Dans le sujet",

View File

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

View File

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

View File

@@ -4,7 +4,17 @@
"filters": "Filtri",
"recipient_maps": "Saņēmēja kartes",
"syncjobs": "Sinhronizācijas uzdevumi",
"spam_score": "Mēstules novērtējums"
"spam_score": "Mēstules novērtējums",
"alias_domains": "Pievienot aizstājdomēnus",
"spam_alias": "Pagaidu aizstājvārdi",
"app_passwds": "Lietotņu paroļu pārvaldība",
"delimiter_action": "Atdalītāja darbība",
"domain_desc": "Mainīt domēna aprakstu",
"domain_relayhost": "Mainīt domēna relayhost",
"eas_reset": "EAS ierīču atiestatīšana",
"extend_sender_acl": "Ļauj paplašināt sūtītāja ACL ar ārējām adresēm",
"login_as": "Pieteikšanās kā pastkastes lietotājam",
"mailbox_relayhost": "Pasta kastītes relayhost maiņa"
},
"add": {
"activate_filter_warn": "Visi pārējie filtri tiks deaktivizēti, kad aktīvs ir atzīmēts.",
@@ -12,9 +22,9 @@
"add": "Pievienot",
"add_domain_only": "Tikai pievienot domēnu",
"add_domain_restart": "Pievienot domēnu un restartēt SOGo",
"alias_address": "Alias addrese/s",
"alias_address": "Aizstājaddrese/s",
"alias_address_info": "<small>Pilna epasta addrese/s vai @piemērs.com, lai notvertu visas domēna ziņas (komatu atdalītas). <b>tikai mailcow domēni</b>.</small>",
"alias_domain": "Alias domēni",
"alias_domain": "Aizstājdomēni",
"alias_domain_info": "<small>Tikai derīgi domēna vārdi (komatu atdalīti).</small>",
"automap": "Mēģiniet automatizēt mapes (\"Nosūtītie vienumi\", \"Nosūtītie\" => \"Nosūtītie\" etc.)",
"backup_mx_options": "Dublējuma MX iespējas",
@@ -32,14 +42,14 @@
"kind": "Veids",
"mailbox_quota_m": "Maks. kvota pastkastei (MiB)",
"mailbox_username": "Lietotājvārds (kriesā daļa no epasta adreses)",
"max_aliases": "Maks. iespejamās aliases",
"max_aliases": "Lielākais pieļaujamo aizstājvārdu skaits",
"max_mailboxes": "Maks. iespējamās pastkastes",
"mins_interval": "Aptauajs intervāls (minūtes)",
"multiple_bookings": "Vairākas rezervācijas",
"password": "Parole",
"password_repeat": "Apstiprinājuma parole (atkārtot)",
"port": "Ports",
"post_domain_add": "Jums būs nepieciešams atsāknēt SOGo servisa konteineru pēc jauna domēna pievienošanas!",
"post_domain_add": "SOGO konteineru \"sogo-mailcow\" ir nepieciešams pārsāknēt pēc jauna domēna pievienošanas.<br><br>Papildus vajadzētu pārskatīt domēnu DNS konfigurāciju. Tiklīdz DNS konfigurācija ir apstiprināta, jāpārsāknē \"acme-mailcow\", lai automātiski izveidotu sertifikātus jaunajam domēnam (autoconfig.&lt;domain&gt;, autodiscover.&lt;domain&gt;).<br>Šis solis ir izvēles un tiks atkārtots ik pēc 24 stundām.",
"quota_mb": "Kvota (MiB)",
"relay_all": "Pārsūtīt visus saņēmējus",
"relay_all_info": "<small>Ja izvēlies <b>nepārsūtīt</b> visus saņēmējus, tad Tev būs nepieciešams pievienot (\"tukšu\") pastkasti katram saņēmējam, kas būtu jāpārsūta.</small>",
@@ -56,7 +66,8 @@
"target_domain": "Mērķa domēns",
"username": "Lietotājvārds",
"validate": "Apstiprināt",
"validation_success": "Apstiprināts veiksmīgi"
"validation_success": "Apstiprināts veiksmīgi",
"bcc_dest_format": "BCC galamērķim ir jābūt vienai derīgai e-pasta adresei.<br>Ja ir nepieciešams nosūtīt kopiju vairākām adresēm, jāizveido aizstājvārds un jāizmanto tas šeit."
},
"admin": {
"access": "Pieeja",
@@ -118,7 +129,7 @@
"password_repeat": "Apstiprināt paroli (atkārtot)",
"private_key": "Privāta atslēga",
"quarantine": "Karantīna",
"quarantine_exclude_domains": "Izslēgt domēnus un alias-domēnus:",
"quarantine_exclude_domains": "Neņemt vērā domēnus un aizstājdomēnus",
"quarantine_max_size": "Maks. izmērs MiB (lielāki vienumi ir atbrīvoti):",
"quarantine_retention_size": "Atlikumi pastkastēs:",
"r_active": "Aktīvie ierobežojumi",
@@ -129,7 +140,7 @@
"regen_api_key": "Reģenerēt API atslēgu",
"relay_from": "\"No:\" addrese",
"relay_run": "Palaist testu",
"relayhosts_hint": "Definējiet relejhostus šeit, lai tos varētu izvēlēties domēna konfigurācijas logā.",
"relayhosts_hint": "Norādīt no sūtītāja atkarīgas piegādes, lai varētu tos atlasīt domēnu konfigurācijas uzvednē.<br>\n Piegādes pakalpojums vienmēr ir \"smtp\", tādējādi tiks mēģināts TLS, kad piedāvāts. Iekļautais TLS (SMTPS) netiek atbalstīts. Tiek ņemts vērā lietotāja atsevišķais izejošā TLS nosacījuma iestatījums.<br>\n Ietekmē atlasītos domēnus, tajā skaitā aizstājdomēnus.",
"remove": "Noņemt",
"remove_row": "Noņemt rindu",
"reset_default": "Atiestatīt uz noklusējumu",
@@ -148,16 +159,19 @@
"username": "Lietotājvārds",
"generate": "izveidot",
"message": "Ziņojums",
"last_applied": "Pēdējoreiz pielietots"
"last_applied": "Pēdējoreiz pielietots",
"f2b_regex_info": "Vērā ņemtie žurnāli: SOGO, Postfix, Dovecot, PHP-FPM",
"sys_mails": "Sistēmas pasts",
"ip_check_disabled": "IP pārbaude ir atspējota. To var iespējot<br><strong>Sistēma > Konfigurācija > iespējas > Pielāgot</strong>"
},
"danger": {
"access_denied": "Piekļuve liegta, vai nepareizi dati",
"alias_domain_invalid": "Alias domēns ir nepareizs",
"alias_empty": "Alias adrese nevar būt tukša",
"alias_goto_identical": "Alias un domēnvārds nevar būt identisks",
"alias_invalid": "Alias adrese nepareiza",
"aliasd_targetd_identical": "Alias domēns nevar būt vienāds ar mērķa domēnu",
"aliases_in_use": "Maks. aliases jabūt lielākām vai vienādām ar %d",
"alias_domain_invalid": "Aizstājdomēns %s ir nederīgs",
"alias_empty": "Aizstājadrese nedrīkst būt tukša",
"alias_goto_identical": "Aizstājvārds un mērķa adrese nedrīkst būt vienādi",
"alias_invalid": "Aizstājadrese %s ir nederīga",
"aliasd_targetd_identical": "Aizstājdomēns nedrīkst būt vienāds ar mērķa domēnu: %s",
"aliases_in_use": "Pieļaujamajam aizstājvārdu skaitam jābūt lielākam vai vienādam ar %d",
"description_invalid": "Resursa apraksts ir nederīgs",
"dkim_domain_or_sel_invalid": "DKIM domēns vai selektors nepareizs",
"domain_exists": "Domēns %s jau pastāv",
@@ -165,15 +179,15 @@
"domain_not_empty": "Nevar noņemt neaizpildītu domēnu",
"domain_not_found": "Domēns %s nav atrasts",
"domain_quota_m_in_use": "Domēna kvotai jābūt lielākai vai vienādai ar %s MiB",
"goto_empty": "Goto adrese nevar būt tukša",
"goto_empty": "Aizstājādresei jāsatur vismaz viena derīga mērķa adrese",
"goto_invalid": "Goto adrese nepareiza",
"imagick_exception": "Kļūda: Imagick izņēmums, lasot attēlu",
"img_invalid": "Nevar apstiprināt attēla failu",
"img_tmp_missing": "Nevar apstiprināt attēla failu: pagaidu failu nav atrasts",
"invalid_mime_type": "Nederīgs mime tips",
"is_alias": "%s jau ir zināms alias",
"is_alias_or_mailbox": "%s jau ir zināms alias, pastkastes vai alias addrese izvērsta no alias domēna.",
"is_spam_alias": "%s ir jau zināms spam alias",
"is_alias": "%s jau ir zināma kā aizstājadrese",
"is_alias_or_mailbox": "%s jau ir zināms kā aizstājvārds, pastkaste vai aizstājadrese, kas ir izvērsta no aizstājdomēna.",
"is_spam_alias": "%s jau ir zināma kā pagaidu aizstājadrese (aizstājadrese mēstulēm)",
"last_key": "Pēdējo atslēgu nevar izdzēst, tā vietā jāatspējo divpakāpju pārbaude.",
"login_failed": "Ielogošanās neveiksmīga",
"mailbox_invalid": "Pastkastes vārds ir nederīgs",
@@ -181,7 +195,7 @@
"mailbox_quota_exceeds_domain_quota": "Pastkastes izmērs pārsniedz maksimāli pieļaujamo",
"mailbox_quota_left_exceeded": "Nav pietiekami daudz vietas (atlikusī vieta: %d MiB)",
"mailboxes_in_use": "Maks. pastkastēm jābūt lielākām vai vienādām ar %d",
"max_alias_exceeded": "Visas aliases izmantotas",
"max_alias_exceeded": "Pārsniegts pieļaujamo aizstājvārdu skaits",
"max_mailbox_exceeded": "Maksimālais pastkastšu skaits sasniegts (%d of %d)",
"max_quota_in_use": "Pastkastes kvotai jābūt lielākai vai vienādai %d MiB",
"maxquota_empty": "Maksimālais pieļaujamais izmērs nevar būt 0.",
@@ -213,7 +227,7 @@
},
"edit": {
"active": "Aktīvs",
"alias": "Rediģēt alias",
"alias": "Labot aizstājvārdu",
"automap": "Mēģiniet automatizēt mapes (\"Nosūtītie vienumi\", \"Nosūtītie\" => \"Nosūtītie\" utt.)",
"backup_mx_options": "Dublēt MX iespējas",
"delete1": "Dzēst no avota, kad pabeigts",
@@ -224,8 +238,8 @@
"domain_admin": "Labot domēna administratoru",
"domain_quota": "Domēna kvota",
"domains": "Domēni",
"dont_check_sender_acl": "Atspējot domēna sūtītāju pārbaudi %s + alias domēni",
"edit_alias_domain": "Rediģēt alias domēnu",
"dont_check_sender_acl": "Atspējot sūtītāju pārbaudi domēnam %s (+ aizstājdomēni)",
"edit_alias_domain": "Labot aizstājdomēnu",
"encryption": "Šifrēšana",
"exclude": "Neiekļaut objektus (regex)",
"force_pw_update": "Piespiedu paroles atjaunošana pie nākošās pieslēgšanās",
@@ -235,7 +249,7 @@
"inactive": "Neaktīvs",
"kind": "Veids",
"mailbox": "Rediģēt pastkasti",
"max_aliases": "Maks. aliases",
"max_aliases": "Lielākais aizstājvārdu skaits",
"max_mailboxes": "Maks. iespējamās pastkastes",
"max_quota": "Maks. kvota uz pastkasti (MiB)",
"maxage": "Maximum age of messages in days that will be polled from remote<br><small>(0 = ignore age)</small>",
@@ -267,7 +281,15 @@
"unchanged_if_empty": "Ja neizmainīts atstājiet tukšu",
"username": "Lietotājvārds",
"validate_save": "Apstiprināt un saglabāt",
"last_modified": "Pēdējoreiz mainīts"
"last_modified": "Pēdējoreiz mainīts",
"domain_footer_skip_replies": "Neņemt vērā kājeni atbildes e-pastos",
"bcc_dest_format": "BCC galamērķim jābūt vienai derīgai e-pasta adresei.<br>Ja ir nepieciešams nosūtīt kopiju uz vairākām adresēm, jāizveido aizstājvārds, un tas ir jāizmanto šeit.",
"extended_sender_acl_info": "Vajadzētu ievietot DKIM domēna atslēgu, ja tā ir pieejama.<br>\n Jāatceras pievienot šo serveri attiecīgajam SPF TXT ierakstam.<br>\n Kad vien šim serverim tiek pievienots domēns vai aizstājdomēns, kas pārklājas ar ārēju adresi, ārējā adrese tiek noņemta.<br>\n Jāizmanto @domain.tld, lai ļautu nosūtīt kā *@domain.tld.",
"pushover_info": "Pašpiegādes paziņojumu iestatījumi tiks piemēroti visiem tīrajiem (ne surogātpasta) sūtījumiem, kas piegādāti <b>%s</b>, tostarp aizstājvārdiem (kopīgotiem, nekopīgotiem, ar birkām).",
"mailbox_relayhost_info": "Tiek piemērots tikai pastkastei un tiešajiem aizstājvārdiem, aizstāj domēna retranslācijas saimniekdatoru.",
"sender_acl_info": "Ja pastkastes lietotājam A ir ļauts sūtīt kā pastkastes lietotājam B, sūtītāja adrese SOGo netiek automātiski parādīta kā atlasāms lauks \"no\".<br>.\n Pastkastes lietotājam B SOGo ir jāizveido pilnvarojums, lai pastkastes lietotājs A varētu izvēlēties tā adresi kā sūtītāja. Lai SOGo pilnvarotu pastkasti, pasta skatā jāizmanto izvēlne (trīs punkti) pa labi no pastkastes nosaukuma augšējā kreisajā pusē. Šī darbība neattiecas uz aizstājadresēm.",
"sogo_visible": "Aizstājvārds ir redzams SOGo",
"sogo_visible_info": "Šī iespēja ietekmē tikai tos objektus, kurus var parādīt SOGo (koplietojamās vai nekoplietojamās aizstājadreses, kas norāda uz vismaz vienu vietējo pastkasti). Ja paslēpts, netiks parādīts SOGo kā atlasāms sūtītājs."
},
"footer": {
"cancel": "Atcelt",
@@ -282,11 +304,12 @@
"header": {
"administration": "Administrēšana",
"debug": "Atkļūdošana",
"email": "E-Mail",
"mailcow_config": "Configurācija",
"email": "E-pasts",
"mailcow_config": "Konfigurācija",
"quarantine": "Karantīna",
"restart_sogo": "Restartēt SOGo",
"user_settings": "Lietotāja uzstādījumi"
"user_settings": "Lietotāja uzstādījumi",
"mailcow_system": "Sistēma"
},
"info": {
"no_action": "No action applicable"
@@ -385,7 +408,10 @@
"daily": "Ik dienu",
"hourly": "Ik stundu",
"last_mail_login": "Pēdējā pieteikšanās pastkastē",
"mailbox": "Pastkaste"
"mailbox": "Pastkaste",
"sieve_preset_2": "Vienmēr atzīmēt noteikta sūtītāja e-pastu kā izlasītu",
"open_logs": "Atvērt žurnālus",
"sieve_preset_8": "Pārvirzīt noteikta sūtītāja e-pastu, atzīmēt kā izlasītu un ievietot to apakšmapē"
},
"quarantine": {
"action": "Darbības",
@@ -408,10 +434,14 @@
"subj": "Priekšmets",
"text_from_html_content": "Saturs (konvertēts html)",
"text_plain_content": "Saturs (teksts/vienkāršs)",
"toggle_all": "Pārslēgt visu"
"toggle_all": "Pārslēgt visu",
"disabled_by_config": "Pašreizējā sistēmas konfigurācija atspējo karantīnu. Lūgums iestatīt \"saglabāšanu katrai pastkastītei\" un \"lielākais pieļaujamais lielums\" karantīnas vienumiem.",
"qhandler_success": "Pieprasījums veiksmīgi nosūtīts sistēmai. Tagad var aizvērt logu.",
"qinfo": "Karantīnas sistēma datubāzē saglabās noraidīto pastu (sūtītājam <em>netiks</em> radīts iespaids par piegādātu pastu), kā arī pastu, kas tiek piegādāts kā kopija pastkastes mēstuļu mapē.\n <br>\"Apgūt kā surogātpastu un izdzēst\" apgūs ziņojumu kā surogātpastu ar Bajesa teorēmu un aprēķinās arī nestriktas jaucējvērtības, lai nākotnē noraidītu līdzīgus ziņojumus.\n <br>Lūgums apzināties, ka vairāku ziņojumu apgūšana var būt laikietilpīga atkarībā no sistēmas.<br>Melnā saraksta vienumi karantīnā netiek iekļauti."
},
"queue": {
"queue_manager": "Queue Manager"
"queue_manager": "Queue Manager",
"info": "Pasta rinda satur visus e-pastus, kas gaida piegādi. Ja e-pasts ir iestrēdzis pasta rindā ilgu laiku, sistēma to automātiski izdzēš.<br>Attiecīgā pasta kļūdas ziņojums sniedz informāciju par to, kāpēc pastu neizdevās piegādāt."
},
"start": {
"help": "Rādīt/Paslēp palīdzības paneli",
@@ -552,12 +582,13 @@
"tls_enforce_in": "Piespiest TLS ienākošajiem",
"tls_enforce_out": "Piespiest TLS izejošajiem",
"tls_policy": "Šifrēšanas politika",
"tls_policy_warning": "<strong>Uzmanību:</strong> Ja jūs izlemjat aktivizēt e-pastu šifrēšanu, Jūs varat pazaudēt vēstules.<br>Vēstules kas neatbilst politikai atleks atpakaļ no sistēmas ar kļūdu.<br>Šī opcija attiecas uz Jūsu primāro e-pasta adresi, visām adresēm, kas atvasinātas no alias domēniem, kā arī aliasi <b>,kas saistīti tikai ar šo pastkasti</b> kā mērķis.",
"tls_policy_warning": "<strong>Brīdinājums:</strong> Ja tiek izlemts ieviest šifrēta pasta nosūtīšanu, var tikt pazaudēti e-pasti.<br>Ziņojumi, kas neatbilst nosacījumiem, pasta sistēma atmetīs ar kļūdu.<br>Šī iespēja attiecas uz galveno e-pasta adresi (pieteikšanās vārdu), visām adresēm, kas atvasinātas no aizsājdomēniem, kā arī aizstājadreses, <b>kas norāda tikai uz šo pastkasti</b>.",
"user_settings": "Lietotāja iestatījumi",
"username": "Lietotājvārds",
"waiting": "Waiting",
"week": "Nedēļa",
"weeks": "Nedēļas"
"weeks": "Nedēļas",
"open_logs": "Atvērt žurnālus"
},
"datatables": {
"paginate": {
@@ -566,6 +597,17 @@
}
},
"debug": {
"last_modified": "Pēdējoreiz mainīts"
"last_modified": "Pēdējoreiz mainīts",
"static_logs": "Nemainīgie žurnāli",
"no_update_available": "Sistēma izmanto jaunāko versiju",
"in_memory_logs": "Atmiņā esošie žurnāli",
"system_containers": "Sistēma un konteineri",
"current_time": "Sistēmas laiks",
"external_logs": "Ārējie žurnāli",
"logs": "Žurnāli"
},
"warning": {
"domain_added_sogo_failed": "Domēns pievienots, bet neizdevās pārsāknēt SOGO. Lūgums pārbaudīt servera žurnālus.",
"dovecot_restart_failed": "Dovecot neizdevās pārsāknēties. Lūgums pārbaudīt žurnālus."
}
}

View File

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

View File

@@ -510,7 +510,7 @@
"cname_from_a": "Waarde afgeleid van een A- of AAAA-vermelding.",
"dns_records": "DNS-configuratie",
"dns_records_24hours": "Houd er rekening mee dat wijzigingen aan DNS tot wel 24 uur in beslag kunnen nemen voordat ze op deze pagina worden weergegeven. Deze informatie is bedoeld om gemakkelijk te bekijken of de DNS-configuratie aan de eisen voldoet.",
"dns_records_docs": "Raadpleeg ook <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">de documentatie</a>.",
"dns_records_docs": "Raadpleeg ook <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">de documentatie</a>.",
"dns_records_data": "Correcte gegevens",
"dns_records_name": "Naam",
"dns_records_status": "Huidige staat",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -473,7 +473,7 @@
"cname_from_a": "Värde härstammar från A/AAAA-uppslaget. Detta stöds så länge som uppslaget pekar mot rätt resurs.",
"dns_records": "DNS-uppslag",
"dns_records_24hours": "Observera att ändringar gjorda i DNS kan ta upp till 24 timmar innan det visas korrekt på denna sida. Syftet med sidan är att enkelt se hur DNS-uppslagen är konfigurerade. Det är lätt att kontrollera att DNS-uppslagen är korrekt uppsatta.",
"dns_records_docs": "Se även <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">dokumentationen</a>.",
"dns_records_docs": "Se även <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">dokumentationen</a>.",
"dns_records_data": "Korrektdata",
"dns_records_name": "Namn",
"dns_records_status": "Nuvarande status",

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -356,7 +356,7 @@
"description_invalid": "%s 的资源描述无效",
"dkim_domain_or_sel_exists": "\"%s\"的 DKIM 密钥已存在,因此不会被覆盖",
"dkim_domain_or_sel_invalid": "DKIM 域名或选择器无效: %s",
"domain_cannot_match_hostname": "域名与主机名称不匹配",
"domain_cannot_match_hostname": "域名不应与主机名相同",
"domain_exists": "域名 %s 已存在",
"domain_invalid": "域名地址为空或无效",
"domain_not_empty": "不能删除非空域名 %s",
@@ -494,7 +494,7 @@
"dns_records": "DNS 记录",
"dns_records_24hours": "请注意 DNS 记录的更改可能需要24小时才可以使此页面的当前状态显示正确。此页面为你提供了一个可以便捷查询如何配置 DNS 记录以及检查你的 DNS 记录是否正确的方式。",
"dns_records_data": "正确数据",
"dns_records_docs": "请同时也参考这个<a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">文档</a>.",
"dns_records_docs": "请同时也参考这个<a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">文档</a>.",
"dns_records_name": "名称",
"dns_records_status": "当前状态",
"dns_records_type": "类型",

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,7 @@ version: '2.1'
services:
unbound-mailcow:
image: mailcow/unbound:1.20
image: mailcow/unbound:1.21
environment:
- TZ=${TZ}
- SKIP_UNBOUND_HEALTHCHECK=${SKIP_UNBOUND_HEALTHCHECK:-n}
@@ -21,6 +21,7 @@ services:
image: mariadb:10.5
depends_on:
- unbound-mailcow
- netfilter-mailcow
stop_grace_period: 45s
volumes:
- mysql-vol-1:/var/lib/mysql/
@@ -46,6 +47,8 @@ services:
volumes:
- redis-vol-1:/data/
restart: always
depends_on:
- netfilter-mailcow
ports:
- "${REDIS_PORT:-127.0.0.1:7654}:6379"
environment:
@@ -59,7 +62,7 @@ services:
- redis
clamd-mailcow:
image: mailcow/clamd:1.64
image: mailcow/clamd:1.65
restart: always
depends_on:
unbound-mailcow:
@@ -172,7 +175,7 @@ services:
- phpfpm
sogo-mailcow:
image: mailcow/sogo:1.121
image: mailcow/sogo:1.123
environment:
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
@@ -219,9 +222,10 @@ services:
- sogo
dovecot-mailcow:
image: mailcow/dovecot:1.27
image: mailcow/dovecot:1.28.2
depends_on:
- mysql-mailcow
- netfilter-mailcow
dns:
- ${IPV4_NETWORK:-172.22.1}.254
cap_add:
@@ -242,6 +246,8 @@ services:
environment:
- DOVECOT_MASTER_USER=${DOVECOT_MASTER_USER:-}
- DOVECOT_MASTER_PASS=${DOVECOT_MASTER_PASS:-}
- MAILCOW_REPLICA_IP=${MAILCOW_REPLICA_IP:-}
- DOVEADM_REPLICA_PORT=${DOVEADM_REPLICA_PORT:-}
- LOG_LINES=${LOG_LINES:-9999}
- DBNAME=${DBNAME}
- DBUSER=${DBUSER}
@@ -435,14 +441,8 @@ services:
- acme
netfilter-mailcow:
image: mailcow/netfilter:1.55
image: mailcow/netfilter:1.58
stop_grace_period: 30s
depends_on:
- dovecot-mailcow
- postfix-mailcow
- sogo-mailcow
- php-fpm-mailcow
- redis-mailcow
restart: always
privileged: true
environment:
@@ -453,6 +453,8 @@ services:
- SNAT6_TO_SOURCE=${SNAT6_TO_SOURCE:-n}
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
- REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
- MAILCOW_REPLICA_IP=${MAILCOW_REPLICA_IP:-}
- DISABLE_NETFILTER_ISOLATION_RULE=${DISABLE_NETFILTER_ISOLATION_RULE:-n}
network_mode: "host"
volumes:
- /lib/modules:/lib/modules:ro
@@ -553,6 +555,8 @@ services:
solr-mailcow:
image: mailcow/solr:1.8.2
restart: always
depends_on:
- netfilter-mailcow
volumes:
- solr-vol-1:/opt/solr/server/solr/dovecot-fts/data
ports:

View File

@@ -494,6 +494,9 @@ WEBAUTHN_ONLY_TRUSTED_VENDORS=n
# Otherwise it will work normally.
SPAMHAUS_DQS_KEY=
# Prevent netfilter from setting an iptables/nftables rule to isolate the mailcow docker network - y/n
# CAUTION: Disabling this may expose container ports to other neighbors on the same subnet, even if the ports are bound to localhost
DISABLE_NETFILTER_ISOLATION_RULE=n
EOF
mkdir -p data/assets/ssl

View File

@@ -16,8 +16,6 @@ services:
build:
context: ./data/Dockerfiles/sogo
dockerfile: Dockerfile
args:
- SOGO_DEBIAN_REPOSITORY=http://packages.inverse.ca/SOGo/nightly/5/debian/
dovecot-mailcow:
build: ./data/Dockerfiles/dovecot

View File

@@ -481,6 +481,7 @@ CONFIG_ARRAY=(
"WEBAUTHN_ONLY_TRUSTED_VENDORS"
"SPAMHAUS_DQS_KEY"
"SKIP_UNBOUND_HEALTHCHECK"
"DISABLE_NETFILTER_ISOLATION_RULE"
)
detect_bad_asn
@@ -754,6 +755,13 @@ for option in ${CONFIG_ARRAY[@]}; do
echo '# Skip Unbound (DNS Resolver) Healthchecks (NOT Recommended!) - y/n' >> mailcow.conf
echo 'SKIP_UNBOUND_HEALTHCHECK=n' >> mailcow.conf
fi
elif [[ ${option} == "DISABLE_NETFILTER_ISOLATION_RULE" ]]; then
if ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
echo '# Prevent netfilter from setting an iptables/nftables rule to isolate the mailcow docker network - y/n' >> mailcow.conf
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 ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
echo "${option}=n" >> mailcow.conf