Merge branch 'dev' into master

master
André Peters 2018-02-28 15:38:56 +01:00 committed by GitHub
commit b175125d02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
93 changed files with 2693 additions and 2140 deletions

1
.gitignore vendored
View File

@ -21,4 +21,3 @@ data/conf/nginx/*.conf
data/conf/nginx/*.custom data/conf/nginx/*.custom
data/conf/nginx/*.bak data/conf/nginx/*.bak
data/conf/dovecot/extra.conf data/conf/dovecot/extra.conf
data/conf/rspamd/override.d/worker-controller-password.inc

View File

@ -7,6 +7,7 @@ if [[ "${SKIP_CLAMD}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
fi fi
# Create log pipes # Create log pipes
mkdir /var/log/clamav
touch /var/log/clamav/clamd.log /var/log/clamav/freshclam.log touch /var/log/clamav/clamd.log /var/log/clamav/freshclam.log
mkfifo -m 600 /tmp/logpipe_clamd mkfifo -m 600 /tmp/logpipe_clamd
mkfifo -m 600 /tmp/logpipe_freshclam mkfifo -m 600 /tmp/logpipe_freshclam

View File

@ -2,7 +2,7 @@ FROM python:2-alpine
LABEL maintainer "Andre Peters <andre.peters@servercow.de>" LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
RUN apk add -U --no-cache iptables ip6tables RUN apk add -U --no-cache iptables ip6tables
RUN pip install docker flask flask-restful RUN pip install docker==3.0.1 flask flask-restful
COPY server.py / COPY server.py /
CMD ["python2", "-u", "/server.py"] CMD ["python2", "-u", "/server.py"]

View File

@ -22,7 +22,7 @@ class containers_get(Resource):
containers.update({container.attrs['Id']: container.attrs}) containers.update({container.attrs['Id']: container.attrs})
return containers return containers
except Exception as e: except Exception as e:
return jsonify(type='danger', msg=e) return jsonify(type='danger', msg=str(e))
class container_get(Resource): class container_get(Resource):
def get(self, container_id): def get(self, container_id):
@ -31,7 +31,7 @@ class container_get(Resource):
for container in docker_client.containers.list(all=True, filters={"id": container_id}): for container in docker_client.containers.list(all=True, filters={"id": container_id}):
return container.attrs return container.attrs
except Exception as e: except Exception as e:
return jsonify(type='danger', msg=e) return jsonify(type='danger', msg=str(e))
else: else:
return jsonify(type='danger', msg='no or invalid id defined') return jsonify(type='danger', msg='no or invalid id defined')
@ -44,7 +44,7 @@ class container_post(Resource):
container.stop() container.stop()
return jsonify(type='success', msg='command completed successfully') return jsonify(type='success', msg='command completed successfully')
except Exception as e: except Exception as e:
return jsonify(type='danger', msg=e) return jsonify(type='danger', msg=str(e))
elif post_action == 'start': elif post_action == 'start':
try: try:
@ -52,7 +52,7 @@ class container_post(Resource):
container.start() container.start()
return jsonify(type='success', msg='command completed successfully') return jsonify(type='success', msg='command completed successfully')
except Exception as e: except Exception as e:
return jsonify(type='danger', msg=e) return jsonify(type='danger', msg=str(e))
elif post_action == 'restart': elif post_action == 'restart':
try: try:
@ -60,36 +60,53 @@ class container_post(Resource):
container.restart() container.restart()
return jsonify(type='success', msg='command completed successfully') return jsonify(type='success', msg='command completed successfully')
except Exception as e: except Exception as e:
return jsonify(type='danger', msg=e) return jsonify(type='danger', msg=str(e))
elif post_action == 'exec': elif post_action == 'exec':
if not request.json or not 'cmd' in request.json: if not request.json or not 'cmd' in request.json:
return jsonify(type='danger', msg='cmd is missing') return jsonify(type='danger', msg='cmd is missing')
if request.json['cmd'] == 'sieve_list' and request.json['username']: if request.json['cmd'] == 'df' and request.json['dir']:
try: try:
for container in docker_client.containers.list(filters={"id": container_id}): for container in docker_client.containers.list(filters={"id": container_id}):
return container.exec_run(["/bin/bash", "-c", "/usr/local/bin/doveadm sieve list -u '" + request.json['username'].replace("'", "'\\''") + "'"], user='vmail') # Should be changed to be able to validate a path
directory = re.sub('[^0-9a-zA-Z/]+', '', request.json['dir'])
df_return = container.exec_run(["/bin/bash", "-c", "/bin/df -H " + directory + " | /usr/bin/tail -n1 | /usr/bin/tr -s [:blank:] | /usr/bin/tr ' ' ','"], user='nobody')
if df_return.exit_code == 0:
return df_return.output.rstrip()
else:
return "0,0,0,0,0,0"
except Exception as e: except Exception as e:
return jsonify(type='danger', msg=e) return jsonify(type='danger', msg=str(e))
elif request.json['cmd'] == 'sieve_list' and request.json['username']:
try:
for container in docker_client.containers.list(filters={"id": container_id}):
sieve_return = container.exec_run(["/bin/bash", "-c", "/usr/local/bin/doveadm sieve list -u '" + request.json['username'].replace("'", "'\\''") + "'"], user='vmail')
return sieve_return.output
except Exception as e:
return jsonify(type='danger', msg=str(e))
elif request.json['cmd'] == 'sieve_print' and request.json['script_name'] and request.json['username']: elif request.json['cmd'] == 'sieve_print' and request.json['script_name'] and request.json['username']:
try: try:
for container in docker_client.containers.list(filters={"id": container_id}): for container in docker_client.containers.list(filters={"id": container_id}):
return container.exec_run(["/bin/bash", "-c", "/usr/local/bin/doveadm sieve get -u '" + request.json['username'].replace("'", "'\\''") + "' '" + request.json['script_name'].replace("'", "'\\''") + "'"], user='vmail') return container.exec_run(["/bin/bash", "-c", "/usr/local/bin/doveadm sieve get -u '" + request.json['username'].replace("'", "'\\''") + "' '" + request.json['script_name'].replace("'", "'\\''") + "'"], user='vmail')
except Exception as e: except Exception as e:
return jsonify(type='danger', msg=e) return jsonify(type='danger', msg=str(e))
elif request.json['cmd'] == 'worker_password' and request.json['raw']: elif request.json['cmd'] == 'worker_password' and request.json['raw']:
try: try:
for container in docker_client.containers.list(filters={"id": container_id}): for container in docker_client.containers.list(filters={"id": container_id}):
hash = container.exec_run(["/bin/bash", "-c", "/usr/bin/rspamadm pw -e -p '" + request.json['raw'].replace("'", "'\\''") + "' 2> /dev/null"], user='_rspamd') hash = container.exec_run(["/bin/bash", "-c", "/usr/bin/rspamadm pw -e -p '" + request.json['raw'].replace("'", "'\\''") + "' 2> /dev/null"], user='_rspamd')
f = open("/access.inc", "w") if hash.exit_code == 0:
f.write('enable_password = "' + re.sub('[^0-9a-zA-Z\$]+', '', hash.rstrip()) + '";\n') hash = str(hash.output)
f.close() f = open("/access.inc", "w")
container.restart() f.write('enable_password = "' + re.sub('[^0-9a-zA-Z\$]+', '', hash.rstrip()) + '";\n')
return jsonify(type='success', msg='command completed successfully') f.close()
container.restart()
return jsonify(type='success', msg='command completed successfully')
else:
return jsonify(type='danger', msg='command did not complete, exit code was ' + int(hash.exit_code))
except Exception as e: except Exception as e:
return jsonify(type='danger', msg=e) return jsonify(type='danger', msg=str(e))
else: else:
return jsonify(type='danger', msg='Unknown command') return jsonify(type='danger', msg='Unknown command')

View File

@ -82,7 +82,7 @@ cat <<EOF > /usr/local/etc/dovecot/sql/dovecot-dict-sql-passdb.conf
driver = mysql driver = mysql
connect = "host=mysql dbname=${DBNAME} user=${DBUSER} password=${DBPASS}" connect = "host=mysql dbname=${DBNAME} user=${DBUSER} password=${DBPASS}"
default_pass_scheme = SSHA256 default_pass_scheme = SSHA256
password_query = SELECT password FROM mailbox WHERE username = '%u' AND domain IN (SELECT domain FROM domain WHERE domain='%d' AND active='1') password_query = SELECT password FROM mailbox WHERE username = '%u' AND domain IN (SELECT domain FROM domain WHERE domain='%d' AND active='1') AND JSON_EXTRACT(attributes, "$.force_pw_update") NOT LIKE '%1%'
user_query = SELECT CONCAT('maildir:/var/vmail/',maildir) AS mail, 5000 AS uid, 5000 AS gid, concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1' user_query = SELECT CONCAT('maildir:/var/vmail/',maildir) AS mail, 5000 AS uid, 5000 AS gid, concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1'
iterate_query = SELECT username FROM mailbox WHERE active='1'; iterate_query = SELECT username FROM mailbox WHERE active='1';
EOF EOF

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
/usr/bin/curl -s --data-binary @- http://rspamd:11334/learnham < /dev/stdin /usr/bin/curl -s --data-binary @- --unix-socket /rspamd-sock/rspamd.sock http://rspamd/learnham < /dev/stdin
# Always return 0 to satisfy Dovecot... # Always return 0 to satisfy Dovecot...
exit 0 exit 0

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash
/usr/bin/curl -s --data-binary @- http://rspamd:11334/learnspam < /dev/stdin /usr/bin/curl -s --data-binary @- --unix-socket /rspamd-sock/rspamd.sock http://rspamd/learnspam < /dev/stdin
# Always return 0 to satisfy Dovecot... # Always return 0 to satisfy Dovecot...
exit 0 exit 0

View File

@ -1,8 +0,0 @@
FROM python:2-alpine
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
RUN apk add -U --no-cache iptables ip6tables
RUN pip install redis ipaddress
COPY logwatch.py /
CMD ["python2", "-u", "/logwatch.py"]

View File

@ -1,192 +0,0 @@
#!/usr/bin/env python2
import re
import os
import time
import atexit
import signal
import ipaddress
import subprocess
from threading import Thread
import redis
import time
import json
yes_regex = re.compile(r'([yY][eE][sS]|[yY])+$')
if re.search(yes_regex, os.getenv('SKIP_FAIL2BAN', 0)):
print 'SKIP_FAIL2BAN=y, Skipping Fail2ban container...'
time.sleep(31536000)
raise SystemExit
r = redis.StrictRedis(host=os.getenv('IPV4_NETWORK', '172.22.1') + '.249', decode_responses=True, port=6379, db=0)
pubsub = r.pubsub()
RULES = {}
RULES[1] = 'warning: .*\[([0-9a-f\.:]+)\]: SASL .+ authentication failed'
RULES[2] = '-login: Disconnected \(auth failed, .+\): user=.*, method=.+, rip=([0-9a-f\.:]+),'
RULES[3] = '-login: Aborted login \(no auth .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
RULES[4] = '-login: Aborted login \(tried to use disallowed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
RULES[5] = 'SOGo.+ Login from \'([0-9a-f\.:]+)\' for user .+ might not have worked'
RULES[6] = 'mailcow UI: Invalid password for .+ by ([0-9a-f\.:]+)'
r.setnx('F2B_BAN_TIME', '1800')
r.setnx('F2B_MAX_ATTEMPTS', '10')
r.setnx('F2B_RETRY_WINDOW', '600')
r.setnx('F2B_NETBAN_IPV6', '64')
r.setnx('F2B_NETBAN_IPV4', '24')
bans = {}
log = {}
quit_now = False
def ban(address):
BAN_TIME = int(r.get('F2B_BAN_TIME'))
MAX_ATTEMPTS = int(r.get('F2B_MAX_ATTEMPTS'))
RETRY_WINDOW = int(r.get('F2B_RETRY_WINDOW'))
WHITELIST = r.hgetall('F2B_WHITELIST')
NETBAN_IPV6 = '/' + str(r.get('F2B_NETBAN_IPV6'))
NETBAN_IPV4 = '/' + str(r.get('F2B_NETBAN_IPV4'))
ip = ipaddress.ip_address(address.decode('ascii'))
if type(ip) is ipaddress.IPv6Address and ip.ipv4_mapped:
ip = ip.ipv4_mapped
address = str(ip)
if ip.is_private or ip.is_loopback:
return
self_network = ipaddress.ip_network(address.decode('ascii'))
if WHITELIST:
for wl_key in WHITELIST:
wl_net = ipaddress.ip_network(wl_key.decode('ascii'), False)
if wl_net.overlaps(self_network):
log['time'] = int(round(time.time()))
log['priority'] = 'info'
log['message'] = 'Address %s is whitelisted by rule %s' % (self_network, wl_net)
r.lpush('F2B_LOG', json.dumps(log, ensure_ascii=False))
print 'Address %s is whitelisted by rule %s' % (self_network, wl_net)
return
net = ipaddress.ip_network((address + (NETBAN_IPV4 if type(ip) is ipaddress.IPv4Address else NETBAN_IPV6)).decode('ascii'), strict=False)
net = str(net)
if not net in bans or time.time() - bans[net]['last_attempt'] > RETRY_WINDOW:
bans[net] = { 'attempts': 0 }
active_window = RETRY_WINDOW
else:
active_window = time.time() - bans[net]['last_attempt']
bans[net]['attempts'] += 1
bans[net]['last_attempt'] = time.time()
active_window = time.time() - bans[net]['last_attempt']
if bans[net]['attempts'] >= MAX_ATTEMPTS:
log['time'] = int(round(time.time()))
log['priority'] = 'crit'
log['message'] = 'Banning %s' % net
r.lpush('F2B_LOG', json.dumps(log, ensure_ascii=False))
print 'Banning %s for %d minutes' % (net, BAN_TIME / 60)
if type(ip) is ipaddress.IPv4Address:
subprocess.call(['iptables', '-I', 'INPUT', '-s', net, '-j', 'REJECT'])
subprocess.call(['iptables', '-I', 'FORWARD', '-s', net, '-j', 'REJECT'])
else:
subprocess.call(['ip6tables', '-I', 'INPUT', '-s', net, '-j', 'REJECT'])
subprocess.call(['ip6tables', '-I', 'FORWARD', '-s', net, '-j', 'REJECT'])
r.hset('F2B_ACTIVE_BANS', '%s' % net, log['time'] + BAN_TIME)
else:
log['time'] = int(round(time.time()))
log['priority'] = 'warn'
log['message'] = '%d more attempts in the next %d seconds until %s is banned' % (MAX_ATTEMPTS - bans[net]['attempts'], RETRY_WINDOW, net)
r.lpush('F2B_LOG', json.dumps(log, ensure_ascii=False))
print '%d more attempts in the next %d seconds until %s is banned' % (MAX_ATTEMPTS - bans[net]['attempts'], RETRY_WINDOW, net)
def unban(net):
log['time'] = int(round(time.time()))
log['priority'] = 'info'
r.lpush('F2B_LOG', json.dumps(log, ensure_ascii=False))
if not net in bans:
log['message'] = '%s is not banned, skipping unban and deleting from queue (if any)' % net
r.lpush('F2B_LOG', json.dumps(log, ensure_ascii=False))
print '%s is not banned, skipping unban and deleting from queue (if any)' % net
r.hdel('F2B_QUEUE_UNBAN', '%s' % net)
return
log['message'] = 'Unbanning %s' % net
r.lpush('F2B_LOG', json.dumps(log, ensure_ascii=False))
print 'Unbanning %s' % net
if type(ipaddress.ip_network(net.decode('ascii'))) is ipaddress.IPv4Network:
subprocess.call(['iptables', '-D', 'INPUT', '-s', net, '-j', 'REJECT'])
subprocess.call(['iptables', '-D', 'FORWARD', '-s', net, '-j', 'REJECT'])
else:
subprocess.call(['ip6tables', '-D', 'INPUT', '-s', net, '-j', 'REJECT'])
subprocess.call(['ip6tables', '-D', 'FORWARD', '-s', net, '-j', 'REJECT'])
r.hdel('F2B_ACTIVE_BANS', '%s' % net)
r.hdel('F2B_QUEUE_UNBAN', '%s' % net)
del bans[net]
def quit(signum, frame):
global quit_now
quit_now = True
def clear():
log['time'] = int(round(time.time()))
log['priority'] = 'info'
log['message'] = 'Clearing all bans'
r.lpush('F2B_LOG', json.dumps(log, ensure_ascii=False))
print 'Clearing all bans'
for net in bans.copy():
unban(net)
pubsub.unsubscribe()
def watch():
log['time'] = int(round(time.time()))
log['priority'] = 'info'
log['message'] = 'Watching Redis channel F2B_CHANNEL'
r.lpush('F2B_LOG', json.dumps(log, ensure_ascii=False))
pubsub.subscribe('F2B_CHANNEL')
print 'Subscribing to Redis channel F2B_CHANNEL'
while True:
for item in pubsub.listen():
for rule_id, rule_regex in RULES.iteritems():
if item['data'] and item['type'] == 'message':
result = re.search(rule_regex, item['data'])
if result:
addr = result.group(1)
ip = ipaddress.ip_address(addr.decode('ascii'))
if ip.is_private or ip.is_loopback:
continue
print '%s matched rule id %d' % (addr, rule_id)
log['time'] = int(round(time.time()))
log['priority'] = 'warn'
log['message'] = '%s matched rule id %d' % (addr, rule_id)
r.lpush('F2B_LOG', json.dumps(log, ensure_ascii=False))
ban(addr)
def autopurge():
while not quit_now:
BAN_TIME = int(r.get('F2B_BAN_TIME'))
MAX_ATTEMPTS = int(r.get('F2B_MAX_ATTEMPTS'))
QUEUE_UNBAN = r.hgetall('F2B_QUEUE_UNBAN')
if QUEUE_UNBAN:
for net in QUEUE_UNBAN:
unban(str(net))
for net in bans.copy():
if bans[net]['attempts'] >= MAX_ATTEMPTS:
if time.time() - bans[net]['last_attempt'] > BAN_TIME:
unban(net)
time.sleep(10)
if __name__ == '__main__':
watch_thread = Thread(target=watch)
watch_thread.daemon = True
watch_thread.start()
autopurge_thread = Thread(target=autopurge)
autopurge_thread.daemon = True
autopurge_thread.start()
signal.signal(signal.SIGTERM, quit)
atexit.register(clear)
while not quit_now:
time.sleep(0.5)

View File

@ -0,0 +1,9 @@
FROM alpine:3.7
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
RUN apk add -U python2 python-dev py-pip gcc musl-dev iptables ip6tables \
&& pip2 install --upgrade python-iptables redis ipaddress \
&& apk del python-dev py2-pip gcc
COPY server.py /
CMD ["python2", "-u", "/server.py"]

View File

@ -0,0 +1,275 @@
#!/usr/bin/env python2
import re
import os
import time
import atexit
import signal
import ipaddress
import subprocess
from threading import Thread
import redis
import time
import json
import iptc
r = redis.StrictRedis(host=os.getenv('IPV4_NETWORK', '172.22.1') + '.249', decode_responses=True, port=6379, db=0)
pubsub = r.pubsub()
RULES = {}
RULES[1] = 'warning: .*\[([0-9a-f\.:]+)\]: SASL .+ authentication failed'
RULES[2] = '-login: Disconnected \(auth failed, .+\): user=.*, method=.+, rip=([0-9a-f\.:]+),'
RULES[3] = '-login: Aborted login \(no auth .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
RULES[4] = '-login: Aborted login \(tried to use disallowed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
RULES[5] = 'SOGo.+ Login from \'([0-9a-f\.:]+)\' for user .+ might not have worked'
RULES[6] = 'mailcow UI: Invalid password for .+ by ([0-9a-f\.:]+)'
if not r.get('F2B_OPTIONS'):
f2boptions = {}
f2boptions['ban_time'] = int
f2boptions['max_attempts'] = int
f2boptions['retry_window'] = int
f2boptions['netban_ipv4'] = int
f2boptions['netban_ipv6'] = int
f2boptions['ban_time'] = r.get('F2B_BAN_TIME') or 1800
f2boptions['max_attempts'] = r.get('F2B_MAX_ATTEMPTS') or 10
f2boptions['retry_window'] = r.get('F2B_RETRY_WINDOW') or 600
f2boptions['netban_ipv4'] = r.get('F2B_NETBAN_IPV4') or 24
f2boptions['netban_ipv6'] = r.get('F2B_NETBAN_IPV6') or 64
r.set('F2B_OPTIONS', json.dumps(f2boptions, ensure_ascii=False))
else:
try:
f2boptions = {}
f2boptions = json.loads(r.get('F2B_OPTIONS'))
except ValueError, e:
print 'Error loading F2B options: F2B_OPTIONS is not json'
raise SystemExit(1)
if r.exists('F2B_LOG'):
r.rename('F2B_LOG', 'NETFILTER_LOG')
bans = {}
log = {}
quit_now = False
def ban(address):
BAN_TIME = int(f2boptions['ban_time'])
MAX_ATTEMPTS = int(f2boptions['max_attempts'])
RETRY_WINDOW = int(f2boptions['retry_window'])
NETBAN_IPV4 = '/' + str(f2boptions['netban_ipv4'])
NETBAN_IPV6 = '/' + str(f2boptions['netban_ipv6'])
WHITELIST = r.hgetall('F2B_WHITELIST')
ip = ipaddress.ip_address(address.decode('ascii'))
if type(ip) is ipaddress.IPv6Address and ip.ipv4_mapped:
ip = ip.ipv4_mapped
address = str(ip)
if ip.is_private or ip.is_loopback:
return
self_network = ipaddress.ip_network(address.decode('ascii'))
if WHITELIST:
for wl_key in WHITELIST:
wl_net = ipaddress.ip_network(wl_key.decode('ascii'), False)
if wl_net.overlaps(self_network):
log['time'] = int(round(time.time()))
log['priority'] = 'info'
log['message'] = 'Address %s is whitelisted by rule %s' % (self_network, wl_net)
r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
print 'Address %s is whitelisted by rule %s' % (self_network, wl_net)
return
net = ipaddress.ip_network((address + (NETBAN_IPV4 if type(ip) is ipaddress.IPv4Address else NETBAN_IPV6)).decode('ascii'), strict=False)
net = str(net)
if not net in bans or time.time() - bans[net]['last_attempt'] > RETRY_WINDOW:
bans[net] = { 'attempts': 0 }
active_window = RETRY_WINDOW
else:
active_window = time.time() - bans[net]['last_attempt']
bans[net]['attempts'] += 1
bans[net]['last_attempt'] = time.time()
active_window = time.time() - bans[net]['last_attempt']
if bans[net]['attempts'] >= MAX_ATTEMPTS:
log['time'] = int(round(time.time()))
log['priority'] = 'crit'
log['message'] = 'Banning %s' % net
r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
print 'Banning %s for %d minutes' % (net, BAN_TIME / 60)
if type(ip) is ipaddress.IPv4Address:
for c in ['INPUT', 'FORWARD']:
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), c)
rule = iptc.Rule()
rule.src = net
target = iptc.Target(rule, "REJECT")
rule.target = target
if rule not in chain.rules:
chain.insert_rule(rule)
else:
for c in ['INPUT', 'FORWARD']:
chain = iptc.Chain(iptc.Table6(iptc.Table6.FILTER), c)
rule = iptc.Rule6()
rule.src = net
target = iptc.Target(rule, "REJECT")
rule.target = target
if rule not in chain.rules:
chain.insert_rule(rule)
r.hset('F2B_ACTIVE_BANS', '%s' % net, log['time'] + BAN_TIME)
else:
log['time'] = int(round(time.time()))
log['priority'] = 'warn'
log['message'] = '%d more attempts in the next %d seconds until %s is banned' % (MAX_ATTEMPTS - bans[net]['attempts'], RETRY_WINDOW, net)
r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
print '%d more attempts in the next %d seconds until %s is banned' % (MAX_ATTEMPTS - bans[net]['attempts'], RETRY_WINDOW, net)
def unban(net):
log['time'] = int(round(time.time()))
log['priority'] = 'info'
r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
#if not net in bans:
# log['message'] = '%s is not banned, skipping unban and deleting from queue (if any)' % net
# r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
# print '%s is not banned, skipping unban and deleting from queue (if any)' % net
# r.hdel('F2B_QUEUE_UNBAN', '%s' % net)
# return
log['message'] = 'Unbanning %s' % net
r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
print 'Unbanning %s' % net
if type(ipaddress.ip_network(net.decode('ascii'))) is ipaddress.IPv4Network:
for c in ['INPUT', 'FORWARD']:
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), c)
rule = iptc.Rule()
rule.src = net
target = iptc.Target(rule, "REJECT")
rule.target = target
if rule in chain.rules:
chain.delete_rule(rule)
else:
for c in ['INPUT', 'FORWARD']:
chain = iptc.Chain(iptc.Table6(iptc.Table6.FILTER), c)
rule = iptc.Rule6()
rule.src = net
target = iptc.Target(rule, "REJECT")
rule.target = target
if rule in chain.rules:
chain.delete_rule(rule)
r.hdel('F2B_ACTIVE_BANS', '%s' % net)
r.hdel('F2B_QUEUE_UNBAN', '%s' % net)
if net in bans:
del bans[net]
def quit(signum, frame):
global quit_now
quit_now = True
def clear():
log['time'] = int(round(time.time()))
log['priority'] = 'info'
log['message'] = 'Clearing all bans'
r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
print 'Clearing all bans'
for net in bans.copy():
unban(net)
pubsub.unsubscribe()
def watch():
log['time'] = int(round(time.time()))
log['priority'] = 'info'
log['message'] = 'Watching Redis channel F2B_CHANNEL'
r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
pubsub.subscribe('F2B_CHANNEL')
print 'Subscribing to Redis channel F2B_CHANNEL'
while True:
for item in pubsub.listen():
for rule_id, rule_regex in RULES.iteritems():
if item['data'] and item['type'] == 'message':
result = re.search(rule_regex, item['data'])
if result:
addr = result.group(1)
ip = ipaddress.ip_address(addr.decode('ascii'))
if ip.is_private or ip.is_loopback:
continue
print '%s matched rule id %d' % (addr, rule_id)
log['time'] = int(round(time.time()))
log['priority'] = 'warn'
log['message'] = '%s matched rule id %d' % (addr, rule_id)
r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
ban(addr)
def snat(snat_target):
def get_snat_rule():
rule = iptc.Rule()
rule.position = 1
rule.src = os.getenv('IPV4_NETWORK', '172.22.1') + '.0/24'
rule.dst = '!' + rule.src
target = rule.create_target("SNAT")
target.to_source = snat_target
return rule
while True:
table = iptc.Table('nat')
table.autocommit = False
chain = iptc.Chain(table, 'POSTROUTING')
if get_snat_rule() not in chain.rules:
log['time'] = int(round(time.time()))
log['priority'] = 'info'
log['message'] = 'Added POSTROUTING rule for source network ' + get_snat_rule().src + ' to SNAT target ' + snat_target
r.lpush('NETFILTER_LOG', json.dumps(log, ensure_ascii=False))
print log['message']
chain.insert_rule(get_snat_rule())
table.commit()
table.refresh()
time.sleep(10)
def autopurge():
while not quit_now:
BAN_TIME = f2boptions['ban_time']
MAX_ATTEMPTS = f2boptions['max_attempts']
QUEUE_UNBAN = r.hgetall('F2B_QUEUE_UNBAN')
if QUEUE_UNBAN:
for net in QUEUE_UNBAN:
unban(str(net))
for net in bans.copy():
if bans[net]['attempts'] >= MAX_ATTEMPTS:
if time.time() - bans[net]['last_attempt'] > BAN_TIME:
unban(net)
time.sleep(10)
def cleanPrevious():
print "Cleaning previously cached bans"
F2B_ACTIVE_BANS = r.hgetall('F2B_ACTIVE_BANS')
if F2B_ACTIVE_BANS:
for net in F2B_ACTIVE_BANS:
unban(str(net))
if __name__ == '__main__':
cleanPrevious()
watch_thread = Thread(target=watch)
watch_thread.daemon = True
watch_thread.start()
if os.getenv('SNAT_TO_SOURCE') and os.getenv('SNAT_TO_SOURCE') is not 'n':
try:
snat_ip = os.getenv('SNAT_TO_SOURCE').decode('ascii')
snat_ipo = ipaddress.ip_address(snat_ip)
if type(snat_ipo) is ipaddress.IPv4Address:
snat_thread = Thread(target=snat,args=(snat_ip,))
snat_thread.daemon = True
snat_thread.start()
except ValueError:
print os.getenv('SNAT_TO_SOURCE') + ' is not a valid IPv4 address'
autopurge_thread = Thread(target=autopurge)
autopurge_thread.daemon = True
autopurge_thread.start()
signal.signal(signal.SIGTERM, quit)
atexit.register(clear)
while not quit_now:
time.sleep(0.5)

View File

@ -33,6 +33,12 @@ RUN apk add -U --no-cache libxml2-dev \
imagemagick-dev \ imagemagick-dev \
imagemagick \ imagemagick \
libtool \ libtool \
freetype \
libpng \
libjpeg-turbo \
freetype-dev \
libpng-dev \
libjpeg-turbo-dev\
gettext-dev \ gettext-dev \
openldap-dev \ openldap-dev \
librsvg \ librsvg \
@ -46,10 +52,33 @@ RUN apk add -U --no-cache libxml2-dev \
&& docker-php-ext-enable redis apcu memcached imagick mailparse \ && docker-php-ext-enable redis apcu memcached imagick mailparse \
&& pecl clear-cache \ && pecl clear-cache \
&& docker-php-ext-configure intl \ && docker-php-ext-configure intl \
&& docker-php-ext-configure gd \
--with-gd \
--enable-gd-native-ttf \
--with-freetype-dir=/usr/include/ \
--with-png-dir=/usr/include/ \
--with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j 4 intl gettext ldap sockets soap pdo pdo_mysql xmlrpc gd zip pcntl opcache \ && docker-php-ext-install -j 4 intl gettext ldap sockets soap pdo pdo_mysql xmlrpc gd zip pcntl opcache \
&& docker-php-ext-configure imap --with-imap --with-imap-ssl \ && docker-php-ext-configure imap --with-imap --with-imap-ssl \
&& docker-php-ext-install -j 4 imap \ && docker-php-ext-install -j 4 imap \
&& apk del --purge autoconf g++ make libxml2-dev icu-dev imap-dev openssl-dev cyrus-sasl-dev pcre-dev libpng-dev libpng-dev libjpeg-turbo-dev libwebp-dev zlib-dev imagemagick-dev && apk del --purge autoconf \
g++ \
make \
libxml2-dev \
icu-dev \
imap-dev \
openssl-dev \
cyrus-sasl-dev \
pcre-dev \
libpng-dev \
libpng-dev \
libjpeg-turbo-dev \
libwebp-dev \
zlib-dev \
imagemagick-dev \
freetype-dev \
libpng-dev \
libjpeg-turbo-dev
COPY ./docker-entrypoint.sh / COPY ./docker-entrypoint.sh /

View File

@ -15,7 +15,6 @@ until [ $(redis-cli -h redis-mailcow PING) == "PONG" ]; do
done done
# Migrate domain map # Migrate domain map
declare -a DOMAIN_ARR declare -a DOMAIN_ARR
redis-cli -h redis-mailcow DEL DOMAIN_MAP redis-cli -h redis-mailcow DEL DOMAIN_MAP
while read line while read line
@ -34,57 +33,4 @@ for domain in "${DOMAIN_ARR[@]}"; do
done done
fi fi
# Migrate tag settings map
declare -a SUBJ_TAG_ARR
redis-cli -h redis-mailcow DEL SUBJ_TAG_ARR
while read line
do
SUBJ_TAG_ARR+=("$line")
done < <(mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT username FROM mailbox WHERE wants_tagged_subject='1'" -Bs)
if [[ ! -z ${SUBJ_TAG_ARR} ]]; then
for user in "${SUBJ_TAG_ARR[@]}"; do
redis-cli -h redis-mailcow HSET RCPT_WANTS_SUBJECT_TAG ${user} 1
mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "UPDATE mailbox SET wants_tagged_subject='2' WHERE username = '${user}'"
done
fi
# Migrate DKIM keys
for file in $(ls /data/dkim/keys/); do
domain=${file%.dkim}
if [[ -f /data/dkim/txt/${file} ]]; then
redis-cli -h redis-mailcow HSET DKIM_PUB_KEYS "${domain}" "$(cat /data/dkim/txt/${file})"
redis-cli -h redis-mailcow HSET DKIM_PRIV_KEYS "dkim.${domain}" "$(cat /data/dkim/keys/${file})"
redis-cli -h redis-mailcow HSET DKIM_SELECTORS "${domain}" "dkim"
fi
rm /data/dkim/{keys,txt}/${file}
done
# Fix DKIM keys
# Fetch domains
declare -a DOMAIN_ARRAY
while read line
do
DOMAIN_ARRAY+=("$line")
done < <(mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT domain FROM domain" -Bs)
while read line
do
DOMAIN_ARRAY+=("$line")
done < <(mysql -h mysql-mailcow -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT alias_domain FROM alias_domain" -Bs)
# Loop through array and fix keys
if [[ ! -z ${DOMAIN_ARRAY} ]]; then
for domain in "${DOMAIN_ARRAY[@]}"; do
WRONG_KEY=$(redis-cli -h redis-mailcow HGET DKIM_PRIV_KEYS ${domain} | tr -d \")
if [[ ! -z ${WRONG_KEY} ]]; then
echo "Migrating defect key for domain ${domain}"
redis-cli -h redis-mailcow HSET DKIM_PRIV_KEYS "dkim.${domain}" ${WRONG_KEY}
redis-cli -h redis-mailcow HDEL DKIM_PRIV_KEYS "${domain}"
fi
done
fi
exec "$@" exec "$@"

View File

@ -39,7 +39,7 @@ query = SELECT IF(EXISTS(
SELECT CONCAT('%u', '@', target_domain) FROM alias_domain SELECT CONCAT('%u', '@', target_domain) FROM alias_domain
WHERE alias_domain='%d' WHERE alias_domain='%d'
) )
) AND mailbox.tls_enforce_in = '1' AND mailbox.active = '1' ) AND json_extract(attributes, '$.tls_enforce_in') LIKE '%%1%%' AND mailbox.active = '1'
), 'reject_plaintext_session', NULL) AS 'tls_enforce_in'; ), 'reject_plaintext_session', NULL) AS 'tls_enforce_in';
EOF EOF
@ -58,7 +58,7 @@ query = SELECT GROUP_CONCAT(transport SEPARATOR '') AS transport_maps
WHERE alias_domain = '%d' WHERE alias_domain = '%d'
) )
) )
AND mailbox.tls_enforce_out = '1' AND json_extract(attributes, '$.tls_enforce_out') LIKE '%%1%%'
AND mailbox.active = '1' AND mailbox.active = '1'
), 'smtp_enforced_tls:', 'smtp:') AS 'transport' ), 'smtp_enforced_tls:', 'smtp:') AS 'transport'
UNION ALL UNION ALL
@ -145,6 +145,16 @@ query = SELECT bcc_dest FROM bcc_maps
AND active='1'; AND active='1';
EOF EOF
cat <<EOF > /opt/postfix/conf/sql/mysql_recipient_canonical_maps.cf
user = ${DBUSER}
password = ${DBPASS}
hosts = mysql
dbname = ${DBNAME}
query = SELECT new_dest FROM recipient_maps
WHERE old_dest='%s'
AND active='1';
EOF
cat <<EOF > /opt/postfix/conf/sql/mysql_virtual_domains_maps.cf cat <<EOF > /opt/postfix/conf/sql/mysql_virtual_domains_maps.cf
user = ${DBUSER} user = ${DBUSER}
password = ${DBPASS} password = ${DBPASS}

View File

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
chown -R _rspamd:_rspamd /var/lib/rspamd chown -R _rspamd:_rspamd /var/lib/rspamd
[[ ! -f /etc/rspamd/override.d/worker-controller-password.inc ]] && echo '# Placeholder' > /etc/rspamd/override.d/worker-controller-password.inc
exec /sbin/tini -- "$@" exec /sbin/tini -- "$@"

View File

@ -42,6 +42,9 @@ RUN mkdir /usr/share/doc/sogo \
COPY ./bootstrap-sogo.sh / COPY ./bootstrap-sogo.sh /
COPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf COPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf
COPY supervisord.conf /etc/supervisor/supervisord.conf COPY supervisord.conf /etc/supervisor/supervisord.conf
COPY theme-blue.js /usr/lib/GNUstep/SOGo/WebServerResources/js/theme-blue.js
COPY theme-green.js /usr/lib/GNUstep/SOGo/WebServerResources/js/theme-green.js
COPY sogo-full.svg /usr/lib/GNUstep/SOGo/WebServerResources/img/sogo-full.svg
CMD exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf CMD exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf

View File

@ -19,14 +19,13 @@ mysql --host mysql -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "DROP VIEW IF EXISTS so
mysql --host mysql -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF mysql --host mysql -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
CREATE VIEW sogo_view (c_uid, domain, c_name, c_password, c_cn, mail, aliases, ad_aliases, home, kind, multiple_bookings) AS CREATE VIEW sogo_view (c_uid, domain, c_name, c_password, c_cn, mail, aliases, ad_aliases, home, kind, multiple_bookings) AS
SELECT mailbox.username, mailbox.domain, mailbox.username, mailbox.password, mailbox.name, mailbox.username, IFNULL(GROUP_CONCAT(ga.aliases SEPARATOR ' '), ''), IFNULL(gda.ad_alias, ''), CONCAT('/var/vmail/', maildir), mailbox.kind, mailbox.multiple_bookings FROM mailbox SELECT mailbox.username, mailbox.domain, mailbox.username, if(json_extract(attributes, '$.force_pw_update') LIKE '%0%', password, 'invalid'), mailbox.name, mailbox.username, IFNULL(GROUP_CONCAT(ga.aliases SEPARATOR ' '), ''), IFNULL(gda.ad_alias, ''), CONCAT('/var/vmail/', maildir), mailbox.kind, mailbox.multiple_bookings FROM mailbox
LEFT OUTER JOIN grouped_mail_aliases ga ON ga.username REGEXP CONCAT('(^|,)', mailbox.username, '($|,)') LEFT OUTER JOIN grouped_mail_aliases ga ON ga.username REGEXP CONCAT('(^|,)', mailbox.username, '($|,)')
LEFT OUTER JOIN grouped_domain_alias_address gda ON gda.username = mailbox.username LEFT OUTER JOIN grouped_domain_alias_address gda ON gda.username = mailbox.username
WHERE mailbox.active = '1' WHERE mailbox.active = '1'
GROUP BY mailbox.username; GROUP BY mailbox.username;
EOF EOF
mkdir -p /var/lib/sogo/GNUstep/Defaults/ mkdir -p /var/lib/sogo/GNUstep/Defaults/
# Generate plist header with timezone data # Generate plist header with timezone data

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
width="640px"
height="350px"
viewBox="78.712 58.488 640 350"
style="enable-background:new 78.712 58.488 640 350;"
xml:space="preserve"
inkscape:version="0.91 r13725"
sodipodi:docname="sogo-full.svg"><metadata
id="metadata4143"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs4141" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1721"
inkscape:window-height="1177"
id="namedview4139"
showgrid="false"
inkscape:zoom="1.8359375"
inkscape:cx="320"
inkscape:cy="175"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><path
style="fill:#f1f1f1;fill-opacity:0.96078432"
d="M648.541,145.679c-9.947,0-17.009-7.278-17.009-17.048c0-9.777,7.062-17.057,17.009-17.057 c10.024,0,17.086,7.279,17.086,17.057C665.627,138.401,658.565,145.679,648.541,145.679z M648.511,94.893 c-19.693,0-33.679,14.4-33.679,33.738c0,19.33,13.985,33.729,33.679,33.729c19.822,0,33.808-14.4,33.808-33.729 C682.318,109.293,668.333,94.893,648.511,94.893z M648.482,179.843c-29.889,0-51.123-21.868-51.123-51.212 c0-29.353,21.234-51.209,51.123-51.209c30.082,0,51.307,21.856,51.307,51.209C699.789,157.975,678.564,179.843,648.482,179.843z M648.442,58.488c-40.929,0-69.995,29.946-69.995,70.143c0,40.189,29.066,70.125,69.995,70.125c41.194,0,70.27-29.937,70.27-70.125 C718.712,88.434,689.637,58.488,648.442,58.488z M158.166,183.902l-21.018-5.008c-19.131-4.396-28.849-9.413-28.849-23.21 c0-15.684,15.99-21.965,30.419-21.965c14.667,0,25.382,7.329,31.693,18.737c0.02,0.048,0.051,0.097,0.09,0.157 c0.127,0.247,0.276,0.484,0.403,0.731l0.03-0.02c1.985,3.002,5.323,5.008,8.919,5.008c6.122,0,10.558-4.425,10.558-10.547 c0-2.341-0.504-4.82-1.601-6.688c-10.764-18.302-28.513-26.192-48.838-26.192c-27.594,0-54.262,13.797-54.262,44.218 c0,27.921,27.605,36.079,37.64,38.578l20.069,4.71c15.368,3.763,27.912,8.791,27.912,23.517c0,16.938-17.561,23.943-34.499,23.943 c-17.245,0-30.015-9.37-38.814-22.37h-0.01c-1.956-3-4.988-4.328-8.702-4.328c-5.984,0-10.805,5.185-10.587,11.162 c0.098,2.438,0.909,4.637,2.153,6.405c13.787,20.633,33.728,28.41,55.96,28.41c28.543,0,57.085-13.143,57.085-45.132 C193.918,203.325,178.551,188.613,158.166,183.902z M298.479,250.312c-33.866,0-55.199-25.403-55.199-58.331 c0-32.939,21.333-58.343,55.199-58.343c34.192,0,55.516,25.403,55.516,58.343C353.996,224.91,332.672,250.312,298.479,250.312z M298.479,114.823c-45.471,0-77.777,32.93-77.777,77.158c0,44.217,32.306,77.146,77.777,77.146 c45.786,0,78.093-32.929,78.093-77.146C376.572,147.753,344.266,114.823,298.479,114.823z M518.715,234.312 c-0.771,0.74-1.549,1.472-2.399,2.175c-1.106,1.014-2.391,2.112-3.854,3.208c-8.829,6.391-19.979,10.094-33.017,10.094 c-33.876,0-55.198-25.402-55.198-58.332c0-32.939,21.322-58.342,55.198-58.342c34.183,0,55.506,25.403,55.506,58.342 C534.951,208.653,529.135,223.774,518.715,234.312z M468.097,317.938c2.528,0,5.146-0.168,7.863-0.504 c5.018-0.631,9.588-0.909,13.729-0.909c19.24,0.109,29.036,5.7,34.943,12.158c5.895,6.499,8.168,15.311,8.158,22.796 c0.01,3.586-0.555,6.795-1.177,8.721c-2.944,8.93-8.888,15.002-17.996,19.576c-9.035,4.484-21.095,6.777-33.707,6.757 c-4.514,0-9.105-0.288-13.639-0.831c-8.573-0.987-19.911-4.671-28.13-11.093c-4.138-3.199-6.458-6.991-8.858-11.485 c-2.379-4.514-2.783-9.748-2.783-16.442v-0.742c0-12.346,4.84-20.544,11.051-26.5c3.07-2.904,5.69-5.064,7.99-6.438 c0.366-0.218,0.438-0.416,0.755-0.593C452.39,316.014,459.684,317.968,468.097,317.938z M479.445,114.301 c-45.471,0-77.786,32.929-77.786,77.157c0,29.887,14.765,54.598,38.378,67.489c-0.314,0.314-0.621,0.641-0.916,0.966 c-6.104,6.687-9.226,15.25-9.236,23.913c-0.008,3.821,0.624,7.741,1.977,11.494c-3.062,1.956-6.717,4.634-10.46,8.147 c-9.026,8.408-18.734,22.541-19.021,42.097c-0.01,0.454-0.01,0.829-0.01,1.118c-0.01,10.071,2.379,19.157,6.459,26.774 c6.133,11.466,15.683,19.445,25.539,24.77c9.917,5.334,20.257,8.166,29.273,9.274c5.373,0.643,10.826,0.988,16.268,0.988 c15.151-0.02,30.261-2.578,43.409-9.019c13.085-6.34,24.333-17.253,29.192-32.562c1.443-4.553,2.212-9.719,2.231-15.428 c-0.02-11.595-3.349-25.759-13.767-37.452c-10.421-11.734-27.654-19.566-51.288-19.459c-5.138,0-10.606,0.356-16.426,1.078 c-1.877,0.227-3.596,0.334-5.166,0.334c-7.239-0.048-10.872-2.053-13.036-4.098c-2.133-2.084-3.2-4.839-3.229-8.058 c-0.01-3.28,1.284-6.727,3.467-9.078c2.231-2.332,5.008-3.91,9.846-3.97c0.436,0,0.9,0.01,1.374,0.05 c3.101,0.216,6.112,0.325,9.037,0.325c24.188,0.047,42.38-7.448,54.756-17.759c12.415-10.312,18.971-22.854,22.071-32.76l-0.04-0.01 c3.37-8.899,5.197-18.715,5.197-29.166C557.539,147.229,525.234,114.301,479.445,114.301z"
id="path4137" /></svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -0,0 +1,60 @@
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
(function() {
'use strict';
angular.module('SOGo.Common')
.config(configure)
/**
* @ngInject
*/
configure.$inject = ['$mdThemingProvider'];
function configure($mdThemingProvider) {
/**
* Define the Alternative theme
*/
$mdThemingProvider.theme('mailcow')
.primaryPalette('indigo', {
'default': '700', // top toolbar
'hue-1': '400',
'hue-2': '600', // sidebar toolbar
'hue-3': 'A700'
})
.accentPalette('indigo', {
'default': '500', // fab buttons
'hue-1': '50', // center list toolbar
'hue-2': '400',
'hue-3': 'A700'
})
.backgroundPalette('grey', {
'default': '50', // center list background
'hue-1': '100',
'hue-2': '200',
'hue-3': '300'
});
$mdThemingProvider.theme('default')
.primaryPalette('indigo', {
'default': '700', // top toolbar
'hue-1': '400',
'hue-2': '600', // sidebar toolbar
'hue-3': 'A700'
})
.accentPalette('indigo', {
'default': '500', // fab buttons
'hue-1': '50', // center list toolbar
'hue-2': '400',
'hue-3': 'A700'
})
.backgroundPalette('grey', {
'default': '50', // center list background
'hue-1': '100',
'hue-2': '200',
'hue-3': '300'
});
$mdThemingProvider.setDefaultTheme('mailcow');
$mdThemingProvider.generateThemesOnDemand(false);
}
})();

View File

@ -0,0 +1,61 @@
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
(function() {
'use strict';
angular.module('SOGo.Common')
.config(configure)
/**
* @ngInject
*/
configure.$inject = ['$mdThemingProvider'];
function configure($mdThemingProvider) {
/**
* Define the Alternative theme
*/
$mdThemingProvider.theme('mailcow')
.primaryPalette('green', {
'default': '600', // top toolbar
'hue-1': '200',
'hue-2': '600', // sidebar toolbar
'hue-3': 'A700'
})
.accentPalette('green', {
'default': '600', // fab buttons
'hue-1': '50', // center list toolbar
'hue-2': '400',
'hue-3': 'A700'
})
.backgroundPalette('grey', {
'default': '50', // center list background
'hue-1': '50',
'hue-2': '100',
'hue-3': '100'
});
$mdThemingProvider.theme('default')
.primaryPalette('green', {
'default': '600', // top toolbar
'hue-1': '200',
'hue-2': '600', // sidebar toolbar
'hue-3': 'A700'
})
.accentPalette('green', {
'default': '600', // fab buttons
'hue-1': '50', // center list toolbar
'hue-2': '400',
'hue-3': 'A700'
})
.backgroundPalette('grey', {
'default': '50', // center list background
'hue-1': '50',
'hue-2': '100',
'hue-3': '100'
});
$mdThemingProvider.setDefaultTheme('mailcow');
$mdThemingProvider.generateThemesOnDemand(false);
}
})();

View File

@ -211,7 +211,7 @@ rspamd_checks() {
while [ ${err_count} -lt ${THRESHOLD} ]; do while [ ${err_count} -lt ${THRESHOLD} ]; do
host_ip=$(get_container_ip rspamd-mailcow) host_ip=$(get_container_ip rspamd-mailcow)
err_c_cur=${err_count} err_c_cur=${err_count}
SCORE=$(curl --silent ${host_ip}:11333/scan -d ' SCORE=$(/usr/bin/curl -s --data-binary @- --unix-socket /rspamd-sock/rspamd.sock http://rspamd/scan -d '
To: null@localhost To: null@localhost
From: watchdog@localhost From: watchdog@localhost

View File

@ -24,6 +24,7 @@ server {
add_header X-Robots-Tag none; add_header X-Robots-Tag none;
add_header X-Download-Options noopen; add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none; add_header X-Permitted-Cross-Domain-Policies none;
add_header X-Frame-Options "SAMEORIGIN";
server_name NC_SUBD; server_name NC_SUBD;
@ -54,7 +55,7 @@ server {
gzip_min_length 256; gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth; gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
set_real_ip_from fd00::/8; set_real_ip_from fc00::/7;
set_real_ip_from 10.0.0.0/8; set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12; set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16; set_real_ip_from 192.168.0.0/16;

View File

@ -33,6 +33,7 @@
add_header X-Robots-Tag none; add_header X-Robots-Tag none;
add_header X-Download-Options noopen; add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none; add_header X-Permitted-Cross-Domain-Policies none;
add_header X-Frame-Options "SAMEORIGIN";
access_log off; access_log off;
} }
location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ { location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {

View File

@ -174,7 +174,7 @@ namespace {
type = shared type = shared
separator = / separator = /
prefix = Shared/%%u/ prefix = Shared/%%u/
location = maildir:%%h/:INDEXPVT=~/Shared/%%u location = maildir:%%h/:INDEX=~/Shared/%%u:INDEXPVT=~/Shared/%%u
subscriptions = no subscriptions = no
list = children list = children
} }
@ -239,8 +239,10 @@ userdb {
driver = sql driver = sql
} }
protocol imap { protocol imap {
imap_metadata = yes
mail_plugins = quota imap_quota imap_acl acl zlib imap_zlib imap_sieve listescape #mail_crypt mail_plugins = quota imap_quota imap_acl acl zlib imap_zlib imap_sieve listescape #mail_crypt
} }
mail_attribute_dict = file:%h/dovecot-attributes
protocol lmtp { protocol lmtp {
mail_plugins = quota sieve acl zlib listescape #mail_crypt mail_plugins = quota sieve acl zlib listescape #mail_crypt
auth_socket_path = /usr/local/var/run/dovecot/auth-master auth_socket_path = /usr/local/var/run/dovecot/auth-master
@ -280,6 +282,8 @@ plugin {
#mail_crypt_global_private_key = </mail_crypt/ecprivkey.pem #mail_crypt_global_private_key = </mail_crypt/ecprivkey.pem
#mail_crypt_global_public_key = </mail_crypt/ecpubkey.pem #mail_crypt_global_public_key = </mail_crypt/ecpubkey.pem
#mail_crypt_save_version = 2 #mail_crypt_save_version = 2
# Enable compression while saving, lz4 Dovecot v2.2.11+
zlib_save = lz4
} }
dict { dict {
sqlquota = mysql:/usr/local/etc/dovecot/sql/dovecot-dict-sql-quota.conf sqlquota = mysql:/usr/local/etc/dovecot/sql/dovecot-dict-sql-quota.conf

View File

@ -7,176 +7,13 @@ map $http_x_forwarded_proto $client_req_scheme {
https https; https https;
} }
server { map $sent_http_content_type $expires {
include /etc/nginx/mime.types; default off;
charset utf-8; text/html off;
override_charset on; text/css 1d;
application/javascript 1d;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains"; application/json off;
add_header X-Content-Type-Options nosniff; image/png 1d;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Permitted-Cross-Domain-Policies none;
index index.php index.html;
include /etc/nginx/conf.d/listen_plain.active;
include /etc/nginx/conf.d/server_name.active;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
absolute_redirect off;
root /web;
location ~ ^/api/v1/(.*)$ {
try_files $uri $uri/ /json_api.php?query=$1;
}
location ^~ /.well-known/acme-challenge/ {
allow all;
default_type "text/plain";
}
# If behind reverse proxy, forwards the correct IP
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
set_real_ip_from fc00::/7;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
rewrite ^/.well-known/caldav$ /SOGo/dav/ permanent;
rewrite ^/.well-known/carddav$ /SOGo/dav/ permanent;
location ^~ /principals {
return 301 /SOGo/dav;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PHP_VALUE "max_execution_time = 1200
max_input_time = 1200
memory_limit = 64M";
fastcgi_read_timeout 1200;
}
location /rspamd/ {
proxy_pass http://rspamd:11334/;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
}
location ~* ^/Autodiscover/Autodiscover.xml {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass phpfpm:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
try_files /autodiscover.php =404;
}
location ~* ^/Autodiscover/Autodiscover.json {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass phpfpm:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
try_files /autodiscover-json.php =404;
}
location ~ /(?:m|M)ail/(?:c|C)onfig-v1.1.xml {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass phpfpm:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
try_files /autoconfig.php =404;
}
location ^~ /Microsoft-Server-ActiveSync {
include /etc/nginx/conf.d/sogo_eas.active;
proxy_connect_timeout 1000;
proxy_next_upstream timeout error;
proxy_send_timeout 1000;
proxy_read_timeout 1000;
proxy_buffer_size 8k;
proxy_buffers 4 32k;
proxy_temp_file_write_size 64k;
proxy_busy_buffers_size 64k;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header x-webobjects-server-protocol HTTP/1.0;
proxy_set_header x-webobjects-remote-host $remote_addr;
proxy_set_header x-webobjects-server-name $server_name;
proxy_set_header x-webobjects-server-url $client_req_scheme://$http_host;
proxy_set_header x-webobjects-server-port $server_port;
client_body_buffer_size 128k;
client_max_body_size 0;
}
location ^~ /SOGo {
include /etc/nginx/conf.d/sogo.active;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header x-webobjects-server-protocol HTTP/1.0;
proxy_set_header x-webobjects-remote-host $remote_addr;
proxy_set_header x-webobjects-server-name $server_name;
proxy_set_header x-webobjects-server-url $client_req_scheme://$http_host;
proxy_set_header x-webobjects-server-port $server_port;
client_body_buffer_size 128k;
client_max_body_size 0;
break;
}
location /SOGo.woa/WebServerResources/ {
proxy_pass http://sogo:9192/WebServerResources/;
proxy_set_header Host $http_host;
proxy_cache sogo;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
#alias /usr/lib/GNUstep/SOGo/WebServerResources/;
allow all;
}
location /.woa/WebServerResources/ {
proxy_pass http://sogo:9192/WebServerResources/;
proxy_set_header Host $http_host;
proxy_cache sogo;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
#alias /usr/lib/GNUstep/SOGo/WebServerResources/;
allow all;
}
location /SOGo/WebServerResources/ {
proxy_pass http://sogo:9192/WebServerResources/;
proxy_set_header Host $http_host;
proxy_cache sogo;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
#alias /usr/lib/GNUstep/SOGo/WebServerResources/;
allow all;
}
location (^/SOGo/so/ControlPanel/Products/[^/]*UI/Resources/.*\.(jpg|png|gif|css|js)$ {
proxy_pass http://sogo:9192/$1.SOGo/Resources/$2;
proxy_set_header Host $http_host;
proxy_cache sogo;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
#alias /usr/lib/GNUstep/SOGo/$1.SOGo/Resources/$2;
}
include /etc/nginx/conf.d/site.*.custom;
} }
server { server {
@ -184,7 +21,6 @@ server {
charset utf-8; charset utf-8;
override_charset on; override_charset on;
ssl on;
ssl_certificate /etc/ssl/mail/cert.pem; ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem; ssl_certificate_key /etc/ssl/mail/key.pem;
ssl_protocols TLSv1.2; ssl_protocols TLSv1.2;
@ -204,6 +40,7 @@ server {
index index.php index.html; index index.php index.html;
include /etc/nginx/conf.d/listen_plain.active;
include /etc/nginx/conf.d/listen_ssl.active; include /etc/nginx/conf.d/listen_ssl.active;
include /etc/nginx/conf.d/server_name.active; include /etc/nginx/conf.d/server_name.active;
@ -233,7 +70,7 @@ server {
rewrite ^/.well-known/carddav$ /SOGo/dav/ permanent; rewrite ^/.well-known/carddav$ /SOGo/dav/ permanent;
location ^~ /principals { location ^~ /principals {
return 301 /SOGo/dav; return 301 /SOGo/dav;
} }
location ~ \.php$ { location ~ \.php$ {
@ -256,6 +93,7 @@ server {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off; proxy_redirect off;
expires $expires;
} }
location ~* ^/Autodiscover/Autodiscover.xml { location ~* ^/Autodiscover/Autodiscover.xml {
@ -326,6 +164,7 @@ server {
proxy_cache_valid 200 1d; proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
#alias /usr/lib/GNUstep/SOGo/WebServerResources/; #alias /usr/lib/GNUstep/SOGo/WebServerResources/;
expires $expires;
allow all; allow all;
} }
@ -336,6 +175,7 @@ server {
proxy_cache_valid 200 1d; proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
#alias /usr/lib/GNUstep/SOGo/WebServerResources/; #alias /usr/lib/GNUstep/SOGo/WebServerResources/;
expires $expires;
allow all; allow all;
} }
@ -349,7 +189,7 @@ server {
allow all; allow all;
} }
location (^/SOGo/so/ControlPanel/Products/[^/]*UI/Resources/.*\.(jpg|png|gif|css|js)$ { location (^/SOGo/so/ControlPanel/Products/[^/]*UI/Resources/.*\.(jpg|png|gif|css|js)$) {
proxy_pass http://sogo:9192/$1.SOGo/Resources/$2; proxy_pass http://sogo:9192/$1.SOGo/Resources/$2;
proxy_set_header Host $http_host; proxy_set_header Host $http_host;
proxy_cache sogo; proxy_cache sogo;

View File

@ -1,2 +1,2 @@
listen ${HTTPS_PORT} http2; listen ${HTTPS_PORT} ssl http2;
listen [::]:${HTTPS_PORT} http2; listen [::]:${HTTPS_PORT} ssl http2;

View File

@ -0,0 +1,3 @@
file_uploads = On
upload_max_filesize = 64M
post_max_size = 64M

View File

@ -45,6 +45,7 @@ proxy_read_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_sender_acl.cf,
proxy:mysql:/opt/postfix/conf/sql/mysql_tls_enforce_in_policy.cf, proxy:mysql:/opt/postfix/conf/sql/mysql_tls_enforce_in_policy.cf,
proxy:mysql:/opt/postfix/conf/sql/mysql_sender_bcc_maps.cf, proxy:mysql:/opt/postfix/conf/sql/mysql_sender_bcc_maps.cf,
proxy:mysql:/opt/postfix/conf/sql/mysql_recipient_bcc_maps.cf, proxy:mysql:/opt/postfix/conf/sql/mysql_recipient_bcc_maps.cf,
proxy:mysql:/opt/postfix/conf/sql/mysql_recipient_canonical_maps.cf,
$local_recipient_maps, $local_recipient_maps,
$mydestination, $mydestination,
$virtual_alias_maps, $virtual_alias_maps,
@ -108,6 +109,8 @@ virtual_mailbox_base = /var/vmail/
virtual_mailbox_domains = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_domains_maps.cf virtual_mailbox_domains = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_domains_maps.cf
recipient_bcc_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_recipient_bcc_maps.cf recipient_bcc_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_recipient_bcc_maps.cf
sender_bcc_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_sender_bcc_maps.cf sender_bcc_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_sender_bcc_maps.cf
recipient_canonical_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_recipient_canonical_maps.cf
recipient_canonical_classes = envelope_recipient
virtual_mailbox_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_mailbox_maps.cf virtual_mailbox_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 104 virtual_minimum_uid = 104
virtual_transport = lmtp:inet:dovecot:24 virtual_transport = lmtp:inet:dovecot:24

View File

@ -126,7 +126,7 @@ while ($row = array_shift($rows)) {
<?php <?php
foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {
?> ?>
rcpt = "<?=$rcpt;?>"; rcpt = <?=json_encode($rcpt);?>;
<?php <?php
} }
$stmt = $pdo->prepare("SELECT `option`, `value` FROM `filterconf` $stmt = $pdo->prepare("SELECT `option`, `value` FROM `filterconf`
@ -172,7 +172,7 @@ while ($row = array_shift($rows)) {
<?php <?php
foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {
?> ?>
rcpt = "<?=$rcpt;?>"; rcpt = <?=json_encode($rcpt);?>;
<?php <?php
} }
} }
@ -182,7 +182,7 @@ while ($row = array_shift($rows)) {
<?php <?php
foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {
?> ?>
rcpt = "<?=$rcpt;?>"; rcpt = <?=json_encode($rcpt);?>;
<?php <?php
} }
} }
@ -213,7 +213,7 @@ while ($row = array_shift($rows)) {
<?php <?php
foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {
?> ?>
rcpt = "<?=$rcpt;?>"; rcpt = <?=json_encode($rcpt);?>;
<?php <?php
} }
} }
@ -223,7 +223,7 @@ while ($row = array_shift($rows)) {
<?php <?php
foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {
?> ?>
rcpt = "<?=$rcpt;?>"; rcpt = <?=json_encode($rcpt);?>;
<?php <?php
} }
} }
@ -264,7 +264,7 @@ while ($row = array_shift($rows)) {
<?php <?php
foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {
?> ?>
rcpt = "<?=$rcpt;?>"; rcpt = <?=json_encode($rcpt);?>;
<?php <?php
} }
} }
@ -274,7 +274,7 @@ while ($row = array_shift($rows)) {
<?php <?php
foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {
?> ?>
rcpt = "<?=$rcpt;?>"; rcpt = <?=json_encode($rcpt);?>;
<?php <?php
} }
} }
@ -305,7 +305,7 @@ while ($row = array_shift($rows)) {
<?php <?php
foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {
?> ?>
rcpt = "<?=$rcpt;?>"; rcpt = <?=json_encode($rcpt);?>;
<?php <?php
} }
} }
@ -315,7 +315,7 @@ while ($row = array_shift($rows)) {
<?php <?php
foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) { foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {
?> ?>
rcpt = "<?=$rcpt;?>"; rcpt = <?=json_encode($rcpt);?>;
<?php <?php
} }
} }

View File

@ -0,0 +1,6 @@
provider_type = "rspamd";
provider_info {
ip4 = "asn.rspamd.com";
ip6 = "asn6.rspamd.com";
}
symbol = "ASN";

View File

@ -0,0 +1,24 @@
# how each action is treated in scoring
actions {
reject = 1.0;
"add header" = 0.25;
"rewrite subject" = 0.25;
"no action" = 1.0;
}
# how each component is evaluated
scores {
asn = 0.5;
country = 0.1;
ipnet = 0.8;
ip = 1.0;
}
asn_prefix = "a:";
country_prefix = "c:";
hash = "ip_score";
ipnet_prefix = "n:";
lower_bound = 10;
metric = "default";
max_score = 10;
min_score = -5;
score_divisor = 10;
symbol = "IP_SCORE";

View File

@ -1,5 +1,5 @@
rules { rules {
QUARANTAINE { QUARANTINE {
backend = "http"; backend = "http";
url = "http://nginx:9081/pipe.php"; url = "http://nginx:9081/pipe.php";
selector = "is_reject"; selector = "is_reject";

View File

@ -0,0 +1,26 @@
# Key prefix for redis - default "Ur."
key_prefix = "Ur.";
# Symbols to insert - defaults as shown
symbols {
white = "URL_REPUTATION_WHITE";
black = "URL_REPUTATION_BLACK";
grey = "URL_REPUTATION_GREY";
neutral = "URL_REPUTATION_NEUTRAL";
}
# DKIM/DMARC/SPF allow symbols - defaults as shown
foreign_symbols {
dmarc = "DMARC_POLICY_ALLOW";
dkim = "R_DKIM_ALLOW";
spf = "R_SPF_ALLOW";
}
# SURBL metatags to ignore - default as shown
ignore_surbl = ["URIBL_BLOCKED", "DBL_PROHIBIT", "SURBL_BLOCKED"];
# Amount of samples required for scoring - default 5
threshold = 5;
# Maximum number of TLDs to update reputation on (default 1)
update_limit = 1;
# Maximum number of TLDs to query reputation on (default 100)
query_limit = 100;
# If true, try to find most 'relevant' URL (default true)
relevance = true;
enabled = true;

View File

@ -133,12 +133,12 @@ foreach (json_decode($rcpts, true) as $rcpt) {
// Loop through all found gotos // Loop through all found gotos
foreach ($gotos_array as $index => &$goto) { foreach ($gotos_array as $index => &$goto) {
error_log("quarantaine pipe: query " . $goto . " as username from mailbox"); error_log("quarantine pipe: query " . $goto . " as username from mailbox");
$stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `username` = :goto AND `active`= '1';"); $stmt = $pdo->prepare("SELECT `username` FROM `mailbox` WHERE `username` = :goto AND `active`= '1';");
$stmt->execute(array(':goto' => $goto)); $stmt->execute(array(':goto' => $goto));
$username = $stmt->fetch(PDO::FETCH_ASSOC)['username']; $username = $stmt->fetch(PDO::FETCH_ASSOC)['username'];
if (!empty($username)) { if (!empty($username)) {
error_log("quarantaine pipe: mailbox found: " . $username); error_log("quarantine pipe: mailbox found: " . $username);
// Current goto is a mailbox, save to rcpt_final_mailboxes if not a duplicate // Current goto is a mailbox, save to rcpt_final_mailboxes if not a duplicate
if (!in_array($username, $rcpt_final_mailboxes)) { if (!in_array($username, $rcpt_final_mailboxes)) {
$rcpt_final_mailboxes[] = $username; $rcpt_final_mailboxes[] = $username;
@ -153,7 +153,7 @@ foreach (json_decode($rcpts, true) as $rcpt) {
$stmt = $pdo->prepare("SELECT `goto` FROM `alias` WHERE `address` = :goto AND `active` = '1'"); $stmt = $pdo->prepare("SELECT `goto` FROM `alias` WHERE `address` = :goto AND `active` = '1'");
$stmt->execute(array(':goto' => $goto)); $stmt->execute(array(':goto' => $goto));
$goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['goto']; $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];
error_log("quarantaine pipe: goto address " . $goto . " is a alias branch for " . $goto_branch); error_log("quarantine pipe: goto address " . $goto . " is a alias branch for " . $goto_branch);
$goto_branch_array = explode(',', $goto_branch); $goto_branch_array = explode(',', $goto_branch);
} }
} }
@ -173,7 +173,7 @@ foreach (json_decode($rcpts, true) as $rcpt) {
// Force exit if loop cannot be solved // Force exit if loop cannot be solved
// Postfix does not allow for alias loops, so this should never happen. // Postfix does not allow for alias loops, so this should never happen.
$loop_c++; $loop_c++;
error_log("quarantaine pipe: goto array count on loop #". $loop_c . " is " . count($gotos_array)); error_log("quarantine pipe: goto array count on loop #". $loop_c . " is " . count($gotos_array));
} }
} }
catch (PDOException $e) { catch (PDOException $e) {
@ -184,9 +184,9 @@ foreach (json_decode($rcpts, true) as $rcpt) {
} }
foreach ($rcpt_final_mailboxes as $rcpt) { foreach ($rcpt_final_mailboxes as $rcpt) {
error_log("quarantaine pipe: processing quarantaine message for rcpt " . $rcpt); error_log("quarantine pipe: processing quarantine message for rcpt " . $rcpt);
try { try {
$stmt = $pdo->prepare("INSERT INTO `quarantaine` (`qid`, `score`, `sender`, `rcpt`, `symbols`, `user`, `ip`, `msg`, `action`) $stmt = $pdo->prepare("INSERT INTO `quarantine` (`qid`, `score`, `sender`, `rcpt`, `symbols`, `user`, `ip`, `msg`, `action`)
VALUES (:qid, :score, :sender, :rcpt, :symbols, :user, :ip, :msg, :action)"); VALUES (:qid, :score, :sender, :rcpt, :symbols, :user, :ip, :msg, :action)");
$stmt->execute(array( $stmt->execute(array(
':qid' => $qid, ':qid' => $qid,
@ -199,11 +199,11 @@ foreach ($rcpt_final_mailboxes as $rcpt) {
':msg' => $raw_data, ':msg' => $raw_data,
':action' => $action ':action' => $action
)); ));
$stmt = $pdo->prepare('DELETE FROM `quarantaine` WHERE `rcpt` = :rcpt AND `id` NOT IN ( $stmt = $pdo->prepare('DELETE FROM `quarantine` WHERE `rcpt` = :rcpt AND `id` NOT IN (
SELECT `id` SELECT `id`
FROM ( FROM (
SELECT `id` SELECT `id`
FROM `quarantaine` FROM `quarantine`
WHERE `rcpt` = :rcpt2 WHERE `rcpt` = :rcpt2
ORDER BY id DESC ORDER BY id DESC
LIMIT :retention_size LIMIT :retention_size

View File

@ -1 +1 @@
# Placeholder # Placeholder

View File

@ -1,9 +1,7 @@
bind_socket = "*:11334"; bind_socket = "*:11334";
secure_ip = "192.168.0.0/16"; count = 2;
secure_ip = "172.16.0.0/12";
secure_ip = "10.0.0.0/8";
secure_ip = "127.0.0.1"; secure_ip = "127.0.0.1";
secure_ip = "::1"; secure_ip = "::1";
secure_ip = "fd00::/8" bind_socket = "/rspamd-sock/rspamd.sock mode=0666 owner=nobody";
.include(try=true; priority=10) "$CONFDIR/override.d/worker-controller-password.inc" .include(try=true; priority=10) "$CONFDIR/override.d/worker-controller-password.inc"
.include(try=true; priority=20) "$CONFDIR/override.d/worker-controller.custom.inc" .include(try=true; priority=20) "$CONFDIR/override.d/worker-controller.custom.inc"

View File

@ -5,7 +5,7 @@
PrivateDAndTViewer PrivateDAndTViewer
); );
WOWorkersCount = "7"; WOWorkersCount = "14";
SOGoACLsSendEMailNotifications = YES; SOGoACLsSendEMailNotifications = YES;
SOGoAppointmentSendEMailNotifications = YES; SOGoAppointmentSendEMailNotifications = YES;
SOGoDraftsFolderName = "Drafts"; SOGoDraftsFolderName = "Drafts";
@ -14,6 +14,7 @@
SOGoEnableEMailAlarms = NO; SOGoEnableEMailAlarms = NO;
SOGoFoldersSendEMailNotifications = YES; SOGoFoldersSendEMailNotifications = YES;
SOGoForwardEnabled = YES; SOGoForwardEnabled = YES;
SOGoUIAdditionalJSFiles = (js/theme-blue.js);
// Multi-domain setup // Multi-domain setup
// Domains are isolated, you can define visibility options here. // Domains are isolated, you can define visibility options here.

View File

@ -11,7 +11,7 @@ server:
access-control: 10.0.0.0/8 allow access-control: 10.0.0.0/8 allow
access-control: 172.16.0.0/12 allow access-control: 172.16.0.0/12 allow
access-control: 192.168.0.0/16 allow access-control: 192.168.0.0/16 allow
access-control: fd00::/8 allow access-control: fc00::/7 allow
access-control: fe80::/10 allow access-control: fe80::/10 allow
directory: "/etc/unbound" directory: "/etc/unbound"
username: unbound username: unbound
@ -20,7 +20,7 @@ server:
private-address: 172.16.0.0/12 private-address: 172.16.0.0/12
private-address: 192.168.0.0/16 private-address: 192.168.0.0/16
private-address: 169.254.0.0/16 private-address: 169.254.0.0/16
private-address: fd00::/8 private-address: fc00::/7
private-address: fe80::/10 private-address: fe80::/10
root-hints: "/etc/unbound/root.hints" root-hints: "/etc/unbound/root.hints"
hide-identity: yes hide-identity: yes

View File

@ -147,7 +147,7 @@ $tfa_data = get_tfa();
<a href="#fwdhosts" class="list-group-item"><?=$lang['admin']['forwarding_hosts'];?></a> <a href="#fwdhosts" class="list-group-item"><?=$lang['admin']['forwarding_hosts'];?></a>
<a href="#f2bparams" class="list-group-item"><?=$lang['admin']['f2b_parameters'];?></a> <a href="#f2bparams" class="list-group-item"><?=$lang['admin']['f2b_parameters'];?></a>
<a href="#relayhosts" class="list-group-item">Relayhosts</a> <a href="#relayhosts" class="list-group-item">Relayhosts</a>
<a href="#quarantaine" class="list-group-item"><?=$lang['admin']['quarantaine'];?></a> <a href="#quarantine" class="list-group-item"><?=$lang['admin']['quarantine'];?></a>
<a href="#customize" class="list-group-item"><?=$lang['admin']['customize'];?></a> <a href="#customize" class="list-group-item"><?=$lang['admin']['customize'];?></a>
<a href="#top" class="list-group-item" style="border-top:1px dashed #dadada"> <?=$lang['admin']['to_top'];?></a> <a href="#top" class="list-group-item" style="border-top:1px dashed #dadada"> <?=$lang['admin']['to_top'];?></a>
</div> </div>
@ -414,28 +414,28 @@ $tfa_data = get_tfa();
</div> </div>
</div> </div>
<span class="anchor" id="quarantaine"></span> <span class="anchor" id="quarantine"></span>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><?=$lang['admin']['quarantaine'];?></div> <div class="panel-heading"><?=$lang['admin']['quarantine'];?></div>
<div class="panel-body"> <div class="panel-body">
<?php $q_data = quarantaine('settings'); ?> <?php $q_data = quarantine('settings'); ?>
<form class="form" data-id="quarantaine" role="form" method="post"> <form class="form" data-id="quarantine" role="form" method="post">
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
<div class="form-group"> <div class="form-group">
<label for="retention_size"><?=$lang['admin']['quarantaine_retention_size'];?></label> <label for="retention_size"><?=$lang['admin']['quarantine_retention_size'];?></label>
<input type="number" class="form-control" id="retention_size" name="retention_size" value="<?=$q_data['retention_size'];?>" required> <input type="number" class="form-control" id="retention_size" name="retention_size" value="<?=$q_data['retention_size'];?>" required>
</div> </div>
</div> </div>
<div class="col-sm-6"> <div class="col-sm-6">
<div class="form-group"> <div class="form-group">
<label for="max_size"><?=$lang['admin']['quarantaine_max_size'];?></label> <label for="max_size"><?=$lang['admin']['quarantine_max_size'];?></label>
<input type="number" class="form-control" id="max_size" name="max_size" value="<?=$q_data['max_size'];?>" required> <input type="number" class="form-control" id="max_size" name="max_size" value="<?=$q_data['max_size'];?>" required>
</div> </div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="exclude_domains"><?=$lang['admin']['quarantaine_exclude_domains'];?></label><br /> <label for="exclude_domains"><?=$lang['admin']['quarantine_exclude_domains'];?></label><br />
<select data-width="100%" id="exclude_domains" name="exclude_domains" class="selectpicker" title="<?=$lang['tfa']['select'];?>" multiple> <select data-width="100%" id="exclude_domains" name="exclude_domains" class="selectpicker" title="<?=$lang['tfa']['select'];?>" multiple>
<?php <?php
foreach (array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains')) as $domain): foreach (array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains')) as $domain):
@ -446,7 +446,7 @@ $tfa_data = get_tfa();
?> ?>
</select> </select>
</div> </div>
<button class="btn btn-default" id="edit_selected" data-item="self" data-id="quarantaine" data-api-url='edit/quarantaine' data-api-attr='{"action":"settings"}' href="#"><span class="glyphicon glyphicon-check"></span> <?=$lang['admin']['save'];?></button> <button class="btn btn-default" id="edit_selected" data-item="self" data-id="quarantine" data-api-url='edit/quarantine' data-api-attr='{"action":"settings"}' href="#"><span class="glyphicon glyphicon-check"></span> <?=$lang['admin']['save'];?></button>
</form> </form>
</div> </div>
</div> </div>

View File

@ -36,9 +36,8 @@ $opt = [
$pdo = new PDO($dsn, $database_user, $database_pass, $opt); $pdo = new PDO($dsn, $database_user, $database_pass, $opt);
$login_user = strtolower(trim($_SERVER['PHP_AUTH_USER'])); $login_user = strtolower(trim($_SERVER['PHP_AUTH_USER']));
$login_pass = trim(htmlspecialchars_decode($_SERVER['PHP_AUTH_PW'])); $login_pass = trim(htmlspecialchars_decode($_SERVER['PHP_AUTH_PW']));
$login_role = check_login($login_user, $login_pass);
if (!isset($_SERVER['PHP_AUTH_USER']) OR $login_role !== "user") { if (empty($_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_PW'])) {
try { try {
$json = json_encode( $json = json_encode(
array( array(
@ -62,35 +61,36 @@ if (!isset($_SERVER['PHP_AUTH_USER']) OR $login_role !== "user") {
header('HTTP/1.0 401 Unauthorized'); header('HTTP/1.0 401 Unauthorized');
exit(0); exit(0);
} }
else {
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) { $login_role = check_login($login_user, $login_pass);
if ($login_role === "user") {
header("Content-Type: application/xml"); if ($login_role === "user") {
echo '<?xml version="1.0" encoding="utf-8" ?>' . PHP_EOL; header("Content-Type: application/xml");
echo '<?xml version="1.0" encoding="utf-8" ?>' . PHP_EOL;
?> ?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006"> <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
<?php <?php
if(!$data) { if(!$data) {
try { try {
$json = json_encode( $json = json_encode(
array( array(
"time" => time(), "time" => time(),
"ua" => $_SERVER['HTTP_USER_AGENT'], "ua" => $_SERVER['HTTP_USER_AGENT'],
"user" => $_SERVER['PHP_AUTH_USER'], "user" => $_SERVER['PHP_AUTH_USER'],
"service" => "Error: invalid or missing request data" "service" => "Error: invalid or missing request data"
) )
); );
$redis->lPush('AUTODISCOVER_LOG', $json); $redis->lPush('AUTODISCOVER_LOG', $json);
$redis->lTrim('AUTODISCOVER_LOG', 0, 100); $redis->lTrim('AUTODISCOVER_LOG', 0, 100);
} }
catch (RedisException $e) { catch (RedisException $e) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
'msg' => 'Redis: '.$e 'msg' => 'Redis: '.$e
); );
return false; return false;
} }
list($usec, $sec) = explode(' ', microtime()); list($usec, $sec) = explode(' ', microtime());
?> ?>
<Response> <Response>
<Error Time="<?=date('H:i:s', $sec) . substr($usec, 0, strlen($usec) - 2);?>" Id="2477272013"> <Error Time="<?=date('H:i:s', $sec) . substr($usec, 0, strlen($usec) - 2);?>" Id="2477272013">
@ -101,54 +101,54 @@ else {
</Response> </Response>
</Autodiscover> </Autodiscover>
<?php <?php
exit(0); exit(0);
} }
try { try {
$discover = new SimpleXMLElement($data); $discover = new SimpleXMLElement($data);
$email = $discover->Request->EMailAddress; $email = $discover->Request->EMailAddress;
} catch (Exception $e) { } catch (Exception $e) {
$email = $_SERVER['PHP_AUTH_USER']; $email = $_SERVER['PHP_AUTH_USER'];
} }
$username = trim($email); $username = trim($email);
try { try {
$stmt = $pdo->prepare("SELECT `name` FROM `mailbox` WHERE `username`= :username"); $stmt = $pdo->prepare("SELECT `name` FROM `mailbox` WHERE `username`= :username");
$stmt->execute(array(':username' => $username)); $stmt->execute(array(':username' => $username));
$MailboxData = $stmt->fetch(PDO::FETCH_ASSOC); $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);
} }
catch(PDOException $e) { catch(PDOException $e) {
die("Failed to determine name from SQL"); die("Failed to determine name from SQL");
} }
if (!empty($MailboxData['name'])) { if (!empty($MailboxData['name'])) {
$displayname = $MailboxData['name']; $displayname = $MailboxData['name'];
} }
else { else {
$displayname = $email; $displayname = $email;
} }
try { try {
$json = json_encode( $json = json_encode(
array( array(
"time" => time(), "time" => time(),
"ua" => $_SERVER['HTTP_USER_AGENT'], "ua" => $_SERVER['HTTP_USER_AGENT'],
"user" => $_SERVER['PHP_AUTH_USER'], "user" => $_SERVER['PHP_AUTH_USER'],
"service" => $autodiscover_config['autodiscoverType'] "service" => $autodiscover_config['autodiscoverType']
) )
); );
$redis->lPush('AUTODISCOVER_LOG', $json); $redis->lPush('AUTODISCOVER_LOG', $json);
$redis->lTrim('AUTODISCOVER_LOG', 0, 100); $redis->lTrim('AUTODISCOVER_LOG', 0, 100);
} }
catch (RedisException $e) { catch (RedisException $e) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
'msg' => 'Redis: '.$e 'msg' => 'Redis: '.$e
); );
return false; return false;
} }
if ($autodiscover_config['autodiscoverType'] == 'imap') { if ($autodiscover_config['autodiscoverType'] == 'imap') {
?> ?>
<Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a"> <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<User> <User>
<DisplayName><?=$displayname;?></DisplayName> <DisplayName><?=htmlspecialchars($displayname, ENT_XML1 | ENT_QUOTES, 'UTF-8');?></DisplayName>
</User> </User>
<Account> <Account>
<AccountType>email</AccountType> <AccountType>email</AccountType>
@ -190,13 +190,13 @@ else {
</Account> </Account>
</Response> </Response>
<?php <?php
} }
else if ($autodiscover_config['autodiscoverType'] == 'activesync') { else if ($autodiscover_config['autodiscoverType'] == 'activesync') {
?> ?>
<Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/mobilesync/responseschema/2006"> <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/mobilesync/responseschema/2006">
<Culture>en:en</Culture> <Culture>en:en</Culture>
<User> <User>
<DisplayName><?=$displayname;?></DisplayName> <DisplayName><?=htmlspecialchars($displayname, ENT_XML1 | ENT_QUOTES, 'UTF-8');?></DisplayName>
<EMailAddress><?=$email;?></EMailAddress> <EMailAddress><?=$email;?></EMailAddress>
</User> </User>
<Action> <Action>
@ -210,11 +210,9 @@ else {
</Action> </Action>
</Response> </Response>
<?php <?php
} }
?> ?>
</Autodiscover> </Autodiscover>
<?php <?php
}
}
} }
?> ?>

View File

@ -34,4 +34,4 @@ table.footable>tbody>tr.footable-empty>td {
} }
.inputMissingAttr { .inputMissingAttr {
border-color: #FF4136; border-color: #FF4136;
} }

View File

@ -28,10 +28,10 @@ table.footable>tbody>tr.footable-empty>td {
width: 80%; width: 80%;
} }
} }
.mass-actions-quarantaine { .mass-actions-quarantine {
user-select: none; user-select: none;
padding:10px 0 10px 10px; padding:10px 0 10px 10px;
} }
.inputMissingAttr { .inputMissingAttr {
border-color: #FF4136; border-color: #FF4136;
} }

View File

@ -9,21 +9,14 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
<div class="container"> <div class="container">
<ul class="nav nav-tabs" role="tablist"> <ul class="nav nav-tabs" role="tablist">
<li class="dropdown active"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Rspamd <li role="presentation" class="active"><a href="#tab-containers" aria-controls="tab-containers" role="tab" data-toggle="tab">Containers & System</a></li>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li role="presentation" class="active"><a href="#tab-rspamd-ui" aria-controls="tab-rspamd-ui" role="tab" data-toggle="tab">Rspamd UI</a></li>
<li role="presentation"><a href="#tab-rspamd-settings" aria-controls="tab-rspamd-settings" role="tab" data-toggle="tab">Rspamd settings map</a></li>
</ul>
</li>
<li role="presentation"><a href="#tab-containers" aria-controls="tab-containers" role="tab" data-toggle="tab">Containers</a></li>
<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Logs <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Logs
<span class="caret"></span></a> <span class="caret"></span></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li role="presentation"><a href="#tab-postfix-logs" aria-controls="tab-postfix-logs" role="tab" data-toggle="tab">Postfix</a></li> <li role="presentation"><a href="#tab-postfix-logs" aria-controls="tab-postfix-logs" role="tab" data-toggle="tab">Postfix</a></li>
<li role="presentation"><a href="#tab-dovecot-logs" aria-controls="tab-dovecot-logs" role="tab" data-toggle="tab">Dovecot</a></li> <li role="presentation"><a href="#tab-dovecot-logs" aria-controls="tab-dovecot-logs" role="tab" data-toggle="tab">Dovecot</a></li>
<li role="presentation"><a href="#tab-sogo-logs" aria-controls="tab-sogo-logs" role="tab" data-toggle="tab">SOGo</a></li> <li role="presentation"><a href="#tab-sogo-logs" aria-controls="tab-sogo-logs" role="tab" data-toggle="tab">SOGo</a></li>
<li role="presentation"><a href="#tab-fail2ban-logs" aria-controls="tab-fail2ban-logs" role="tab" data-toggle="tab">Fail2ban</a></li> <li role="presentation"><a href="#tab-netfilter-logs" aria-controls="tab-netfilter-logs" role="tab" data-toggle="tab">Netfilter</a></li>
<li role="presentation"><a href="#tab-rspamd-history" aria-controls="tab-rspamd-history" role="tab" data-toggle="tab">Rspamd</a></li> <li role="presentation"><a href="#tab-rspamd-history" aria-controls="tab-rspamd-history" role="tab" data-toggle="tab">Rspamd</a></li>
<li role="presentation"><a href="#tab-autodiscover-logs" aria-controls="tab-autodiscover-logs" role="tab" data-toggle="tab">Autodiscover</a></li> <li role="presentation"><a href="#tab-autodiscover-logs" aria-controls="tab-autodiscover-logs" role="tab" data-toggle="tab">Autodiscover</a></li>
<li role="presentation"><a href="#tab-watchdog-logs" aria-controls="tab-watchdog-logs" role="tab" data-toggle="tab">Watchdog</a></li> <li role="presentation"><a href="#tab-watchdog-logs" aria-controls="tab-watchdog-logs" role="tab" data-toggle="tab">Watchdog</a></li>
@ -31,67 +24,42 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
<li role="presentation"><a href="#tab-api-logs" aria-controls="tab-api-logs" role="tab" data-toggle="tab">API</a></li> <li role="presentation"><a href="#tab-api-logs" aria-controls="tab-api-logs" role="tab" data-toggle="tab">API</a></li>
</ul> </ul>
</li> </li>
<li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Rspamd
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li role="presentation"><a href="#tab-rspamd-ui" aria-controls="tab-rspamd-ui" role="tab" data-toggle="tab">Rspamd UI</a></li>
<li role="presentation"><a href="#tab-rspamd-settings" aria-controls="tab-rspamd-settings" role="tab" data-toggle="tab">Rspamd settings map</a></li>
</ul>
</li>
</ul> </ul>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div class="tab-content" style="padding-top:20px"> <div class="tab-content" style="padding-top:20px">
<div role="tabpanel" class="tab-pane active" id="tab-rspamd-ui"> <?php
$exec_fields = array('cmd' => 'df', 'dir' => '/var/vmail');
$vmail_df = explode(',', json_decode(docker('dovecot-mailcow', 'post', 'exec', $exec_fields), true));
?>
<div role="tabpanel" class="tab-pane active" id="tab-containers">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Rspamd UI</h3> <h3 class="panel-title">Disk usage</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
<div class="col-sm-9">
<form class="form-horizontal" autocapitalize="none" data-id="admin" autocorrect="off" role="form" method="post">
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<label>
<a href="/rspamd/" target="_blank"><span class="glyphicon glyphicon-new-window" aria-hidden="true"></span> Rspamd UI</a>
</label>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3" for="rspamd_ui_pass"><?=$lang['admin']['password'];?>:</label>
<div class="col-sm-9">
<input type="password" class="form-control" name="rspamd_ui_pass" id="rspamd_ui_pass">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3" for="rspamd_ui_pass2"><?=$lang['admin']['password_repeat'];?>:</label>
<div class="col-sm-9">
<input type="password" class="form-control" name="rspamd_ui_pass2" id="rspamd_ui_pass2">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button type="submit" class="btn btn-default" id="rspamd_ui" name="rspamd_ui" href="#"><span class="glyphicon glyphicon-check"></span> <?=$lang['admin']['save'];?></button>
</div>
</div>
</form>
</div>
<div class="col-sm-3"> <div class="col-sm-3">
<img class="img-responsive" src="/img/rspamd_logo.png" alt="Rspamd UI" /> <p>/var/vmail on <?=$vmail_df[0];?></p>
<p><?=$vmail_df[2];?> / <?=$vmail_df[1];?> (<?=$vmail_df[4];?>)</p>
</div>
<div class="col-sm-9">
<div class="progress">
<div class="progress-bar progress-bar-info" role="progressbar" style="width:<?=$vmail_df[4];?>"></div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<div role="tabpanel" class="tab-pane" id="tab-rspamd-settings">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Rspamd settings map</h3>
</div>
<div class="panel-body">
<textarea autocorrect="off" spellcheck="false" autocapitalize="none" class="form-control" rows="20" id="settings_map" name="settings_map" readonly><?=file_get_contents('http://nginx:8081/settings.php');?></textarea>
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="tab-containers">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Container information</h3> <h3 class="panel-title">Container information</h3>
@ -112,7 +80,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
'redis-mailcow', 'redis-mailcow',
'php-fpm-mailcow', 'php-fpm-mailcow',
'mysql-mailcow', 'mysql-mailcow',
'fail2ban-mailcow', 'netfilter-mailcow',
'clamd-mailcow' 'clamd-mailcow'
); );
foreach ($container_array as $container) { foreach ($container_array as $container) {
@ -123,21 +91,26 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
<?php <?php
date_default_timezone_set('UTC'); date_default_timezone_set('UTC');
$StartedAt = date_parse($container_stats['State']['StartedAt']); $StartedAt = date_parse($container_stats['State']['StartedAt']);
$date = new \DateTime(); if ($StartedAt['hour'] !== false) {
$date->setTimestamp(mktime( $date = new \DateTime();
$StartedAt['hour'], $date->setTimestamp(mktime(
$StartedAt['minute'], $StartedAt['hour'],
$StartedAt['second'], $StartedAt['minute'],
$StartedAt['month'], $StartedAt['second'],
$StartedAt['day'], $StartedAt['month'],
$StartedAt['year'])); $StartedAt['day'],
$user_tz = new DateTimeZone(getenv('TZ')); $StartedAt['year']));
$date->setTimezone($user_tz); $user_tz = new DateTimeZone(getenv('TZ'));
$started = $date->format('r'); $date->setTimezone($user_tz);
$started = $date->format('r');
}
else {
$started = '?';
}
?> ?>
<small>(Started on <?=$started;?>), <small>(Started on <?=$started;?>),
<a href data-toggle="modal" data-container="<?=$container;?>" data-target="#RestartContainer">Restart</a></small> <a href data-toggle="modal" data-container="<?=$container;?>" data-target="#RestartContainer">Restart</a></small>
<span class="pull-right label label-<?=($container_stats['State']['Running'] == 1) ? 'success' : 'danger';?>">&nbsp;&nbsp;&nbsp;</span> <span class="pull-right label label-<?=($container_stats !== false && !empty($container_stats)) ? (($container_stats['State']['Running'] == 1) ? 'success' : 'danger') : 'default'; ?>">&nbsp;&nbsp;&nbsp;</span>
</li> </li>
<?php <?php
} }
@ -198,18 +171,18 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
</div> </div>
</div> </div>
<div role="tabpanel" class="tab-pane" id="tab-fail2ban-logs"> <div role="tabpanel" class="tab-pane" id="tab-netfilter-logs">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">Fail2ban <span class="badge badge-info log-lines"></span> <div class="panel-heading">Netfilter <span class="badge badge-info log-lines"></span>
<div class="btn-group pull-right"> <div class="btn-group pull-right">
<button class="btn btn-xs btn-default add_log_lines" data-post-process="general_syslog" data-table="fail2ban_log" data-log-url="fail2ban" data-nrows="100">+ 100</button> <button class="btn btn-xs btn-default add_log_lines" data-post-process="general_syslog" data-table="netfilter_log" data-log-url="netfilter" data-nrows="100">+ 100</button>
<button class="btn btn-xs btn-default add_log_lines" data-post-process="general_syslog" data-table="fail2ban_log" data-log-url="fail2ban" data-nrows="1000">+ 1000</button> <button class="btn btn-xs btn-default add_log_lines" data-post-process="general_syslog" data-table="netfilter_log" data-log-url="netfilter" data-nrows="1000">+ 1000</button>
<button class="btn btn-xs btn-default" id="refresh_fail2ban_log"><?=$lang['admin']['refresh'];?></button> <button class="btn btn-xs btn-default" id="refresh_netfilter_log"><?=$lang['admin']['refresh'];?></button>
</div> </div>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped table-condensed" id="fail2ban_log"></table> <table class="table table-striped table-condensed" id="netfilter_log"></table>
</div> </div>
</div> </div>
</div> </div>
@ -300,6 +273,60 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
</div> </div>
</div> </div>
<div role="tabpanel" class="tab-pane" id="tab-rspamd-ui">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Rspamd UI</h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-9">
<form class="form-horizontal" autocapitalize="none" data-id="admin" autocorrect="off" role="form" method="post">
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<label>
<a href="/rspamd/" target="_blank"><span class="glyphicon glyphicon-new-window" aria-hidden="true"></span> Rspamd UI</a>
</label>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3" for="rspamd_ui_pass"><?=$lang['admin']['password'];?>:</label>
<div class="col-sm-9">
<input type="password" class="form-control" name="rspamd_ui_pass" id="rspamd_ui_pass">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3" for="rspamd_ui_pass2"><?=$lang['admin']['password_repeat'];?>:</label>
<div class="col-sm-9">
<input type="password" class="form-control" name="rspamd_ui_pass2" id="rspamd_ui_pass2">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button type="submit" class="btn btn-default" id="rspamd_ui" name="rspamd_ui" href="#"><span class="glyphicon glyphicon-check"></span> <?=$lang['admin']['save'];?></button>
</div>
</div>
</form>
</div>
<div class="col-sm-3">
<img class="img-responsive" src="/img/rspamd_logo.png" alt="Rspamd UI" />
</div>
</div>
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="tab-rspamd-settings">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Rspamd settings map</h3>
</div>
<div class="panel-body">
<textarea autocorrect="off" spellcheck="false" autocapitalize="none" class="form-control" rows="20" id="settings_map" name="settings_map" readonly><?=file_get_contents('http://nginx:8081/settings.php');?></textarea>
</div>
</div>
</div>
</div> <!-- /tab-content --> </div> <!-- /tab-content -->
</div> <!-- /col-md-12 --> </div> <!-- /col-md-12 -->
</div> <!-- /row --> </div> <!-- /row -->

View File

@ -20,7 +20,7 @@ if (isset($_SESSION['mailcow_cc_role'])) {
if ($_SESSION['mailcow_cc_role'] == "admin" || $_SESSION['mailcow_cc_role'] == "domainadmin") { if ($_SESSION['mailcow_cc_role'] == "admin" || $_SESSION['mailcow_cc_role'] == "domainadmin") {
if (isset($_GET["alias"]) && if (isset($_GET["alias"]) &&
!empty($_GET["alias"])) { !empty($_GET["alias"])) {
$alias = $_GET["alias"]; $alias = html_entity_decode(rawurldecode($_GET["alias"]));
$result = mailbox('get', 'alias_details', $alias); $result = mailbox('get', 'alias_details', $alias);
if (!empty($result)) { if (!empty($result)) {
?> ?>
@ -46,7 +46,7 @@ if (isset($_SESSION['mailcow_cc_role'])) {
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-2 col-sm-10"> <div class="col-sm-offset-2 col-sm-10">
<button class="btn btn-success" id="edit_selected" data-id="editalias" data-item="<?=$alias;?>" data-api-url='edit/alias' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button> <button class="btn btn-success" id="edit_selected" data-id="editalias" data-item="<?=htmlspecialchars($alias);?>" data-api-url='edit/alias' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button>
</div> </div>
</div> </div>
</form> </form>
@ -313,9 +313,9 @@ if (isset($_SESSION['mailcow_cc_role'])) {
} }
} }
elseif (isset($_GET['aliasdomain']) && elseif (isset($_GET['aliasdomain']) &&
is_valid_domain_name($_GET["aliasdomain"]) && is_valid_domain_name(html_entity_decode(rawurldecode($_GET["aliasdomain"]))) &&
!empty($_GET["aliasdomain"])) { !empty($_GET["aliasdomain"])) {
$alias_domain = $_GET["aliasdomain"]; $alias_domain = html_entity_decode(rawurldecode($_GET["aliasdomain"]));
$result = mailbox('get', 'alias_domain_details', $alias_domain); $result = mailbox('get', 'alias_domain_details', $alias_domain);
$rl = mailbox('get', 'ratelimit', $alias_domain); $rl = mailbox('get', 'ratelimit', $alias_domain);
if (!empty($result)) { if (!empty($result)) {
@ -380,8 +380,8 @@ if (isset($_SESSION['mailcow_cc_role'])) {
<?php <?php
} }
} }
elseif (isset($_GET['mailbox']) && filter_var($_GET["mailbox"], FILTER_VALIDATE_EMAIL) && !empty($_GET["mailbox"])) { elseif (isset($_GET['mailbox']) && filter_var(html_entity_decode(rawurldecode($_GET["mailbox"])), FILTER_VALIDATE_EMAIL) && !empty($_GET["mailbox"])) {
$mailbox = $_GET["mailbox"]; $mailbox = html_entity_decode(rawurldecode($_GET["mailbox"]));
$result = mailbox('get', 'mailbox_details', $mailbox); $result = mailbox('get', 'mailbox_details', $mailbox);
$rl = mailbox('get', 'ratelimit', $mailbox); $rl = mailbox('get', 'ratelimit', $mailbox);
if (!empty($result)) { if (!empty($result)) {
@ -390,6 +390,7 @@ if (isset($_SESSION['mailcow_cc_role'])) {
<form class="form-horizontal" data-id="editmailbox" role="form" method="post"> <form class="form-horizontal" data-id="editmailbox" role="form" method="post">
<input type="hidden" value="0" name="sender_acl"> <input type="hidden" value="0" name="sender_acl">
<input type="hidden" value="0" name="active"> <input type="hidden" value="0" name="active">
<input type="hidden" value="0" name="force_pw_update">
<div class="form-group"> <div class="form-group">
<label class="control-label col-sm-2" for="name"><?=$lang['edit']['full_name'];?>:</label> <label class="control-label col-sm-2" for="name"><?=$lang['edit']['full_name'];?>:</label>
<div class="col-sm-10"> <div class="col-sm-10">
@ -476,6 +477,14 @@ if (isset($_SESSION['mailcow_cc_role'])) {
</div> </div>
</div> </div>
</div> </div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label><input type="checkbox" value="1" name="force_pw_update" <?=($result['attributes']['force_pw_update']=="1") ? "checked" : null;?>> <?=$lang['edit']['force_pw_update'];?></label>
<small class="help-block"><?=$lang['edit']['force_pw_update_info'];?></small>
</div>
</div>
</div>
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-2 col-sm-10"> <div class="col-sm-offset-2 col-sm-10">
<button class="btn btn-success" id="edit_selected" data-id="editmailbox" data-item="<?=htmlspecialchars($result['username']);?>" data-api-url='edit/mailbox' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button> <button class="btn btn-success" id="edit_selected" data-id="editmailbox" data-item="<?=htmlspecialchars($result['username']);?>" data-api-url='edit/mailbox' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button>
@ -500,7 +509,7 @@ if (isset($_SESSION['mailcow_cc_role'])) {
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<button class="btn btn-default" id="edit_selected" data-id="mboxratelimit" data-item="<?=$mailbox;?>" data-api-url='edit/ratelimit' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button> <button class="btn btn-default" id="edit_selected" data-id="mboxratelimit" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/ratelimit' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button>
</div> </div>
</div> </div>
</div> </div>
@ -555,8 +564,8 @@ if (isset($_SESSION['mailcow_cc_role'])) {
<?php <?php
} }
} }
elseif (isset($_GET['resource']) && filter_var($_GET["resource"], FILTER_VALIDATE_EMAIL) && !empty($_GET["resource"])) { elseif (isset($_GET['resource']) && filter_var(html_entity_decode(rawurldecode($_GET["resource"])), FILTER_VALIDATE_EMAIL) && !empty($_GET["resource"])) {
$resource = $_GET["resource"]; $resource = html_entity_decode(rawurldecode($_GET["resource"]));
$result = mailbox('get', 'resource_details', $resource); $result = mailbox('get', 'resource_details', $resource);
if (!empty($result)) { if (!empty($result)) {
?> ?>
@ -621,7 +630,7 @@ if (isset($_SESSION['mailcow_cc_role'])) {
<label class="control-label col-sm-2" for="bcc_dest">BCC destination</label> <label class="control-label col-sm-2" for="bcc_dest">BCC destination</label>
<div class="col-sm-10"> <div class="col-sm-10">
<textarea id="bcc_dest" class="form-control" autocapitalize="none" autocorrect="off" rows="10" id="bcc_dest" name="bcc_dest" required><?=$result['bcc_dest'];?></textarea> <textarea id="bcc_dest" class="form-control" autocapitalize="none" autocorrect="off" rows="10" id="bcc_dest" name="bcc_dest" required><?=$result['bcc_dest'];?></textarea>
<small>BCC destinations can only be valid email addresses. Separated by whitespace, semicolon, new line or comma.</small> <small>BCC destination must be a single valid email address.</small>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
@ -654,6 +663,43 @@ if (isset($_SESSION['mailcow_cc_role'])) {
<?php <?php
} }
} }
elseif (isset($_GET['recipient_map']) && !empty($_GET["recipient_map"])) {
$map = intval($_GET["recipient_map"]);
$result = recipient_map('details', $map);
if (!empty($result)) {
?>
<h4>Recipient map: <?=$result['recipient_map_old'];?></h4>
<br />
<form class="form-horizontal" data-id="edit_recipient_map" role="form" method="post">
<input type="hidden" value="0" name="active">
<div class="form-group">
<label class="control-label col-sm-2" for="recipient_map_new">New destination</label>
<div class="col-sm-10">
<textarea id="recipient_map_new" class="form-control" autocapitalize="none" autocorrect="off" rows="10" id="recipient_map_new" name="recipient_map_new" required><?=$result['recipient_map_new'];?></textarea>
<small>Recipient map destinations can only be valid email addresses. Separated by whitespace, semicolon, new line or comma.</small>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label><input type="checkbox" value="1" name="active" <?php if (isset($result['active_int']) && $result['active_int']=="1") { echo "checked"; }; ?>> <?=$lang['edit']['active'];?></label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button class="btn btn-success" id="edit_selected" data-id="edit_recipient_map" data-item="<?=$map;?>" data-api-url='edit/recipient_map' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button>
</div>
</div>
</form>
<?php
}
else {
?>
<div class="alert alert-info" role="alert"><?=$lang['info']['no_action'];?></div>
<?php
}
}
} }
if ($_SESSION['mailcow_cc_role'] == "admin" || $_SESSION['mailcow_cc_role'] == "domainadmin" || $_SESSION['mailcow_cc_role'] == "user") { if ($_SESSION['mailcow_cc_role'] == "admin" || $_SESSION['mailcow_cc_role'] == "domainadmin" || $_SESSION['mailcow_cc_role'] == "user") {
if (isset($_GET['syncjob']) && if (isset($_GET['syncjob']) &&

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
width="267.80917"
height="306.93799"
viewBox="0 0 267.80917 306.93799"
enable-background="new 0 0 1600 1200"
xml:space="preserve"
inkscape:version="0.91 r13725"
sodipodi:docname="cow_protected_nb.svg"><metadata
id="metadata175"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs173" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1721"
inkscape:window-height="1177"
id="namedview171"
showgrid="false"
inkscape:zoom="1.5733333"
inkscape:cx="29.160751"
inkscape:cy="110.78493"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" /><g
id="g3"
transform="translate(-661.33429,-371.905)"><g
id="g11"><g
id="g13"><g
id="g15" /></g><g
id="g19"><g
id="g21" /></g><g
id="g25"><g
id="g27"><g
id="g29" /></g></g><g
id="g33"><g
id="g35"><g
id="g37" /></g></g></g><polyline
points="702.43,498.974 684.548,546.739 697.837,612.03 723.777,638.295 "
id="polyline43"
style="fill:#3d5263" /><g
id="g45"><g
id="g47"><polyline
points="669.541,457.293 684.791,493.55 705.121,503.375 735.319,465.213 "
id="polyline49"
style="fill:#fef3df" /><g
id="g51"><path
d="m 721.916,479.683 c 0,0 -22.477,-25.55 -49.782,-18.971 0,0 4.666,34.11 46.339,44.009 l 2.61,8.531 c 0,0 -65.598,-9.687 -59.326,-67.578 0,0 48.997,-19.88 72.582,15.103"
id="path53"
inkscape:connector-curvature="0"
style="fill:#b58765" /><polyline
points="920.935,457.293 905.688,493.55 885.359,503.375 855.16,465.213 "
id="polyline55"
style="fill:#fef3df" /><path
d="m 868.564,479.683 c 0,0 22.475,-25.55 49.779,-18.971 0,0 -4.663,34.11 -46.336,44.009 l -2.612,8.531 c 0,0 65.596,-9.687 59.326,-67.578 0,0 -48.995,-19.88 -72.584,15.103"
id="path57"
inkscape:connector-curvature="0"
style="fill:#b58765" /></g></g><path
d="m 737.898,653.506 55.932,0 20.22445,-212.1817 c -55.801,0 -116.21545,37.4237 -116.21545,85.2487 0,1.454 0.085,2.786 0.121,4.174 0.127,3.933 0.448,7.583 0.856,11.132 1.689,14.813 5.45,27.171 8.459,43.373 1.451,7.829 5.001,23.369 5.001,23.369 0.056,0.408 0.165,0.804 0.224,1.211 2.533,16.542 11.829,32.019 25.398,43.674 z"
id="path59"
inkscape:connector-curvature="0"
style="fill:#b58765"
sodipodi:nodetypes="cccscccccc" /><path
d="m 793.259,439.976 0,213.53 55.932,0 c 13.569,-11.654 22.862,-27.132 25.4,-43.675 0.058,-0.407 0.163,-0.803 0.221,-1.211 0,0 3.548,-15.539 5.001,-23.369 3.01,-16.202 6.773,-28.561 8.462,-43.371 0.404,-3.552 0.724,-7.202 0.846,-11.135 0.042,-1.388 0.126,-2.72 0.126,-4.174 -10e-4,-47.823 -40.183,-86.595 -95.988,-86.595 z"
id="path61"
inkscape:connector-curvature="0"
style="fill:#b58765" /><g
id="g63"><g
id="g65"><path
d="m 872.193,619.949 c 0,28.315 -35.083,51.278 -78.366,51.278 -43.289,0 -78.371,-22.963 -78.371,-51.278 0,-28.319 35.082,-51.278 78.371,-51.278 43.282,0 78.366,22.959 78.366,51.278 z"
id="path67"
inkscape:connector-curvature="0"
style="fill:#fef3df" /></g></g><g
id="g69"><g
id="g71"><g
id="g73"><path
d="m 758.318,612.03 c 0,6.213 -5.039,11.254 -11.258,11.254 -6.208,0 -11.25,-5.04 -11.25,-11.254 0,-6.222 5.042,-11.254 11.25,-11.254 6.218,0 11.258,5.033 11.258,11.254 z"
id="path75"
inkscape:connector-curvature="0"
style="fill:#5a3620" /></g></g><g
id="g77"><g
id="g79"><path
d="m 852.109,612.03 c 0,6.213 -5.036,11.254 -11.254,11.254 -6.216,0 -11.257,-5.04 -11.257,-11.254 0,-6.222 5.04,-11.254 11.257,-11.254 6.218,0 11.254,5.033 11.254,11.254 z"
id="path81"
inkscape:connector-curvature="0"
style="fill:#5a3620" /></g></g></g><g
id="g83"><path
d="m 886.474,532.301 c 0.354,-3.113 0.634,-6.31 0.743,-9.752 0.035,-1.217 0.109,-2.384 0.109,-3.66 0,-40.776 -33.361,-74.027 -80.219,-75.758 l -7.333,0.005 c -0.003,0 -0.003,0 -0.006,0 -0.007,0.018 -26.057,89.686 79.134,141.521 0.945,-4.316 2.078,-10.867 2.73,-14.369 2.638,-14.193 3.363,-25.015 4.842,-37.987 z"
id="path85"
inkscape:connector-curvature="0"
style="fill:#87654a" /></g><g
id="g87"><g
id="g89"><g
id="g91"><g
id="g93"><path
d="m 855.16,526.149 c 0,6.963 -5.649,12.608 -12.616,12.608 -6.961,0 -12.611,-5.645 -12.611,-12.608 0,-6.969 5.65,-12.611 12.611,-12.611 6.967,-10e-4 12.616,5.642 12.616,12.611 z"
id="path95"
inkscape:connector-curvature="0"
style="fill:#5a3620" /></g></g></g><g
id="g97"><g
id="g99"><g
id="g101"><path
d="m 763.301,526.149 c 0,6.963 -5.647,12.608 -12.609,12.608 -6.968,0 -12.609,-5.645 -12.609,-12.608 0,-6.969 5.641,-12.611 12.609,-12.611 6.962,-10e-4 12.609,5.642 12.609,12.611 z"
id="path103"
inkscape:connector-curvature="0"
style="fill:#5a3620" /></g></g></g><g
id="g105"><g
id="g107"><path
d="m 760.023,522.362 c 0,2.557 -2.07,4.628 -4.629,4.628 -2.557,0 -4.632,-2.071 -4.632,-4.628 0,-2.552 2.075,-4.625 4.632,-4.625 2.559,0.001 4.629,2.073 4.629,4.625 z"
id="path109"
inkscape:connector-curvature="0"
style="fill:#ffffff" /></g></g><g
id="g111"><g
id="g113"><path
d="m 851.024,522.362 c 0,2.557 -2.073,4.628 -4.628,4.628 -2.558,0 -4.63,-2.071 -4.63,-4.628 0,-2.552 2.072,-4.625 4.63,-4.625 2.555,0.001 4.628,2.073 4.628,4.625 z"
id="path115"
inkscape:connector-curvature="0"
style="fill:#ffffff" /></g></g></g></g><path
d="m 725.288,441.121 c 0,0 -18.232,-25.193 0,-41.628 0,0 13.123,32.005 40.233,31.495"
id="path117"
inkscape:connector-curvature="0"
style="fill:#fef3df" /><path
d="m 848.318,439.837 c 0,0 18.232,-25.193 0,-41.628 0,0 -13.123,32.005 -40.233,31.495"
id="path119"
inkscape:connector-curvature="0"
style="fill:#fef3df" /><path
d="m 797.53,438.453 c -66.381,0 -120.196,53.815 -120.196,120.196 0,66.381 53.815,120.194 120.196,120.194 66.382,0 120.196,-53.813 120.196,-120.194 C 917.725,492.268 863.912,438.453 797.53,438.453 Z m -11.958,215.653 c -52.997,0 -95.961,-43.845 -95.961,-97.931 0,-54.086 42.963,-97.931 95.961,-97.931 52.995,0 95.958,43.845 95.958,97.931 0,54.086 -42.963,97.931 -95.958,97.931 z"
id="path121"
inkscape:connector-curvature="0"
style="fill:#f1f2f2" /><g
id="g123"><path
d="m 793.003,443.237 c 66.381,0 120.194,53.815 120.194,120.196 0,30.711 -11.523,58.726 -30.475,79.973 21.631,-21.736 35.002,-51.697 35.002,-84.785 0,-66.38 -53.813,-120.196 -120.196,-120.196 -35.67,0 -67.706,15.545 -89.719,40.224 21.769,-21.872 51.899,-35.412 85.194,-35.412 z"
id="path125"
inkscape:connector-curvature="0"
style="fill:#ffffff" /></g><g
id="g127"><path
d="m 694.265,502.313 c 0,0 40.198,-14.957 95.353,-14.022 55.155,0.935 100.027,29.447 100.027,29.447 l 8.413,-57.492 c 0,0 -51.883,-35.524 -77.591,-59.829 -25.708,-24.306 -28.98,-28.512 -28.98,-28.512 0,0 -40.198,41.6 -66.373,56.557 -26.175,14.957 -35.524,20.566 -35.524,20.566 l 4.675,53.285 z"
id="path129"
inkscape:connector-curvature="0"
style="fill:#f1f2f2" /><path
d="m 752.039,427.289 c -5.218,15.301 0.741,45.305 6.446,52.941 4.565,-14.198 1.381,-39.668 -6.446,-52.941 z"
id="path131"
inkscape:connector-curvature="0"
style="fill:#97a3a2" /><path
d="m 792.297,477.645 c 8.422,-10.272 5.501,-61.687 -0.342,-73.723 -6.194,15.191 -10.634,65.438 0.342,73.723 z"
id="path133"
inkscape:connector-curvature="0"
style="fill:#97a3a2" /><path
d="m 720.593,443.412 c -3.983,12.281 1.136,36.168 5.784,42.198 3.474,-11.393 0.625,-31.693 -5.784,-42.198 z"
id="path135"
inkscape:connector-curvature="0"
style="fill:#97a3a2" /><path
d="m 832.42,429.158 c 5.218,15.301 -0.741,45.305 -6.446,52.941 -4.565,-14.197 -1.38,-39.667 6.446,-52.941 z"
id="path137"
inkscape:connector-curvature="0"
style="fill:#97a3a2" /><path
d="m 863.633,447.619 c 3.983,12.281 -1.136,36.168 -5.784,42.198 -3.474,-11.393 -0.625,-31.693 5.784,-42.198 z"
id="path139"
inkscape:connector-curvature="0"
style="fill:#97a3a2" /></g><g
id="g143" /><path
d="m 730.865,636.637 c 0,0 43.49,2.05 64.328,-35.861 0,0 14.758,30.223 46.61,34.759"
id="path157"
inkscape:connector-curvature="0"
style="opacity:0.1;fill:#3d5263" /><path
d="m 795.193,671.227 0,-60.691 c -13.615,27.608 -64.328,26.101 -64.328,26.101 0,0 3.306,8.89 3.788,9.853 0.482,0.963 21.508,12.52 21.508,12.52"
id="path159"
inkscape:connector-curvature="0"
style="fill:#f1f2f2" /><path
d="m 859.521,636.637 c 0,0 -50.713,1.507 -64.328,-26.101 l 0,60.691"
id="path161"
inkscape:connector-curvature="0"
style="fill:#f1f2f2" /><g
id="g163" /></g></svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,6 @@
<?php
session_start();
unset($_SESSION['pending_mailcow_cc_username']);
unset($_SESSION['pending_mailcow_cc_role']);
unset($_SESSION['pending_tfa_method']);
?>

View File

@ -23,7 +23,7 @@ function rrmdir($src) {
} }
if (!empty($_GET['id']) && ctype_alnum($_GET['id'])) { if (!empty($_GET['id']) && ctype_alnum($_GET['id'])) {
$tmpdir = '/tmp/' . $_GET['id'] . '/'; $tmpdir = '/tmp/' . $_GET['id'] . '/';
$mailc = quarantaine('details', $_GET['id']); $mailc = quarantine('details', $_GET['id']);
if (strlen($mailc['msg']) > 10485760) { if (strlen($mailc['msg']) > 10485760) {
echo json_encode(array('error' => 'Message size exceeds 10 MiB.')); echo json_encode(array('error' => 'Message size exceeds 10 MiB.'));
exit; exit;

View File

@ -61,7 +61,7 @@ $(document).ready(function() {
type: "GET", type: "GET",
cache: false, cache: false,
dataType: 'script', dataType: 'script',
url: "/api/v1/get/u2f-authentication/<?= (isset($_SESSION['pending_mailcow_cc_username'])) ? $_SESSION['pending_mailcow_cc_username'] : null; ?>", url: "/api/v1/get/u2f-authentication/<?= (isset($_SESSION['pending_mailcow_cc_username'])) ? rawurlencode($_SESSION['pending_mailcow_cc_username']) : null; ?>",
complete: function(data){ complete: function(data){
$('#u2f_status_auth').html('<?=$lang['tfa']['waiting_usb_auth'];?>'); $('#u2f_status_auth').html('<?=$lang['tfa']['waiting_usb_auth'];?>');
data; data;
@ -79,6 +79,17 @@ $(document).ready(function() {
}); });
} }
}); });
$('#ConfirmTFAModal').on('hidden.bs.modal', function(){
$.ajax({
type: "GET",
cache: false,
dataType: 'script',
url: '/inc/ajax/destroy_tfa_auth.php',
complete: function(data){
window.location = window.location.href.split("#")[0];
}
});
});
<?php endif; ?> <?php endif; ?>
// Set TFA modals // Set TFA modals
@ -100,7 +111,7 @@ $(document).ready(function() {
type: "GET", type: "GET",
cache: false, cache: false,
dataType: 'script', dataType: 'script',
url: "/api/v1/get/u2f-registration/<?= (isset($_SESSION['mailcow_cc_username'])) ? $_SESSION['mailcow_cc_username'] : null; ?>", url: "/api/v1/get/u2f-registration/<?= (isset($_SESSION['mailcow_cc_username'])) ? rawurlencode($_SESSION['mailcow_cc_username']) : null; ?>",
complete: function(data){ complete: function(data){
data; data;
setTimeout(function() { setTimeout(function() {
@ -205,7 +216,7 @@ $(document).ready(function() {
$('#triggerRestartContainer').html('<span class="glyphicon glyphicon-ok"></span> '); $('#triggerRestartContainer').html('<span class="glyphicon glyphicon-ok"></span> ');
$('#statusTriggerRestartContainer2').append(data); $('#statusTriggerRestartContainer2').append(data);
$('#triggerRestartContainer').html('<span class="glyphicon glyphicon-ok"></span> '); $('#triggerRestartContainer').html('<span class="glyphicon glyphicon-ok"></span> ');
location.reload(); window.location = window.location.href.split("#")[0];
} }
}); });
}); });

View File

@ -15,7 +15,7 @@ function bcc($_action, $_data = null, $attr = null) {
return false; return false;
} }
$local_dest = strtolower(trim($_data['local_dest'])); $local_dest = strtolower(trim($_data['local_dest']));
$bcc_dest = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['bcc_dest'])); $bcc_dest = $_data['bcc_dest'];
$active = intval($_data['active']); $active = intval($_data['active']);
$type = $_data['type']; $type = $_data['type'];
if ($type != 'sender' && $type != 'rcpt') { if ($type != 'sender' && $type != 'rcpt') {
@ -60,18 +60,10 @@ function bcc($_action, $_data = null, $attr = null) {
else { else {
return false; return false;
} }
foreach ($bcc_dest as &$bcc_dest_e) { if (!filter_var($bcc_dest, FILTER_VALIDATE_EMAIL)) {
if (!filter_var($bcc_dest_e, FILTER_VALIDATE_EMAIL)) {
$bcc_dest_e = null;;
}
$bcc_dest_e = strtolower($bcc_dest_e);
}
$bcc_dest = array_filter($bcc_dest);
$bcc_dest = implode(",", $bcc_dest);
if (empty($bcc_dest)) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
'msg' => 'BCC map destination cannot be empty' 'msg' => 'BCC map must be a valid email address'
); );
return false; return false;
} }
@ -142,16 +134,14 @@ function bcc($_action, $_data = null, $attr = null) {
); );
return false; return false;
} }
$bcc_dest = array_map('trim', preg_split( "/( |,|;|\n)/", $bcc_dest));
$active = intval($_data['active']); $active = intval($_data['active']);
foreach ($bcc_dest as &$bcc_dest_e) { if (!filter_var($bcc_dest, FILTER_VALIDATE_EMAIL)) {
if (!filter_var($bcc_dest_e, FILTER_VALIDATE_EMAIL)) { $_SESSION['return'] = array(
$bcc_dest_e = null;; 'type' => 'danger',
} 'msg' => 'BCC map must be a valid email address'
$bcc_dest_e = strtolower($bcc_dest_e); );
return false;
} }
$bcc_dest = array_filter($bcc_dest);
$bcc_dest = implode(",", $bcc_dest);
if (empty($bcc_dest)) { if (empty($bcc_dest)) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
@ -289,4 +279,237 @@ function bcc($_action, $_data = null, $attr = null) {
return true; return true;
break; break;
} }
} }
function recipient_map($_action, $_data = null, $attr = null) {
global $pdo;
global $lang;
if ($_SESSION['mailcow_cc_role'] != "admin") {
return false;
}
switch ($_action) {
case 'add':
$old_dest = strtolower(trim($_data['recipient_map_old']));
$new_dest = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['recipient_map_new']));
$active = intval($_data['active']);
if (empty($new_dest)) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'Recipient map destination cannot be empty'
);
return false;
}
if (is_valid_domain_name($old_dest)) {
$old_dest_sane = '@' . idn_to_ascii($old_dest);
}
elseif (filter_var($old_dest, FILTER_VALIDATE_EMAIL)) {
$old_dest_sane = $old_dest;
}
else {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'Invalid original recipient specified: ' . $old_dest
);
return false;
}
foreach ($new_dest as &$new_dest_e) {
if (!filter_var($new_dest_e, FILTER_VALIDATE_EMAIL)) {
$new_dest_e = null;;
}
$new_dest_e = strtolower($new_dest_e);
}
$new_dest = array_filter($new_dest);
$new_dest = implode(",", $new_dest);
if (empty($new_dest)) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'Recipient map destination cannot be empty'
);
return false;
}
try {
$stmt = $pdo->prepare("SELECT `id` FROM `recipient_maps`
WHERE `old_dest` = :old_dest");
$stmt->execute(array(':old_dest' => $old_dest_sane));
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
}
catch(PDOException $e) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'MySQL: '.$e
);
return false;
}
if ($num_results != 0) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'A Recipient map entry "' . htmlspecialchars($old_dest_sane) . '" exists'
);
return false;
}
try {
$stmt = $pdo->prepare("INSERT INTO `recipient_maps` (`old_dest`, `new_dest`, `active`) VALUES
(:old_dest, :new_dest, :active)");
$stmt->execute(array(
':old_dest' => $old_dest_sane,
':new_dest' => $new_dest,
':active' => $active
));
}
catch (PDOException $e) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'MySQL: '.$e
);
return false;
}
$_SESSION['return'] = array(
'type' => 'success',
'msg' => 'Recipient map entry saved'
);
break;
case 'edit':
$ids = (array)$_data['id'];
foreach ($ids as $id) {
$is_now = recipient_map('details', $id);
if (!empty($is_now)) {
$active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active_int'];
$new_dest = (!empty($_data['recipient_map_new'])) ? $_data['recipient_map_new'] : $is_now['recipient_map_new'];
$old_dest = $is_now['old_dest'];
}
else {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => sprintf($lang['danger']['access_denied'])
);
return false;
}
$new_dest = array_map('trim', preg_split( "/( |,|;|\n)/", $new_dest));
$active = intval($_data['active']);
foreach ($new_dest as &$new_dest_e) {
if (!filter_var($new_dest_e, FILTER_VALIDATE_EMAIL)) {
$new_dest_e = null;;
}
$new_dest_e = strtolower($new_dest_e);
}
$new_dest = array_filter($new_dest);
$new_dest = implode(",", $new_dest);
if (empty($new_dest)) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'Recipient map destination cannot be empty'
);
return false;
}
try {
$stmt = $pdo->prepare("SELECT `id` FROM `recipient_maps`
WHERE `old_dest` = :old_dest");
$stmt->execute(array(':old_dest' => $old_dest));
$id_now = $stmt->fetch(PDO::FETCH_ASSOC)['id'];
}
catch(PDOException $e) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'MySQL: '.$e
);
return false;
}
if (isset($id_now) && $id_now != $id) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'A Recipient map entry ' . htmlspecialchars($old_dest) . ' exists'
);
return false;
}
try {
$stmt = $pdo->prepare("UPDATE `recipient_maps` SET `new_dest` = :new_dest, `active` = :active WHERE `id`= :id");
$stmt->execute(array(
':new_dest' => $new_dest,
':active' => $active,
':id' => $id
));
}
catch (PDOException $e) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'MySQL: '.$e
);
return false;
}
}
$_SESSION['return'] = array(
'type' => 'success',
'msg' => 'Recipient map entry edited'
);
break;
case 'details':
$mapdata = array();
$id = intval($_data);
try {
$stmt = $pdo->prepare("SELECT `id`,
`old_dest` AS `recipient_map_old`,
`new_dest` AS `recipient_map_new`,
`active` AS `active_int`,
CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active`,
`created`,
`modified` FROM `recipient_maps`
WHERE `id` = :id");
$stmt->execute(array(':id' => $id));
$mapdata = $stmt->fetch(PDO::FETCH_ASSOC);
}
catch(PDOException $e) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'MySQL: '.$e
);
return false;
}
return $mapdata;
break;
case 'get':
$mapdata = array();
$all_items = array();
$id = intval($_data);
try {
$stmt = $pdo->query("SELECT `id` FROM `recipient_maps`");
$all_items = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
catch(PDOException $e) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'MySQL: '.$e
);
return false;
}
foreach ($all_items as $i) {
$mapdata[] = $i['id'];
}
$all_items = null;
return $mapdata;
break;
case 'delete':
$ids = (array)$_data['id'];
foreach ($ids as $id) {
if (!is_numeric($id)) {
return false;
}
try {
$stmt = $pdo->prepare("DELETE FROM `recipient_maps` WHERE `id`= :id");
$stmt->execute(array(':id' => $id));
}
catch (PDOException $e) {
$_SESSION['return'] = array(
'type' => 'danger',
'msg' => 'MySQL: '.$e
);
return false;
}
}
$_SESSION['return'] = array(
'type' => 'success',
'msg' => 'Deleted Recipient map id/s ' . implode(', ', $ids)
);
return true;
break;
}
}

View File

@ -7,6 +7,7 @@ function docker($service_name, $action, $attr1 = null, $attr2 = null, $extra_hea
curl_setopt($curl, CURLOPT_URL, 'http://dockerapi:8080/containers/json'); curl_setopt($curl, CURLOPT_URL, 'http://dockerapi:8080/containers/json');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 0); curl_setopt($curl, CURLOPT_POST, 0);
curl_setopt($curl, CURLOPT_TIMEOUT, 4);
$response = curl_exec($curl); $response = curl_exec($curl);
if ($response === false) { if ($response === false) {
$err = curl_error($curl); $err = curl_error($curl);
@ -32,6 +33,7 @@ function docker($service_name, $action, $attr1 = null, $attr2 = null, $extra_hea
curl_setopt($curl, CURLOPT_URL, 'http://dockerapi:8080/containers/' . $container_id . '/json'); curl_setopt($curl, CURLOPT_URL, 'http://dockerapi:8080/containers/' . $container_id . '/json');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 0); curl_setopt($curl, CURLOPT_POST, 0);
curl_setopt($curl, CURLOPT_TIMEOUT, 4);
$response = curl_exec($curl); $response = curl_exec($curl);
if ($response === false) { if ($response === false) {
$err = curl_error($curl); $err = curl_error($curl);
@ -58,6 +60,7 @@ function docker($service_name, $action, $attr1 = null, $attr2 = null, $extra_hea
if (ctype_xdigit($container_id) && ctype_alnum($attr1)) { if (ctype_xdigit($container_id) && ctype_alnum($attr1)) {
curl_setopt($curl, CURLOPT_URL, 'http://dockerapi:8080/containers/' . $container_id . '/' . $attr1); curl_setopt($curl, CURLOPT_URL, 'http://dockerapi:8080/containers/' . $container_id . '/' . $attr1);
curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 4);
if (!empty($attr2)) { if (!empty($attr2)) {
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($attr2)); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($attr2));
} }

View File

@ -4,30 +4,26 @@ function fail2ban($_action, $_data = null) {
global $lang; global $lang;
switch ($_action) { switch ($_action) {
case 'get': case 'get':
$data = array(); $f2b_options = array();
if ($_SESSION['mailcow_cc_role'] != "admin") { if ($_SESSION['mailcow_cc_role'] != "admin") {
return false; return false;
} }
try { try {
$data['ban_time'] = $redis->Get('F2B_BAN_TIME'); $f2b_options = json_decode($redis->Get('F2B_OPTIONS'), true);
$data['max_attempts'] = $redis->Get('F2B_MAX_ATTEMPTS');
$data['retry_window'] = $redis->Get('F2B_RETRY_WINDOW');
$data['netban_ipv4'] = $redis->Get('F2B_NETBAN_IPV4');
$data['netban_ipv6'] = $redis->Get('F2B_NETBAN_IPV6');
$wl = $redis->hGetAll('F2B_WHITELIST'); $wl = $redis->hGetAll('F2B_WHITELIST');
if (is_array($wl)) { if (is_array($wl)) {
foreach ($wl as $key => $value) { foreach ($wl as $key => $value) {
$tmp_data[] = $key; $tmp_data[] = $key;
} }
if (isset($tmp_data)) { if (isset($tmp_data)) {
$data['whitelist'] = implode(PHP_EOL, $tmp_data); $f2b_options['whitelist'] = implode(PHP_EOL, $tmp_data);
} }
else { else {
$data['whitelist'] = ""; $f2b_options['whitelist'] = "";
} }
} }
else { else {
$data['whitelist'] = ""; $f2b_options['whitelist'] = "";
} }
} }
catch (RedisException $e) { catch (RedisException $e) {
@ -37,7 +33,7 @@ function fail2ban($_action, $_data = null) {
); );
return false; return false;
} }
return $data; return $f2b_options;
break; break;
case 'edit': case 'edit':
if ($_SESSION['mailcow_cc_role'] != "admin") { if ($_SESSION['mailcow_cc_role'] != "admin") {
@ -63,21 +59,16 @@ function fail2ban($_action, $_data = null) {
return false; return false;
} }
$wl = $_data['whitelist']; $wl = $_data['whitelist'];
$ban_time = ($ban_time < 60) ? 60 : $ban_time; $f2b_options = array();
$f2b_options['ban_time'] = ($ban_time < 60) ? 60 : $ban_time;
$netban_ipv4 = ($netban_ipv4 < 8) ? 8 : $netban_ipv4; $f2b_options['netban_ipv4'] = ($netban_ipv4 < 8) ? 8 : $netban_ipv4;
$netban_ipv6 = ($netban_ipv6 < 8) ? 8 : $netban_ipv6; $f2b_options['netban_ipv6'] = ($netban_ipv6 < 8) ? 8 : $netban_ipv6;
$netban_ipv4 = ($netban_ipv4 > 32) ? 32 : $netban_ipv4; $f2b_options['netban_ipv4'] = ($netban_ipv4 > 32) ? 32 : $netban_ipv4;
$netban_ipv6 = ($netban_ipv6 > 128) ? 128 : $netban_ipv6; $f2b_options['netban_ipv6'] = ($netban_ipv6 > 128) ? 128 : $netban_ipv6;
$f2b_options['max_attempts'] = ($max_attempts < 1) ? 1 : $max_attempts;
$max_attempts = ($max_attempts < 1) ? 1 : $max_attempts; $f2b_options['retry_window'] = ($retry_window < 1) ? 1 : $retry_window;
$retry_window = ($retry_window < 1) ? 1 : $retry_window;
try { try {
$redis->Set('F2B_BAN_TIME', $ban_time); $redis->Set('F2B_OPTIONS', json_encode($f2b_options));
$redis->Set('F2B_MAX_ATTEMPTS', $max_attempts);
$redis->Set('F2B_RETRY_WINDOW', $retry_window);
$redis->Set('F2B_NETBAN_IPV4', $netban_ipv4);
$redis->Set('F2B_NETBAN_IPV6', $netban_ipv6);
$redis->Del('F2B_WHITELIST'); $redis->Del('F2B_WHITELIST');
if(!empty($wl)) { if(!empty($wl)) {
$wl_array = array_map('trim', preg_split( "/( |,|;|\n)/", $wl)); $wl_array = array_map('trim', preg_split( "/( |,|;|\n)/", $wl));

View File

@ -39,7 +39,7 @@ function hasDomainAccess($username, $role, $domain) {
} }
function hasMailboxObjectAccess($username, $role, $object) { function hasMailboxObjectAccess($username, $role, $object) {
global $pdo; global $pdo;
if (!filter_var($username, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) { if (!filter_var(html_entity_decode(rawurldecode($username)), FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) {
return false; return false;
} }
if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') { if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') {
@ -74,7 +74,7 @@ function generate_tlsa_digest($hostname, $port, $starttls = null) {
return "Not a valid hostname"; return "Not a valid hostname";
} }
if (empty($starttls)) { if (empty($starttls)) {
$context = stream_context_create(array("ssl" => array("capture_peer_cert" => true, 'verify_peer' => false, 'allow_self_signed' => true))); $context = stream_context_create(array("ssl" => array("capture_peer_cert" => true, 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true)));
$stream = stream_socket_client('ssl://' . $hostname . ':' . $port, $error_nr, $error_msg, 5, STREAM_CLIENT_CONNECT, $context); $stream = stream_socket_client('ssl://' . $hostname . ':' . $port, $error_nr, $error_msg, 5, STREAM_CLIENT_CONNECT, $context);
if (!$stream) { if (!$stream) {
$error_msg = isset($error_msg) ? $error_msg : '-'; $error_msg = isset($error_msg) ? $error_msg : '-';
@ -112,6 +112,7 @@ function generate_tlsa_digest($hostname, $port, $starttls = null) {
stream_set_blocking($stream, true); stream_set_blocking($stream, true);
stream_context_set_option($stream, 'ssl', 'capture_peer_cert', true); stream_context_set_option($stream, 'ssl', 'capture_peer_cert', true);
stream_context_set_option($stream, 'ssl', 'verify_peer', false); stream_context_set_option($stream, 'ssl', 'verify_peer', false);
stream_context_set_option($stream, 'ssl', 'verify_peer_name', false);
stream_context_set_option($stream, 'ssl', 'allow_self_signed', true); stream_context_set_option($stream, 'ssl', 'allow_self_signed', true);
stream_socket_enable_crypto($stream, true, STREAM_CRYPTO_METHOD_ANY_CLIENT); stream_socket_enable_crypto($stream, true, STREAM_CRYPTO_METHOD_ANY_CLIENT);
stream_set_blocking($stream, false); stream_set_blocking($stream, false);
@ -414,7 +415,7 @@ function edit_user_account($postarray) {
} }
$password_hashed = hash_password($password_new); $password_hashed = hash_password($password_new);
try { try {
$stmt = $pdo->prepare("UPDATE `mailbox` SET `password` = :password_hashed WHERE `username` = :username"); $stmt = $pdo->prepare("UPDATE `mailbox` SET `password` = :password_hashed, `attributes` = JSON_SET(`attributes`, '$.force_pw_update', '0') WHERE `username` = :username");
$stmt->execute(array( $stmt->execute(array(
':password_hashed' => $password_hashed, ':password_hashed' => $password_hashed,
':username' => $username ':username' => $username
@ -470,22 +471,18 @@ function user_get_alias_details($username) {
)); ));
$run = $stmt->fetchAll(PDO::FETCH_ASSOC); $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
while ($row = array_shift($run)) { while ($row = array_shift($run)) {
$data['direct_aliases'] = $row['direct_aliases']; $data['direct_aliases'][] = $row['direct_aliases'];
} }
$stmt = $pdo->prepare("SELECT IFNULL(GROUP_CONCAT(local_part, '@', alias_domain SEPARATOR ', '), '&#10008;') AS `ad_alias` FROM `mailbox` $stmt = $pdo->prepare("SELECT GROUP_CONCAT(local_part, '@', alias_domain SEPARATOR ', ') AS `ad_alias` FROM `mailbox`
LEFT OUTER JOIN `alias_domain` on `target_domain` = `domain` LEFT OUTER JOIN `alias_domain` on `target_domain` = `domain`
WHERE `username` = :username ;"); WHERE `username` = :username ;");
$stmt->execute(array(':username' => $username)); $stmt->execute(array(':username' => $username));
$run = $stmt->fetchAll(PDO::FETCH_ASSOC); $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
while ($row = array_shift($run)) { while ($row = array_shift($run)) {
if (empty($data['direct_aliases'])) { $data['direct_aliases'][] = $row['ad_alias'];
$data['direct_aliases'] = $row['ad_alias'];
}
else {
// Probably faster than imploding
$data['direct_aliases'] .= ', ' . $row['ad_alias'];
}
} }
$data['direct_aliases'] = implode(', ', array_filter($data['direct_aliases']));
$data['direct_aliases'] = empty($data['direct_aliases']) ? '&#10008;' : $data['direct_aliases'];
$stmt = $pdo->prepare("SELECT IFNULL(GROUP_CONCAT(`send_as` SEPARATOR ', '), '&#10008;') AS `send_as` FROM `sender_acl` WHERE `logged_in_as` = :username AND `send_as` NOT LIKE '@%';"); $stmt = $pdo->prepare("SELECT IFNULL(GROUP_CONCAT(`send_as` SEPARATOR ', '), '&#10008;') AS `send_as` FROM `sender_acl` WHERE `logged_in_as` = :username AND `send_as` NOT LIKE '@%';");
$stmt->execute(array(':username' => $username)); $stmt->execute(array(':username' => $username));
$run = $stmt->fetchAll(PDO::FETCH_ASSOC); $run = $stmt->fetchAll(PDO::FETCH_ASSOC);
@ -1134,13 +1131,13 @@ function get_logs($container, $lines = false) {
return $data_array; return $data_array;
} }
} }
if ($container == "fail2ban-mailcow") { if ($container == "netfilter-mailcow") {
if (!is_numeric($lines)) { if (!is_numeric($lines)) {
list ($from, $to) = explode('-', $lines); list ($from, $to) = explode('-', $lines);
$data = $redis->lRange('F2B_LOG', intval($from), intval($to)); $data = $redis->lRange('NETFILTER_LOG', intval($from), intval($to));
} }
else { else {
$data = $redis->lRange('F2B_LOG', 0, intval($lines)); $data = $redis->lRange('NETFILTER_LOG', 0, intval($lines));
} }
if ($data) { if ($data) {
foreach ($data as $json_line) { foreach ($data as $json_line) {
@ -1166,12 +1163,13 @@ function get_logs($container, $lines = false) {
} }
if ($container == "rspamd-history") { if ($container == "rspamd-history") {
$curl = curl_init(); $curl = curl_init();
curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/rspamd-sock/rspamd.sock');
if (!is_numeric($lines)) { if (!is_numeric($lines)) {
list ($from, $to) = explode('-', $lines); list ($from, $to) = explode('-', $lines);
curl_setopt($curl, CURLOPT_URL,"http://rspamd-mailcow:11334/history?from=" . intval($from) . "&to=" . intval($to)); curl_setopt($curl, CURLOPT_URL,"http://rspamd/history?from=" . intval($from) . "&to=" . intval($to));
} }
else { else {
curl_setopt($curl, CURLOPT_URL,"http://rspamd-mailcow:11334/history?to=" . intval($lines)); curl_setopt($curl, CURLOPT_URL,"http://rspamd/history?to=" . intval($lines));
} }
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$history = curl_exec($curl); $history = curl_exec($curl);

View File

@ -891,8 +891,8 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
return false; return false;
} }
try { try {
$stmt = $pdo->prepare("INSERT INTO `mailbox` (`username`, `password`, `name`, `maildir`, `quota`, `local_part`, `domain`, `active`) $stmt = $pdo->prepare("INSERT INTO `mailbox` (`username`, `password`, `name`, `maildir`, `quota`, `local_part`, `domain`, `attributes`, `active`)
VALUES (:username, :password_hashed, :name, :maildir, :quota_b, :local_part, :domain, :active)"); VALUES (:username, :password_hashed, :name, :maildir, :quota_b, :local_part, :domain, '{\"force_pw_update\": \"0\", \"tls_enforce_in\": \"0\", \"tls_enforce_out\": \"0\"}', :active)");
$stmt->execute(array( $stmt->execute(array(
':username' => $username, ':username' => $username,
':password_hashed' => $password_hashed, ':password_hashed' => $password_hashed,
@ -1152,10 +1152,10 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
return false; return false;
} }
try { try {
$stmt = $pdo->prepare("UPDATE `mailbox` SET `tls_enforce_out` = :tls_out, `tls_enforce_in` = :tls_in WHERE `username` = :username"); $stmt = $pdo->prepare("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.tls_enforce_out', :tls_out), `attributes` = JSON_SET(`attributes`, '$.tls_enforce_in', :tls_in) WHERE `username` = :username");
$stmt->execute(array( $stmt->execute(array(
':tls_out' => $tls_enforce_out, ':tls_out' => intval($tls_enforce_out),
':tls_in' => $tls_enforce_in, ':tls_in' => intval($tls_enforce_in),
':username' => $username ':username' => $username
)); ));
} }
@ -1954,6 +1954,7 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
$is_now = mailbox('get', 'mailbox_details', $username); $is_now = mailbox('get', 'mailbox_details', $username);
if (!empty($is_now)) { if (!empty($is_now)) {
$active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active_int']; $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active_int'];
(int)$force_pw_update = (isset($_data['force_pw_update'])) ? intval($_data['force_pw_update']) : intval($is_now['attributes']['force_pw_update']);
$name = (!empty($_data['name'])) ? $_data['name'] : $is_now['name']; $name = (!empty($_data['name'])) ? $_data['name'] : $is_now['name'];
$domain = $is_now['domain']; $domain = $is_now['domain'];
$quota_m = (!empty($_data['quota'])) ? $_data['quota'] : ($is_now['quota'] / 1048576); $quota_m = (!empty($_data['quota'])) ? $_data['quota'] : ($is_now['quota'] / 1048576);
@ -2113,24 +2114,11 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
} }
$password_hashed = hash_password($password); $password_hashed = hash_password($password);
try { try {
$stmt = $pdo->prepare("UPDATE `alias` SET
`active` = :active
WHERE `address` = :address");
$stmt->execute(array(
':address' => $username,
':active' => $active
));
$stmt = $pdo->prepare("UPDATE `mailbox` SET $stmt = $pdo->prepare("UPDATE `mailbox` SET
`active` = :active, `password` = :password_hashed
`password` = :password_hashed,
`name`= :name,
`quota` = :quota_b
WHERE `username` = :username"); WHERE `username` = :username");
$stmt->execute(array( $stmt->execute(array(
':password_hashed' => $password_hashed, ':password_hashed' => $password_hashed,
':active' => $active,
':name' => $name,
':quota_b' => $quota_b,
':username' => $username ':username' => $username
)); ));
} }
@ -2153,12 +2141,14 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
$stmt = $pdo->prepare("UPDATE `mailbox` SET $stmt = $pdo->prepare("UPDATE `mailbox` SET
`active` = :active, `active` = :active,
`name`= :name, `name`= :name,
`quota` = :quota_b `quota` = :quota_b,
`attributes` = JSON_SET(`attributes`, '$.force_pw_update', :force_pw_update)
WHERE `username` = :username"); WHERE `username` = :username");
$stmt->execute(array( $stmt->execute(array(
':active' => $active, ':active' => $active,
':name' => $name, ':name' => $name,
':quota_b' => $quota_b, ':quota_b' => $quota_b,
':force_pw_update' => $force_pw_update,
':username' => $username ':username' => $username
)); ));
} }
@ -2402,7 +2392,7 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
return $mailboxes; return $mailboxes;
break; break;
case 'tls_policy': case 'tls_policy':
$policydata = array(); $attrs = array();
if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) { if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {
if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) { if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {
return false; return false;
@ -2412,9 +2402,9 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
$_data = $_SESSION['mailcow_cc_username']; $_data = $_SESSION['mailcow_cc_username'];
} }
try { try {
$stmt = $pdo->prepare("SELECT `tls_enforce_out`, `tls_enforce_in` FROM `mailbox` WHERE `username` = :username"); $stmt = $pdo->prepare("SELECT `attributes` FROM `mailbox` WHERE `username` = :username");
$stmt->execute(array(':username' => $_data)); $stmt->execute(array(':username' => $_data));
$policydata = $stmt->fetch(PDO::FETCH_ASSOC); $attrs = $stmt->fetch(PDO::FETCH_ASSOC);
} }
catch(PDOException $e) { catch(PDOException $e) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
@ -2423,7 +2413,11 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
); );
return false; return false;
} }
return $policydata; $attrs = json_decode($attrs['attributes'], true);
return array(
'tls_enforce_in' => $attrs['tls_enforce_in'],
'tls_enforce_out' => $attrs['tls_enforce_out']
);
break; break;
case 'filters': case 'filters':
$filters = array(); $filters = array();
@ -3070,6 +3064,7 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
`mailbox`.`domain`, `mailbox`.`domain`,
`mailbox`.`quota`, `mailbox`.`quota`,
`quota2`.`bytes`, `quota2`.`bytes`,
`attributes`,
`quota2`.`messages` `quota2`.`messages`
FROM `mailbox`, `quota2`, `domain` FROM `mailbox`, `quota2`, `domain`
WHERE `mailbox`.`kind` NOT REGEXP 'location|thing|group' AND `mailbox`.`username` = `quota2`.`username` AND `domain`.`domain` = `mailbox`.`domain` AND `mailbox`.`username` = :mailbox"); WHERE `mailbox`.`kind` NOT REGEXP 'location|thing|group' AND `mailbox`.`username` = `quota2`.`username` AND `domain`.`domain` = `mailbox`.`domain` AND `mailbox`.`username` = :mailbox");
@ -3097,6 +3092,7 @@ function mailbox($_action, $_type, $_data = null, $attr = null) {
$mailboxdata['active_int'] = $row['active_int']; $mailboxdata['active_int'] = $row['active_int'];
$mailboxdata['domain'] = $row['domain']; $mailboxdata['domain'] = $row['domain'];
$mailboxdata['quota'] = $row['quota']; $mailboxdata['quota'] = $row['quota'];
$mailboxdata['attributes'] = json_decode($row['attributes'], true);
$mailboxdata['quota_used'] = intval($row['bytes']); $mailboxdata['quota_used'] = intval($row['bytes']);
$mailboxdata['percent_in_use'] = round((intval($row['bytes']) / intval($row['quota'])) * 100); $mailboxdata['percent_in_use'] = round((intval($row['bytes']) / intval($row['quota'])) * 100);
$mailboxdata['messages'] = $row['messages']; $mailboxdata['messages'] = $row['messages'];

View File

@ -94,7 +94,7 @@ function policy($_action, $_scope, $_data = null) {
if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) { if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
'msg' => sprintf($lang['danger']['access_denied']) 'msg' => $object
); );
return false; return false;
} }

View File

@ -1,5 +1,5 @@
<?php <?php
function quarantaine($_action, $_data = null) { function quarantine($_action, $_data = null) {
global $pdo; global $pdo;
global $redis; global $redis;
global $lang; global $lang;
@ -12,7 +12,7 @@ function quarantaine($_action, $_data = null) {
else { else {
$ids = $_data['id']; $ids = $_data['id'];
} }
if (!isset($_SESSION['acl']['quarantaine']) || $_SESSION['acl']['quarantaine'] != "1" ) { if (!isset($_SESSION['acl']['quarantine']) || $_SESSION['acl']['quarantine'] != "1" ) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
'msg' => sprintf($lang['danger']['access_denied']) 'msg' => sprintf($lang['danger']['access_denied'])
@ -28,12 +28,12 @@ function quarantaine($_action, $_data = null) {
return false; return false;
} }
try { try {
$stmt = $pdo->prepare('SELECT `rcpt` FROM `quarantaine` WHERE `id` = :id'); $stmt = $pdo->prepare('SELECT `rcpt` FROM `quarantine` WHERE `id` = :id');
$stmt->execute(array(':id' => $id)); $stmt->execute(array(':id' => $id));
$row = $stmt->fetch(PDO::FETCH_ASSOC); $row = $stmt->fetch(PDO::FETCH_ASSOC);
if (hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt'])) { if (hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt'])) {
try { try {
$stmt = $pdo->prepare("DELETE FROM `quarantaine` WHERE `id` = :id"); $stmt = $pdo->prepare("DELETE FROM `quarantine` WHERE `id` = :id");
$stmt->execute(array( $stmt->execute(array(
':id' => $id ':id' => $id
)); ));
@ -67,7 +67,7 @@ function quarantaine($_action, $_data = null) {
); );
break; break;
case 'edit': case 'edit':
if (!isset($_SESSION['acl']['quarantaine']) || $_SESSION['acl']['quarantaine'] != "1" ) { if (!isset($_SESSION['acl']['quarantine']) || $_SESSION['acl']['quarantine'] != "1" ) {
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'danger', 'type' => 'danger',
'msg' => sprintf($lang['danger']['access_denied']) 'msg' => sprintf($lang['danger']['access_denied'])
@ -121,7 +121,7 @@ function quarantaine($_action, $_data = null) {
return false; return false;
} }
try { try {
$stmt = $pdo->prepare('SELECT `msg`, `qid`, `sender`, `rcpt` FROM `quarantaine` WHERE `id` = :id'); $stmt = $pdo->prepare('SELECT `msg`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');
$stmt->execute(array(':id' => $id)); $stmt->execute(array(':id' => $id));
$row = $stmt->fetch(PDO::FETCH_ASSOC); $row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt'])) { if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt'])) {
@ -167,13 +167,13 @@ function quarantaine($_action, $_data = null) {
$mail->Port = 590; $mail->Port = 590;
$mail->setFrom($sender); $mail->setFrom($sender);
$mail->CharSet = 'UTF-8'; $mail->CharSet = 'UTF-8';
$mail->Subject = sprintf($lang['quarantaine']['release_subject'], $row['qid']); $mail->Subject = sprintf($lang['quarantine']['release_subject'], $row['qid']);
$mail->addAddress($row['rcpt']); $mail->addAddress($row['rcpt']);
$mail->IsHTML(false); $mail->IsHTML(false);
$msg_tmpf = tempnam("/tmp", $row['qid']); $msg_tmpf = tempnam("/tmp", $row['qid']);
file_put_contents($msg_tmpf, $row['msg']); file_put_contents($msg_tmpf, $row['msg']);
$mail->addAttachment($msg_tmpf, $row['qid'] . '.eml'); $mail->addAttachment($msg_tmpf, $row['qid'] . '.eml');
$mail->Body = sprintf($lang['quarantaine']['release_body']); $mail->Body = sprintf($lang['quarantine']['release_body']);
$mail->send(); $mail->send();
unlink($msg_tmpf); unlink($msg_tmpf);
} }
@ -186,7 +186,7 @@ function quarantaine($_action, $_data = null) {
return false; return false;
} }
try { try {
$stmt = $pdo->prepare("DELETE FROM `quarantaine` WHERE `id` = :id"); $stmt = $pdo->prepare("DELETE FROM `quarantine` WHERE `id` = :id");
$stmt->execute(array( $stmt->execute(array(
':id' => $id ':id' => $id
)); ));
@ -209,7 +209,7 @@ function quarantaine($_action, $_data = null) {
case 'get': case 'get':
try { try {
if ($_SESSION['mailcow_cc_role'] == "user") { if ($_SESSION['mailcow_cc_role'] == "user") {
$stmt = $pdo->prepare('SELECT `id`, `qid`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created` FROM `quarantaine` WHERE `rcpt` = :mbox'); $stmt = $pdo->prepare('SELECT `id`, `qid`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created` FROM `quarantine` WHERE `rcpt` = :mbox');
$stmt->execute(array(':mbox' => $_SESSION['mailcow_cc_username'])); $stmt->execute(array(':mbox' => $_SESSION['mailcow_cc_username']));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
while($row = array_shift($rows)) { while($row = array_shift($rows)) {
@ -217,7 +217,7 @@ function quarantaine($_action, $_data = null) {
} }
} }
elseif ($_SESSION['mailcow_cc_role'] == "admin") { elseif ($_SESSION['mailcow_cc_role'] == "admin") {
$stmt = $pdo->query('SELECT `id`, `qid`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created` FROM `quarantaine`'); $stmt = $pdo->query('SELECT `id`, `qid`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created` FROM `quarantine`');
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
while($row = array_shift($rows)) { while($row = array_shift($rows)) {
$q_meta[] = $row; $q_meta[] = $row;
@ -226,7 +226,7 @@ function quarantaine($_action, $_data = null) {
else { else {
$domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains')); $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));
foreach ($domains as $domain) { foreach ($domains as $domain) {
$stmt = $pdo->prepare('SELECT `id`, `qid`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created` FROM `quarantaine` WHERE `rcpt` REGEXP :domain'); $stmt = $pdo->prepare('SELECT `id`, `qid`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created` FROM `quarantine` WHERE `rcpt` REGEXP :domain');
$stmt->execute(array(':domain' => '@' . $domain . '$')); $stmt->execute(array(':domain' => '@' . $domain . '$'));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
while($row = array_shift($rows)) { while($row = array_shift($rows)) {
@ -270,7 +270,7 @@ function quarantaine($_action, $_data = null) {
return false; return false;
} }
try { try {
$stmt = $pdo->prepare('SELECT `rcpt`, `symbols`, `msg`, `domain` FROM `quarantaine` WHERE `id`= :id'); $stmt = $pdo->prepare('SELECT `rcpt`, `symbols`, `msg`, `domain` FROM `quarantine` WHERE `id`= :id');
$stmt->execute(array(':id' => $_data)); $stmt->execute(array(':id' => $_data));
$row = $stmt->fetch(PDO::FETCH_ASSOC); $row = $stmt->fetch(PDO::FETCH_ASSOC);
if (hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt'])) { if (hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt'])) {
@ -287,4 +287,4 @@ function quarantaine($_action, $_data = null) {
return false; return false;
break; break;
} }
} }

View File

@ -1,9 +1,10 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="<?= $_SESSION['mailcow_locale'] ?>"> <html lang="<?= $_SESSION['mailcow_locale'] ?>">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#F5D76E"/>
<meta http-equiv="Referrer-Policy" content="same-origin"> <meta http-equiv="Referrer-Policy" content="same-origin">
<title><?=$UI_TEXTS['title_name'];?></title> <title><?=$UI_TEXTS['title_name'];?></title>
<!--[if lt IE 9]> <!--[if lt IE 9]>
@ -29,7 +30,7 @@
<?= (preg_match("/admin.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/admin.css">' : null; ?> <?= (preg_match("/admin.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/admin.css">' : null; ?>
<?= (preg_match("/user.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/user.css">' : null; ?> <?= (preg_match("/user.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/user.css">' : null; ?>
<?= (preg_match("/edit.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/edit.css">' : null; ?> <?= (preg_match("/edit.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/edit.css">' : null; ?>
<?= (preg_match("/quarantaine.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/quarantaine.css">' : null; ?> <?= (preg_match("/quarantine.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/quarantine.css">' : null; ?>
<?= (preg_match("/debug.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/debug.css">' : null; ?> <?= (preg_match("/debug.php/i", $_SERVER['REQUEST_URI'])) ? '<link rel="stylesheet" href="/css/debug.css">' : null; ?>
<link rel="shortcut icon" href="/favicon.png" type="image/png"> <link rel="shortcut icon" href="/favicon.png" type="image/png">
<link rel="icon" href="/favicon.png" type="image/png"> <link rel="icon" href="/favicon.png" type="image/png">
@ -74,8 +75,8 @@
if (isset($_SESSION['mailcow_cc_role'])) { if (isset($_SESSION['mailcow_cc_role'])) {
if ($_SESSION['mailcow_cc_role'] == 'admin') { if ($_SESSION['mailcow_cc_role'] == 'admin') {
?> ?>
<li<?= (preg_match("/debug/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/debug.php"><?= $lang['header']['debug']; ?></a></li>
<li<?= (preg_match("/admin/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/admin.php"><?= $lang['header']['administration']; ?></a></li> <li<?= (preg_match("/admin/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/admin.php"><?= $lang['header']['administration']; ?></a></li>
<li<?= (preg_match("/debug/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/debug.php"><?= $lang['header']['debug']; ?></a></li>
<?php <?php
} }
if ($_SESSION['mailcow_cc_role'] == 'admin' || $_SESSION['mailcow_cc_role'] == 'domainadmin') { if ($_SESSION['mailcow_cc_role'] == 'admin' || $_SESSION['mailcow_cc_role'] == 'domainadmin') {
@ -95,7 +96,7 @@
<?php <?php
if (isset($_SESSION['mailcow_cc_role'])) { if (isset($_SESSION['mailcow_cc_role'])) {
?> ?>
<li<?= (preg_match("/quarantaine/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/quarantaine.php"><span class="glyphicon glyphicon-briefcase"></span> <?= $lang['header']['quarantaine']; ?></a></li> <li<?= (preg_match("/quarantine/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/quarantine.php"><span class="glyphicon glyphicon-briefcase"></span> <?= $lang['header']['quarantine']; ?></a></li>
<?php <?php
} }
if ($_SESSION['mailcow_cc_role'] == 'admin') { if ($_SESSION['mailcow_cc_role'] == 'admin') {
@ -118,7 +119,7 @@
foreach ($row as $key => $val): foreach ($row as $key => $val):
?> ?>
<li><a href="<?= htmlspecialchars($val); ?>"><?= htmlspecialchars($key); ?></a></li> <li><a href="<?= htmlspecialchars($val); ?>"><?= htmlspecialchars($key); ?></a></li>
<?php <?php
endforeach; endforeach;
} }
?> ?>
@ -128,11 +129,11 @@
} }
if (!isset($_SESSION['dual-login']) && isset($_SESSION['mailcow_cc_username'])): if (!isset($_SESSION['dual-login']) && isset($_SESSION['mailcow_cc_username'])):
?> ?>
<li class="logged-in-as"><a href="#" onclick="logout.submit()"><b><?= $_SESSION['mailcow_cc_username']; ?></b> <span class="glyphicon glyphicon-log-out"></span></a></li> <li class="logged-in-as"><a href="#" onclick="logout.submit()"><b><?= htmlspecialchars($_SESSION['mailcow_cc_username']); ?></b> <span class="glyphicon glyphicon-log-out"></span></a></li>
<?php <?php
elseif (isset($_SESSION['dual-login'])): elseif (isset($_SESSION['dual-login'])):
?> ?>
<li class="logged-in-as"><a href="#" onclick="logout.submit()"><b><?= $_SESSION['mailcow_cc_username']; ?> <span class="text-info">(<?= $_SESSION['dual-login']['username']; ?>)</span> </b><span class="glyphicon glyphicon-log-out"></span></a></li> <li class="logged-in-as"><a href="#" onclick="logout.submit()"><b><?= htmlspecialchars($_SESSION['mailcow_cc_username']); ?> <span class="text-info">(<?= htmlspecialchars($_SESSION['dual-login']['username']); ?>)</span> </b><span class="glyphicon glyphicon-log-out"></span></a></li>
<?php <?php
endif; endif;
?> ?>

View File

@ -3,7 +3,7 @@ function init_db_schema() {
try { try {
global $pdo; global $pdo;
$db_version = "08022018_1219"; $db_version = "19022018_0839";
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'"); $stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC)); $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
@ -158,7 +158,7 @@ function init_db_schema() {
), ),
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC" "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
), ),
"quarantaine" => array( "quarantine" => array(
"cols" => array( "cols" => array(
"id" => "INT NOT NULL AUTO_INCREMENT", "id" => "INT NOT NULL AUTO_INCREMENT",
"qid" => "VARCHAR(30) NOT NULL", "qid" => "VARCHAR(30) NOT NULL",
@ -189,11 +189,9 @@ function init_db_schema() {
"quota" => "BIGINT(20) NOT NULL DEFAULT '102400'", "quota" => "BIGINT(20) NOT NULL DEFAULT '102400'",
"local_part" => "VARCHAR(255) NOT NULL", "local_part" => "VARCHAR(255) NOT NULL",
"domain" => "VARCHAR(255) NOT NULL", "domain" => "VARCHAR(255) NOT NULL",
"tls_enforce_in" => "TINYINT(1) NOT NULL DEFAULT '0'", "attributes" => "JSON",
"tls_enforce_out" => "TINYINT(1) NOT NULL DEFAULT '0'",
"kind" => "VARCHAR(100) NOT NULL DEFAULT ''", "kind" => "VARCHAR(100) NOT NULL DEFAULT ''",
"multiple_bookings" => "TINYINT(1) NOT NULL DEFAULT '0'", "multiple_bookings" => "TINYINT(1) NOT NULL DEFAULT '0'",
"wants_tagged_subject" => "TINYINT(1) NOT NULL DEFAULT '0'",
"created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)", "created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
"modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP", "modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
"active" => "TINYINT(1) NOT NULL DEFAULT '1'" "active" => "TINYINT(1) NOT NULL DEFAULT '1'"
@ -249,9 +247,10 @@ function init_db_schema() {
"syncjobs" => "TINYINT(1) NOT NULL DEFAULT '1'", "syncjobs" => "TINYINT(1) NOT NULL DEFAULT '1'",
"eas_reset" => "TINYINT(1) NOT NULL DEFAULT '1'", "eas_reset" => "TINYINT(1) NOT NULL DEFAULT '1'",
"filters" => "TINYINT(1) NOT NULL DEFAULT '1'", "filters" => "TINYINT(1) NOT NULL DEFAULT '1'",
"quarantaine" => "TINYINT(1) NOT NULL DEFAULT '1'", "quarantine" => "TINYINT(1) NOT NULL DEFAULT '1'",
"bcc_maps" => "TINYINT(1) NOT NULL DEFAULT '1'", "bcc_maps" => "TINYINT(1) NOT NULL DEFAULT '1'",
), "recipient_maps" => "TINYINT(1) NOT NULL DEFAULT '0'",
),
"keys" => array( "keys" => array(
"fkey" => array( "fkey" => array(
"fk_username" => array( "fk_username" => array(
@ -398,6 +397,25 @@ function init_db_schema() {
), ),
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC" "attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
), ),
"recipient_maps" => array(
"cols" => array(
"id" => "INT NOT NULL AUTO_INCREMENT",
"old_dest" => "VARCHAR(255) NOT NULL",
"new_dest" => "VARCHAR(255) NOT NULL",
"created" => "DATETIME(0) NOT NULL DEFAULT NOW(0)",
"modified" => "DATETIME ON UPDATE CURRENT_TIMESTAMP",
"active" => "TINYINT(1) NOT NULL DEFAULT '0'"
),
"keys" => array(
"primary" => array(
"" => array("id")
),
"key" => array(
"local_dest" => array("old_dest"),
)
),
"attr" => "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC"
),
"tfa" => array( "tfa" => array(
"cols" => array( "cols" => array(
"id" => "INT NOT NULL AUTO_INCREMENT", "id" => "INT NOT NULL AUTO_INCREMENT",
@ -606,6 +624,34 @@ function init_db_schema() {
); );
foreach ($tables as $table => $properties) { foreach ($tables as $table => $properties) {
// Migrate to quarantine
if ($table == 'quarantine') {
$stmt = $pdo->query("SHOW TABLES LIKE 'quarantaine'");
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
if ($num_results != 0) {
$stmt = $pdo->query("SHOW TABLES LIKE 'quarantine'");
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
if ($num_results == 0) {
$pdo->query("RENAME TABLE `quarantaine` TO `quarantine`");
}
}
}
// Migrate tls_enforce_* options
if ($table == 'mailbox') {
$stmt = $pdo->query("SHOW TABLES LIKE 'mailbox'");
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
if ($num_results != 0) {
$stmt = $pdo->query("SHOW COLUMNS FROM `mailbox` LIKE '%tls_enforce%'");
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
if ($num_results != 0) {
$stmt = $pdo->query("SELECT `username`, `tls_enforce_in`, `tls_enforce_out` FROM `mailbox`");
$tls_options_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
while ($row = array_shift($tls_options_rows)) {
$tls_options[$row['username']] = array('tls_enforce_in' => $row['tls_enforce_in'], 'tls_enforce_out' => $row['tls_enforce_out']);
}
}
}
}
$stmt = $pdo->query("SHOW TABLES LIKE '" . $table . "'"); $stmt = $pdo->query("SHOW TABLES LIKE '" . $table . "'");
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC)); $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
if ($num_results != 0) { if ($num_results != 0) {
@ -752,6 +798,7 @@ function init_db_schema() {
} }
// Reset table attributes // Reset table attributes
$pdo->query("ALTER TABLE `" . $table . "` " . $properties['attr'] . ";"); $pdo->query("ALTER TABLE `" . $table . "` " . $properties['attr'] . ";");
} }
// Recreate SQL views // Recreate SQL views
@ -788,6 +835,15 @@ DELIMITER ;';
// Insert new DB schema version // Insert new DB schema version
$stmt = $pdo->query("REPLACE INTO `versions` (`application`, `version`) VALUES ('db_schema', '" . $db_version . "');"); $stmt = $pdo->query("REPLACE INTO `versions` (`application`, `version`) VALUES ('db_schema', '" . $db_version . "');");
// Migrate tls_enforce_* options and add force_pw_update attribute
$stmt = $pdo->query("UPDATE `mailbox` SET `attributes` = '{}' WHERE `attributes` IS NULL;");
$stmt = $pdo->query("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.force_pw_update', 0) WHERE JSON_EXTRACT(`attributes`, '$.force_pw_update') IS NULL;");
foreach($tls_options as $tls_user => $tls_options) {
$stmt = $pdo->prepare("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.tls_enforce_in', :tls_enforce_in),
`attributes` = JSON_SET(`attributes`, '$.tls_enforce_out', :tls_enforce_out)
WHERE `username` = :username");
$stmt->execute(array(':tls_enforce_in' => $tls_options['tls_enforce_in'], ':tls_enforce_out' => $tls_options['tls_enforce_out'], ':username' => $tls_user));
}
$_SESSION['return'] = array( $_SESSION['return'] = array(
'type' => 'success', 'type' => 'success',
'msg' => 'Database initialisation completed' 'msg' => 'Database initialisation completed'

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -81,9 +81,9 @@ include $_SERVER['DOCUMENT_ROOT'] . '/lang/lang.'.$_SESSION['mailcow_locale'].'.
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.mailbox.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.mailbox.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.customize.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.customize.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.bcc.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.address_rewriting.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.domain_admin.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.domain_admin.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.quarantaine.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.quarantine.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.policy.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.policy.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.dkim.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.dkim.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.fwdhost.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.fwdhost.inc.php';

View File

@ -43,11 +43,12 @@ if (isset($_POST["login_user"]) && isset($_POST["pass_user"])) {
if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admin") { if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == "admin") {
if (isset($_GET["duallogin"])) { if (isset($_GET["duallogin"])) {
if (filter_var($_GET["duallogin"], FILTER_VALIDATE_EMAIL)) { $duallogin = html_entity_decode(rawurldecode($_GET["duallogin"]));
if (!empty(mailbox('get', 'mailbox_details', $_GET["duallogin"]))) { if (filter_var($duallogin, FILTER_VALIDATE_EMAIL)) {
if (!empty(mailbox('get', 'mailbox_details', $duallogin))) {
$_SESSION["dual-login"]["username"] = $_SESSION['mailcow_cc_username']; $_SESSION["dual-login"]["username"] = $_SESSION['mailcow_cc_username'];
$_SESSION["dual-login"]["role"] = $_SESSION['mailcow_cc_role']; $_SESSION["dual-login"]["role"] = $_SESSION['mailcow_cc_role'];
$_SESSION['mailcow_cc_username'] = $_GET["duallogin"]; $_SESSION['mailcow_cc_username'] = $duallogin;
$_SESSION['mailcow_cc_role'] = "user"; $_SESSION['mailcow_cc_role'] = "user";
header("Location: /user.php"); header("Location: /user.php");
} }

View File

@ -76,7 +76,7 @@ $DETECT_LANGUAGE = true;
$DEFAULT_LANG = 'de'; $DEFAULT_LANG = 'de';
// Available languages // Available languages
$AVAILABLE_LANGUAGES = array('de', 'en', 'es', 'fr', 'nl', 'pl', 'pt', 'ru', 'it'); $AVAILABLE_LANGUAGES = array('de', 'en', 'es', 'fr', 'nl', 'pl', 'pt', 'ru', 'it', 'ca');
// Change theme (default: lumen) // Change theme (default: lumen)
// Needs to be one of those: cerulean, cosmo, cyborg, darkly, flatly, journal, lumen, paper, readable, sandstone, // Needs to be one of those: cerulean, cosmo, cyborg, darkly, flatly, journal, lumen, paper, readable, sandstone,

View File

@ -124,6 +124,9 @@ $(document).ready(function() {
} }
if (typeof multi_data[id] == "undefined") return; if (typeof multi_data[id] == "undefined") return;
api_items = multi_data[id]; api_items = multi_data[id];
for (var i in api_items) {
api_items[i] = decodeURIComponent(api_items[i]);
}
// alert(JSON.stringify(api_attr)); // alert(JSON.stringify(api_attr));
if (Object.keys(api_items).length !== 0) { if (Object.keys(api_items).length !== 0) {
if (is_active($(this))) { return false; } if (is_active($(this))) { return false; }
@ -251,6 +254,7 @@ $(document).ready(function() {
$(document).on('show.bs.modal', '#ConfirmDeleteModal', function() { $(document).on('show.bs.modal', '#ConfirmDeleteModal', function() {
$("#ItemsToDelete").empty(); $("#ItemsToDelete").empty();
for (var i in data_array) { for (var i in data_array) {
data_array[i] = decodeURIComponent(data_array[i]);
$("#ItemsToDelete").append("<li>" + data_array[i] + "</li>"); $("#ItemsToDelete").append("<li>" + data_array[i] + "</li>");
} }
}) })

View File

@ -31,9 +31,9 @@ jQuery(function($){
e.preventDefault(); e.preventDefault();
draw_acme_logs(); draw_acme_logs();
}); });
$("#refresh_fail2ban_log").on('click', function(e) { $("#refresh_netfilter_log").on('click', function(e) {
e.preventDefault(); e.preventDefault();
draw_fail2ban_logs(); draw_netfilter_logs();
}); });
$("#refresh_rspamd_history").on('click', function(e) { $("#refresh_rspamd_history").on('click', function(e) {
e.preventDefault(); e.preventDefault();
@ -206,8 +206,8 @@ jQuery(function($){
} }
}); });
} }
function draw_fail2ban_logs() { function draw_netfilter_logs() {
ft_fail2ban_logs = FooTable.init('#fail2ban_log', { ft_netfilter_logs = FooTable.init('#netfilter_log', {
"columns": [ "columns": [
{"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleString();},"title":lang.time,"style":{"width":"170px"}}, {"name":"time","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleString();},"title":lang.time,"style":{"width":"170px"}},
{"name":"priority","title":lang.priority,"style":{"width":"80px"}}, {"name":"priority","title":lang.priority,"style":{"width":"80px"}},
@ -215,10 +215,10 @@ jQuery(function($){
], ],
"rows": $.ajax({ "rows": $.ajax({
dataType: 'json', dataType: 'json',
url: '/api/v1/get/logs/fail2ban', url: '/api/v1/get/logs/netfilter',
jsonp: false, jsonp: false,
error: function () { error: function () {
console.log('Cannot draw fail2ban log table'); console.log('Cannot draw netfilter log table');
}, },
success: function (data) { success: function (data) {
return process_table_data(data, 'general_syslog'); return process_table_data(data, 'general_syslog');
@ -497,7 +497,7 @@ jQuery(function($){
draw_watchdog_logs(); draw_watchdog_logs();
draw_acme_logs(); draw_acme_logs();
draw_api_logs(); draw_api_logs();
draw_fail2ban_logs(); draw_netfilter_logs();
draw_rspamd_history(); draw_rspamd_history();
}); });

View File

@ -165,7 +165,7 @@ jQuery(function($){
}, },
"sortValue": function(value){ "sortValue": function(value){
res = value.split("/"); res = value.split("/");
return res[0]; return Number(res[0]);
}, },
}, },
{"name":"max_quota_for_mbox","title":lang.mailbox_quota,"breakpoints":"xs sm"}, {"name":"max_quota_for_mbox","title":lang.mailbox_quota,"breakpoints":"xs sm"},
@ -186,16 +186,16 @@ jQuery(function($){
item.mailboxes = item.mboxes_in_domain + " / " + item.max_num_mboxes_for_domain; item.mailboxes = item.mboxes_in_domain + " / " + item.max_num_mboxes_for_domain;
item.quota = item.quota_used_in_domain + "/" + item.max_quota_for_domain; item.quota = item.quota_used_in_domain + "/" + item.max_quota_for_domain;
item.max_quota_for_mbox = humanFileSize(item.max_quota_for_mbox); item.max_quota_for_mbox = humanFileSize(item.max_quota_for_mbox);
item.chkbox = '<input type="checkbox" data-id="domain" name="multi_select" value="' + item.domain_name + '" />'; item.chkbox = '<input type="checkbox" data-id="domain" name="multi_select" value="' + encodeURIComponent(item.domain_name) + '" />';
item.action = '<div class="btn-group">'; item.action = '<div class="btn-group">';
if (role == "admin") { if (role == "admin") {
item.action += '<a href="/edit.php?domain=' + encodeURI(item.domain_name) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' + item.action += '<a href="/edit.php?domain=' + encodeURIComponent(item.domain_name) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-domain" data-api-url="delete/domain" data-item="' + encodeURI(item.domain_name) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>'; '<a href="#" id="delete_selected" data-id="single-domain" data-api-url="delete/domain" data-item="' + encodeURIComponent(item.domain_name) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>';
} }
else { else {
item.action += '<a href="/edit.php?domain=' + encodeURI(item.domain_name) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>'; item.action += '<a href="/edit.php?domain=' + encodeURIComponent(item.domain_name) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>';
} }
item.action += '<a href="#dnsInfoModal" class="btn btn-xs btn-info" data-toggle="modal" data-domain="' + encodeURI(item.domain_name) + '"><span class="glyphicon glyphicon-question-sign"></span> DNS</a></div>'; item.action += '<a href="#dnsInfoModal" class="btn btn-xs btn-info" data-toggle="modal" data-domain="' + encodeURIComponent(item.domain_name) + '"><span class="glyphicon glyphicon-question-sign"></span> DNS</a></div>';
}); });
} }
}), }),
@ -229,7 +229,7 @@ jQuery(function($){
}, },
"sortValue": function(value){ "sortValue": function(value){
res = value.split("/"); res = value.split("/");
return res[0]; return Number(res[0]);
}, },
}, },
{"name":"spam_aliases","filterable": false,"title":lang.spam_aliases,"breakpoints":"xs sm md"}, {"name":"spam_aliases","filterable": false,"title":lang.spam_aliases,"breakpoints":"xs sm md"},
@ -250,24 +250,24 @@ jQuery(function($){
$.each(data, function (i, item) { $.each(data, function (i, item) {
item.quota = item.quota_used + "/" + item.quota; item.quota = item.quota_used + "/" + item.quota;
item.max_quota_for_mbox = humanFileSize(item.max_quota_for_mbox); item.max_quota_for_mbox = humanFileSize(item.max_quota_for_mbox);
item.chkbox = '<input type="checkbox" data-id="mailbox" name="multi_select" value="' + item.username + '" />'; item.chkbox = '<input type="checkbox" data-id="mailbox" name="multi_select" value="' + encodeURIComponent(item.username) + '" />';
if (role == "admin") { if (role == "admin") {
item.action = '<div class="btn-group">' + item.action = '<div class="btn-group">' +
'<a href="/edit.php?mailbox=' + encodeURI(item.username) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' + '<a href="/edit.php?mailbox=' + encodeURIComponent(item.username) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-mailbox" data-api-url="delete/mailbox" data-item="' + encodeURI(item.username) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-mailbox" data-api-url="delete/mailbox" data-item="' + encodeURIComponent(item.username) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'<a href="/index.php?duallogin=' + encodeURI(item.username) + '" class="btn btn-xs btn-success"><span class="glyphicon glyphicon-user"></span> Login</a>' + '<a href="/index.php?duallogin=' + encodeURIComponent(item.username) + '" class="btn btn-xs btn-success"><span class="glyphicon glyphicon-user"></span> Login</a>' +
'</div>'; '</div>';
} }
else { else {
item.action = '<div class="btn-group">' + item.action = '<div class="btn-group">' +
'<a href="/edit.php?mailbox=' + encodeURI(item.username) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' + '<a href="/edit.php?mailbox=' + encodeURIComponent(item.username) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-mailbox" data-api-url="delete/mailbox" data-item="' + encodeURI(item.username) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-mailbox" data-api-url="delete/mailbox" data-item="' + encodeURIComponent(item.username) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'</div>'; '</div>';
} }
item.in_use = '<div class="progress">' + item.in_use = '<div class="progress">' +
'<div class="progress-bar progress-bar-' + item.percent_class + ' role="progressbar" aria-valuenow="' + item.percent_in_use + '" aria-valuemin="0" aria-valuemax="100" ' + '<div class="progress-bar progress-bar-' + item.percent_class + ' role="progressbar" aria-valuenow="' + item.percent_in_use + '" aria-valuemin="0" aria-valuemax="100" ' +
'style="min-width:2em;width:' + item.percent_in_use + '%">' + item.percent_in_use + '%' + '</div></div>'; 'style="min-width:2em;width:' + item.percent_in_use + '%">' + item.percent_in_use + '%' + '</div></div>';
item.username = escapeHtml(item.username);
}); });
} }
}), }),
@ -309,10 +309,11 @@ jQuery(function($){
success: function (data) { success: function (data) {
$.each(data, function (i, item) { $.each(data, function (i, item) {
item.action = '<div class="btn-group">' + item.action = '<div class="btn-group">' +
'<a href="/edit.php?resource=' + encodeURI(item.name) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' + '<a href="/edit.php?resource=' + encodeURIComponent(item.name) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-resource" data-api-url="delete/resource" data-item="' + encodeURI(item.name) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-resource" data-api-url="delete/resource" data-item="' + encodeURIComponent(item.name) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'</div>'; '</div>';
item.chkbox = '<input type="checkbox" data-id="resource" name="multi_select" value="' + item.name + '" />'; item.chkbox = '<input type="checkbox" data-id="resource" name="multi_select" value="' + encodeURIComponent(item.name) + '" />';
item.name = escapeHtml(item.name);
}); });
} }
}), }),
@ -359,6 +360,8 @@ jQuery(function($){
'<a href="#" id="delete_selected" data-id="single-bcc" data-api-url="delete/bcc" data-item="' + item.id + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-bcc" data-api-url="delete/bcc" data-item="' + item.id + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'</div>'; '</div>';
item.chkbox = '<input type="checkbox" data-id="bcc" name="multi_select" value="' + item.id + '" />'; item.chkbox = '<input type="checkbox" data-id="bcc" name="multi_select" value="' + item.id + '" />';
item.local_dest = escapeHtml(item.local_dest);
item.bcc_dest = escapeHtml(item.bcc_dest);
if (item.type == 'sender') { if (item.type == 'sender') {
item.type = '<span id="active-script" class="label label-success">Sender</span>'; item.type = '<span id="active-script" class="label label-success">Sender</span>';
} else { } else {
@ -383,6 +386,54 @@ jQuery(function($){
} }
}); });
} }
function draw_recipient_map_table() {
ft_recipient_map_table = FooTable.init('#recipient_map_table', {
"columns": [
{"name":"chkbox","title":"","style":{"maxWidth":"60px","width":"60px"},"filterable": false,"sortable": false,"type":"html"},
{"sorted": true,"name":"id","title":"ID","style":{"maxWidth":"60px","width":"60px","text-align":"center"}},
{"name":"recipient_map_old","title":lang.recipient_map_old},
{"name":"recipient_map_new","title":lang.recipient_map_new},
{"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active},
{"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":(role == "admin" ? lang.action : ""),"breakpoints":"xs sm"}
],
"empty": lang.empty,
"rows": $.ajax({
dataType: 'json',
url: '/api/v1/get/recipient_map/all',
jsonp: false,
error: function () {
console.log('Cannot draw recipient map table');
},
success: function (data) {
if (role == "admin") {
$.each(data, function (i, item) {
item.recipient_map_old = escapeHtml(item.recipient_map_old);
item.recipient_map_new = escapeHtml(item.recipient_map_new);
item.action = '<div class="btn-group">' +
'<a href="/edit.php?recipient_map=' + item.id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-recipient_map" data-api-url="delete/recipient_map" data-item="' + item.id + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'</div>';
item.chkbox = '<input type="checkbox" data-id="recipient_map" name="multi_select" value="' + item.id + '" />';
});
}
}
}),
"paging": {
"enabled": true,
"limit": 5,
"size": pagination_size
},
"filtering": {
"enabled": true,
"position": "left",
"connectors": false,
"placeholder": lang.filter_table
},
"sorting": {
"enabled": true
}
});
}
function draw_alias_table() { function draw_alias_table() {
ft_alias_table = FooTable.init('#alias_table', { ft_alias_table = FooTable.init('#alias_table', {
"columns": [ "columns": [
@ -404,12 +455,16 @@ jQuery(function($){
success: function (data) { success: function (data) {
$.each(data, function (i, item) { $.each(data, function (i, item) {
item.action = '<div class="btn-group">' + item.action = '<div class="btn-group">' +
'<a href="/edit.php?alias=' + encodeURI(item.address) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' + '<a href="/edit.php?alias=' + encodeURIComponent(item.address) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-alias" data-api-url="delete/alias" data-item="' + encodeURI(item.address) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-alias" data-api-url="delete/alias" data-item="' + encodeURIComponent(item.address) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'</div>'; '</div>';
item.chkbox = '<input type="checkbox" data-id="alias" name="multi_select" value="' + item.address + '" />'; item.chkbox = '<input type="checkbox" data-id="alias" name="multi_select" value="' + encodeURIComponent(item.address) + '" />';
item.goto = escapeHtml(item.goto);
if (item.is_catch_all == 1) { if (item.is_catch_all == 1) {
item.address = '<div class="label label-default">Catch-All</div> ' + item.address; item.address = '<div class="label label-default">Catch-All</div> ' + escapeHtml(item.address);
}
else {
item.address = escapeHtml(item.address);
} }
if (item.goto == "null@localhost") { if (item.goto == "null@localhost") {
item.goto = '⤷ <span style="font-size:12px" class="glyphicon glyphicon-trash" aria-hidden="true"></span>'; item.goto = '⤷ <span style="font-size:12px" class="glyphicon glyphicon-trash" aria-hidden="true"></span>';
@ -457,11 +512,11 @@ jQuery(function($){
success: function (data) { success: function (data) {
$.each(data, function (i, item) { $.each(data, function (i, item) {
item.action = '<div class="btn-group">' + item.action = '<div class="btn-group">' +
'<a href="/edit.php?aliasdomain=' + encodeURI(item.alias_domain) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' + '<a href="/edit.php?aliasdomain=' + encodeURIComponent(item.alias_domain) + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-alias-domain" data-api-url="delete/alias-domain" data-item="' + encodeURI(item.alias_domain) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-alias-domain" data-api-url="delete/alias-domain" data-item="' + encodeURIComponent(item.alias_domain) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'<a href="#dnsInfoModal" class="btn btn-xs btn-info" data-toggle="modal" data-domain="' + encodeURI(item.alias_domain) + '"><span class="glyphicon glyphicon-question-sign"></span> DNS</a></div>' + '<a href="#dnsInfoModal" class="btn btn-xs btn-info" data-toggle="modal" data-domain="' + encodeURIComponent(item.alias_domain) + '"><span class="glyphicon glyphicon-question-sign"></span> DNS</a></div>' +
'</div>'; '</div>';
item.chkbox = '<input type="checkbox" data-id="alias-domain" name="multi_select" value="' + item.alias_domain + '" />'; item.chkbox = '<input type="checkbox" data-id="alias-domain" name="multi_select" value="' + encodeURIComponent(item.alias_domain) + '" />';
}); });
} }
}), }),
@ -507,16 +562,17 @@ jQuery(function($){
}, },
success: function (data) { success: function (data) {
$.each(data, function (i, item) { $.each(data, function (i, item) {
item.log = '<a href="#syncjobLogModal" data-toggle="modal" data-syncjob-id="' + encodeURI(item.id) + '">Open logs</a>' item.log = '<a href="#syncjobLogModal" data-toggle="modal" data-syncjob-id="' + encodeURIComponent(item.id) + '">Open logs</a>'
item.user2 = escapeHtml(item.user2);
if (!item.exclude > 0) { if (!item.exclude > 0) {
item.exclude = '-'; item.exclude = '-';
} else { } else {
item.exclude = '<code>' + item.exclude + '</code>'; item.exclude = '<code>' + item.exclude + '</code>';
} }
item.server_w_port = item.user1 + '@' + item.host1 + ':' + item.port1; item.server_w_port = escapeHtml(item.user1) + '@' + item.host1 + ':' + item.port1;
item.action = '<div class="btn-group">' + item.action = '<div class="btn-group">' +
'<a href="/edit.php?syncjob=' + item.id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' + '<a href="/edit.php?syncjob=' + item.id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-syncjob" data-api-url="delete/syncjob" data-item="' + encodeURI(item.id) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-syncjob" data-api-url="delete/syncjob" data-item="' + item.id + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'</div>'; '</div>';
item.chkbox = '<input type="checkbox" data-id="syncjob" name="multi_select" value="' + item.id + '" />'; item.chkbox = '<input type="checkbox" data-id="syncjob" name="multi_select" value="' + item.id + '" />';
if (item.is_running == 1) { if (item.is_running == 1) {
@ -578,7 +634,7 @@ jQuery(function($){
item.filter_type = '<div class="label label-default">' + item.filter_type.charAt(0).toUpperCase() + item.filter_type.slice(1).toLowerCase() + '</div>' item.filter_type = '<div class="label label-default">' + item.filter_type.charAt(0).toUpperCase() + item.filter_type.slice(1).toLowerCase() + '</div>'
item.action = '<div class="btn-group">' + item.action = '<div class="btn-group">' +
'<a href="/edit.php?filter=' + item.id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' + '<a href="/edit.php?filter=' + item.id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-filter" data-api-url="delete/filter" data-item="' + encodeURI(item.id) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-filter" data-api-url="delete/filter" data-item="' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'</div>'; '</div>';
item.chkbox = '<input type="checkbox" data-id="filter_item" name="multi_select" value="' + item.id + '" />' item.chkbox = '<input type="checkbox" data-id="filter_item" name="multi_select" value="' + item.id + '" />'
}); });
@ -609,5 +665,6 @@ jQuery(function($){
draw_sync_job_table(); draw_sync_job_table();
draw_filter_table(); draw_filter_table();
draw_bcc_table(); draw_bcc_table();
draw_recipient_map_table();
}); });

View File

@ -6,8 +6,8 @@ jQuery(function($){
function escapeHtml(n){return String(n).replace(/[&<>"'`=\/]/g,function(n){return entityMap[n]})} function escapeHtml(n){return String(n).replace(/[&<>"'`=\/]/g,function(n){return entityMap[n]})}
function humanFileSize(i){if(Math.abs(i)<1024)return i+" B";var B=["KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],e=-1;do{i/=1024,++e}while(Math.abs(i)>=1024&&e<B.length-1);return i.toFixed(1)+" "+B[e]} function humanFileSize(i){if(Math.abs(i)<1024)return i+" B";var B=["KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],e=-1;do{i/=1024,++e}while(Math.abs(i)>=1024&&e<B.length-1);return i.toFixed(1)+" "+B[e]}
function draw_quarantaine_table() { function draw_quarantine_table() {
ft_quarantainetable = FooTable.init('#quarantainetable', { ft_quarantinetable = FooTable.init('#quarantinetable', {
"columns": [ "columns": [
{"name":"chkbox","title":"","style":{"maxWidth":"40px","width":"40px"},"filterable": false,"sortable": false,"type":"html"}, {"name":"chkbox","title":"","style":{"maxWidth":"40px","width":"40px"},"filterable": false,"sortable": false,"type":"html"},
{"name":"id","type":"ID","filterable": false,"sorted": true,"direction":"DESC","title":"ID","style":{"width":"50px"}}, {"name":"id","type":"ID","filterable": false,"sorted": true,"direction":"DESC","title":"ID","style":{"width":"50px"}},
@ -19,10 +19,10 @@ jQuery(function($){
], ],
"rows": $.ajax({ "rows": $.ajax({
dataType: 'json', dataType: 'json',
url: '/api/v1/get/quarantaine/all', url: '/api/v1/get/quarantine/all',
jsonp: false, jsonp: false,
error: function () { error: function () {
console.log('Cannot draw quarantaine table'); console.log('Cannot draw quarantine table');
}, },
success: function (data) { success: function (data) {
$.each(data, function (i, item) { $.each(data, function (i, item) {
@ -38,14 +38,14 @@ jQuery(function($){
"paging": {"enabled": true,"limit": 5,"size": pagination_size}, "paging": {"enabled": true,"limit": 5,"size": pagination_size},
"sorting": {"enabled": true}, "sorting": {"enabled": true},
"on": { "on": {
"ready.ft.table": btn_group_quarantaine, "ready.ft.table": btn_group_quarantine,
"after.ft.paging": btn_group_quarantaine "after.ft.paging": btn_group_quarantine
}, },
"filtering": {"enabled": true,"position": "left","connectors": false,"placeholder": lang.filter_table}, "filtering": {"enabled": true,"position": "left","connectors": false,"placeholder": lang.filter_table},
}); });
} }
btn_group_quarantaine = function(ev, ft){ btn_group_quarantine = function(ev, ft){
$('.show_qid_info').on('click', function (e) { $('.show_qid_info').on('click', function (e) {
e.preventDefault(); e.preventDefault();
var qitem = $(this).data('item'); var qitem = $(this).data('item');
@ -80,5 +80,5 @@ jQuery(function($){
}) })
} }
// Initial table drawings // Initial table drawings
draw_quarantaine_table(); draw_quarantine_table();
}); });

View File

@ -62,9 +62,10 @@ jQuery(function($){
$.each(data, function (i, item) { $.each(data, function (i, item) {
if (acl_data.spam_alias === 1) { if (acl_data.spam_alias === 1) {
item.action = '<div class="btn-group">' + item.action = '<div class="btn-group">' +
'<a href="#" id="delete_selected" data-id="single-tla" data-api-url="delete/time_limited_alias" data-item="' + encodeURI(item.address) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-tla" data-api-url="delete/time_limited_alias" data-item="' + encodeURIComponent(item.address) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'</div>'; '</div>';
item.chkbox = '<input type="checkbox" data-id="tla" name="multi_select" value="' + item.address + '" />'; item.chkbox = '<input type="checkbox" data-id="tla" name="multi_select" value="' + encodeURIComponent(item.address) + '" />';
item.address = escapeHtml(item.address);
} }
else { else {
item.chkbox = '<input type="checkbox" disabled />'; item.chkbox = '<input type="checkbox" disabled />';
@ -102,24 +103,25 @@ jQuery(function($){
"empty": lang.empty, "empty": lang.empty,
"rows": $.ajax({ "rows": $.ajax({
dataType: 'json', dataType: 'json',
url: '/api/v1/get/syncjobs/' + mailcow_cc_username + '/no_log', url: '/api/v1/get/syncjobs/' + encodeURIComponent(mailcow_cc_username) + '/no_log',
jsonp: false, jsonp: false,
error: function () { error: function () {
console.log('Cannot draw sync job table'); console.log('Cannot draw sync job table');
}, },
success: function (data) { success: function (data) {
$.each(data, function (i, item) { $.each(data, function (i, item) {
item.log = '<a href="#syncjobLogModal" data-toggle="modal" data-syncjob-id="' + encodeURI(item.id) + '">Open logs</a>' item.user1 = escapeHtml(item.user1);
item.log = '<a href="#syncjobLogModal" data-toggle="modal" data-syncjob-id="' + item.id + '">Open logs</a>'
if (!item.exclude > 0) { if (!item.exclude > 0) {
item.exclude = '-'; item.exclude = '-';
} else { } else {
item.exclude = '<code>' + item.exclude + '</code>'; item.exclude = '<code>' + escapeHtml(item.exclude) + '</code>';
} }
item.server_w_port = item.user1 + '@' + item.host1 + ':' + item.port1; item.server_w_port = escapeHtml(item.user1 + '@' + item.host1 + ':' + item.port1);
if (acl_data.syncjobs === 1) { if (acl_data.syncjobs === 1) {
item.action = '<div class="btn-group">' + item.action = '<div class="btn-group">' +
'<a href="/edit.php?syncjob=' + item.id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' + '<a href="/edit.php?syncjob=' + item.id + '" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> ' + lang.edit + '</a>' +
'<a href="#" id="delete_selected" data-id="single-syncjob" data-api-url="delete/syncjob" data-item="' + encodeURI(item.id) + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' + '<a href="#" id="delete_selected" data-id="single-syncjob" data-api-url="delete/syncjob" data-item="' + item.id + '" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> ' + lang.remove + '</a>' +
'</div>'; '</div>';
item.chkbox = '<input type="checkbox" data-id="syncjob" name="multi_select" value="' + item.id + '" />'; item.chkbox = '<input type="checkbox" data-id="syncjob" name="multi_select" value="' + item.id + '" />';
} }
@ -238,7 +240,7 @@ jQuery(function($){
$('#user_sieve_filter').text(lang.loading); $('#user_sieve_filter').text(lang.loading);
$.ajax({ $.ajax({
dataType: 'json', dataType: 'json',
url: '/api/v1/get/active-user-sieve/' + mailcow_cc_username, url: '/api/v1/get/active-user-sieve/' + encodeURIComponent(mailcow_cc_username),
jsonp: false, jsonp: false,
error: function () { error: function () {
console.log('Cannot get active sieve script'); console.log('Cannot get active sieve script');

View File

@ -595,6 +595,39 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
)); ));
} }
break; break;
case "recipient_map":
if (isset($_POST['attr'])) {
$attr = (array)json_decode($_POST['attr'], true);
if (recipient_map('add', $attr) === false) {
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Cannot add item'
));
}
}
else {
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'success',
'msg' => 'Task completed'
));
}
}
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Cannot find attributes in post data'
));
}
break;
} }
break; break;
case "get": case "get":
@ -847,14 +880,14 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
echo '{}'; echo '{}';
} }
break; break;
case "fail2ban": case "netfilter":
// 0 is first record, so empty is fine // 0 is first record, so empty is fine
if (isset($extra)) { if (isset($extra)) {
$extra = preg_replace('/[^\d\-]/i', '', $extra); $extra = preg_replace('/[^\d\-]/i', '', $extra);
$logs = get_logs('fail2ban-mailcow', $extra); $logs = get_logs('netfilter-mailcow', $extra);
} }
else { else {
$logs = get_logs('fail2ban-mailcow'); $logs = get_logs('netfilter-mailcow');
} }
if (isset($logs) && !empty($logs)) { if (isset($logs) && !empty($logs)) {
echo json_encode($logs, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); echo json_encode($logs, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
@ -1191,6 +1224,41 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
break; break;
} }
break; break;
case "recipient_map":
switch ($object) {
case "all":
$recipient_map_items = recipient_map('get');
if (!empty($recipient_map_items)) {
foreach ($recipient_map_items as $recipient_map_item) {
if ($details = recipient_map('details', $recipient_map_item)) {
$data[] = $details;
}
else {
continue;
}
}
}
if (!isset($data) || empty($data)) {
echo '{}';
}
else {
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
}
break;
default:
$data = recipient_map('details', $object);
if (!empty($data)) {
$data[] = $details;
}
if (!isset($data) || empty($data)) {
echo '{}';
}
else {
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
}
break;
}
break;
case "policy_wl_mailbox": case "policy_wl_mailbox":
switch ($object) { switch ($object) {
default: default:
@ -1318,11 +1386,11 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
break; break;
} }
break; break;
case "quarantaine": case "quarantine":
// "all" will not print details // "all" will not print details
switch ($object) { switch ($object) {
case "all": case "all":
$data = quarantaine('get'); $data = quarantine('get');
if (!isset($data) || empty($data)) { if (!isset($data) || empty($data)) {
echo '{}'; echo '{}';
} }
@ -1331,7 +1399,7 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
} }
break; break;
default: default:
$data = quarantaine('details', $object); $data = quarantine('details', $object);
if (!isset($data) || empty($data)) { if (!isset($data) || empty($data)) {
echo '{}'; echo '{}';
} }
@ -1661,7 +1729,7 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
if (isset($_POST['items'])) { if (isset($_POST['items'])) {
$items = (array)json_decode($_POST['items'], true); $items = (array)json_decode($_POST['items'], true);
if (is_array($items)) { if (is_array($items)) {
if (quarantaine('delete', array('id' => $items)) === false) { if (quarantine('delete', array('id' => $items)) === false) {
if (isset($_SESSION['return'])) { if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']); echo json_encode($_SESSION['return']);
} }
@ -1739,6 +1807,47 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
)); ));
} }
break; break;
case "recipient_map":
if (isset($_POST['items'])) {
$items = (array)json_decode($_POST['items'], true);
if (is_array($items)) {
if (recipient_map('delete', array('id' => $items)) === false) {
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Deletion of items/s failed'
));
}
}
else {
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'success',
'msg' => 'Task completed'
));
}
}
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Cannot find id array in post data'
));
}
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Cannot find items in post data'
));
}
break;
case "fwdhost": case "fwdhost":
if (isset($_POST['items'])) { if (isset($_POST['items'])) {
$items = (array)json_decode($_POST['items'], true); $items = (array)json_decode($_POST['items'], true);
@ -2238,6 +2347,50 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
)); ));
} }
break; break;
case "recipient_map":
if (isset($_POST['items']) && isset($_POST['attr'])) {
$items = (array)json_decode($_POST['items'], true);
$attr = (array)json_decode($_POST['attr'], true);
$postarray = array_merge(array('id' => $items), $attr);
if (is_array($postarray['id'])) {
if (recipient_map('edit', $postarray) === false) {
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Edit failed'
));
}
exit();
}
else {
if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']);
}
else {
echo json_encode(array(
'type' => 'success',
'msg' => 'Task completed'
));
}
}
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Incomplete post data'
));
}
}
else {
echo json_encode(array(
'type' => 'error',
'msg' => 'Incomplete post data'
));
}
break;
case "alias": case "alias":
if (isset($_POST['items']) && isset($_POST['attr'])) { if (isset($_POST['items']) && isset($_POST['attr'])) {
$items = (array)json_decode($_POST['items'], true); $items = (array)json_decode($_POST['items'], true);
@ -2462,7 +2615,7 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
$attr = (array)json_decode($_POST['attr'], true); $attr = (array)json_decode($_POST['attr'], true);
$postarray = array_merge(array('id' => $items), $attr); $postarray = array_merge(array('id' => $items), $attr);
if (is_array($postarray['id'])) { if (is_array($postarray['id'])) {
if (quarantaine('edit', $postarray) === false) { if (quarantine('edit', $postarray) === false) {
if (isset($_SESSION['return'])) { if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']); echo json_encode($_SESSION['return']);
} }
@ -2500,11 +2653,11 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u
)); ));
} }
break; break;
case "quarantaine": case "quarantine":
// Edit settings, does not need IDs // Edit settings, does not need IDs
if (isset($_POST['attr'])) { if (isset($_POST['attr'])) {
$postarray = json_decode($_POST['attr'], true); $postarray = json_decode($_POST['attr'], true);
if (quarantaine('edit', $postarray) === false) { if (quarantine('edit', $postarray) === false) {
if (isset($_SESSION['return'])) { if (isset($_SESSION['return'])) {
echo json_encode($_SESSION['return']); echo json_encode($_SESSION['return']);
} }

View File

@ -0,0 +1,536 @@
<?php
/*
* Catalan language file
*/
$lang['footer']['loading'] = "Si et plau espera ...";
$lang['header']['restart_sogo'] = 'Reiniciar SOGo';
$lang['footer']['restart_sogo'] = 'Reiniciar SOGo';
$lang['footer']['restart_now'] = 'Reiniciar ara';
$lang['footer']['restart_container_info'] = '<b>Important:</b> Un reinici pot trigar una estona, si et plau espera a que acabi.';
$lang['footer']['confirm_delete'] = "Confirma l'esborrat ";
$lang['footer']['delete_these_items'] = 'Si et plau confirma els canvis al objecte amb id:';
$lang['footer']['delete_now'] = 'Esborrar ara';
$lang['footer']['cancel'] = 'Cancel·lar';
$lang['danger']['dkim_domain_or_sel_invalid'] = "Domini DKIM o selector incorrecte";
$lang['success']['dkim_removed'] = "La clau DKIM %s s'ha esborrat";
$lang['success']['dkim_added'] = "La clau DKIM s'ha desat";
$lang['danger']['access_denied'] = "Accés denegat o dades incorrectes";
$lang['danger']['domain_invalid'] = "Nom de domini incorrecte";
$lang['danger']['mailbox_quota_exceeds_domain_quota'] = "La quota màxima sobrepassa el límit del domini";
$lang['danger']['object_is_not_numeric'] = "El valor %s no és numèric";
$lang['success']['domain_added'] = "S'ha afegit el domini %s";
$lang['success']['items_deleted'] = "S'ha esborrat %s";
$lang['danger']['alias_empty'] = "L'adreça de l'àlias no es pot deixar buida";
$lang['danger']['last_key'] = 'No es pot esborrar la úlitma clau';
$lang['danger']['goto_empty'] = "L'adreça \"goto\" no es pot deixar buida";
$lang['danger']['policy_list_from_exists'] = "Ja existeix un registre amb aquest nom";
$lang['danger']['policy_list_from_invalid'] = "El registre no té un format vàlid";
$lang['danger']['alias_invalid'] = "L'adreça de l'alias és incorrecta";
$lang['danger']['goto_invalid'] = "L'adreça del \"goto\" és incorrecta";
$lang['danger']['alias_domain_invalid'] = "L'àlies del domini no és vàlid";
$lang['danger']['target_domain_invalid'] = "El domini \"goto\" no és vàlid";
$lang['danger']['object_exists'] = "L' objecte %s ja existeix";
$lang['danger']['domain_exists'] = "El domini %s ja existeix";
$lang['danger']['alias_goto_identical'] = "Les adreces d'àlies i 'goto' no poden ser iguals";
$lang['danger']['aliasd_targetd_identical'] = "El domini àlies no pot ser igual al de destí";
$lang['danger']['maxquota_empty'] = 'La quota màxima no pot ser 0.';
$lang['success']['alias_added'] = "S'ha afegit el/s àlies";
$lang['success']['alias_modified'] = "S'han desat els canvis fets al àlies";
$lang['success']['mailbox_modified'] = "S'han desat els canvis fets a la bústia %s";
$lang['success']['resource_modified'] = "S'han desat els canvis fets al recurs %s";
$lang['success']['object_modified'] = "S'han desat els canvis fets a l'objecte %s";
$lang['success']['f2b_modified'] = "S'han desat els canvis fets als parametres del Fail2ban";
$lang['danger']['targetd_not_found'] = "No s'ha trobat el domini destí";
$lang['success']['aliasd_added'] = "S'ha afegit l'àlies de domini %s";
$lang['success']['aliasd_modified'] = "S'han desat els canvis fets a l'àlies de domini %s";
$lang['success']['domain_modified'] = "S'han desat els canvis fets al domini %s";
$lang['success']['domain_admin_modified'] = "S'ha modificat l'administrador de dominis %s";
$lang['success']['domain_admin_added'] = "S'ha afegit l'administrador de dominis %s";
$lang['success']['admin_modified'] = "Els canvis fets a l'administrador s'han desat";
$lang['danger']['username_invalid'] = "El nom d'usuari no es pot fer servir";
$lang['danger']['password_mismatch'] = "La confirmació de contrasenya no encaixa";
$lang['danger']['password_complexity'] = "La contrasenya no compleix els requisits";
$lang['danger']['password_empty'] = "La contrasenya no es pot deixar en blanc";
$lang['danger']['login_failed'] = "L'inici de sessió ha fallat";
$lang['danger']['mailbox_invalid'] = "El nom de la bústia no és vàlid";
$lang['danger']['description_invalid'] = "La descripció del recurs no és vàlida";
$lang['danger']['resource_invalid'] = "El nom del recurs no és vàlid";
$lang['danger']['is_alias'] = "%s ja està definida com una direcció àlies";
$lang['danger']['is_alias_or_mailbox'] = "%s ja està definit como un àlies o una bústia";
$lang['danger']['is_spam_alias'] = "%s ja està definida com una adreça àlies de spam";
$lang['danger']['quota_not_0_not_numeric'] = "La quaota ha de ser numèrica i >= 0";
$lang['danger']['domain_not_found'] = "No s'ha trobat el domini";
$lang['danger']['max_mailbox_exceeded'] = "S'ha arribat al màxim de bústies (%d de %d)";
$lang['danger']['max_alias_exceeded'] = "S'ha arribat al màxim d'àlies";
$lang['danger']['mailbox_quota_exceeded'] = "La quota exedeix el límit del domini (màx. %d MiB)";
$lang['danger']['mailbox_quota_left_exceeded'] = "No queda espai suficient (espai lliure: %d MiB)";
$lang['success']['mailbox_added'] = "S'ha afegit la bústia %s";
$lang['success']['resource_added'] = "S'ha afegit el recurs %s";
$lang['success']['domain_removed'] = "S'ha elminat el domini %s";
$lang['success']['alias_removed'] = "S'ha esborrat l'àlies %s";
$lang['success']['alias_domain_removed'] = "S'ha esborrat l'àlies de domini %s";
$lang['success']['domain_admin_removed'] = "S'ha esborrat l'administrador de dominis %s";
$lang['success']['mailbox_removed'] = "S'ha esborrat la bústia %s";
$lang['success']['eas_reset'] = "S'ha fet un reset als dispositius ActiveSync de l'usuari %s";
$lang['success']['resource_removed'] = "S'ha esborrat el recurs %s";
$lang['danger']['max_quota_in_use'] = "La quota de la bústia ha de ser meś gran o igual a %d MiB";
$lang['danger']['domain_quota_m_in_use'] = "La quota del domini ha de ser més gran o igual a %d MiB";
$lang['danger']['mailboxes_in_use'] = "El número màxim de bústies ha de ser més gran o igual a %d";
$lang['danger']['aliases_in_use'] = "El número màxim d'àlies ha de ser més gran o igual a %d";
$lang['danger']['sender_acl_invalid'] = "L'ACL d'emissor no és vàlid";
$lang['danger']['domain_not_empty'] = "No es pot esborrar un domini que no està buit";
$lang['danger']['validity_missing'] = 'Si et plau posa un període de validesa';
$lang['user']['loading'] = "Carregant...";
$lang['user']['force_pw_update'] = "<b>Has d'</b>establir una nova contrassenya per poder accedir.";
$lang['user']['active_sieve'] = "Filtre actiu";
$lang['user']['show_sieve_filters'] = "Mostra el filtre 'sieve' de l'usuari";
$lang['user']['no_active_filter'] = "Actualment no hi ha cap filtre";
$lang['user']['messages'] = "missatges"; // "123 messages"
$lang['user']['in_use'] = "Usat";
$lang['user']['user_change_fn'] = "";
$lang['user']['user_settings'] = "Configuració de l'usuari";
$lang['user']['mailbox_details'] = 'Detalls de la bústia';
$lang['user']['change_password'] = 'Canviar la contrasenya';
$lang['user']['client_configuration'] = 'Guies de configuració per als clients de correu més habituals';
$lang['user']['new_password'] = 'Contrasenya nova:';
$lang['user']['save_changes'] = 'Desar els canvis';
$lang['user']['password_now'] = 'Contrasenya actual (per validar els canvis):';
$lang['user']['new_password_repeat'] = 'Confirmació de la contrasenya nova:';
$lang['user']['new_password_description'] = 'Requisits: 6 caracters, lletres i números.';
$lang['user']['spam_aliases'] = "Àlies d'email temporals";
$lang['user']['alias'] = 'Àlies';
$lang['user']['shared_aliases'] = 'Adreces àlies compartides';
$lang['user']['shared_aliases_desc'] = "Un àlies compartit no es veu afectat per la configuració de l'usuari. L'administrador pot configurar un filtre de spam a nivell de domini.";
$lang['user']['direct_aliases'] = 'Adreces àlies directes';
$lang['user']['direct_aliases_desc'] = "Els àlies directes sí que es veuen afectat per la configuració de l'usuari";
$lang['user']['is_catch_all'] = 'Adreça atrapa-ho-tot';
$lang['user']['aliases_also_send_as'] = 'Pot enviar com a aquests remitents';
$lang['user']['aliases_send_as_all'] = "Al enviar no es verificarà l'adreça remitent per aquests dominis:";
$lang['user']['alias_create_random'] = 'Generar àlies aleatori';
$lang['user']['alias_extend_all'] = 'Afegir 1 hora als àlies';
$lang['user']['alias_valid_until'] = 'Vàlid fins';
$lang['user']['alias_remove_all'] = 'Esborrar tots els àlies';
$lang['user']['alias_time_left'] = 'Temps restant';
$lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['alias_select_validity'] = 'Període de validesa';
$lang['user']['sync_jobs'] = 'Feines de sincronització';
$lang['user']['hour'] = 'Hora';
$lang['user']['hours'] = 'Hores';
$lang['user']['day'] = 'Dia';
$lang['user']['week'] = 'Setmana';
$lang['user']['weeks'] = 'Setmanes';
$lang['user']['spamfilter'] = 'Filtre de spam';
$lang['admin']['spamfilter'] = 'Filtre de spam';
$lang['user']['spamfilter_wl'] = 'Llista blanca';
$lang['user']['spamfilter_wl_desc'] = 'Les adreces de la lista blanca <b>mai</b> es clasificaran como a spam. Es pot fer serivir *@exemple.org.';
$lang['user']['spamfilter_bl'] = 'Llista negra';
$lang['user']['spamfilter_bl_desc'] = 'Les adreces de la lista negra <b>sempre</b> es clasificaran como a spam. Es pot fer servir *@exemple.org';
$lang['user']['spamfilter_behavior'] = 'Classificació';
$lang['user']['spamfilter_table_rule'] = 'Regla';
$lang['user']['spamfilter_table_action'] = 'Acció';
$lang['user']['spamfilter_table_empty'] = 'No hay datos para mostrar';
$lang['user']['spamfilter_table_remove'] = 'Esborrar';
$lang['user']['spamfilter_table_add'] = 'Afegir element';
$lang['user']['spamfilter_green'] = 'Verd: el missatge no és spam';
$lang['user']['spamfilter_yellow'] = "Groc: el missatge pot ser spam, s'etiquetarà com a spam i es mourà a la carpeta de correu brossa";
$lang['user']['spamfilter_red'] = 'Vermell: El missatge és spam i, per tant, el servidor el refusarà';
$lang['user']['spamfilter_default_score'] = 'Valors per defecte:';
$lang['user']['spamfilter_hint'] = 'El primer valor representa el "llindar inferior de la qualificació de spam", el segon representa el "llindar superior de la qualificació de spam".';
$lang['user']['spamfilter_table_domain_policy'] = "n/a (política del domini)";
$lang['user']['waiting'] = "Esperant";
$lang['user']['status'] = "Estat";
$lang['user']['running'] = "En marxa";
$lang['user']['tls_policy_warning'] = "<strong>Avís:</strong> Al forçar el xifrat en les comunicacions es poden perdre missatges.<br> Els missatges que no es puguin rebre o enviar xifrats, rebotaran. <br>Aquesta opció s'aplica a l'adreça principal (nom d'usuari) i totes les adreces derivades d'àlies <b>que només tinguin aquesta bústia</b> com a destí";
$lang['user']['tls_policy'] = "Política d'encriptació";
$lang['user']['tls_enforce_in'] = 'Forçar TLS al rebre';
$lang['user']['tls_enforce_out'] = 'Forçar TLS al enviar';
$lang['user']['no_record'] = 'Sense registre';
$lang['user']['tag_handling'] = 'Al rebre un missatge etiquetat';
$lang['user']['tag_in_subfolder'] = 'Moure a subcarpeta';
$lang['user']['tag_in_subject'] = 'Marcar al assumpte';
$lang['user']['tag_in_none'] = 'No fer res';
$lang['user']['tag_help_explain'] = 'Moure a subcarpeta: es crearà una subcarpeta anomenada com la etiqueta a INBOX ("INBOX/Facebook") i es mourà el correu allà.<br>
Marcar al assumpte: s\'afegirà el nom de la etiqueta al assumpte del missatge, per exemple: "[Facebook] Les meves notícies".';
$lang['user']['tag_help_example'] = 'Ejemplo de una dirección email etiquetada: mi<b>+Facebook</b>@ejemplo.org';
$lang['user']['eas_reset'] = "Fer un reset de la cache d'ActiveSync del dispositiu";
$lang['user']['eas_reset_now'] = "Resetejar cache d'ActiveSync";
$lang['user']['eas_reset_help'] = 'El reset serveix per recuperar perfils ActiveSync trencats.<br><b>Atenció:</b> Tots els elements es tornaran a descarregar!';
$lang['user']['encryption'] = 'Xifrat';
$lang['user']['username'] = 'Usuari';
$lang['user']['last_run'] = 'Última execució';
$lang['user']['excludes'] = 'Exclosos';
$lang['user']['interval'] = 'Intèrval';
$lang['user']['active'] = 'Actiu';
$lang['user']['action'] = 'Acció';
$lang['user']['edit'] = 'Editar';
$lang['user']['remove'] = 'Esborrar';
$lang['user']['create_syncjob'] = 'Afegir treball de sincronitzaió';
$lang['start']['mailcow_apps_detail'] = 'Tria una aplicació (de moment només SOGo) per a accedir als teus correus, calendari, contactes i més.';
$lang['start']['mailcow_panel_detail'] = "Els <b>administradors del domini</b> poden crear, modificar o esborrar bústies i àlies, configurar i obtenir informació detallada sobre els seus dominis<br>
Els <b>usuaris d'e-mail</b> poden crear àlies temporals (spam àlies), canviar la seva contrasenya i la configuració del seu filtre anti-spam.";
$lang['start']['help'] = "Mostrar/Ocultar panell d'ajuda";
$lang['header']['mailcow_settings'] = 'Configuració';
$lang['header']['administration'] = 'Administració';
$lang['header']['mailboxes'] = 'Bústies';
$lang['header']['user_settings'] = "Preferències d'usuari";
$lang['mailbox']['domain'] = 'Domini';
$lang['mailbox']['spam_aliases'] = 'Temp. àlies';
$lang['mailbox']['multiple_bookings'] = 'Múltiples reserves';
$lang['mailbox']['kind'] = 'Tipus';
$lang['mailbox']['description'] = 'Descripció';
$lang['mailbox']['alias'] = 'Àlies';
$lang['mailbox']['aliases'] = 'Àlies';
$lang['mailbox']['domains'] = 'Dominis';
$lang['mailbox']['mailboxes'] = 'Bústies';
$lang['mailbox']['resources'] = 'Recursos';
$lang['mailbox']['mailbox_quota'] = 'Mida màx. de quota';
$lang['mailbox']['domain_quota'] = 'Quota';
$lang['mailbox']['active'] = 'Actiu';
$lang['mailbox']['action'] = 'Acció';
$lang['mailbox']['backup_mx'] = 'Backup MX';
$lang['mailbox']['domain_aliases'] = 'Àlies de domini';
$lang['mailbox']['target_domain'] = 'Domini destí';
$lang['mailbox']['target_address'] = 'Direcció Goto';
$lang['mailbox']['username'] = "Nom d'usuari";
$lang['mailbox']['fname'] = 'Nom complert';
$lang['mailbox']['filter_table'] = 'Filtrar taula';
$lang['mailbox']['yes'] = '&#10004;';
$lang['mailbox']['no'] = '&#10008;';
$lang['mailbox']['in_use'] = 'En ús (%)';
$lang['mailbox']['msg_num'] = 'Missatge #';
$lang['mailbox']['remove'] = 'Esborrar';
$lang['mailbox']['edit'] = 'Editar';
$lang['mailbox']['no_record'] = "No hi ha cap registre per l'objecte %s";
$lang['mailbox']['no_record_single'] = "No hi ha cap registre";
$lang['mailbox']['add_domain'] = 'Afegir domini';
$lang['mailbox']['add_domain_alias'] = 'Afegir àlies de domini';
$lang['mailbox']['add_mailbox'] = 'Afegir bústia';
$lang['mailbox']['add_resource'] = 'Afegir recurs';
$lang['mailbox']['add_alias'] = 'Afegir àlies';
$lang['mailbox']['add_domain_record_first'] = 'Primer afegeix un domini';
$lang['mailbox']['empty'] = 'Cap resultat';
$lang['mailbox']['toggle_all'] = "Tots";
$lang['mailbox']['quick_actions'] = 'Accions';
$lang['mailbox']['activate'] = 'Activar';
$lang['mailbox']['deactivate'] = 'Desactivar';
$lang['mailbox']['owner'] = 'Propietari';
$lang['mailbox']['mins_interval'] = 'Intèrval (min)';
$lang['mailbox']['last_run'] = 'Última execució';
$lang['mailbox']['excludes'] = 'Exclou';
$lang['mailbox']['last_run_reset'] = 'Executar a continuació';
$lang['mailbox']['sieve_info'] = 'Podeu emmagatzemar diversos filtres per usuari, però només un filtre previ i un filtre posterior poden estar actius al mateix temps.<br>
Cada filtre es processarà en l\'ordre descrit. Ni un script que falli, ni un "keep" emès farà que es deixin de processar els altres scripts.<br>
Filtre previ Filtre d\'usuari → Filtre posterior → <a href="https://github.com/mailcow/mailcow-dockerized/blob/master/data/conf/dovecot/sieve_after" target="_blank">Filtre global</a>';
$lang['info']['no_action'] = 'No hi ha cap acció aplicable';
$lang['edit']['syncjob'] = 'Sync job';
$lang['edit']['username'] = 'Usuari';
$lang['edit']['hostname'] = 'Host';
$lang['edit']['encryption'] = 'Xifrat';
$lang['edit']['maxage'] = 'Salta missatges més vells del número de dies<br><small>(0 = no salta res)</small>';
$lang['edit']['maxbytespersecond'] = 'Màx. bytes per segon<br><small>(0 = il.limitat)</small>';
$lang['edit']['automap'] = 'Provar de mapejar automàticament ("Sent items", "Sent" => "Sent" etc.)';
$lang['edit']['skipcrossduplicates'] = 'Saltar missatges duplicats entre carpetes (només es desa el primer)';
$lang['add']['automap'] = $lang['edit']['automap'];
$lang['add']['skipcrossduplicates'] = $lang['edit']['skipcrossduplicates'];
$lang['edit']['subfolder2'] = 'Sincronitza a la subcarpeta destí<br><small>(buit = no usar subcarpeta)</small>';
$lang['edit']['mins_interval'] = 'Intèrval (min)';
$lang['edit']['exclude'] = 'Excloure els objectes (regex)';
$lang['edit']['save'] = 'Desar els canvis';
$lang['edit']['max_mailboxes'] = 'Màx. bústies possibles:';
$lang['edit']['title'] = "Editar l'objecte";
$lang['edit']['target_address'] = 'Direcció/ns goto <small>(separades per coma)</small>:';
$lang['edit']['active'] = 'Actiu';
$lang['edit']['force_pw_update'] = "Forçar l'actualització de la contrassenya al proper login";
$lang['edit']['force_pw_update_info'] = 'Aquest usuari només podrà accedir a la interfície de gestió.';
$lang['edit']['target_domain'] = 'Domini destí:';
$lang['edit']['password'] = 'Contrasenya:';
$lang['edit']['password_repeat'] = 'Confirmació de contrasenya (repetir):';
$lang['edit']['domain_admin'] = 'Editar administrador del domini';
$lang['edit']['domain'] = 'Editar domini';
$lang['edit']['edit_alias_domain'] = 'Editar àlies de domini';
$lang['edit']['domains'] = 'Dominis';
$lang['edit']['alias'] = 'Editar àlies';
$lang['edit']['mailbox'] = 'Editar bustia';
$lang['edit']['description'] = 'Descripció:';
$lang['edit']['max_aliases'] = 'Màx. àlies:';
$lang['edit']['max_quota'] = 'Màx. quota per bústia (MiB):';
$lang['edit']['domain_quota'] = 'Quota de domini:';
$lang['edit']['backup_mx_options'] = 'Opcions backup MX:';
$lang['edit']['relay_domain'] = 'Domini de retransmisió (relay)';
$lang['edit']['relay_all'] = 'Retransmetre tods els recipients';
$lang['edit']['relay_all_info'] = "<small>Si tries <b>no</b> retransmetre a tods els recipients, necessitàs afegir una bústia \"blind\"(\"cega\") per cada recipient que s'hagi de retransmetre.</small>";
$lang['edit']['full_name'] = 'Nom complet';
$lang['edit']['quota_mb'] = 'Quota (MiB)';
$lang['edit']['sender_acl'] = 'Permetre enviar com a';
$lang['edit']['previous'] = 'Pàgina anterior';
$lang['edit']['unchanged_if_empty'] = 'Si no hay cambios dejalo en blanco';
$lang['edit']['dont_check_sender_acl'] = 'No verifiques remitente para el dominio %s';
$lang['edit']['multiple_bookings'] = 'Reserves múltiples';
$lang['edit']['kind'] = 'Tipus';
$lang['edit']['resource'] = 'Recurs';
$lang['add']['syncjob'] = 'Afegir sync job';
$lang['add']['syncjob_hint'] = 'Tingues en compte que les contrasenyes es desen sense xifrar!';
$lang['add']['hostname'] = 'Hostname';
$lang['add']['port'] = 'Port';
$lang['add']['username'] = 'Username';
$lang['add']['enc_method'] = 'Mètode de xifrat';
$lang['add']['mins_interval'] = 'Intèrval (minuts)';
$lang['add']['exclude'] = $lang['edit']['exclude'];
$lang['add']['delete2duplicates'] = 'Eliminar els duplicats al destí';
$lang['add']['delete1'] = "Esborrar de l'origen un cop s'han copiat";
$lang['add']['delete2'] = "Esborrar els missatges a destí que no son al origen";
$lang['edit']['delete2duplicates'] = $lang['add']['delete2duplicates'];
$lang['edit']['delete1'] = $lang['add']['delete1'];
$lang['edit']['delete2'] = $lang['add']['delete2'];
$lang['add']['domain'] = 'Domini';
$lang['add']['active'] = 'Actiu';
$lang['add']['multiple_bookings'] = 'Reserves múltiples';
$lang['add']['description'] = 'Descripció:';
$lang['add']['max_aliases'] = 'Màx. àlies possibles:';
$lang['add']['max_mailboxes'] = 'Màx. bústies possibles:';
$lang['add']['mailbox_quota_m'] = 'Màx. quota per bústia (MiB):';
$lang['add']['domain_quota_m'] = 'Quota total del domini (MiB):';
$lang['add']['backup_mx_options'] = $lang['edit']['backup_mx_options'];
$lang['add']['relay_all'] = $lang['edit']['relay_all'];
$lang['add']['relay_domain'] = $lang['edit']['relay_domain'];
$lang['add']['relay_all_info'] = $lang['edit']['relay_all_info'];
$lang['add']['alias_address'] = 'Dirección/es àlies:';
$lang['add']['alias_address_info'] = '<small>Adreces de correu completes, o @exemple.com per a atrapar tots els missatges per a un domini (separats per coma). <b>Només dominis interns</b>.</small>';
$lang['add']['alias_domain_info'] = '<small>Només noms de domini vàlids (separats per coma).</small>';
$lang['add']['target_address'] = 'Adreces goto:';
$lang['add']['target_address_info'] = '<small>Adreces de corru completes (separades per coma).</small>';
$lang['add']['alias_domain'] = 'Domini àlies';
$lang['add']['select'] = 'Si et plau selecciona...';
$lang['add']['target_domain'] = 'Domini destí:';
$lang['add']['kind'] = 'Kind';
$lang['add']['mailbox_username'] = "Nom d'usuari (part de l'esquerra de l'adreça @):";
$lang['add']['full_name'] = 'Nom complet:';
$lang['add']['quota_mb'] = 'Quota (MiB):';
$lang['add']['select_domain'] = 'Si et plau, primer selecciona un domini';
$lang['add']['password'] = 'Constrasenya:';
$lang['add']['password_repeat'] = 'Confirmació de contrasenya (repetir):';
$lang['add']['restart_sogo_hint'] = "Necessites reiniciar el contenidor del servei SOGo després d'afegir un nou domini";
$lang['add']['goto_null'] = 'Descartar mail silenciosament';
$lang['add']['validation_success'] = 'Validated successfully';
$lang['add']['activate_filter_warn'] = 'All other filters will be deactivated, when active is checked.';
$lang['add']['validate'] = 'Validar';
$lang['mailbox']['add_filter'] = 'Afegir filter';
$lang['add']['sieve_desc'] = 'Short description';
$lang['edit']['sieve_desc'] = 'Short description';
$lang['add']['sieve_type'] = 'Filter type';
$lang['edit']['sieve_type'] = 'Filter type';
$lang['mailbox']['set_prefilter'] = 'Mark as prefilter';
$lang['mailbox']['set_postfilter'] = 'Mark as postfilter';
$lang['mailbox']['filters'] = 'Filtres';
$lang['mailbox']['sync_jobs'] = 'Sync jobs';
$lang['mailbox']['inactive'] = 'Inactiu';
$lang['edit']['validate_save'] = 'Validar i desar';
$lang['login']['username'] = "Nom d'usuari";
$lang['login']['password'] = 'Contrasenya';
$lang['login']['login'] = 'Inici de sessió';
$lang['login']['delayed'] = "Pots iniciar de sessió passats %s segons.";
$lang['tfa']['tfa'] = "Autenticació de dos factors";
$lang['tfa']['set_tfa'] = "Definir el mètode d'autenticació de dos factors";
$lang['tfa']['yubi_otp'] = "Autenticació OTP de Yubico";
$lang['tfa']['key_id'] = "Un identificador per la teva YubiKey";
$lang['tfa']['key_id_totp'] = "Un identificador per la teva clau";
$lang['tfa']['api_register'] = 'mailcow fa servir la Yubico Cloud API. Obté una API key per la teva clau <a href="https://upgrade.yubico.com/getapikey/" target="_blank">aquí</a>';
$lang['tfa']['u2f'] = "Autenticació U2F";
$lang['tfa']['none'] = "Desactivar";
$lang['tfa']['delete_tfa'] = "Desactivar TFA";
$lang['tfa']['disable_tfa'] = "Desactivar TFA fins al següent login";
$lang['tfa']['confirm'] = "Confirma";
$lang['tfa']['totp'] = "OTP basat en temps (Google Authenticator etc.)";
$lang['tfa']['select'] = "Si et plau, selecciona";
$lang['tfa']['waiting_usb_auth'] = "<i>Esperant el dispositiu USB...</i><br><br>Apreta el botó del teu dispositiu USB U2F ara.";
$lang['tfa']['waiting_usb_register'] = "<i>Esperant el dispositiu USB...</i><br><br>Posa el teu password i confirma el registre del teu U2F apretant el botó del teu dispositiiu USB U2F.";
$lang['tfa']['scan_qr_code'] = "Escaneja el codi següent amb la teva app d'autenticació o entra'l manualment.";
$lang['tfa']['enter_qr_code'] = "El teu codi TOTP, si el teu dispositiu no pot escanejar codis QR";
$lang['tfa']['confirm_totp_token'] = "Confirma els canvis introduint el codi generat";
$lang['admin']['no_new_rows'] = 'No hi ha més files';
$lang['admin']['additional_rows'] = ' files addicionals afegides'; // parses to 'n additional rows were added'
$lang['admin']['private_key'] = 'Clau privada';
$lang['admin']['import'] = 'Importar';
$lang['admin']['import_private_key'] = 'Importar clau privada';
$lang['admin']['f2b_parameters'] = 'Fail2ban';
$lang['admin']['f2b_ban_time'] = 'Temsp de bloqueig (s)';
$lang['admin']['f2b_max_attempts'] = 'Intents màx.';
$lang['admin']['f2b_retry_window'] = 'Finestra de reintent (s) per intents màx.';
$lang['admin']['f2b_netban_ipv4'] = 'Suxarxa IPv4 on aplicar el bloqueig (8-32)';
$lang['admin']['f2b_netban_ipv6'] = 'Suxarxa IPv6 on aplicar el bloqueig (8-128)';
$lang['admin']['f2b_whitelist'] = 'Llista blanca de xarxes/hosts';
$lang['admin']['search_domain_da'] = 'Buscar dominis';
$lang['admin']['dkim_key_length'] = 'Mida de la clau DKIM (bits)';
$lang['admin']['dkim_key_valid'] = 'Vàlida';
$lang['admin']['dkim_key_unused'] = 'No es fa servir';
$lang['admin']['dkim_key_missing'] = 'No té clau';
$lang['admin']['dkim_add_key'] = 'Afegir registre ARC/DKIM';
$lang['admin']['dkim_keys'] = 'Registres ARC/DKIM';
$lang['admin']['add'] = 'Afegir';
$lang['add']['add_domain_restart'] = 'Afegir el domini i reiniciar SOGo';
$lang['add']['add_domain_only'] = 'Afegir el domini';
$lang['admin']['configuration'] = 'Configuració';
$lang['admin']['password'] = 'Contrasenya';
$lang['admin']['password_repeat'] = 'Confirmació de la contrasenya (repetir)';
$lang['admin']['active'] = 'Actiu';
$lang['admin']['inactive'] = 'Inactiu';
$lang['admin']['action'] = 'Acció';
$lang['admin']['add_domain_admin'] = 'Afegir Administrador del dominio';
$lang['admin']['admin_domains'] = 'Asignaciones de dominio';
$lang['admin']['domain_admins'] = 'Administradores de dominio';
$lang['admin']['username'] = "Nom d'usuari";
$lang['admin']['edit'] = 'Editar';
$lang['admin']['remove'] = 'Esborrar';
$lang['admin']['save'] = 'Desar els canvis';
$lang['admin']['admin'] = 'Administrador';
$lang['admin']['admin_details'] = "Editar detalls de l'administrador";
$lang['admin']['unchanged_if_empty'] = "Si no hi ha canvis, deixa'l en blanc";
$lang['admin']['yes'] = '&#10004;';
$lang['admin']['no'] = '&#10008;';
$lang['admin']['access'] = 'Accés';
$lang['admin']['no_record'] = 'Cap registre';
$lang['admin']['filter_table'] = 'Filtrar taula';
$lang['admin']['empty'] = 'Sense resultats';
$lang['admin']['refresh'] = 'Refrescar';
$lang['admin']['to_top'] = 'Tornar a dalt';
$lang['admin']['in_use_by'] = 'En ús per';
$lang['admin']['refresh'] = 'Refrescar';
$lang['admin']['to_top'] = 'Tornar a dalt';
$lang['admin']['in_use_by'] = 'En ús per';
$lang['admin']['forwarding_hosts'] = 'Forwarding Hosts';
$lang['admin']['forwarding_hosts_hint'] = "Els missatges entrants s'accepten de forma incondicional a qualsevol host que apareix aquí. Aquests hosts no es comproven a cap DNSBL ni estan sotmesos a greylisting. El spam rebut mai no es rebutja, però opcionalment es pot arxivar a la carpeta Junk. L'ús més comú d'això és especificar altres servidors de correu en els quals s'ha configurat una regla que reenvia correus electrònics entrants a aquest servidor";
$lang['admin']['forwarding_hosts_add_hint'] = "Podeu especificar adreces IPv4/IPv6, xarxes en notació CIDR, noms de host (que es resoldran a adreces IP) o noms de domini (que es resoldran a les adreces IP consultant els registres SPF o, si no n'hi ha, registres MX ).";
$lang['admin']['relayhosts_hint'] = 'Defineix aquí els relayhosts per després poder-los seleccionar als dominis.';
$lang['admin']['add_relayhost_add_hint'] = "Tingues en compte que les dades d'autenticació al relayhost es desaran sense xifrar.";
$lang['admin']['host'] = 'Host';
$lang['admin']['source'] = 'Origen';
$lang['admin']['add_forwarding_host'] = 'Afegir Forwarding Host';
$lang['admin']['add_relayhost'] = 'Afegir Relayhost';
$lang['success']['forwarding_host_removed'] = "Forwarding host %s esborrat";
$lang['success']['forwarding_host_added'] = "Forwarding host %s afegit";
$lang['success']['relayhost_removed'] = "Relayhost %s esborrat";
$lang['success']['relayhost_added'] = "Relayhost %s afegit";
$lang['diagnostics']['dns_records'] = 'Registres DNS';
$lang['diagnostics']['dns_records_24hours'] = "Tingues en compte que els canvis realitzats als DNS poden trigar fins a 24 hores a reflectir correctament el seu estat actual en aquesta pàgina. Es tracta d'una manera de veure fàcilment com configurar els registres DNS i comprovar si tots els registres DNS son correctes.";
$lang['diagnostics']['dns_records_name'] = 'Nom';
$lang['diagnostics']['dns_records_type'] = 'Tipus';
$lang['diagnostics']['dns_records_data'] = 'Valor correcte';
$lang['diagnostics']['dns_records_status'] = 'Valor actual';
$lang['diagnostics']['optional'] = 'Aquest registre és opcional.';
$lang['diagnostics']['cname_from_a'] = 'Valor derivat de registre A/AAAA. Això és compatible sempre que el registre assenyali el recurs correcte.';
$lang['admin']['relay_from'] = '"From:" adreça';
$lang['admin']['api_allow_from'] = "Permetre l'accés a la API des d'aquestes IPs";
$lang['admin']['api_key'] = "API key";
$lang['admin']['activate_api'] = "Activar API";
$lang['admin']['regen_api_key'] = "Regenerar API key";
$lang['admin']['quarantaine'] = "Quarantena";
$lang['admin']['quarantaine_retention_size'] = "Retentions per mailbox:";
$lang['admin']['quarantaine_max_size'] = "Mida màxima en MiB (més grans es descarten):";
$lang['admin']['quarantaine_exclude_domains'] = "Excloure els dominis i àlies de domini:";
$lang['admin']['ui_texts'] = "Etiquetes i textos de la UI";
$lang['admin']['help_text'] = "Text alternatiu per a l'ajuda de sota la casella de login (es permet HTML)";
$lang['admin']['title_name'] = 'Nom del lloc "mailcow UI"';
$lang['admin']['main_name'] = 'Nom de "mailcow UI"';
$lang['admin']['apps_name'] = 'Nom de "mailcow Apps"';
$lang['admin']['customize'] = "Personalitzar";
$lang['admin']['change_logo'] = "Canviar el logo";
$lang['admin']['logo_info'] = "La vostra imatge es reduirà a una alçada de 40 píxels per a la barra de navegació superior i un màx. ample de 250 px per a la pàgina d'inici. És molt recomanable un gràfic escalable";
$lang['admin']['upload'] = "Pujar";
$lang['admin']['app_links'] = "Enllaços a App";
$lang['admin']['app_name'] = "Nom de la App";
$lang['admin']['link'] = "Enllaç";
$lang['admin']['remove_row'] = "Eliminar fila";
$lang['admin']['add_row'] = "Afegir fila";
$lang['admin']['reset_default'] = "Restablir";
$lang['admin']['merged_vars_hint'] = 'Les files en gris venen de <code>vars.(local.)inc.php</code> i no es poden modificar.';
$lang['mailbox']['waiting'] = "Esperant";
$lang['mailbox']['status'] = "Estat";
$lang['mailbox']['running'] = "Executant-se";
$lang['edit']['spam_score'] = "Especifica una puntuació de spam";
$lang['edit']['spam_policy'] = "Afegeix o treu elementes a la white-/blacklist";
$lang['edit']['spam_alias'] = "Crear o canviar alies temporals limitats per temps";
$lang['danger']['img_tmp_missing'] = "No s'ha validat el fitxer de la imatge: el fitxer temporal no s'ha trobat";
$lang['danger']['img_invalid'] = "No s'ha validat el fitxer de la imatge";
$lang['danger']['invalid_mime_type'] = "Mime type invàlid";
$lang['success']['upload_success'] = "El fitxer s'ha pujat";
$lang['success']['app_links'] = "S'han desat els canvis als enallaços a App";
$lang['success']['ui_texts'] = "S'han desat els canvis als noms de App";
$lang['success']['reset_main_logo'] = "Restablir el logo per defecte";
$lang['success']['items_released'] = "S'han alliberat els elements seleccionats";
$lang['danger']['imagick_exception'] = "Error: exepció de Imagick mentre es llegia la imatge";
$lang['quarantine']['quarantine'] = "Quarantena";
$lang['quarantine']['qinfo'] = "El sistema de quarantena desa a la base de dades els missatges que han estat refusats. El missatge, al emissor, li consta com a <em>no</em> lliurat.";
$lang['quarantine']['release'] = "Alliberar";
$lang['quarantine']['empty'] = 'No hi ha elements';
$lang['quarantine']['toggle_all'] = 'Marcar tots';
$lang['quarantine']['quick_actions'] = 'Accions';
$lang['quarantine']['remove'] = 'Esborrar';
$lang['quarantine']['received'] = "Rebut";
$lang['quarantine']['action'] = "Acció";
$lang['quarantine']['rcpt'] = "Receptor";
$lang['quarantine']['rcpt'] = "Recipient";
$lang['quarantine']['qid'] = "Rspamd QID";
$lang['quarantine']['sender'] = "Emissor";
$lang['quarantine']['show_item'] = "Mostrar";
$lang['quarantine']['check_hash'] = "Comprovar el hash del fitxer a VT";
$lang['quarantine']['qitem'] = "Element en quarantena";
$lang['quarantine']['subj'] = "Assumpte";
$lang['quarantine']['text_plain_content'] = "Contingut (text/plain)";
$lang['quarantine']['text_from_html_content'] = "Contingut (a partir del HTML)";
$lang['quarantine']['atts'] = "Adjunts";
$lang['header']['quarantine'] = "Quarantena";
$lang['header']['debug'] = "Debug";
$lang['quarantine']['release_body'] = "Hem adjuntat el teu missatge com a eml en aquest missatge.";
$lang['danger']['release_send_failed'] = "No s'ha pogut alliberar el missatge: %s";
$lang['quarantine']['release_subject'] = "Element potencialment perillós %s en quarantena";
$lang['mailbox']['bcc_map_type'] = "BCC type";
$lang['mailbox']['bcc_type'] = "BCC type";
$lang['mailbox']['bcc_sender_map'] = "Sender map";
$lang['mailbox']['bcc_rcpt_map'] = "Recipient map";
$lang['mailbox']['bcc_local_dest'] = "Destinació local";
$lang['mailbox']['bcc_destinations'] = "Destí/ns BCC";
$lang['mailbox']['bcc'] = "BCC";
$lang['mailbox']['bcc_maps'] = "BCC maps";
$lang['mailbox']['bcc_to_sender'] = "Canviar a 'Sender map'";
$lang['mailbox']['bcc_to_rcpt'] = "Canviar a 'Recipient map'";
$lang['mailbox']['add_bcc_entry'] = "Afegir BCC map";
$lang['mailbox']['bcc_info'] = "Els 'BCC maps' s'utilitzen per enviar còpies silencioses de tots els missatges a una altra adreça. S'utilitza una entrada del tipus 'Recipient map' quan la destinació local actua com a destinatari d'un correu. Els 'Sender map' segueixen el mateix principi.<br/>
La destinació local no serà informada sobre un lliurament fallit.";
$lang['mailbox']['address_rewriting'] = "Re-escriptura d'adreces";
$lang['mailbox']['recipient_maps'] = 'Recipient maps';
$lang['mailbox']['recipient_map_info'] = "Els 'Recipient maps' es fan servir per canviar l'adreça del destinatari abans de lliurar el missatge";
$lang['mailbox']['recipient_map_old'] = 'Destinatari original';
$lang['mailbox']['recipient_map_new'] = 'Nou destinatari';
$lang['mailbox']['add_recipient_map_entry'] = "Afegir 'Recipient map'";
$lang['mailbox']['add_sender_map_entry'] = "Afegir 'Sender map'";

View File

@ -14,16 +14,10 @@ $lang['footer']['delete_these_items'] = 'Sind Sie sicher, dass die Änderungen a
$lang['footer']['delete_now'] = 'Jetzt löschen'; $lang['footer']['delete_now'] = 'Jetzt löschen';
$lang['footer']['cancel'] = 'Abbrechen'; $lang['footer']['cancel'] = 'Abbrechen';
$lang['dkim']['confirm'] = 'Sind Sie sicher?';
$lang['danger']['dkim_not_found'] = 'DKIM-Key nicht gefunden';
$lang['danger']['dkim_remove_failed'] = 'Kann DKIM-Key nicht entfernen';
$lang['danger']['dkim_add_failed'] = 'Kann DKIM-Key nicht hinzufügen';
$lang['danger']['dkim_domain_or_sel_invalid'] = 'DKIM-Domain oder -Selector nicht korrekt'; $lang['danger']['dkim_domain_or_sel_invalid'] = 'DKIM-Domain oder -Selector nicht korrekt';
$lang['danger']['dkim_key_length_invalid'] = 'DKIM Schlüssellänge ungültig';
$lang['success']['dkim_removed'] = 'DKIM-Key wurde entfernt'; $lang['success']['dkim_removed'] = 'DKIM-Key wurde entfernt';
$lang['success']['dkim_added'] = 'DKIM-Key wurde hinzugefügt'; $lang['success']['dkim_added'] = 'DKIM-Key wurde hinzugefügt';
$lang['danger']['access_denied'] = 'Zugriff verweigert oder unvollständige/ungültige Daten'; $lang['danger']['access_denied'] = 'Zugriff verweigert oder unvollständige/ungültige Daten';
$lang['danger']['whitelist_from_invalid'] = 'Whitelist-Eintrag ist ungültig';
$lang['danger']['domain_invalid'] = 'Domainname ist ungültig'; $lang['danger']['domain_invalid'] = 'Domainname ist ungültig';
$lang['danger']['mailbox_quota_exceeds_domain_quota'] = 'Maximale Größe für Mailboxen überschreitet das Domain Speicherlimit'; $lang['danger']['mailbox_quota_exceeds_domain_quota'] = 'Maximale Größe für Mailboxen überschreitet das Domain Speicherlimit';
$lang['danger']['object_is_not_numeric'] = 'Wert %s ist nicht numerisch'; $lang['danger']['object_is_not_numeric'] = 'Wert %s ist nicht numerisch';
@ -50,19 +44,13 @@ $lang['success']['mailbox_modified'] = 'Änderungen an Mailbox %s wurden gespeic
$lang['success']['resource_modified'] = "Änderungen an Ressource %s wurden gespeichert"; $lang['success']['resource_modified'] = "Änderungen an Ressource %s wurden gespeichert";
$lang['success']['object_modified'] = "Änderungen an Objekt %s wurden gespeichert"; $lang['success']['object_modified'] = "Änderungen an Objekt %s wurden gespeichert";
$lang['success']['f2b_modified'] = "Änderungen an Fail2ban Parametern wurden gespeichert"; $lang['success']['f2b_modified'] = "Änderungen an Fail2ban Parametern wurden gespeichert";
$lang['success']['msg_size_saved'] = 'Limit wurde gesetzt';
$lang['danger']['aliasd_not_found'] = 'Alias-Domain nicht gefunden';
$lang['danger']['targetd_not_found'] = 'Ziel-Domain nicht gefunden'; $lang['danger']['targetd_not_found'] = 'Ziel-Domain nicht gefunden';
$lang['danger']['aliasd_exists'] = 'Alias-Domain existiert bereits';
$lang['success']['aliasd_added'] = 'Alias-Domain %s wurde angelegt'; $lang['success']['aliasd_added'] = 'Alias-Domain %s wurde angelegt';
$lang['success']['aliasd_modified'] = 'Änderungen an Alias-Domain %s wurden gespeichert'; $lang['success']['aliasd_modified'] = 'Änderungen an Alias-Domain %s wurden gespeichert';
$lang['success']['domain_modified'] = 'Änderungen an Domain %s wurden gespeichert'; $lang['success']['domain_modified'] = 'Änderungen an Domain %s wurden gespeichert';
$lang['success']['domain_admin_modified'] = 'Änderungen an Domain-Administrator %s wurden gespeichert'; $lang['success']['domain_admin_modified'] = 'Änderungen an Domain-Administrator %s wurden gespeichert';
$lang['success']['domain_admin_added'] = 'Domain-Administrator %s wurde angelegt'; $lang['success']['domain_admin_added'] = 'Domain-Administrator %s wurde angelegt';
$lang['success']['changes_general'] = 'Änderungen wurden gespeichert';
$lang['success']['admin_modified'] = 'Änderungen am Administrator wurden gespeichert'; $lang['success']['admin_modified'] = 'Änderungen am Administrator wurden gespeichert';
$lang['danger']['exit_code_not_null'] = 'Fehler: Exit-Code ist %d';
$lang['danger']['mailbox_not_available'] = 'Mailbox nicht verfügbar';
$lang['danger']['username_invalid'] = 'Benutzername kann nicht verwendet werden'; $lang['danger']['username_invalid'] = 'Benutzername kann nicht verwendet werden';
$lang['danger']['password_mismatch'] = 'Passwort-Wiederholung stimmt nicht überein'; $lang['danger']['password_mismatch'] = 'Passwort-Wiederholung stimmt nicht überein';
$lang['danger']['password_complexity'] = 'Passwort entspricht nicht den Richtlinien'; $lang['danger']['password_complexity'] = 'Passwort entspricht nicht den Richtlinien';
@ -71,7 +59,6 @@ $lang['danger']['login_failed'] = 'Anmeldung fehlgeschlagen';
$lang['danger']['mailbox_invalid'] = 'Mailboxname ist ungültig'; $lang['danger']['mailbox_invalid'] = 'Mailboxname ist ungültig';
$lang['danger']['resource_invalid'] = 'Ressourcenname ist ungültig'; $lang['danger']['resource_invalid'] = 'Ressourcenname ist ungültig';
$lang['danger']['description_invalid'] = 'Ressourcenbeschreibung ist ungültig'; $lang['danger']['description_invalid'] = 'Ressourcenbeschreibung ist ungültig';
$lang['danger']['mailbox_invalid_suggest'] = 'Mailboxname ist ungültig, meinten Sie vielleicht %s?';
$lang['danger']['is_alias'] = '%s lautet bereits eine Alias-Adresse'; $lang['danger']['is_alias'] = '%s lautet bereits eine Alias-Adresse';
$lang['danger']['is_alias_or_mailbox'] = "Eine Mailbox, ein Alias oder eine sich aus einer Alias-Domain ergebende Adresse mit dem Namen %s ist bereits vorhanden"; $lang['danger']['is_alias_or_mailbox'] = "Eine Mailbox, ein Alias oder eine sich aus einer Alias-Domain ergebende Adresse mit dem Namen %s ist bereits vorhanden";
$lang['danger']['is_spam_alias'] = '%s lautet bereits eine Spam-Alias-Adresse'; $lang['danger']['is_spam_alias'] = '%s lautet bereits eine Spam-Alias-Adresse';
@ -96,20 +83,16 @@ $lang['danger']['mailboxes_in_use'] = 'Maximale Anzahl an Mailboxen muss größe
$lang['danger']['aliases_in_use'] = 'Maximale Anzahl an Aliassen muss größer oder gleich %d sein'; $lang['danger']['aliases_in_use'] = 'Maximale Anzahl an Aliassen muss größer oder gleich %d sein';
$lang['danger']['sender_acl_invalid'] = 'Sender ACL Wert muss eine Adresse oder Domain sein'; $lang['danger']['sender_acl_invalid'] = 'Sender ACL Wert muss eine Adresse oder Domain sein';
$lang['danger']['domain_not_empty'] = 'Kann nur leere Domains entfernen'; $lang['danger']['domain_not_empty'] = 'Kann nur leere Domains entfernen';
$lang['warning']['spam_alias_temp_error'] = 'Kann zur Zeit keinen Spam-Alias erstellen, bitte versuchen Sie es später noch einmal.';
$lang['danger']['spam_alias_max_exceeded'] = 'Maximale Anzahl an Spam-Alias-Adressen erreicht';
$lang['danger']['validity_missing'] = 'Bitte geben Sie eine Gültigkeitsdauer an'; $lang['danger']['validity_missing'] = 'Bitte geben Sie eine Gültigkeitsdauer an';
$lang['user']['loading'] = "Lade..."; $lang['user']['loading'] = "Lade...";
$lang['user']['force_pw_update'] = 'Das Passwort für diesen Benutzer <b>muss</b> geändert werden, damit die Zugriffssperre auf die Groupwarekomponenten wieder freigeschaltet wird.';
$lang['user']['active_sieve'] = "Aktiver Filter"; $lang['user']['active_sieve'] = "Aktiver Filter";
$lang['user']['show_sieve_filters'] = "Zeige aktiven Filter des Benutzers"; $lang['user']['show_sieve_filters'] = "Zeige aktiven Filter des Benutzers";
$lang['user']['no_active_filter'] = "Kein aktiver Filter vorhanden"; $lang['user']['no_active_filter'] = "Kein aktiver Filter vorhanden";
$lang['user']['on'] = 'Ein';
$lang['user']['off'] = 'Aus';
$lang['user']['messages'] = "Nachrichten"; $lang['user']['messages'] = "Nachrichten";
$lang['user']['in_use'] = "Verwendet"; $lang['user']['in_use'] = "Verwendet";
$lang['user']['user_change_fn'] = ''; $lang['user']['user_change_fn'] = '';
$lang['user']['user_settings'] = 'Benutzereinstellungen'; $lang['user']['user_settings'] = 'Benutzereinstellungen';
$lang['user']['mailbox_settings'] = 'Mailbox-Einstellungen';
$lang['user']['mailbox_details'] = 'Mailbox-Details'; $lang['user']['mailbox_details'] = 'Mailbox-Details';
$lang['user']['change_password'] = 'Passwort ändern'; $lang['user']['change_password'] = 'Passwort ändern';
$lang['user']['client_configuration'] = 'Konfigurationsanleitungen für E-Mail-Programme und Smartphones anzeigen'; $lang['user']['client_configuration'] = 'Konfigurationsanleitungen für E-Mail-Programme und Smartphones anzeigen';
@ -118,15 +101,12 @@ $lang['user']['save_changes'] = 'Änderungen speichern';
$lang['user']['password_now'] = 'Aktuelles Passwort (Änderungen bestätigen)'; $lang['user']['password_now'] = 'Aktuelles Passwort (Änderungen bestätigen)';
$lang['user']['new_password_repeat'] = 'Neues Passwort (Wiederholung)'; $lang['user']['new_password_repeat'] = 'Neues Passwort (Wiederholung)';
$lang['user']['new_password_description'] = 'Mindestanforderung: 6 Zeichen lang, Buchstaben und Zahlen.'; $lang['user']['new_password_description'] = 'Mindestanforderung: 6 Zeichen lang, Buchstaben und Zahlen.';
$lang['user']['did_you_know'] = '<b>Wussten Sie schon?</b> Sie können Ihre E-Mail-Adresse mit Tags versehen, etwa "ich+<b>Privat</b>@example.com", um Nachrichten automatisch in einem Unterordner (Beispiel: "Privat") abzulegen.';
$lang['user']['spam_aliases'] = 'Temporäre E-Mail Aliasse'; $lang['user']['spam_aliases'] = 'Temporäre E-Mail Aliasse';
$lang['user']['alias'] = 'Alias'; $lang['user']['alias'] = 'Alias';
$lang['user']['aliases'] = 'Aliasse';
$lang['user']['shared_aliases'] = 'Geteilte Alias-Adressen'; $lang['user']['shared_aliases'] = 'Geteilte Alias-Adressen';
$lang['user']['shared_aliases_desc'] = 'Geteilte Alias-Adressen werden nicht bei benutzerdefinierten Einstellungen wie die des Spam-Filters oder der Verschlüsselungsrichtlinie berücksichtigt. Entsprechende Spam-Filter können lediglich von einem Administrator vorgenommen werden.'; $lang['user']['shared_aliases_desc'] = 'Geteilte Alias-Adressen werden nicht bei benutzerdefinierten Einstellungen wie die des Spam-Filters oder der Verschlüsselungsrichtlinie berücksichtigt. Entsprechende Spam-Filter können lediglich von einem Administrator vorgenommen werden.';
$lang['user']['direct_aliases'] = 'Direkte Alias-Adressen'; $lang['user']['direct_aliases'] = 'Direkte Alias-Adressen';
$lang['user']['direct_aliases_desc'] = 'Nur direkte Alias-Adressen werden für benutzerdefinierte Einstellungen berücksichtigt.'; $lang['user']['direct_aliases_desc'] = 'Nur direkte Alias-Adressen werden für benutzerdefinierte Einstellungen berücksichtigt.';
$lang['user']['domain_aliases'] = 'Domain-Alias Adressen';
$lang['user']['is_catch_all'] = 'Ist Catch-All Adresse für Domain(s)'; $lang['user']['is_catch_all'] = 'Ist Catch-All Adresse für Domain(s)';
$lang['user']['aliases_also_send_as'] = 'Darf außerdem versenden als Benutzer'; $lang['user']['aliases_also_send_as'] = 'Darf außerdem versenden als Benutzer';
$lang['user']['aliases_send_as_all'] = 'Absender für folgende Domains und zugehörige Alias-Domains nicht prüfen'; $lang['user']['aliases_send_as_all'] = 'Absender für folgende Domains und zugehörige Alias-Domains nicht prüfen';
@ -136,7 +116,6 @@ $lang['user']['alias_valid_until'] = 'Gültig bis';
$lang['user']['alias_remove_all'] = 'Alle entfernen'; $lang['user']['alias_remove_all'] = 'Alle entfernen';
$lang['user']['alias_time_left'] = 'Zeit verbleibend'; $lang['user']['alias_time_left'] = 'Zeit verbleibend';
$lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T'; $lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['syncjob_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['alias_select_validity'] = 'Bitte Gültigkeit auswählen'; $lang['user']['alias_select_validity'] = 'Bitte Gültigkeit auswählen';
$lang['user']['sync_jobs'] = 'Sync Jobs'; $lang['user']['sync_jobs'] = 'Sync Jobs';
$lang['user']['hour'] = 'Stunde'; $lang['user']['hour'] = 'Stunde';
@ -173,8 +152,6 @@ $lang['user']['tls_enforce_in'] = 'TLS eingehend erzwingen';
$lang['user']['tls_enforce_out'] = 'TLS ausgehend erzwingen'; $lang['user']['tls_enforce_out'] = 'TLS ausgehend erzwingen';
$lang['user']['no_record'] = 'Kein Eintrag'; $lang['user']['no_record'] = 'Kein Eintrag';
$lang['user']['misc_settings'] = 'Sonstige Kontoeinstellungen';
$lang['user']['misc_delete_profile'] = 'Sonstige Kontoeinstellungen';
$lang['user']['tag_handling'] = 'Umgang mit getaggten E-Mails steuern'; $lang['user']['tag_handling'] = 'Umgang mit getaggten E-Mails steuern';
$lang['user']['tag_in_subfolder'] = 'In Unterordner'; $lang['user']['tag_in_subfolder'] = 'In Unterordner';
@ -189,7 +166,6 @@ $lang['user']['eas_reset_help'] = 'In vielen Fällen kann ein ActiveSync Profil
$lang['user']['encryption'] = 'Verschlüsselung'; $lang['user']['encryption'] = 'Verschlüsselung';
$lang['user']['username'] = 'Benutzername'; $lang['user']['username'] = 'Benutzername';
$lang['user']['password'] = 'Password';
$lang['user']['last_run'] = 'Letzte Ausführung'; $lang['user']['last_run'] = 'Letzte Ausführung';
$lang['user']['excludes'] = 'Ausschlüsse'; $lang['user']['excludes'] = 'Ausschlüsse';
$lang['user']['interval'] = 'Intervall'; $lang['user']['interval'] = 'Intervall';
@ -197,41 +173,19 @@ $lang['user']['active'] = 'Aktiv';
$lang['user']['action'] = 'Aktion'; $lang['user']['action'] = 'Aktion';
$lang['user']['edit'] = 'Bearbeiten'; $lang['user']['edit'] = 'Bearbeiten';
$lang['user']['remove'] = 'Entfernen'; $lang['user']['remove'] = 'Entfernen';
$lang['user']['delete_now'] = 'Sofort löschen';
$lang['user']['create_syncjob'] = 'Neuen Sync-Job erstellen'; $lang['user']['create_syncjob'] = 'Neuen Sync-Job erstellen';
$lang['start']['dashboard'] = '%s - Dashboard';
$lang['start']['start_rc'] = 'Roundcube öffnen';
$lang['start']['start_sogo'] = 'SOGo öffnen';
$lang['start']['mailcow_apps_detail'] = 'Verwenden Sie mailcow Apps, um E-Mails abzurufen, Kalender- und Kontakte zu verwalten und vieles mehr.'; $lang['start']['mailcow_apps_detail'] = 'Verwenden Sie mailcow Apps, um E-Mails abzurufen, Kalender- und Kontakte zu verwalten und vieles mehr.';
$lang['start']['mailcow_panel'] = 'mailcow UI starten';
$lang['start']['mailcow_panel_description'] = 'Die mailcow Steuerung steht sowohl für Administratoren als auch Mailbox-Benutzer zur Verfügung.';
$lang['start']['mailcow_panel_detail'] = '<b>Domain-Administratoren</b> erstellen, verändern oder löschen Mailboxen, verwalten die Domäne und sehen sonstige Einstellungen ein.<br> $lang['start']['mailcow_panel_detail'] = '<b>Domain-Administratoren</b> erstellen, verändern oder löschen Mailboxen, verwalten die Domäne und sehen sonstige Einstellungen ein.<br>
Als <b>Mailbox-Benutzer</b> erstellen Sie hier zeitlich limitierte Aliasse, ändern das Verhalten des Spamfilters, setzen ein neues Passwort und vieles mehr.'; Als <b>Mailbox-Benutzer</b> erstellen Sie hier zeitlich limitierte Aliasse, ändern das Verhalten des Spamfilters, setzen ein neues Passwort und vieles mehr.';
$lang['start']['recommended_config'] = 'Empfohlene Software-Konfiguration (ohne ActiveSync)';
$lang['start']['imap_smtp_server'] = 'IMAP- und SMTP-Server';
$lang['start']['imap_smtp_server_description'] = 'Für eine optimale Verbindung empfehlen wir die Verwendung des <a href="%s" target="_blank"><b>Mozilla Thunderbirds</b></a>.';
$lang['start']['imap_smtp_server_badge'] = 'E-Mail lesen und schreiben';
$lang['start']['imap_smtp_server_auth_info'] = 'Bitte verwenden Sie Ihre vollständige E-Mail-Adresse sowie das PLAIN-Authentifizierungsverfahren.<br> $lang['start']['imap_smtp_server_auth_info'] = 'Bitte verwenden Sie Ihre vollständige E-Mail-Adresse sowie das PLAIN-Authentifizierungsverfahren.<br>
Ihre Anmeldedaten werden durch die obligatorische Verschlüsselung entgegen des Begriffes "PLAIN" nicht unverschlüsselt übertragen.'; Ihre Anmeldedaten werden durch die obligatorische Verschlüsselung entgegen des Begriffes "PLAIN" nicht unverschlüsselt übertragen.';
$lang['start']['managesieve'] = 'ManageSieve';
$lang['start']['managesieve_badge'] = 'E-Mail-Filter';
$lang['start']['managesieve_description'] = 'Bitte verwenden Sie <b>Mozilla Thunderbirds</b> zusammen mit der <a style="text-decoration:none" target="_blank" href="%s"><b>Sieve Erweiterung</b></a>.<br>Nach dem Herunterladen der Erweiterung starten Sie Thunderbird, öffnen das Fenster für Erweiterungen und ziehen die heruntergeladene Datei in das offene Fenster.<br>Der Servername lautet <b>%s</b>, als Port konfigurieren Sie bitte <b>4190</b>. Die Anmeldedaten entsprechen dem E-Mail Login.';
$lang['start']['service'] = 'Dienstname';
$lang['start']['encryption'] = 'Verschlüsselungstyp';
$lang['start']['help'] = 'Hilfe ein-/ausblenden'; $lang['start']['help'] = 'Hilfe ein-/ausblenden';
$lang['start']['hostname'] = 'Hostname';
$lang['start']['port'] = 'Port';
$lang['start']['footer'] = '';
$lang['header']['mailcow_settings'] = 'Konfiguration'; $lang['header']['mailcow_settings'] = 'Konfiguration';
$lang['header']['administration'] = 'Administration'; $lang['header']['administration'] = 'Administration';
$lang['header']['mailboxes'] = 'Mailboxen'; $lang['header']['mailboxes'] = 'Mailboxen';
$lang['header']['user_settings'] = 'Benutzereinstellungen'; $lang['header']['user_settings'] = 'Benutzereinstellungen';
$lang['header']['diagnostics'] = 'Diagnose';
$lang['header']['login'] = 'Anmeldung';
$lang['header']['logged_in_as_logout'] = 'Eingeloggt als <b>%s</b> (abmelden)';
$lang['header']['logged_in_as_logout_dual'] = 'Eingeloggt als <b>%s <span class="text-info">[%s]</span></b>'; $lang['header']['logged_in_as_logout_dual'] = 'Eingeloggt als <b>%s <span class="text-info">[%s]</span></b>';
$lang['header']['locale'] = 'Sprache';
$lang['mailbox']['domain'] = 'Domain'; $lang['mailbox']['domain'] = 'Domain';
$lang['mailbox']['spam_aliases'] = 'Temp. Alias'; $lang['mailbox']['spam_aliases'] = 'Temp. Alias';
$lang['mailbox']['alias'] = 'Alias'; $lang['mailbox']['alias'] = 'Alias';
@ -240,12 +194,10 @@ $lang['mailbox']['multiple_bookings'] = 'Mehrfachbuchen';
$lang['mailbox']['kind'] = 'Art'; $lang['mailbox']['kind'] = 'Art';
$lang['mailbox']['description'] = 'Beschreibung'; $lang['mailbox']['description'] = 'Beschreibung';
$lang['mailbox']['resources'] = 'Ressourcen'; $lang['mailbox']['resources'] = 'Ressourcen';
$lang['mailbox']['resource_name'] = 'Ressourcenname';
$lang['mailbox']['domains'] = 'Domains'; $lang['mailbox']['domains'] = 'Domains';
$lang['mailbox']['mailboxes'] = 'Mailboxen'; $lang['mailbox']['mailboxes'] = 'Mailboxen';
$lang['mailbox']['mailbox_quota'] = 'Max. Größe einer Mailbox'; $lang['mailbox']['mailbox_quota'] = 'Max. Größe einer Mailbox';
$lang['mailbox']['domain_quota'] = 'Gesamtspeicher'; $lang['mailbox']['domain_quota'] = 'Gesamtspeicher';
$lang['mailbox']['ratelimit'] = 'Limit ausgehend/Stunde';
$lang['mailbox']['active'] = 'Aktiv'; $lang['mailbox']['active'] = 'Aktiv';
$lang['mailbox']['action'] = 'Aktion'; $lang['mailbox']['action'] = 'Aktion';
$lang['mailbox']['backup_mx'] = 'Backup MX'; $lang['mailbox']['backup_mx'] = 'Backup MX';
@ -257,14 +209,10 @@ $lang['mailbox']['fname'] = 'Name';
$lang['mailbox']['filter_table'] = 'Filtern'; $lang['mailbox']['filter_table'] = 'Filtern';
$lang['mailbox']['yes'] = '&#10004;'; $lang['mailbox']['yes'] = '&#10004;';
$lang['mailbox']['no'] = '&#10008;'; $lang['mailbox']['no'] = '&#10008;';
$lang['mailbox']['quota'] = 'Speicherplatz';
$lang['mailbox']['in_use'] = 'Prozentualer Gebrauch'; $lang['mailbox']['in_use'] = 'Prozentualer Gebrauch';
$lang['mailbox']['msg_num'] = 'Anzahl Nachrichten'; $lang['mailbox']['msg_num'] = 'Anzahl Nachrichten';
$lang['mailbox']['remove'] = 'Entfernen'; $lang['mailbox']['remove'] = 'Entfernen';
$lang['mailbox']['edit'] = 'Bearbeiten'; $lang['mailbox']['edit'] = 'Bearbeiten';
$lang['mailbox']['archive'] = 'Archiv-Zugriff';
$lang['mailbox']['no_record'] = 'Kein Eintrag für Objekt %s';
$lang['mailbox']['no_record_single'] = 'Kein Eintrag';
$lang['mailbox']['add_domain'] = 'Domain hinzufügen'; $lang['mailbox']['add_domain'] = 'Domain hinzufügen';
$lang['mailbox']['add_domain_alias'] = 'Domain-Alias hinzufügen'; $lang['mailbox']['add_domain_alias'] = 'Domain-Alias hinzufügen';
$lang['mailbox']['add_mailbox'] = 'Mailbox hinzufügen'; $lang['mailbox']['add_mailbox'] = 'Mailbox hinzufügen';
@ -284,21 +232,6 @@ Die Ausführung erfolgt in nachstehender Reihenfolge. Ein fehlgeschlagenes Scrip
Prefilter User scripts Postfilter <a href="https://github.com/mailcow/mailcow-dockerized/blob/master/data/conf/dovecot/sieve_after" target="_blank">global sieve postfilter</a>'; Prefilter User scripts Postfilter <a href="https://github.com/mailcow/mailcow-dockerized/blob/master/data/conf/dovecot/sieve_after" target="_blank">global sieve postfilter</a>';
$lang['info']['no_action'] = 'Keine Aktion anwendbar'; $lang['info']['no_action'] = 'Keine Aktion anwendbar';
$lang['delete']['title'] = 'Objekt entfernen';
$lang['delete']['remove_domain_warning'] = '<b>Warnung:</b> Sie entfernen die Domain <b>%s</b>!';
$lang['delete']['remove_domainalias_warning'] = '<b>Warnung:</b> Sie entfernen die Alias-Domain <b>%s</b>!';
$lang['delete']['remove_domainadmin_warning'] = '<b>Warnung:</b> Sie entfernen den Domain-Administrator <b>%s</b>!';
$lang['delete']['remove_alias_warning'] = '<b>Warnung:</b> Sie entfernen die Alias-Adresse <b>%s</b>!';
$lang['delete']['remove_syncjob_warning'] = '<b>Warnung:</b> Sie entfernen einen Sync-Job des Benutzers <b>%s</b>!';
$lang['delete']['remove_mailbox_warning'] = '<b>Warnung:</b> Sie entfernen die Mailbox <b>%s</b>!';
$lang['delete']['remove_mailbox_details'] = 'Die Mailbox wird <b>vollständig und permanent</b> entfernt!';
$lang['delete']['remove_resource_warning'] = '<b>Warnung:</b> Sie entfernen die Ressource <b>%s</b>!';
$lang['delete']['remove_resource_details'] = 'Die Ressource wird <b>vollständig und permanent</b> entfernt!';
$lang['delete']['remove_domain_details'] = 'Diese Aktion entfernt ebenfalls Domain-Aliasse.<br><br><b>Eine Domain muss leer sein, um entfernt zu werden.</b>';
$lang['delete']['remove_syncjob_details'] = 'Objekte dieses Sync-Jobs werden nicht mehr vom entfernten Server abgeholt.';
$lang['delete']['remove_alias_details'] = 'Benutzer werden keine Nachrichten mehr von dieser Adresse erhalten und versenden koennen!</b>';
$lang['delete']['remove_button'] = 'Entfernen';
$lang['delete']['previous'] = 'Vorherige Seite';
$lang['edit']['syncjob'] = 'Sync-Job bearbeiten'; $lang['edit']['syncjob'] = 'Sync-Job bearbeiten';
$lang['edit']['save'] = 'Änderungen speichern'; $lang['edit']['save'] = 'Änderungen speichern';
@ -311,26 +244,22 @@ $lang['edit']['mins_interval'] = 'Intervall (min)';
$lang['edit']['maxbytespersecond'] = 'Max. Übertragungsrate in Bytes/s (0 für unlimitiert)'; $lang['edit']['maxbytespersecond'] = 'Max. Übertragungsrate in Bytes/s (0 für unlimitiert)';
$lang['edit']['automap'] = 'Ordner automatisch mappen ("Sent items", "Sent" => "Sent" etc.)'; $lang['edit']['automap'] = 'Ordner automatisch mappen ("Sent items", "Sent" => "Sent" etc.)';
$lang['edit']['skipcrossduplicates'] = 'Duplikate auch über Ordner hinweg überspringen ("first come, first serve")'; $lang['edit']['skipcrossduplicates'] = 'Duplikate auch über Ordner hinweg überspringen ("first come, first serve")';
$lang['add']['maxbytespersecond'] = 'Max. Übertragungsrate in Bytes/s (0 für unlimitiert)';
$lang['add']['automap'] = 'Ordner automatisch mappen ("Sent items", "Sent" => "Sent" etc.)'; $lang['add']['automap'] = 'Ordner automatisch mappen ("Sent items", "Sent" => "Sent" etc.)';
$lang['add']['skipcrossduplicates'] = 'Duplikate auch über Ordner hinweg überspringen ("first come, first serve")'; $lang['add']['skipcrossduplicates'] = 'Duplikate auch über Ordner hinweg überspringen ("first come, first serve")';
$lang['edit']['exclude'] = 'Elemente ausschließen (Regex)'; $lang['edit']['exclude'] = 'Elemente ausschließen (Regex)';
$lang['edit']['archive'] = 'Archiv-Zugriff';
$lang['edit']['max_mailboxes'] = 'Max. Mailboxanzahl:'; $lang['edit']['max_mailboxes'] = 'Max. Mailboxanzahl:';
$lang['edit']['title'] = 'Objekt bearbeiten'; $lang['edit']['title'] = 'Objekt bearbeiten';
$lang['edit']['target_address'] = 'Ziel-Adresse(n) <small>(getrennt durch Komma)</small>:'; $lang['edit']['target_address'] = 'Ziel-Adresse(n) <small>(getrennt durch Komma)</small>:';
$lang['edit']['active'] = 'Aktiv'; $lang['edit']['active'] = 'Aktiv';
$lang['edit']['force_pw_update'] = 'Erzwinge Passwortänderung bei nächstem Login';
$lang['edit']['force_pw_update_info'] = 'Dem Benutzer wird lediglich der Zugang zur mailcow UI ermöglicht.';
$lang['edit']['target_domain'] = 'Ziel-Domain:'; $lang['edit']['target_domain'] = 'Ziel-Domain:';
$lang['edit']['password'] = 'Passwort:'; $lang['edit']['password'] = 'Passwort:';
$lang['edit']['ratelimit'] = 'Limit ausgehender Nachrichten/Stunde:';
$lang['danger']['ratelimt_less_one'] = 'Limit ausgehender Nachrichten/Stunde darf nicht kleiner als 1 sein';
$lang['edit']['password_repeat'] = 'Passwort (Wiederholung):'; $lang['edit']['password_repeat'] = 'Passwort (Wiederholung):';
$lang['edit']['domain_admin'] = 'Domain-Administrator bearbeiten'; $lang['edit']['domain_admin'] = 'Domain-Administrator bearbeiten';
$lang['edit']['domain'] = 'Domain bearbeiten'; $lang['edit']['domain'] = 'Domain bearbeiten';
$lang['edit']['edit_alias_domain'] = 'Alias-Domain bearbeiten'; $lang['edit']['edit_alias_domain'] = 'Alias-Domain bearbeiten';
$lang['edit']['alias_domain'] = 'Alias-Domain';
$lang['edit']['domains'] = 'Domains'; $lang['edit']['domains'] = 'Domains';
$lang['edit']['destroy'] = 'Manuelle Eingabe des Wertes';
$lang['edit']['alias'] = 'Alias bearbeiten'; $lang['edit']['alias'] = 'Alias bearbeiten';
$lang['edit']['mailbox'] = 'Mailbox bearbeiten'; $lang['edit']['mailbox'] = 'Mailbox bearbeiten';
$lang['edit']['description'] = 'Beschreibung:'; $lang['edit']['description'] = 'Beschreibung:';
@ -340,22 +269,16 @@ $lang['edit']['domain_quota'] = 'Domain Speicherplatz gesamt (MiB):';
$lang['edit']['backup_mx_options'] = 'Backup MX Optionen:'; $lang['edit']['backup_mx_options'] = 'Backup MX Optionen:';
$lang['edit']['relay_domain'] = 'Relay Domain'; $lang['edit']['relay_domain'] = 'Relay Domain';
$lang['edit']['relay_all'] = 'Alle Empfänger-Adressen relayen'; $lang['edit']['relay_all'] = 'Alle Empfänger-Adressen relayen';
$lang['edit']['dkim_signature'] = 'ARC + DKIM-Signatur:';
$lang['edit']['dkim_record_info'] = '<small>Bitte hinterlegen Sie einen TXT-Record mit obigem Wert in den DNS-Einstellungen Ihrer Domainverwaltung.</small>';
$lang['edit']['relay_all_info'] = '<small>Wenn Sie <b>nicht</b> alle Empfänger-Adressen relayen möchten, müssen Sie eine ("blinde") Mailbox für jede Adresse, die relayt werden soll, erstellen.</small>'; $lang['edit']['relay_all_info'] = '<small>Wenn Sie <b>nicht</b> alle Empfänger-Adressen relayen möchten, müssen Sie eine ("blinde") Mailbox für jede Adresse, die relayt werden soll, erstellen.</small>';
$lang['edit']['full_name'] = 'Voller Name'; $lang['edit']['full_name'] = 'Voller Name';
$lang['edit']['quota_mb'] = 'Speicherplatz (MiB)'; $lang['edit']['quota_mb'] = 'Speicherplatz (MiB)';
$lang['edit']['sender_acl'] = 'Darf Nachrichten versenden als'; $lang['edit']['sender_acl'] = 'Darf Nachrichten versenden als';
$lang['edit']['sender_acl_info'] = 'Aliasse sind nicht abwählbar und vorausgewählt.';
$lang['edit']['dkim_txt_name'] = 'TXT-Record Name:';
$lang['edit']['dkim_txt_value'] = 'TXT-Record Wert:';
$lang['edit']['previous'] = 'Vorherige Seite'; $lang['edit']['previous'] = 'Vorherige Seite';
$lang['edit']['unchanged_if_empty'] = 'Unverändert, wenn leer'; $lang['edit']['unchanged_if_empty'] = 'Unverändert, wenn leer';
$lang['edit']['dont_check_sender_acl'] = 'Absender für Domain %s u. Alias-Dom. nicht prüfen'; $lang['edit']['dont_check_sender_acl'] = 'Absender für Domain %s u. Alias-Dom. nicht prüfen';
$lang['edit']['multiple_bookings'] = 'Mehrfaches Buchen'; $lang['edit']['multiple_bookings'] = 'Mehrfaches Buchen';
$lang['edit']['kind'] = 'Art'; $lang['edit']['kind'] = 'Art';
$lang['edit']['resource'] = 'Ressource'; $lang['edit']['resource'] = 'Ressource';
$lang['edit']['goto_null'] = 'Nachrichten sofort verwerfen';
$lang['add']['syncjob'] = 'Sync-Job erstellen'; $lang['add']['syncjob'] = 'Sync-Job erstellen';
$lang['add']['syncjob_hint'] = 'Passwörter werden unverschlüsselt abgelegt!'; $lang['add']['syncjob_hint'] = 'Passwörter werden unverschlüsselt abgelegt!';
@ -363,8 +286,6 @@ $lang['add']['hostname'] = 'Servername';
$lang['add']['port'] = 'Port'; $lang['add']['port'] = 'Port';
$lang['add']['username'] = 'Benutzername'; $lang['add']['username'] = 'Benutzername';
$lang['add']['enc_method'] = 'Verschlüsselung'; $lang['add']['enc_method'] = 'Verschlüsselung';
$lang['add']['maxage'] = 'Maximales Alter von Nachrichten, welche vom Remote abgefragt werden (0 = Alter ignorieren)';
$lang['add']['subfolder2'] = 'Synchronisation in Unterordner am Ziel';
$lang['add']['mins_interval'] = 'Abrufintervall (Minuten)'; $lang['add']['mins_interval'] = 'Abrufintervall (Minuten)';
$lang['add']['exclude'] = 'Elemente ausschließen (Regex)'; $lang['add']['exclude'] = 'Elemente ausschließen (Regex)';
$lang['add']['delete2duplicates'] = 'Lösche Duplikate im Ziel'; $lang['add']['delete2duplicates'] = 'Lösche Duplikate im Ziel';
@ -374,11 +295,9 @@ $lang['edit']['delete2duplicates'] = 'Lösche Duplikate im Ziel';
$lang['edit']['delete1'] = 'Lösche Nachricht nach Übertragung vom Quell-Server'; $lang['edit']['delete1'] = 'Lösche Nachricht nach Übertragung vom Quell-Server';
$lang['edit']['delete2'] = 'Lösche Nachrichten von Ziel-Server, die nicht auf Quell-Server vorhanden sind'; $lang['edit']['delete2'] = 'Lösche Nachrichten von Ziel-Server, die nicht auf Quell-Server vorhanden sind';
$lang['add']['title'] = 'Objekt anlegen';
$lang['add']['domain'] = 'Domain'; $lang['add']['domain'] = 'Domain';
$lang['add']['active'] = 'Aktiv'; $lang['add']['active'] = 'Aktiv';
$lang['add']['multiple_bookings'] = 'Mehrfaches Buchen möglich'; $lang['add']['multiple_bookings'] = 'Mehrfaches Buchen möglich';
$lang['add']['save'] = 'Änderungen speichern';
$lang['add']['description'] = 'Beschreibung'; $lang['add']['description'] = 'Beschreibung';
$lang['add']['max_aliases'] = 'Max. mögliche Aliasse'; $lang['add']['max_aliases'] = 'Max. mögliche Aliasse';
$lang['add']['max_mailboxes'] = 'Max. mögliche Mailboxen'; $lang['add']['max_mailboxes'] = 'Max. mögliche Mailboxen';
@ -388,8 +307,6 @@ $lang['add']['backup_mx_options'] = 'Backup MX Optionen';
$lang['add']['relay_all'] = 'Alle Empfänger-Adressen relayen'; $lang['add']['relay_all'] = 'Alle Empfänger-Adressen relayen';
$lang['add']['relay_domain'] = 'Relay Domain'; $lang['add']['relay_domain'] = 'Relay Domain';
$lang['add']['relay_all_info'] = '<small>Wenn Sie <b>nicht</b> alle Empfänger-Adressen relayen möchten, müssen Sie eine Mailbox für jede Adresse, die relayt werden soll, erstellen.</small>'; $lang['add']['relay_all_info'] = '<small>Wenn Sie <b>nicht</b> alle Empfänger-Adressen relayen möchten, müssen Sie eine Mailbox für jede Adresse, die relayt werden soll, erstellen.</small>';
$lang['add']['alias'] = 'Alias(se)';
$lang['add']['alias_spf_fail'] = '<b>Hinweis:</b> Wählen Sie ein externes Postfach als Ziel-Adresse, kann es unter Umständen zu fehlerhaften Spam-Erkennungen <b>beim Empfänger</b> kommen. Weitere Informationen zu diesem Thema finden Sie <a href="https://www.heinlein-support.de/blog/news/gmx-de-und-web-de-haben-mail-rejects-durch-spf/" target="_blank">hier.</a>';
$lang['add']['alias_address'] = 'Alias-Adresse(n)'; $lang['add']['alias_address'] = 'Alias-Adresse(n)';
$lang['add']['alias_address_info'] = '<small>Vollständige E-Mail-Adresse(n) oder @example.com, um alle Nachrichten einer Domain weiterzuleiten. Getrennt durch Komma. <b>Nur eigene Domains</b>.</small>'; $lang['add']['alias_address_info'] = '<small>Vollständige E-Mail-Adresse(n) oder @example.com, um alle Nachrichten einer Domain weiterzuleiten. Getrennt durch Komma. <b>Nur eigene Domains</b>.</small>';
$lang['add']['alias_domain_info'] = '<small>Nur gültige Domains. Getrennt durch Komma.</small>'; $lang['add']['alias_domain_info'] = '<small>Nur gültige Domains. Getrennt durch Komma.</small>';
@ -398,17 +315,13 @@ $lang['add']['target_address_info'] = '<small>Vollständige E-Mail-Adresse(n). G
$lang['add']['alias_domain'] = 'Alias-Domain'; $lang['add']['alias_domain'] = 'Alias-Domain';
$lang['add']['select'] = 'Bitte auswählen'; $lang['add']['select'] = 'Bitte auswählen';
$lang['add']['target_domain'] = 'Ziel-Domain'; $lang['add']['target_domain'] = 'Ziel-Domain';
$lang['add']['mailbox'] = 'Mailbox';
$lang['add']['resource'] = 'Ressource';
$lang['add']['kind'] = 'Art'; $lang['add']['kind'] = 'Art';
$lang['add']['mailbox_username'] = 'Benutzername (linker Teil der E-Mail-Adresse)'; $lang['add']['mailbox_username'] = 'Benutzername (linker Teil der E-Mail-Adresse)';
$lang['add']['resource_name'] = 'Ressourcenname';
$lang['add']['full_name'] = 'Vor- und Zuname'; $lang['add']['full_name'] = 'Vor- und Zuname';
$lang['add']['quota_mb'] = 'Speicherplatz (MiB)'; $lang['add']['quota_mb'] = 'Speicherplatz (MiB)';
$lang['add']['select_domain'] = 'Bitte zuerst eine Domain auswählen'; $lang['add']['select_domain'] = 'Bitte zuerst eine Domain auswählen';
$lang['add']['password'] = 'Passwort'; $lang['add']['password'] = 'Passwort';
$lang['add']['password_repeat'] = 'Passwort (Wiederholung)'; $lang['add']['password_repeat'] = 'Passwort (Wiederholung)';
$lang['add']['previous'] = 'Vorherige Seite';
$lang['add']['restart_sogo_hint'] = 'Der SOGo Container muss nach dem Hinzufügen einer neuen Domain neugestartet werden!'; $lang['add']['restart_sogo_hint'] = 'Der SOGo Container muss nach dem Hinzufügen einer neuen Domain neugestartet werden!';
$lang['add']['goto_null'] = 'Nachrichten sofort verwerfen'; $lang['add']['goto_null'] = 'Nachrichten sofort verwerfen';
$lang['add']['validation_success'] = 'Erfolgreich validiert'; $lang['add']['validation_success'] = 'Erfolgreich validiert';
@ -427,16 +340,9 @@ $lang['mailbox']['inactive'] = 'Inaktiv';
$lang['edit']['validate_save'] = 'Validieren und speichern'; $lang['edit']['validate_save'] = 'Validieren und speichern';
$lang['login']['title'] = 'Anmeldung';
$lang['login']['administration'] = 'Administration';
$lang['login']['administration_details'] = 'Bitte verwenden Sie Ihre Administrator Anmeldedaten, um administrative Aufgaben wie das Anlegen einer Mailbox zu starten.';
$lang['login']['user_settings'] = 'Benutzereinstellungen';
$lang['login']['user_settings_details'] = 'Als E-Mail Benutzer vewenden Sie bitte Ihre E-Mail Anmeldedaten, um Passwörter zu verändern, temporäre (Spam-)Aliasse zu erstellen, den Spamfilter einzustellen oder auch um E-Mails zu importieren.';
$lang['login']['username'] = 'Benutzername'; $lang['login']['username'] = 'Benutzername';
$lang['login']['password'] = 'Passwort'; $lang['login']['password'] = 'Passwort';
$lang['login']['reset_password'] = 'Mein Passwort zurücksetzen';
$lang['login']['login'] = 'Anmelden'; $lang['login']['login'] = 'Anmelden';
$lang['login']['previous'] = 'Vorherige Seite';
$lang['login']['delayed'] = 'Login wurde zur Sicherheit um %s Sekunde/n verzögert.'; $lang['login']['delayed'] = 'Login wurde zur Sicherheit um %s Sekunde/n verzögert.';
$lang['tfa']['tfa'] = "Zwei-Faktor-Authentifizierung"; $lang['tfa']['tfa'] = "Zwei-Faktor-Authentifizierung";
@ -446,16 +352,12 @@ $lang['tfa']['key_id'] = "Ein Name für diesen YubiKey";
$lang['tfa']['key_id_totp'] = "Ein eindeutiger Name"; $lang['tfa']['key_id_totp'] = "Ein eindeutiger Name";
$lang['tfa']['api_register'] = 'mailcow verwendet die Yubico Cloud API. Ein API-Key für den Yubico Stick kann <a href="https://upgrade.yubico.com/getapikey/" target="_blank">hier</a> bezogen werden.'; $lang['tfa']['api_register'] = 'mailcow verwendet die Yubico Cloud API. Ein API-Key für den Yubico Stick kann <a href="https://upgrade.yubico.com/getapikey/" target="_blank">hier</a> bezogen werden.';
$lang['tfa']['u2f'] = "U2F Authentifizierung"; $lang['tfa']['u2f'] = "U2F Authentifizierung";
$lang['tfa']['hotp'] = "HOTP Authentifizierung";
$lang['tfa']['totp'] = "TOTP Authentifizierung"; $lang['tfa']['totp'] = "TOTP Authentifizierung";
$lang['tfa']['none'] = "Deaktiviert"; $lang['tfa']['none'] = "Deaktiviert";
$lang['tfa']['delete_tfa'] = "Deaktiviere 2FA"; $lang['tfa']['delete_tfa'] = "Deaktiviere 2FA";
$lang['tfa']['disable_tfa'] = "Deaktiviere 2FA bis zur nächsten erfolgreichen Anmeldung"; $lang['tfa']['disable_tfa'] = "Deaktiviere 2FA bis zur nächsten erfolgreichen Anmeldung";
$lang['tfa']['confirm_tfa'] = "Bitte bestätigen Sie Ihr Einmal-Passwort im unteren Feld";
$lang['tfa']['confirm'] = "Bestätigen"; $lang['tfa']['confirm'] = "Bestätigen";
$lang['tfa']['otp'] = "Einmalpasswort";
$lang['tfa']['totp'] = "Time-based OTP (Google Authenticator etc.)"; $lang['tfa']['totp'] = "Time-based OTP (Google Authenticator etc.)";
$lang['tfa']['trash_login'] = "Login verwerfen";
$lang['tfa']['select'] = "Bitte auswählen"; $lang['tfa']['select'] = "Bitte auswählen";
$lang['tfa']['waiting_usb_auth'] = "<i>Warte auf USB-Gerät...</i><br><br>Bitte jetzt den vorgesehenen Taster des U2F USB-Gerätes berühren."; $lang['tfa']['waiting_usb_auth'] = "<i>Warte auf USB-Gerät...</i><br><br>Bitte jetzt den vorgesehenen Taster des U2F USB-Gerätes berühren.";
$lang['tfa']['waiting_usb_register'] = "<i>Warte auf USB-Gerät...</i><br><br>Bitte zuerst das obere Passwortfeld ausfüllen und erst dann den vorgesehenen Taster des U2F USB-Gerätes berühren."; $lang['tfa']['waiting_usb_register'] = "<i>Warte auf USB-Gerät...</i><br><br>Bitte zuerst das obere Passwortfeld ausfüllen und erst dann den vorgesehenen Taster des U2F USB-Gerätes berühren.";
@ -464,7 +366,6 @@ $lang['tfa']['enter_qr_code'] = "Falls Sie den angezeigten QR-Code nicht scannen
$lang['tfa']['confirm_totp_token'] = "Bitte bestätigen Sie die Änderung durch Eingabe eines generierten Tokens"; $lang['tfa']['confirm_totp_token'] = "Bitte bestätigen Sie die Änderung durch Eingabe eines generierten Tokens";
$lang['admin']['no_new_rows'] = 'Keine weiteren Zeilen vorhanden'; $lang['admin']['no_new_rows'] = 'Keine weiteren Zeilen vorhanden';
$lang['admin']['additional_rows'] = ' zusätzliche Zeilen geladen'; // parses to 'n additional rows were added'
$lang['admin']['private_key'] = 'Private Key'; $lang['admin']['private_key'] = 'Private Key';
$lang['admin']['import'] = 'Importieren'; $lang['admin']['import'] = 'Importieren';
$lang['admin']['import_private_key'] = 'Private Key importieren'; $lang['admin']['import_private_key'] = 'Private Key importieren';
@ -475,35 +376,15 @@ $lang['admin']['f2b_retry_window'] = 'Wiederholungen im Zeitraum von (s)';
$lang['admin']['f2b_netban_ipv4'] = 'Netzbereich für IPv4 Bans (8-32)'; $lang['admin']['f2b_netban_ipv4'] = 'Netzbereich für IPv4 Bans (8-32)';
$lang['admin']['f2b_netban_ipv6'] = 'Netzbereich für IPv6 Bans (8-128)'; $lang['admin']['f2b_netban_ipv6'] = 'Netzbereich für IPv6 Bans (8-128)';
$lang['admin']['f2b_whitelist'] = 'Whitelist für Netzwerke und Hosts'; $lang['admin']['f2b_whitelist'] = 'Whitelist für Netzwerke und Hosts';
$lang['admin']['restrictions'] = 'Postfix Restriktionen';
$lang['admin']['rr'] = 'Postfix Empfänger Restriktionen';
$lang['admin']['sr'] = 'Postfix Sender Restriktionen';
$lang['admin']['reset_defaults'] = 'Standard wiederherstellen';
$lang['admin']['r_inactive'] = 'Inaktive Restriktionen'; $lang['admin']['r_inactive'] = 'Inaktive Restriktionen';
$lang['admin']['r_active'] = 'Aktive Restriktionen'; $lang['admin']['r_active'] = 'Aktive Restriktionen';
$lang['admin']['r_info'] = 'Ausgegraute/deaktivierte Elemente sind mailcow nicht bekannt und können nicht in die Liste inaktiver Elemente verschoben werden. Unbekannte Restriktionen werden trotzdem in Reihenfolge der Erscheinung gesetzt.<br>Sie können ein Element in der Datei <code>inc/vars.local.inc.php</code> als bekannt hinzufügen, um es zu bewegen.'; $lang['admin']['r_info'] = 'Ausgegraute/deaktivierte Elemente sind mailcow nicht bekannt und können nicht in die Liste inaktiver Elemente verschoben werden. Unbekannte Restriktionen werden trotzdem in Reihenfolge der Erscheinung gesetzt.<br>Sie können ein Element in der Datei <code>inc/vars.local.inc.php</code> als bekannt hinzufügen, um es zu bewegen.';
$lang['admin']['public_folders'] = 'Öffentliche Ordner';
$lang['admin']['public_folders_text'] = 'Ein Namespace "Public" wird erstellt. Der untenstehende Ordnername betrifft den Namen der automatisch erstellten Mailbox in diesem Namespace.';
$lang['admin']['public_folder_name'] = 'Ordnername <small>(alphanumerisch)</small>';
$lang['admin']['public_folder_enable'] = 'Öffentliche Ordner aktivieren';
$lang['admin']['public_folder_enable_text'] = 'Das Umschalten dieser Option entfernt keine Nachrichten aus den öffentlichen Ordnern.';
$lang['admin']['public_folder_pusf'] = 'Aktiviere "per-user seen flag"';
$lang['admin']['public_folder_pusf_text'] = 'Ein "per-user seen flag"-aktiviertes System markiert Nachrichten nicht als gelesen, wenn nur ein Benutzer sie gelesen hat. Jeder Benutzer verwaltet seine eigenen "seen flags".';
$lang['admin']['privacy'] = 'Datenschutz';
$lang['admin']['privacy_text'] = 'Diese Option aktiviert eine PCRE-Prüfung, die die Werte der Kopfzeilen "User-Agent", "X-Enigmail", "X-Mailer", "X-Originating-IP" sowie "Received: from" durch "localhost" bzw. "127.0.0.1" ersetzt.';
$lang['admin']['privacy_anon_mail'] = 'Anonymisiere ausgehende Kopfzeilen';
$lang['admin']['msg_size'] = 'Aktuelles Limit der Nachrichtengröße';
$lang['admin']['msg_size_limit'] = 'Aktuelles Limit der Nachrichtengröße';
$lang['admin']['msg_size_limit_details'] = 'Diese Einstellung wird Postfix und den Webserver neuladen.';
$lang['admin']['save'] = 'Änderungen speichern'; $lang['admin']['save'] = 'Änderungen speichern';
$lang['admin']['maintenance'] = 'Wartung und Information';
$lang['admin']['sys_info'] = 'Systeminformation';
$lang['admin']['dkim_add_key'] = 'ARC/DKIM-Key hinzufügen'; $lang['admin']['dkim_add_key'] = 'ARC/DKIM-Key hinzufügen';
$lang['admin']['dkim_keys'] = 'ARC/DKIM-Keys'; $lang['admin']['dkim_keys'] = 'ARC/DKIM-Keys';
$lang['admin']['dkim_key_valid'] = 'Key gültig'; $lang['admin']['dkim_key_valid'] = 'Key gültig';
$lang['admin']['dkim_key_unused'] = 'Key ohne Zuweisung'; $lang['admin']['dkim_key_unused'] = 'Key ohne Zuweisung';
$lang['admin']['dkim_key_missing'] = 'Key fehlt'; $lang['admin']['dkim_key_missing'] = 'Key fehlt';
$lang['admin']['dkim_key_hint'] = 'Der Selector für DKIM-Keys lautet immer <code>dkim</code>.';
$lang['admin']['add'] = 'Hinzufügen'; $lang['admin']['add'] = 'Hinzufügen';
$lang['add']['add_domain_restart'] = 'Domain hinzufügen und SOGo neustarten'; $lang['add']['add_domain_restart'] = 'Domain hinzufügen und SOGo neustarten';
$lang['add']['add_domain_only'] = 'Nur Domain hinzufügen'; $lang['add']['add_domain_only'] = 'Nur Domain hinzufügen';
@ -526,20 +407,12 @@ $lang['admin']['unchanged_if_empty'] = 'Unverändert, wenn leer';
$lang['admin']['yes'] = '&#10004;'; $lang['admin']['yes'] = '&#10004;';
$lang['admin']['no'] = '&#10008;'; $lang['admin']['no'] = '&#10008;';
$lang['admin']['access'] = 'Zugang'; $lang['admin']['access'] = 'Zugang';
$lang['admin']['invalid_max_msg_size'] = 'Maximale Nachrichtengröße ungültig';
$lang['admin']['site_not_found'] = 'Kann mailcow Seitenkonfiguration nicht finden';
$lang['admin']['public_folder_empty'] = 'Öffentlicher Ordner-Name darf nicht leer sein';
$lang['admin']['set_rr_failed'] = 'Kann Postfix Restriktionen nicht setzen';
$lang['admin']['no_record'] = 'Kein Eintrag'; $lang['admin']['no_record'] = 'Kein Eintrag';
$lang['admin']['filter_table'] = 'Tabelle Filtern'; $lang['admin']['filter_table'] = 'Tabelle Filtern';
$lang['admin']['empty'] = 'Keine Einträge vorhanden'; $lang['admin']['empty'] = 'Keine Einträge vorhanden';
$lang['admin']['time'] = 'Zeit';
$lang['admin']['priority'] = 'Gewichtung';
$lang['admin']['refresh'] = 'Neu laden'; $lang['admin']['refresh'] = 'Neu laden';
$lang['admin']['logs'] = 'Logs';
$lang['admin']['to_top'] = 'Nach oben'; $lang['admin']['to_top'] = 'Nach oben';
$lang['admin']['in_use_by'] = 'Verwendet von'; $lang['admin']['in_use_by'] = 'Verwendet von';
$lang['admin']['message'] = 'Nachricht';
$lang['admin']['forwarding_hosts'] = 'Weiterleitungs-Hosts'; $lang['admin']['forwarding_hosts'] = 'Weiterleitungs-Hosts';
$lang['admin']['forwarding_hosts_hint'] = 'Eingehende Nachrichten werden von den hier gelisteten Hosts bedingungslos akzeptiert. Diese Hosts werden dann nicht mit DNSBLs abgeglichen oder Greylisting unterworfen. Von ihnen empfangener Spam wird nie abgelehnt, optional kann er aber in den Spam-Ordner einsortiert werden. Die übliche Verwendung für diese Funktion ist, um Mailserver anzugeben, auf denen eine Weiterleitung zu Ihrem mailcow-Server eingerichtet wurde.'; $lang['admin']['forwarding_hosts_hint'] = 'Eingehende Nachrichten werden von den hier gelisteten Hosts bedingungslos akzeptiert. Diese Hosts werden dann nicht mit DNSBLs abgeglichen oder Greylisting unterworfen. Von ihnen empfangener Spam wird nie abgelehnt, optional kann er aber in den Spam-Ordner einsortiert werden. Die übliche Verwendung für diese Funktion ist, um Mailserver anzugeben, auf denen eine Weiterleitung zu Ihrem mailcow-Server eingerichtet wurde.';
$lang['admin']['forwarding_hosts_add_hint'] = 'Sie können entweder IPv4/IPv6-Adressen, Netzwerke in CIDR-Notation, Hostnamen (die zu IP-Adressen aufgelöst werden), oder Domainnamen (die zu IP-Adressen aufgelöst werden, indem ihr SPF-Record abgefragt wird oder, in dessen Abwesenheit, ihre MX-Records) angeben.'; $lang['admin']['forwarding_hosts_add_hint'] = 'Sie können entweder IPv4/IPv6-Adressen, Netzwerke in CIDR-Notation, Hostnamen (die zu IP-Adressen aufgelöst werden), oder Domainnamen (die zu IP-Adressen aufgelöst werden, indem ihr SPF-Record abgefragt wird oder, in dessen Abwesenheit, ihre MX-Records) angeben.';
@ -559,7 +432,6 @@ $lang['admin']['quarantine_retention_size'] = "Rückhaltungen pro Mailbox:";
$lang['admin']['quarantine_max_size'] = "Maximale Größe in MiB (größere Elemente werden verworfen):"; $lang['admin']['quarantine_max_size'] = "Maximale Größe in MiB (größere Elemente werden verworfen):";
$lang['admin']['quarantine_exclude_domains'] = "Domains und Alias-Domains ausschließen:"; $lang['admin']['quarantine_exclude_domains'] = "Domains und Alias-Domains ausschließen:";
$lang['delete']['remove_forwardinghost_warning'] = '<b>Warnung:</b> Sie entfernen den Weiterleitungs-Host <b>%s</b>!';
$lang['success']['forwarding_host_removed'] = "Weiterleitungs-Host %s wurde entfernt"; $lang['success']['forwarding_host_removed'] = "Weiterleitungs-Host %s wurde entfernt";
$lang['success']['forwarding_host_added'] = "Weiterleitungs-Host %s wurde hinzugefügt"; $lang['success']['forwarding_host_added'] = "Weiterleitungs-Host %s wurde hinzugefügt";
$lang['success']['relayhost_removed'] = "Relayhost %s wurde entfernt"; $lang['success']['relayhost_removed'] = "Relayhost %s wurde entfernt";
@ -596,12 +468,8 @@ $lang['admin']['add_row'] = "Reihe hinzufügen";
$lang['admin']['reset_default'] = "Zurücksetzen auf Standard"; $lang['admin']['reset_default'] = "Zurücksetzen auf Standard";
$lang['admin']['merged_vars_hint'] = 'Ausgegraute Reihen wurden aus der Datei <code>vars.(local.)inc.php</code> gelesen und können hier nicht verändert werden.'; $lang['admin']['merged_vars_hint'] = 'Ausgegraute Reihen wurden aus der Datei <code>vars.(local.)inc.php</code> gelesen und können hier nicht verändert werden.';
$lang['edit']['tls_policy'] = "TLS Policy ändern";
$lang['edit']['spam_score'] = "Einen benutzerdefiniterten Spam-Score festlegen"; $lang['edit']['spam_score'] = "Einen benutzerdefiniterten Spam-Score festlegen";
$lang['edit']['spam_policy'] = "Hinzufügen und Entfernen von Einträgen in White- und Blacklists"; $lang['edit']['spam_policy'] = "Hinzufügen und Entfernen von Einträgen in White- und Blacklists";
$lang['edit']['delimiter_action'] = "Delimiter Aktion verändern";
$lang['edit']['syncjobs'] = "Sync job hinzufügen oder anpassen";
$lang['edit']['eas_reset'] = "ActiveSync Geräte-Cache zurücksetzen";
$lang['edit']['spam_alias'] = "Anpassen temporärer Alias-Adressen"; $lang['edit']['spam_alias'] = "Anpassen temporärer Alias-Adressen";
$lang['danger']['img_tmp_missing'] = "Grafik konnte nicht validiert werden: Erstellung temporärer Datei fehlgeschlagen"; $lang['danger']['img_tmp_missing'] = "Grafik konnte nicht validiert werden: Erstellung temporärer Datei fehlgeschlagen";
@ -614,32 +482,32 @@ $lang['success']['reset_main_logo'] = "Standardgrafik wurde wiederhergestellt";
$lang['success']['items_released'] = "Ausgewählte Objekte wurden an Mailbox versendet"; $lang['success']['items_released'] = "Ausgewählte Objekte wurden an Mailbox versendet";
$lang['danger']['imagick_exception'] = "Fataler Bildverarbeitungsfehler"; $lang['danger']['imagick_exception'] = "Fataler Bildverarbeitungsfehler";
$lang['quarantaine']['quarantaine'] = "Quarantäne"; $lang['quarantine']['quarantine'] = "Quarantäne";
$lang['quarantaine']['qinfo'] = "Das Quarantänesystem speichert abgelehnte Nachrichten in der Datenbank. Dem Sender wird <em>nicht</em> signalisiert, dass seine E-Mail zugestellt wurde."; $lang['quarantine']['qinfo'] = "Das Quarantänesystem speichert abgelehnte Nachrichten in der Datenbank. Dem Sender wird <em>nicht</em> signalisiert, dass seine E-Mail zugestellt wurde.";
$lang['quarantaine']['release'] = "Freigeben"; $lang['quarantine']['release'] = "Freigeben";
$lang['quarantaine']['empty'] = 'Keine Einträge'; $lang['quarantine']['empty'] = 'Keine Einträge';
$lang['quarantaine']['toggle_all'] = 'Alle auswählen'; $lang['quarantine']['toggle_all'] = 'Alle auswählen';
$lang['quarantaine']['quick_actions'] = 'Aktionen'; $lang['quarantine']['quick_actions'] = 'Aktionen';
$lang['quarantaine']['remove'] = 'Entfernen'; $lang['quarantine']['remove'] = 'Entfernen';
$lang['quarantaine']['received'] = "Empfangen"; $lang['quarantine']['received'] = "Empfangen";
$lang['quarantaine']['action'] = "Aktion"; $lang['quarantine']['action'] = "Aktion";
$lang['quarantaine']['rcpt'] = "Empfänger"; $lang['quarantine']['rcpt'] = "Empfänger";
$lang['quarantaine']['qid'] = "Rspamd QID"; $lang['quarantine']['qid'] = "Rspamd QID";
$lang['quarantaine']['sender'] = "Sender"; $lang['quarantine']['sender'] = "Sender";
$lang['quarantaine']['show_item'] = "Details"; $lang['quarantine']['show_item'] = "Details";
$lang['quarantaine']['check_hash'] = "Checksumme auf VirusTotal suchen"; $lang['quarantine']['check_hash'] = "Checksumme auf VirusTotal suchen";
$lang['quarantaine']['qitem'] = "Quarantäneeintrag"; $lang['quarantine']['qitem'] = "Quarantäneeintrag";
$lang['quarantaine']['subj'] = "Betreff"; $lang['quarantine']['subj'] = "Betreff";
$lang['quarantaine']['text_plain_content'] = "Inhalt (text/plain)"; $lang['quarantine']['text_plain_content'] = "Inhalt (text/plain)";
$lang['quarantaine']['text_from_html_content'] = "Inhalt (html, konvertiert)"; $lang['quarantine']['text_from_html_content'] = "Inhalt (html, konvertiert)";
$lang['quarantaine']['atts'] = "Anhänge"; $lang['quarantine']['atts'] = "Anhänge";
$lang['header']['quarantaine'] = "Quarantäne"; $lang['header']['quarantine'] = "Quarantäne";
$lang['header']['debug'] = "Debugging"; $lang['header']['debug'] = "Debugging";
$lang['quarantaine']['release_body'] = "Die ursprüngliche Nachricht wurde als EML-Datei im Anhang hinterlegt."; $lang['quarantine']['release_body'] = "Die ursprüngliche Nachricht wurde als EML-Datei im Anhang hinterlegt.";
$lang['danger']['release_send_failed'] = "Die Nachricht konnte nicht versendet werden: %s"; $lang['danger']['release_send_failed'] = "Die Nachricht konnte nicht versendet werden: %s";
$lang['quarantaine']['release_subject'] = "Potentiell schädliche Nachricht aus Quarantäne: %s"; $lang['quarantine']['release_subject'] = "Potentiell schädliche Nachricht aus Quarantäne: %s";
$lang['mailbox']['bcc_map_type'] = "BCC Typ"; $lang['mailbox']['bcc_map_type'] = "BCC Typ";
$lang['mailbox']['bcc_type'] = "BCC Typ"; $lang['mailbox']['bcc_type'] = "BCC Typ";
@ -655,3 +523,9 @@ $lang['mailbox']['bcc_to_rcpt'] = "Map empfängerabhängig verwenden";
$lang['mailbox']['add_bcc_entry'] = "BCC-Eintrag hinzufügen"; $lang['mailbox']['add_bcc_entry'] = "BCC-Eintrag hinzufügen";
$lang['mailbox']['bcc_info'] = "Eine empfängerabhängige Map wird verwendet, wenn die BCC-Map Eintragung auf den Eingang einer E-Mail auf das lokale Ziel reagieren soll. Senderabhängige Maps verfahren nach dem gleichen Prinzip.<br/> $lang['mailbox']['bcc_info'] = "Eine empfängerabhängige Map wird verwendet, wenn die BCC-Map Eintragung auf den Eingang einer E-Mail auf das lokale Ziel reagieren soll. Senderabhängige Maps verfahren nach dem gleichen Prinzip.<br/>
Das lokale Ziel wird bei Fehlzustellungen an ein BCC-Ziel nicht informiert."; Das lokale Ziel wird bei Fehlzustellungen an ein BCC-Ziel nicht informiert.";
$lang['mailbox']['address_rewriting'] = 'Adressumschreibung';
$lang['mailbox']['recipient_maps'] = 'Empfängerumschreibungen';
$lang['mailbox']['recipient_map_info'] = 'Empfängerumschreibung ersetzen den Empfänger einer E-Mail vor dem Versand.';
$lang['mailbox']['recipient_map_old'] = 'Original Empfänger';
$lang['mailbox']['recipient_map_new'] = 'Neuer Empfänger';
$lang['mailbox']['add_recipient_map_entry'] = 'Empfängerumschreibung hinzufügen';

View File

@ -14,12 +14,7 @@ $lang['footer']['delete_these_items'] = 'Please confirm your changes to the foll
$lang['footer']['delete_now'] = 'Delete now'; $lang['footer']['delete_now'] = 'Delete now';
$lang['footer']['cancel'] = 'Cancel'; $lang['footer']['cancel'] = 'Cancel';
$lang['dkim']['confirm'] = "Are you sure?";
$lang['danger']['dkim_not_found'] = "DKIM key not found";
$lang['danger']['dkim_remove_failed'] = "Cannot remove selected DKIM key";
$lang['danger']['dkim_add_failed'] = "Cannot add given DKIM key";
$lang['danger']['dkim_domain_or_sel_invalid'] = "DKIM domain or selector invalid"; $lang['danger']['dkim_domain_or_sel_invalid'] = "DKIM domain or selector invalid";
$lang['danger']['dkim_key_length_invalid'] = "DKIM key length invalid";
$lang['success']['dkim_removed'] = "DKIM key %s has been removed"; $lang['success']['dkim_removed'] = "DKIM key %s has been removed";
$lang['success']['dkim_added'] = "DKIM key has been saved"; $lang['success']['dkim_added'] = "DKIM key has been saved";
$lang['danger']['access_denied'] = "Access denied or invalid form data"; $lang['danger']['access_denied'] = "Access denied or invalid form data";
@ -33,8 +28,6 @@ $lang['danger']['last_key'] = 'Last key cannot be deleted';
$lang['danger']['goto_empty'] = "Goto address must not be empty"; $lang['danger']['goto_empty'] = "Goto address must not be empty";
$lang['danger']['policy_list_from_exists'] = "A record with given name exists"; $lang['danger']['policy_list_from_exists'] = "A record with given name exists";
$lang['danger']['policy_list_from_invalid'] = "Record has invalid format"; $lang['danger']['policy_list_from_invalid'] = "Record has invalid format";
$lang['danger']['whitelist_exists'] = "A whitelist record with that name exists";
$lang['danger']['whitelist_from_invalid'] = "Whitelist record has invalid format";
$lang['danger']['alias_invalid'] = "Alias address is invalid"; $lang['danger']['alias_invalid'] = "Alias address is invalid";
$lang['danger']['goto_invalid'] = "Goto address is invalid"; $lang['danger']['goto_invalid'] = "Goto address is invalid";
$lang['danger']['alias_domain_invalid'] = "Alias domain is invalid"; $lang['danger']['alias_domain_invalid'] = "Alias domain is invalid";
@ -50,19 +43,13 @@ $lang['success']['mailbox_modified'] = "Changes to mailbox %s have been saved";
$lang['success']['resource_modified'] = "Changes to mailbox %s have been saved"; $lang['success']['resource_modified'] = "Changes to mailbox %s have been saved";
$lang['success']['object_modified'] = "Changes to object %s have been saved"; $lang['success']['object_modified'] = "Changes to object %s have been saved";
$lang['success']['f2b_modified'] = "Changes to Fail2ban parameters have been saved"; $lang['success']['f2b_modified'] = "Changes to Fail2ban parameters have been saved";
$lang['success']['msg_size_saved'] = "Message size limit has been set";
$lang['danger']['aliasd_not_found'] = "Alias domain not found";
$lang['danger']['targetd_not_found'] = "Target domain not found"; $lang['danger']['targetd_not_found'] = "Target domain not found";
$lang['danger']['aliasd_exists'] = "Alias domain already exists";
$lang['success']['aliasd_added'] = "Added alias domain %s"; $lang['success']['aliasd_added'] = "Added alias domain %s";
$lang['success']['aliasd_modified'] = "Changes to alias domain %s have been saved"; $lang['success']['aliasd_modified'] = "Changes to alias domain %s have been saved";
$lang['success']['domain_modified'] = "Changes to domain %s have been saved"; $lang['success']['domain_modified'] = "Changes to domain %s have been saved";
$lang['success']['domain_admin_modified'] = "Changes to domain administrator %s have been saved"; $lang['success']['domain_admin_modified'] = "Changes to domain administrator %s have been saved";
$lang['success']['domain_admin_added'] = "Domain administrator %s has been added"; $lang['success']['domain_admin_added'] = "Domain administrator %s has been added";
$lang['success']['changes_general'] = 'Changes have been saved';
$lang['success']['admin_modified'] = "Changes to administrator have been saved"; $lang['success']['admin_modified'] = "Changes to administrator have been saved";
$lang['danger']['exit_code_not_null'] = "Error: Exit code was %d";
$lang['danger']['mailbox_not_available'] = "Mailbox not available";
$lang['danger']['username_invalid'] = "Username cannot be used"; $lang['danger']['username_invalid'] = "Username cannot be used";
$lang['danger']['password_mismatch'] = "Confirmation password is not identical"; $lang['danger']['password_mismatch'] = "Confirmation password is not identical";
$lang['danger']['password_complexity'] = "Password does not meet the policy"; $lang['danger']['password_complexity'] = "Password does not meet the policy";
@ -71,7 +58,6 @@ $lang['danger']['login_failed'] = "Login failed";
$lang['danger']['mailbox_invalid'] = "Mailbox name is invalid"; $lang['danger']['mailbox_invalid'] = "Mailbox name is invalid";
$lang['danger']['description_invalid'] = 'Resource description is invalid'; $lang['danger']['description_invalid'] = 'Resource description is invalid';
$lang['danger']['resource_invalid'] = "Resource name is invalid"; $lang['danger']['resource_invalid'] = "Resource name is invalid";
$lang['danger']['mailbox_invalid_suggest'] = 'Mailbox name is invalid, did you mean to type "%s"?';
$lang['danger']['is_alias'] = "%s is already known as an alias address"; $lang['danger']['is_alias'] = "%s is already known as an alias address";
$lang['danger']['is_alias_or_mailbox'] = "%s is already known as an alias, a mailbox or an alias address expanded from an alias domain."; $lang['danger']['is_alias_or_mailbox'] = "%s is already known as an alias, a mailbox or an alias address expanded from an alias domain.";
$lang['danger']['is_spam_alias'] = "%s is already known as a spam alias address"; $lang['danger']['is_spam_alias'] = "%s is already known as a spam alias address";
@ -96,20 +82,16 @@ $lang['danger']['mailboxes_in_use'] = "Max. mailboxes must be greater or equal t
$lang['danger']['aliases_in_use'] = "Max. aliases must be greater or equal to %d"; $lang['danger']['aliases_in_use'] = "Max. aliases must be greater or equal to %d";
$lang['danger']['sender_acl_invalid'] = "Sender ACL value is invalid"; $lang['danger']['sender_acl_invalid'] = "Sender ACL value is invalid";
$lang['danger']['domain_not_empty'] = "Cannot remove non-empty domain"; $lang['danger']['domain_not_empty'] = "Cannot remove non-empty domain";
$lang['warning']['spam_alias_temp_error'] = "Temporary error: Cannot add spam alias, please try again later.";
$lang['danger']['spam_alias_max_exceeded'] = "Max. allowed spam alias addresses exceeded";
$lang['danger']['validity_missing'] = 'Please assign a period of validity'; $lang['danger']['validity_missing'] = 'Please assign a period of validity';
$lang['user']['loading'] = "Loading..."; $lang['user']['loading'] = "Loading...";
$lang['user']['force_pw_update'] = 'You <b>must</b> set a new password to be able to access groupware related services.';
$lang['user']['active_sieve'] = "Active filter"; $lang['user']['active_sieve'] = "Active filter";
$lang['user']['show_sieve_filters'] = "Show active user sieve filter"; $lang['user']['show_sieve_filters'] = "Show active user sieve filter";
$lang['user']['no_active_filter'] = "No active filter available"; $lang['user']['no_active_filter'] = "No active filter available";
$lang['user']['on'] = "On";
$lang['user']['off'] = "Off";
$lang['user']['messages'] = "messages"; // "123 messages" $lang['user']['messages'] = "messages"; // "123 messages"
$lang['user']['in_use'] = "Used"; $lang['user']['in_use'] = "Used";
$lang['user']['user_change_fn'] = ""; $lang['user']['user_change_fn'] = "";
$lang['user']['user_settings'] = 'User settings'; $lang['user']['user_settings'] = 'User settings';
$lang['user']['mailbox_settings'] = 'Mailbox settings';
$lang['user']['mailbox_details'] = 'Mailbox details'; $lang['user']['mailbox_details'] = 'Mailbox details';
$lang['user']['change_password'] = 'Change password'; $lang['user']['change_password'] = 'Change password';
$lang['user']['client_configuration'] = 'Show configuration guides for email clients and smartphones'; $lang['user']['client_configuration'] = 'Show configuration guides for email clients and smartphones';
@ -118,15 +100,12 @@ $lang['user']['save_changes'] = 'Save changes';
$lang['user']['password_now'] = 'Current password (confirm changes)'; $lang['user']['password_now'] = 'Current password (confirm changes)';
$lang['user']['new_password_repeat'] = 'Confirmation password (repeat)'; $lang['user']['new_password_repeat'] = 'Confirmation password (repeat)';
$lang['user']['new_password_description'] = 'Requirement: 6 characters long, letters and numbers.'; $lang['user']['new_password_description'] = 'Requirement: 6 characters long, letters and numbers.';
$lang['user']['did_you_know'] = '<b>Did you know?</b> You can use tags in your email address ("me+<b>privat</b>@example.com") to move messages to a folder automatically (example: "privat").';
$lang['user']['spam_aliases'] = 'Temporary email aliases'; $lang['user']['spam_aliases'] = 'Temporary email aliases';
$lang['user']['alias'] = 'Alias'; $lang['user']['alias'] = 'Alias';
$lang['user']['aliases'] = 'Aliases';
$lang['user']['shared_aliases'] = 'Shared alias addresses'; $lang['user']['shared_aliases'] = 'Shared alias addresses';
$lang['user']['shared_aliases_desc'] = 'A shared alias address is not affected by any user specific settings. A custom spam filter setting can be archived by a domain-wide policy set by an administrator..'; $lang['user']['shared_aliases_desc'] = 'A shared alias address is not affected by any user specific settings. A custom spam filter setting can be archived by a domain-wide policy set by an administrator..';
$lang['user']['direct_aliases'] = 'Direct alias addresses'; $lang['user']['direct_aliases'] = 'Direct alias addresses';
$lang['user']['direct_aliases_desc'] = 'Direct alias addresses are affected by spam filter and TLS policy settings.'; $lang['user']['direct_aliases_desc'] = 'Direct alias addresses are affected by spam filter and TLS policy settings.';
$lang['user']['domain_aliases'] = 'Domain alias addresses';
$lang['user']['is_catch_all'] = 'Catch-all for domain/s'; $lang['user']['is_catch_all'] = 'Catch-all for domain/s';
$lang['user']['aliases_also_send_as'] = 'Also allowed to send as user'; $lang['user']['aliases_also_send_as'] = 'Also allowed to send as user';
$lang['user']['aliases_send_as_all'] = 'Do not check sender access for the following domain(s) and its alias domains'; $lang['user']['aliases_send_as_all'] = 'Do not check sender access for the following domain(s) and its alias domains';
@ -136,7 +115,6 @@ $lang['user']['alias_valid_until'] = 'Valid until';
$lang['user']['alias_remove_all'] = 'Remove all aliases'; $lang['user']['alias_remove_all'] = 'Remove all aliases';
$lang['user']['alias_time_left'] = 'Time left'; $lang['user']['alias_time_left'] = 'Time left';
$lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T'; $lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['syncjob_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['alias_select_validity'] = 'Period of validity'; $lang['user']['alias_select_validity'] = 'Period of validity';
$lang['user']['sync_jobs'] = 'Sync jobs'; $lang['user']['sync_jobs'] = 'Sync jobs';
$lang['user']['hour'] = 'Hour'; $lang['user']['hour'] = 'Hour';
@ -172,8 +150,6 @@ $lang['user']['tls_enforce_in'] = 'Enforce TLS incoming';
$lang['user']['tls_enforce_out'] = 'Enforce TLS outgoing'; $lang['user']['tls_enforce_out'] = 'Enforce TLS outgoing';
$lang['user']['no_record'] = 'No record'; $lang['user']['no_record'] = 'No record';
$lang['user']['misc_settings'] = 'Other profile settings';
$lang['user']['misc_delete_profile'] = 'Other profile settings';
$lang['user']['tag_handling'] = 'Set handling for tagged mail'; $lang['user']['tag_handling'] = 'Set handling for tagged mail';
$lang['user']['tag_in_subfolder'] = 'In subfolder'; $lang['user']['tag_in_subfolder'] = 'In subfolder';
@ -188,7 +164,6 @@ $lang['user']['eas_reset_help'] = 'In many cases a device cache reset will help
$lang['user']['encryption'] = 'Encryption'; $lang['user']['encryption'] = 'Encryption';
$lang['user']['username'] = 'Username'; $lang['user']['username'] = 'Username';
$lang['user']['password'] = 'Password';
$lang['user']['last_run'] = 'Last run'; $lang['user']['last_run'] = 'Last run';
$lang['user']['excludes'] = 'Excludes'; $lang['user']['excludes'] = 'Excludes';
$lang['user']['interval'] = 'Interval'; $lang['user']['interval'] = 'Interval';
@ -196,48 +171,25 @@ $lang['user']['active'] = 'Active';
$lang['user']['action'] = 'Action'; $lang['user']['action'] = 'Action';
$lang['user']['edit'] = 'Edit'; $lang['user']['edit'] = 'Edit';
$lang['user']['remove'] = 'Remove'; $lang['user']['remove'] = 'Remove';
$lang['user']['delete_now'] = 'Remove now';
$lang['user']['create_syncjob'] = 'Create new sync job'; $lang['user']['create_syncjob'] = 'Create new sync job';
$lang['start']['dashboard'] = '%s - dashboard';
$lang['start']['start_rc'] = 'Open Roundcube';
$lang['start']['start_sogo'] = 'Open SOGo';
$lang['start']['mailcow_apps_detail'] = 'Use a mailcow app to access your mails, calendar, contacts and more.'; $lang['start']['mailcow_apps_detail'] = 'Use a mailcow app to access your mails, calendar, contacts and more.';
$lang['start']['mailcow_panel'] = 'Start mailcow UI';
$lang['start']['mailcow_panel_description'] = 'The mailcow UI is available for administrators and mailbox users.';
$lang['start']['mailcow_panel_detail'] = '<b>Domain administrators</b> create, modify or delete mailboxes and aliases, change domains and read further information about their assigned domains.<br> $lang['start']['mailcow_panel_detail'] = '<b>Domain administrators</b> create, modify or delete mailboxes and aliases, change domains and read further information about their assigned domains.<br>
<b>Mailbox users</b> are able to create time-limited aliases (spam aliases), change their password and spam filter settings.'; <b>Mailbox users</b> are able to create time-limited aliases (spam aliases), change their password and spam filter settings.';
$lang['start']['recommended_config'] = 'Recommended configuration (without ActiveSync)';
$lang['start']['imap_smtp_server'] = 'IMAP- and SMTP server data';
$lang['start']['imap_smtp_server_description'] = 'For the best experience we recommend to use <a href="%s" target="_blank"><b>Mozilla Thunderbird</b></a>.';
$lang['start']['imap_smtp_server_badge'] = 'Read/Write emails';
$lang['start']['imap_smtp_server_auth_info'] = 'Please use your full email address and the PLAIN authentication mechanism.<br> $lang['start']['imap_smtp_server_auth_info'] = 'Please use your full email address and the PLAIN authentication mechanism.<br>
Your login data will be encrypted by the server-side mandatory encryption.'; Your login data will be encrypted by the server-side mandatory encryption.';
$lang['start']['managesieve'] = 'ManageSieve';
$lang['start']['managesieve_badge'] = 'Email filter';
$lang['start']['managesieve_description'] = 'Please use <b>Mozilla Thunderbird</b> with the <a style="text-decoration:none" target="_blank" href="%s"><b>nightly sieve extension</b></a>.<br>Start Thunderbird, open the add-on settings and drop the newly downloaded xpi file into the opened window.<br>The server name is <b>%s</b>, use port <b>4190</b> if you are asked for. The login data match your email login.';
$lang['start']['service'] = 'Service';
$lang['start']['encryption'] = 'Encryption method';
$lang['start']['help'] = 'Show/Hide help panel'; $lang['start']['help'] = 'Show/Hide help panel';
$lang['start']['hostname'] = 'Hostname';
$lang['start']['port'] = 'Port';
$lang['start']['footer'] = '';
$lang['header']['mailcow_settings'] = 'Configuration'; $lang['header']['mailcow_settings'] = 'Configuration';
$lang['header']['administration'] = 'Administration'; $lang['header']['administration'] = 'Administration';
$lang['header']['mailboxes'] = 'Mailboxes'; $lang['header']['mailboxes'] = 'Mailboxes';
$lang['header']['user_settings'] = 'User settings'; $lang['header']['user_settings'] = 'User settings';
$lang['header']['diagnostics'] = 'Diagnostics';
$lang['header']['login'] = 'Login';
$lang['header']['logged_in_as_logout'] = 'Logged in as <b>%s</b> (logout)';
$lang['header']['logged_in_as_logout_dual'] = 'Logged in as <b>%s <span class="text-info">[%s]</span></b>'; $lang['header']['logged_in_as_logout_dual'] = 'Logged in as <b>%s <span class="text-info">[%s]</span></b>';
$lang['header']['locale'] = 'Language';
$lang['mailbox']['domain'] = 'Domain'; $lang['mailbox']['domain'] = 'Domain';
$lang['mailbox']['spam_aliases'] = 'Temp. alias'; $lang['mailbox']['spam_aliases'] = 'Temp. alias';
$lang['mailbox']['multiple_bookings'] = 'Multiple bookings'; $lang['mailbox']['multiple_bookings'] = 'Multiple bookings';
$lang['mailbox']['kind'] = 'Kind'; $lang['mailbox']['kind'] = 'Kind';
$lang['mailbox']['description'] = 'Description'; $lang['mailbox']['description'] = 'Description';
$lang['mailbox']['alias'] = 'Alias'; $lang['mailbox']['alias'] = 'Alias';
$lang['mailbox']['resource_name'] = 'Resource name';
$lang['mailbox']['aliases'] = 'Aliases'; $lang['mailbox']['aliases'] = 'Aliases';
$lang['mailbox']['domains'] = 'Domains'; $lang['mailbox']['domains'] = 'Domains';
$lang['mailbox']['mailboxes'] = 'Mailboxes'; $lang['mailbox']['mailboxes'] = 'Mailboxes';
@ -246,7 +198,6 @@ $lang['mailbox']['mailbox_quota'] = 'Max. size of a mailbox';
$lang['mailbox']['domain_quota'] = 'Quota'; $lang['mailbox']['domain_quota'] = 'Quota';
$lang['mailbox']['active'] = 'Active'; $lang['mailbox']['active'] = 'Active';
$lang['mailbox']['action'] = 'Action'; $lang['mailbox']['action'] = 'Action';
$lang['mailbox']['ratelimit'] = 'Outgoing rate limit/h';
$lang['mailbox']['backup_mx'] = 'Backup MX'; $lang['mailbox']['backup_mx'] = 'Backup MX';
$lang['mailbox']['domain_aliases'] = 'Domain aliases'; $lang['mailbox']['domain_aliases'] = 'Domain aliases';
$lang['mailbox']['target_domain'] = 'Target domain'; $lang['mailbox']['target_domain'] = 'Target domain';
@ -256,20 +207,15 @@ $lang['mailbox']['fname'] = 'Full name';
$lang['mailbox']['filter_table'] = 'Filter table'; $lang['mailbox']['filter_table'] = 'Filter table';
$lang['mailbox']['yes'] = '&#10004;'; $lang['mailbox']['yes'] = '&#10004;';
$lang['mailbox']['no'] = '&#10008;'; $lang['mailbox']['no'] = '&#10008;';
$lang['mailbox']['quota'] = 'Quota';
$lang['mailbox']['in_use'] = 'In use (%)'; $lang['mailbox']['in_use'] = 'In use (%)';
$lang['mailbox']['msg_num'] = 'Message #'; $lang['mailbox']['msg_num'] = 'Message #';
$lang['mailbox']['remove'] = 'Remove'; $lang['mailbox']['remove'] = 'Remove';
$lang['mailbox']['edit'] = 'Edit'; $lang['mailbox']['edit'] = 'Edit';
$lang['mailbox']['archive'] = 'Archive';
$lang['mailbox']['no_record'] = 'No record for object %s';
$lang['mailbox']['no_record_single'] = 'No record';
$lang['mailbox']['add_domain'] = 'Add domain'; $lang['mailbox']['add_domain'] = 'Add domain';
$lang['mailbox']['add_domain_alias'] = 'Add domain alias'; $lang['mailbox']['add_domain_alias'] = 'Add domain alias';
$lang['mailbox']['add_mailbox'] = 'Add mailbox'; $lang['mailbox']['add_mailbox'] = 'Add mailbox';
$lang['mailbox']['add_resource'] = 'Add resource'; $lang['mailbox']['add_resource'] = 'Add resource';
$lang['mailbox']['add_alias'] = 'Add alias'; $lang['mailbox']['add_alias'] = 'Add alias';
$lang['mailbox']['add_domain_record_first'] = 'Please add a domain first';
$lang['mailbox']['empty'] = 'No results'; $lang['mailbox']['empty'] = 'No results';
$lang['mailbox']['toggle_all'] = 'Toggle all'; $lang['mailbox']['toggle_all'] = 'Toggle all';
$lang['mailbox']['quick_actions'] = 'Actions'; $lang['mailbox']['quick_actions'] = 'Actions';
@ -285,21 +231,6 @@ Each filter will be processed in the described order. Neither a failed script no
Prefilter User scripts Postfilter <a href="https://github.com/mailcow/mailcow-dockerized/blob/master/data/conf/dovecot/sieve_after" target="_blank">global sieve postfilter</a>'; Prefilter User scripts Postfilter <a href="https://github.com/mailcow/mailcow-dockerized/blob/master/data/conf/dovecot/sieve_after" target="_blank">global sieve postfilter</a>';
$lang['info']['no_action'] = 'No action applicable'; $lang['info']['no_action'] = 'No action applicable';
$lang['delete']['title'] = 'Remove object';
$lang['delete']['remove_domain_warning'] = '<b>Warning:</b> You are about to remove the domain <b>%s</b>!';
$lang['delete']['remove_syncjob_warning'] = '<b>Warning:</b> You are about to remove a sync job for user <b>%s</b>!';
$lang['delete']['remove_domainalias_warning'] = '<b>Warning:</b> You are about to remove the domain alias <b>%s</b>!';
$lang['delete']['remove_domainadmin_warning'] = '<b>Warning:</b> You are about to remove the domain administrator <b>%s</b>!';
$lang['delete']['remove_alias_warning'] = '<b>Warning:</b> You are about to remove the alias address <b>%s</b>!';
$lang['delete']['remove_mailbox_warning'] = '<b>Warning:</b> You are about to remove the mailbox <b>%s</b>!';
$lang['delete']['remove_mailbox_details'] = 'The mailbox will be <b>purged permanently</b>!';
$lang['delete']['remove_resource_warning'] = '<b>Warning:</b> You are about to remove the resource <b>%s</b>!';
$lang['delete']['remove_resource_details'] = 'The resource will be <b>purged permanently</b>!';
$lang['delete']['remove_domain_details'] = 'This also removes domain aliases.<br><br><b>A domain must be empty to be removed.</b>';
$lang['delete']['remove_syncjob_details'] = 'Objects from this sync job will not be pulled from the remote server anymore.';
$lang['delete']['remove_alias_details'] = 'Users will no longer be able to receive mail for or send mail from this address.</b>';
$lang['delete']['remove_button'] = 'Remove';
$lang['delete']['previous'] = 'Previous page';
$lang['edit']['syncjob'] = 'Edit sync job'; $lang['edit']['syncjob'] = 'Edit sync job';
$lang['edit']['username'] = 'Username'; $lang['edit']['username'] = 'Username';
@ -309,29 +240,25 @@ $lang['edit']['maxage'] = 'Maximum age of messages in days that will be polled f
$lang['edit']['maxbytespersecond'] = 'Max. bytes per second (0 equals to unlimited)'; $lang['edit']['maxbytespersecond'] = 'Max. bytes per second (0 equals to unlimited)';
$lang['edit']['automap'] = 'Try to automap folders ("Sent items", "Sent" => "Sent" etc.)'; $lang['edit']['automap'] = 'Try to automap folders ("Sent items", "Sent" => "Sent" etc.)';
$lang['edit']['skipcrossduplicates'] = 'Skip duplicate messages across folders (first come, first serve)'; $lang['edit']['skipcrossduplicates'] = 'Skip duplicate messages across folders (first come, first serve)';
$lang['add']['maxbytespersecond'] = 'Max. bytes per second (0 equals to unlimited)';
$lang['add']['automap'] = 'Try to automap folders ("Sent items", "Sent" => "Sent" etc.)'; $lang['add']['automap'] = 'Try to automap folders ("Sent items", "Sent" => "Sent" etc.)';
$lang['add']['skipcrossduplicates'] = 'Skip duplicate messages across folders (first come, first serve)'; $lang['add']['skipcrossduplicates'] = 'Skip duplicate messages across folders (first come, first serve)';
$lang['edit']['subfolder2'] = 'Sync into subfolder on destination<br><small>(empty = do not use subfolder)</small>'; $lang['edit']['subfolder2'] = 'Sync into subfolder on destination<br><small>(empty = do not use subfolder)</small>';
$lang['edit']['mins_interval'] = 'Interval (min)'; $lang['edit']['mins_interval'] = 'Interval (min)';
$lang['edit']['exclude'] = 'Exclude objects (regex)'; $lang['edit']['exclude'] = 'Exclude objects (regex)';
$lang['edit']['save'] = 'Save changes'; $lang['edit']['save'] = 'Save changes';
$lang['edit']['archive'] = 'Archive access';
$lang['edit']['max_mailboxes'] = 'Max. possible mailboxes'; $lang['edit']['max_mailboxes'] = 'Max. possible mailboxes';
$lang['edit']['title'] = 'Edit object'; $lang['edit']['title'] = 'Edit object';
$lang['edit']['target_address'] = 'Goto address/es <small>(comma-separated)</small>'; $lang['edit']['target_address'] = 'Goto address/es <small>(comma-separated)</small>';
$lang['edit']['active'] = 'Active'; $lang['edit']['active'] = 'Active';
$lang['edit']['force_pw_update'] = 'Force password update at next login';
$lang['edit']['force_pw_update_info'] = 'This user will only be able to login to mailcow UI.';
$lang['edit']['target_domain'] = 'Target domain'; $lang['edit']['target_domain'] = 'Target domain';
$lang['edit']['password'] = 'Password'; $lang['edit']['password'] = 'Password';
$lang['edit']['ratelimit'] = 'Outgoing rate limit/h';
$lang['danger']['ratelimt_less_one'] = 'Outgoing rate limit/h must not be less than 1';
$lang['edit']['password_repeat'] = 'Confirmation password (repeat)'; $lang['edit']['password_repeat'] = 'Confirmation password (repeat)';
$lang['edit']['domain_admin'] = 'Edit domain administrator'; $lang['edit']['domain_admin'] = 'Edit domain administrator';
$lang['edit']['domain'] = 'Edit domain'; $lang['edit']['domain'] = 'Edit domain';
$lang['edit']['alias_domain'] = 'Alias domain';
$lang['edit']['edit_alias_domain'] = 'Edit Alias domain'; $lang['edit']['edit_alias_domain'] = 'Edit Alias domain';
$lang['edit']['domains'] = 'Domains'; $lang['edit']['domains'] = 'Domains';
$lang['edit']['destroy'] = 'Manual data input';
$lang['edit']['alias'] = 'Edit alias'; $lang['edit']['alias'] = 'Edit alias';
$lang['edit']['mailbox'] = 'Edit mailbox'; $lang['edit']['mailbox'] = 'Edit mailbox';
$lang['edit']['description'] = 'Description'; $lang['edit']['description'] = 'Description';
@ -341,22 +268,16 @@ $lang['edit']['domain_quota'] = 'Domain quota';
$lang['edit']['backup_mx_options'] = 'Backup MX options'; $lang['edit']['backup_mx_options'] = 'Backup MX options';
$lang['edit']['relay_domain'] = 'Relay domain'; $lang['edit']['relay_domain'] = 'Relay domain';
$lang['edit']['relay_all'] = 'Relay all recipients'; $lang['edit']['relay_all'] = 'Relay all recipients';
$lang['edit']['dkim_signature'] = 'ARC + DKIM signature';
$lang['edit']['dkim_record_info'] = '<small>Please add a TXT record with the given value to your DNS settings.</small>';
$lang['edit']['relay_all_info'] = '<small>If you choose <b>not</b> to relay all recipients, you will need to add a ("blind") mailbox for every single recipient that should be relayed.</small>'; $lang['edit']['relay_all_info'] = '<small>If you choose <b>not</b> to relay all recipients, you will need to add a ("blind") mailbox for every single recipient that should be relayed.</small>';
$lang['edit']['full_name'] = 'Full name'; $lang['edit']['full_name'] = 'Full name';
$lang['edit']['quota_mb'] = 'Quota (MiB)'; $lang['edit']['quota_mb'] = 'Quota (MiB)';
$lang['edit']['sender_acl'] = 'Allow to send as'; $lang['edit']['sender_acl'] = 'Allow to send as';
$lang['edit']['sender_acl_info'] = 'Aliases cannot be deselected.';
$lang['edit']['dkim_txt_name'] = 'TXT record name:';
$lang['edit']['dkim_txt_value'] = 'TXT record value:';
$lang['edit']['previous'] = 'Previous page'; $lang['edit']['previous'] = 'Previous page';
$lang['edit']['unchanged_if_empty'] = 'If unchanged leave blank'; $lang['edit']['unchanged_if_empty'] = 'If unchanged leave blank';
$lang['edit']['dont_check_sender_acl'] = "Disable sender check for domain %s + alias domains"; $lang['edit']['dont_check_sender_acl'] = "Disable sender check for domain %s + alias domains";
$lang['edit']['multiple_bookings'] = 'Multiple bookings'; $lang['edit']['multiple_bookings'] = 'Multiple bookings';
$lang['edit']['kind'] = 'Kind'; $lang['edit']['kind'] = 'Kind';
$lang['edit']['resource'] = 'Resource'; $lang['edit']['resource'] = 'Resource';
$lang['edit']['goto_null'] = 'Silently discard mail';
$lang['add']['syncjob'] = 'Add sync job'; $lang['add']['syncjob'] = 'Add sync job';
$lang['add']['syncjob_hint'] = 'Be aware that passwords need to be saved plain-text!'; $lang['add']['syncjob_hint'] = 'Be aware that passwords need to be saved plain-text!';
@ -365,8 +286,6 @@ $lang['add']['port'] = 'Port';
$lang['add']['username'] = 'Username'; $lang['add']['username'] = 'Username';
$lang['add']['enc_method'] = 'Encryption method'; $lang['add']['enc_method'] = 'Encryption method';
$lang['add']['mins_interval'] = 'Polling interval (minutes)'; $lang['add']['mins_interval'] = 'Polling interval (minutes)';
$lang['add']['maxage'] = 'Maximum age of messages that will be polled from remote (0 = ignore age)';
$lang['add']['subfolder2'] = 'Sync into subfolder on destination';
$lang['add']['exclude'] = 'Exclude objects (regex)'; $lang['add']['exclude'] = 'Exclude objects (regex)';
$lang['add']['delete2duplicates'] = 'Delete duplicates on destination'; $lang['add']['delete2duplicates'] = 'Delete duplicates on destination';
$lang['add']['delete1'] = 'Delete from source when completed'; $lang['add']['delete1'] = 'Delete from source when completed';
@ -375,14 +294,11 @@ $lang['edit']['delete2duplicates'] = 'Delete duplicates on destination';
$lang['edit']['delete1'] = 'Delete from source when completed'; $lang['edit']['delete1'] = 'Delete from source when completed';
$lang['edit']['delete2'] = 'Delete messages on destination that are not on source'; $lang['edit']['delete2'] = 'Delete messages on destination that are not on source';
$lang['add']['title'] = 'Add object';
$lang['add']['domain'] = 'Domain'; $lang['add']['domain'] = 'Domain';
$lang['add']['active'] = 'Active'; $lang['add']['active'] = 'Active';
$lang['add']['multiple_bookings'] = 'Multiple bookings'; $lang['add']['multiple_bookings'] = 'Multiple bookings';
$lang['add']['save'] = 'Save changes';
$lang['add']['description'] = 'Description'; $lang['add']['description'] = 'Description';
$lang['add']['max_aliases'] = 'Max. possible aliases'; $lang['add']['max_aliases'] = 'Max. possible aliases';
$lang['add']['resource_name'] = 'Resource name';
$lang['add']['max_mailboxes'] = 'Max. possible mailboxes'; $lang['add']['max_mailboxes'] = 'Max. possible mailboxes';
$lang['add']['mailbox_quota_m'] = 'Max. quota per mailbox (MiB)'; $lang['add']['mailbox_quota_m'] = 'Max. quota per mailbox (MiB)';
$lang['add']['domain_quota_m'] = 'Total domain quota (MiB)'; $lang['add']['domain_quota_m'] = 'Total domain quota (MiB)';
@ -390,8 +306,6 @@ $lang['add']['backup_mx_options'] = 'Backup MX options';
$lang['add']['relay_all'] = 'Relay all recipients'; $lang['add']['relay_all'] = 'Relay all recipients';
$lang['add']['relay_domain'] = 'Relay this domain'; $lang['add']['relay_domain'] = 'Relay this domain';
$lang['add']['relay_all_info'] = '<small>If you choose <b>not</b> to relay all recipients, you will need to add a ("blind") mailbox for every single recipient that should be relayed.</small>'; $lang['add']['relay_all_info'] = '<small>If you choose <b>not</b> to relay all recipients, you will need to add a ("blind") mailbox for every single recipient that should be relayed.</small>';
$lang['add']['alias'] = 'Alias(es)';
$lang['add']['alias_spf_fail'] = '<b>Note:</b> If your chosen destination address is an external mailbox, the <b>receiving mailserver</b> may reject your message due to an SPF failure.</a>';
$lang['add']['alias_address'] = 'Alias address/es'; $lang['add']['alias_address'] = 'Alias address/es';
$lang['add']['alias_address_info'] = '<small>Full email address/es or @example.com, to catch all messages for a domain (comma-separated). <b>mailcow domains only</b>.</small>'; $lang['add']['alias_address_info'] = '<small>Full email address/es or @example.com, to catch all messages for a domain (comma-separated). <b>mailcow domains only</b>.</small>';
$lang['add']['alias_domain_info'] = '<small>Valid domain names only (comma-separated).</small>'; $lang['add']['alias_domain_info'] = '<small>Valid domain names only (comma-separated).</small>';
@ -400,8 +314,6 @@ $lang['add']['target_address_info'] = '<small>Full email address/es (comma-separ
$lang['add']['alias_domain'] = 'Alias domain'; $lang['add']['alias_domain'] = 'Alias domain';
$lang['add']['select'] = 'Please select...'; $lang['add']['select'] = 'Please select...';
$lang['add']['target_domain'] = 'Target domain'; $lang['add']['target_domain'] = 'Target domain';
$lang['add']['mailbox'] = 'Mailbox';
$lang['add']['resource'] = 'Resource';
$lang['add']['kind'] = 'Kind'; $lang['add']['kind'] = 'Kind';
$lang['add']['mailbox_username'] = 'Username (left part of an email address)'; $lang['add']['mailbox_username'] = 'Username (left part of an email address)';
$lang['add']['full_name'] = 'Full name'; $lang['add']['full_name'] = 'Full name';
@ -409,7 +321,6 @@ $lang['add']['quota_mb'] = 'Quota (MiB)';
$lang['add']['select_domain'] = 'Please select a domain first'; $lang['add']['select_domain'] = 'Please select a domain first';
$lang['add']['password'] = 'Password'; $lang['add']['password'] = 'Password';
$lang['add']['password_repeat'] = 'Confirmation password (repeat)'; $lang['add']['password_repeat'] = 'Confirmation password (repeat)';
$lang['add']['previous'] = 'Previous page';
$lang['add']['restart_sogo_hint'] = 'You will need to restart the SOGo service container after adding a new domain!'; $lang['add']['restart_sogo_hint'] = 'You will need to restart the SOGo service container after adding a new domain!';
$lang['add']['goto_null'] = 'Silently discard mail'; $lang['add']['goto_null'] = 'Silently discard mail';
$lang['add']['validation_success'] = 'Validated successfully'; $lang['add']['validation_success'] = 'Validated successfully';
@ -428,16 +339,9 @@ $lang['mailbox']['inactive'] = 'Inactive';
$lang['edit']['validate_save'] = 'Validate and save'; $lang['edit']['validate_save'] = 'Validate and save';
$lang['login']['title'] = 'Login';
$lang['login']['administration'] = 'Administration';
$lang['login']['administration_details'] = 'Please use your Administrator login to perform administrative tasks.';
$lang['login']['user_settings'] = 'User settings';
$lang['login']['user_settings_details'] = 'Mailbox users can use mailcow UI to change their passwords, create temporary aliases (spam aliases), adjust the spam filter behaviour or import messages from a remote IMAP server.';
$lang['login']['username'] = 'Username'; $lang['login']['username'] = 'Username';
$lang['login']['password'] = 'Password'; $lang['login']['password'] = 'Password';
$lang['login']['reset_password'] = 'Reset my password';
$lang['login']['login'] = 'Login'; $lang['login']['login'] = 'Login';
$lang['login']['previous'] = "Previous page";
$lang['login']['delayed'] = 'Login was delayed by %s seconds.'; $lang['login']['delayed'] = 'Login was delayed by %s seconds.';
$lang['tfa']['tfa'] = "Two-factor authentication"; $lang['tfa']['tfa'] = "Two-factor authentication";
@ -447,15 +351,11 @@ $lang['tfa']['key_id'] = "An identifier for your YubiKey";
$lang['tfa']['key_id_totp'] = "An identifier for your key"; $lang['tfa']['key_id_totp'] = "An identifier for your key";
$lang['tfa']['api_register'] = 'mailcow uses the Yubico Cloud API. Please get an API key for your key <a href="https://upgrade.yubico.com/getapikey/" target="_blank">here</a>'; $lang['tfa']['api_register'] = 'mailcow uses the Yubico Cloud API. Please get an API key for your key <a href="https://upgrade.yubico.com/getapikey/" target="_blank">here</a>';
$lang['tfa']['u2f'] = "U2F authentication"; $lang['tfa']['u2f'] = "U2F authentication";
$lang['tfa']['hotp'] = "HOTP authentication";
$lang['tfa']['none'] = "Deactivate"; $lang['tfa']['none'] = "Deactivate";
$lang['tfa']['delete_tfa'] = "Disable TFA"; $lang['tfa']['delete_tfa'] = "Disable TFA";
$lang['tfa']['disable_tfa'] = "Disable TFA until next successful login"; $lang['tfa']['disable_tfa'] = "Disable TFA until next successful login";
$lang['tfa']['confirm_tfa'] = "Please confirm your one-time password in the below field";
$lang['tfa']['confirm'] = "Confirm"; $lang['tfa']['confirm'] = "Confirm";
$lang['tfa']['otp'] = "One-time password";
$lang['tfa']['totp'] = "Time-based OTP (Google Authenticator etc.)"; $lang['tfa']['totp'] = "Time-based OTP (Google Authenticator etc.)";
$lang['tfa']['trash_login'] = "Trash login";
$lang['tfa']['select'] = "Please select"; $lang['tfa']['select'] = "Please select";
$lang['tfa']['waiting_usb_auth'] = "<i>Waiting for USB device...</i><br><br>Please tap the button on your U2F USB device now."; $lang['tfa']['waiting_usb_auth'] = "<i>Waiting for USB device...</i><br><br>Please tap the button on your U2F USB device now.";
$lang['tfa']['waiting_usb_register'] = "<i>Waiting for USB device...</i><br><br>Please enter your password above and confirm your U2F registration by tapping the button on your U2F USB device."; $lang['tfa']['waiting_usb_register'] = "<i>Waiting for USB device...</i><br><br>Please enter your password above and confirm your U2F registration by tapping the button on your U2F USB device.";
@ -464,7 +364,6 @@ $lang['tfa']['enter_qr_code'] = "Your TOTP code if your device cannot scan QR co
$lang['tfa']['confirm_totp_token'] = "Please confirm your changes by entering the generated token"; $lang['tfa']['confirm_totp_token'] = "Please confirm your changes by entering the generated token";
$lang['admin']['no_new_rows'] = 'No further rows available'; $lang['admin']['no_new_rows'] = 'No further rows available';
$lang['admin']['additional_rows'] = ' additional rows were added'; // parses to 'n additional rows were added'
$lang['admin']['private_key'] = 'Private key'; $lang['admin']['private_key'] = 'Private key';
$lang['admin']['import'] = 'Import'; $lang['admin']['import'] = 'Import';
$lang['admin']['import_private_key'] = 'Import private key'; $lang['admin']['import_private_key'] = 'Import private key';
@ -476,38 +375,13 @@ $lang['admin']['f2b_netban_ipv4'] = 'IPv4 subnet size to apply ban on (8-32)';
$lang['admin']['f2b_netban_ipv6'] = 'IPv6 subnet size to apply ban on (8-128)'; $lang['admin']['f2b_netban_ipv6'] = 'IPv6 subnet size to apply ban on (8-128)';
$lang['admin']['f2b_whitelist'] = 'Whitelisted networks/hosts'; $lang['admin']['f2b_whitelist'] = 'Whitelisted networks/hosts';
$lang['admin']['search_domain_da'] = 'Search domains'; $lang['admin']['search_domain_da'] = 'Search domains';
$lang['admin']['restrictions'] = 'Postfix Restrictions';
$lang['admin']['rr'] = 'Postfix Recipient Restrictions';
$lang['admin']['reset_defaults'] = 'Reset to defaults';
$lang['admin']['sr'] = 'Postfix Sender Restrictions';
$lang['admin']['r_inactive'] = 'Inactive restrictions'; $lang['admin']['r_inactive'] = 'Inactive restrictions';
$lang['admin']['r_active'] = 'Active restrictions'; $lang['admin']['r_active'] = 'Active restrictions';
$lang['admin']['r_info'] = 'Greyed out/disabled elements on the list of active restrictions are not known as valid restrictions to mailcow and cannot be moved. Unknown restrictions will be set in order of appearance anyway. <br>You can add new elements in <code>inc/vars.local.inc.php</code> to be able to toggle them.'; $lang['admin']['r_info'] = 'Greyed out/disabled elements on the list of active restrictions are not known as valid restrictions to mailcow and cannot be moved. Unknown restrictions will be set in order of appearance anyway. <br>You can add new elements in <code>inc/vars.local.inc.php</code> to be able to toggle them.';
$lang['admin']['public_folders'] = 'Public Folders';
$lang['admin']['public_folders_text'] = 'A namespace "Public" is created. Below\'s public folder name indicates the name of the first auto-created mailbox within this namespace.';
$lang['admin']['public_folder_name'] = 'Folder name <small>(alphanumeric)</small>';
$lang['admin']['public_folder_enable'] = 'Enable public folder';
$lang['admin']['public_folder_enable_text'] = 'Toggling this option does not delete mail in any public folder.';
$lang['admin']['public_folder_pusf'] = 'Enable per-user seen flag';
$lang['admin']['public_folder_pusf_text'] = 'A "per-user seen flag"-enabled system will not mark a mail as read for User B, when User A has seen it, but User B did not.';
$lang['admin']['privacy'] = 'Privacy';
$lang['admin']['privacy_text'] = 'This option enables a PCRE table to remove "User-Agent", "X-Enigmail", "X-Mailer", "X-Originating-IP" and replaces "Received: from" headers with localhost/127.0.0.1.';
$lang['admin']['privacy_anon_mail'] = 'Anonymize outgoing mail';
$lang['admin']['dkim_txt_name'] = 'TXT record name:';
$lang['admin']['dkim_txt_value'] = 'TXT record value:';
$lang['admin']['dkim_key_length'] = 'DKIM key length (bits)'; $lang['admin']['dkim_key_length'] = 'DKIM key length (bits)';
$lang['admin']['dkim_key_valid'] = 'Key valid'; $lang['admin']['dkim_key_valid'] = 'Key valid';
$lang['admin']['dkim_key_unused'] = 'Key unused'; $lang['admin']['dkim_key_unused'] = 'Key unused';
$lang['admin']['dkim_key_missing'] = 'Key missing'; $lang['admin']['dkim_key_missing'] = 'Key missing';
$lang['admin']['dkim_key_hint'] = 'Selector for DKIM keys is always <code>dkim</code>.';
$lang['admin']['previous'] = 'Previous page';
$lang['admin']['quota_mb'] = 'Quota (MiB):';
$lang['admin']['sender_acl'] = 'Allow to send as:';
$lang['admin']['msg_size'] = 'Message size';
$lang['admin']['msg_size_limit'] = 'Message size limit now';
$lang['admin']['msg_size_limit_details'] = 'Applying a new limit will reload Postfix and the webserver.';
$lang['admin']['maintenance'] = 'Maintenance and Information';
$lang['admin']['sys_info'] = 'System information';
$lang['admin']['dkim_add_key'] = 'Add ARC/DKIM key'; $lang['admin']['dkim_add_key'] = 'Add ARC/DKIM key';
$lang['admin']['dkim_keys'] = 'ARC/DKIM keys'; $lang['admin']['dkim_keys'] = 'ARC/DKIM keys';
$lang['admin']['add'] = 'Add'; $lang['admin']['add'] = 'Add';
@ -532,20 +406,12 @@ $lang['admin']['unchanged_if_empty'] = 'If unchanged leave blank';
$lang['admin']['yes'] = '&#10004;'; $lang['admin']['yes'] = '&#10004;';
$lang['admin']['no'] = '&#10008;'; $lang['admin']['no'] = '&#10008;';
$lang['admin']['access'] = 'Access'; $lang['admin']['access'] = 'Access';
$lang['admin']['invalid_max_msg_size'] = 'Invalid max. message size';
$lang['admin']['site_not_found'] = 'Cannot locate mailcow site configuration';
$lang['admin']['public_folder_empty'] = 'Public folder name must not be empty';
$lang['admin']['set_rr_failed'] = 'Cannot set Postfix restrictions';
$lang['admin']['no_record'] = 'No record'; $lang['admin']['no_record'] = 'No record';
$lang['admin']['filter_table'] = 'Filter table'; $lang['admin']['filter_table'] = 'Filter table';
$lang['admin']['empty'] = 'No results'; $lang['admin']['empty'] = 'No results';
$lang['admin']['time'] = 'Time';
$lang['admin']['priority'] = 'Priority';
$lang['admin']['message'] = 'Message';
$lang['admin']['refresh'] = 'Refresh'; $lang['admin']['refresh'] = 'Refresh';
$lang['admin']['to_top'] = 'Back to top'; $lang['admin']['to_top'] = 'Back to top';
$lang['admin']['in_use_by'] = 'In use by'; $lang['admin']['in_use_by'] = 'In use by';
$lang['admin']['logs'] = 'Logs';
$lang['admin']['forwarding_hosts'] = 'Forwarding Hosts'; $lang['admin']['forwarding_hosts'] = 'Forwarding Hosts';
$lang['admin']['forwarding_hosts_hint'] = 'Incoming messages are unconditionally accepted from any hosts listed here. These hosts are then not checked against DNSBLs or subjected to greylisting. Spam received from them is never rejected, but optionally it can be filed into the Junk folder. The most common use for this is to specify mail servers on which you have set up a rule that forwards incoming emails to your mailcow server.'; $lang['admin']['forwarding_hosts_hint'] = 'Incoming messages are unconditionally accepted from any hosts listed here. These hosts are then not checked against DNSBLs or subjected to greylisting. Spam received from them is never rejected, but optionally it can be filed into the Junk folder. The most common use for this is to specify mail servers on which you have set up a rule that forwards incoming emails to your mailcow server.';
$lang['admin']['forwarding_hosts_add_hint'] = 'You can either specify IPv4/IPv6 addresses, networks in CIDR notation, host names (which will be resolved to IP addresses), or domain names (which will be resolved to IP addresses by querying SPF records or, in their absence, MX records).'; $lang['admin']['forwarding_hosts_add_hint'] = 'You can either specify IPv4/IPv6 addresses, networks in CIDR notation, host names (which will be resolved to IP addresses), or domain names (which will be resolved to IP addresses by querying SPF records or, in their absence, MX records).';
@ -555,7 +421,6 @@ $lang['admin']['host'] = 'Host';
$lang['admin']['source'] = 'Source'; $lang['admin']['source'] = 'Source';
$lang['admin']['add_forwarding_host'] = 'Add Forwarding Host'; $lang['admin']['add_forwarding_host'] = 'Add Forwarding Host';
$lang['admin']['add_relayhost'] = 'Add Relayhost'; $lang['admin']['add_relayhost'] = 'Add Relayhost';
$lang['delete']['remove_forwardinghost_warning'] = '<b>Warning:</b> You are about to remove the forwarding host <b>%s</b>!';
$lang['success']['forwarding_host_removed'] = "Forwarding host %s has been removed"; $lang['success']['forwarding_host_removed'] = "Forwarding host %s has been removed";
$lang['success']['forwarding_host_added'] = "Forwarding host %s has been added"; $lang['success']['forwarding_host_added'] = "Forwarding host %s has been added";
$lang['success']['relayhost_removed'] = "Relayhost %s has been removed"; $lang['success']['relayhost_removed'] = "Relayhost %s has been removed";
@ -568,18 +433,18 @@ $lang['diagnostics']['dns_records_data'] = 'Correct Data';
$lang['diagnostics']['dns_records_status'] = 'Current State'; $lang['diagnostics']['dns_records_status'] = 'Current State';
$lang['diagnostics']['optional'] = 'This record is optional.'; $lang['diagnostics']['optional'] = 'This record is optional.';
$lang['diagnostics']['cname_from_a'] = 'Value derived from A/AAAA record. This is supported as long as the record points to the correct resource.'; $lang['diagnostics']['cname_from_a'] = 'Value derived from A/AAAA record. This is supported as long as the record points to the correct resource.';
$lang['diagnostics']['allow'] = 'Allow %s';
$lang['admin']['relay_from'] = '"From:" address'; $lang['admin']['relay_from'] = '"From:" address';
$lang['admin']['relay_run'] = "Run test";
$lang['admin']['api_allow_from'] = "Allow API access from these IPs"; $lang['admin']['api_allow_from'] = "Allow API access from these IPs";
$lang['admin']['api_key'] = "API key"; $lang['admin']['api_key'] = "API key";
$lang['admin']['activate_api'] = "Activate API"; $lang['admin']['activate_api'] = "Activate API";
$lang['admin']['regen_api_key'] = "Regenerate API key"; $lang['admin']['regen_api_key'] = "Regenerate API key";
$lang['admin']['quarantaine'] = "Quarantine"; $lang['admin']['quarantine'] = "Quarantine";
$lang['admin']['quarantaine_retention_size'] = "Retentions per mailbox:"; $lang['admin']['quarantine_retention_size'] = "Retentions per mailbox:";
$lang['admin']['quarantaine_max_size'] = "Maximum size in MiB (larger elements are discarded):"; $lang['admin']['quarantine_max_size'] = "Maximum size in MiB (larger elements are discarded):";
$lang['admin']['quarantaine_exclude_domains'] = "Exclude domains and alias-domains:"; $lang['admin']['quarantine_exclude_domains'] = "Exclude domains and alias-domains:";
$lang['admin']['ui_texts'] = "UI labels and texts"; $lang['admin']['ui_texts'] = "UI labels and texts";
$lang['admin']['help_text'] = "Override help text below login mask (HTML allowed)"; $lang['admin']['help_text'] = "Override help text below login mask (HTML allowed)";
@ -602,12 +467,8 @@ $lang['mailbox']['waiting'] = "Waiting";
$lang['mailbox']['status'] = "Status"; $lang['mailbox']['status'] = "Status";
$lang['mailbox']['running'] = "Running"; $lang['mailbox']['running'] = "Running";
$lang['edit']['tls_policy'] = "Change TLS policy";
$lang['edit']['spam_score'] = "Set a custom spam score"; $lang['edit']['spam_score'] = "Set a custom spam score";
$lang['edit']['spam_policy'] = "Add or remove items to white-/blacklist"; $lang['edit']['spam_policy'] = "Add or remove items to white-/blacklist";
$lang['edit']['delimiter_action'] = "Change delimiter action";
$lang['edit']['syncjobs'] = "Add or change sync jobs";
$lang['edit']['eas_reset'] = "Reset EAS devices";
$lang['edit']['spam_alias'] = "Create or change time limited alias addresses"; $lang['edit']['spam_alias'] = "Create or change time limited alias addresses";
$lang['danger']['img_tmp_missing'] = "Cannot validate image file: Temporary file not found"; $lang['danger']['img_tmp_missing'] = "Cannot validate image file: Temporary file not found";
@ -620,32 +481,32 @@ $lang['success']['reset_main_logo'] = "Reset to default logo";
$lang['success']['items_released'] = "Selected items were released"; $lang['success']['items_released'] = "Selected items were released";
$lang['danger']['imagick_exception'] = "Error: Imagick exception while reading image"; $lang['danger']['imagick_exception'] = "Error: Imagick exception while reading image";
$lang['quarantaine']['quarantaine'] = "Quarantine"; $lang['quarantine']['quarantine'] = "Quarantine";
$lang['quarantaine']['qinfo'] = "The quarantine system will save rejected mail to the database, while the sender will <em>not</em> be given the impression of a delivered mail."; $lang['quarantine']['qinfo'] = "The quarantine system will save rejected mail to the database, while the sender will <em>not</em> be given the impression of a delivered mail.";
$lang['quarantaine']['release'] = "Release"; $lang['quarantine']['release'] = "Release";
$lang['quarantaine']['empty'] = 'No results'; $lang['quarantine']['empty'] = 'No results';
$lang['quarantaine']['toggle_all'] = 'Toggle all'; $lang['quarantine']['toggle_all'] = 'Toggle all';
$lang['quarantaine']['quick_actions'] = 'Actions'; $lang['quarantine']['quick_actions'] = 'Actions';
$lang['quarantaine']['remove'] = 'Remove'; $lang['quarantine']['remove'] = 'Remove';
$lang['quarantaine']['received'] = "Received"; $lang['quarantine']['received'] = "Received";
$lang['quarantaine']['action'] = "Action"; $lang['quarantine']['action'] = "Action";
$lang['quarantaine']['rcpt'] = "Recipient"; $lang['quarantine']['rcpt'] = "Recipient";
$lang['quarantaine']['qid'] = "Rspamd QID"; $lang['quarantine']['qid'] = "Rspamd QID";
$lang['quarantaine']['sender'] = "Sender"; $lang['quarantine']['sender'] = "Sender";
$lang['quarantaine']['show_item'] = "Show item"; $lang['quarantine']['show_item'] = "Show item";
$lang['quarantaine']['check_hash'] = "Search file hash @ VT"; $lang['quarantine']['check_hash'] = "Search file hash @ VT";
$lang['quarantaine']['qitem'] = "Quarantine item"; $lang['quarantine']['qitem'] = "Quarantine item";
$lang['quarantaine']['subj'] = "Subject"; $lang['quarantine']['subj'] = "Subject";
$lang['quarantaine']['text_plain_content'] = "Content (text/plain)"; $lang['quarantine']['text_plain_content'] = "Content (text/plain)";
$lang['quarantaine']['text_from_html_content'] = "Content (converted html)"; $lang['quarantine']['text_from_html_content'] = "Content (converted html)";
$lang['quarantaine']['atts'] = "Attachments"; $lang['quarantine']['atts'] = "Attachments";
$lang['header']['quarantaine'] = "Quarantine"; $lang['header']['quarantine'] = "Quarantine";
$lang['header']['debug'] = "Debug"; $lang['header']['debug'] = "Debug";
$lang['quarantaine']['release_body'] = "We have attached your message as eml file to this message."; $lang['quarantine']['release_body'] = "We have attached your message as eml file to this message.";
$lang['danger']['release_send_failed'] = "Message could not be released: %s"; $lang['danger']['release_send_failed'] = "Message could not be released: %s";
$lang['quarantaine']['release_subject'] = "Potentially damaging quarantine item %s"; $lang['quarantine']['release_subject'] = "Potentially damaging quarantine item %s";
$lang['mailbox']['bcc_map_type'] = "BCC type"; $lang['mailbox']['bcc_map_type'] = "BCC type";
$lang['mailbox']['bcc_type'] = "BCC type"; $lang['mailbox']['bcc_type'] = "BCC type";
@ -659,5 +520,11 @@ $lang['mailbox']['bcc_maps'] = "BCC maps";
$lang['mailbox']['bcc_to_sender'] = "Switch to sender map type"; $lang['mailbox']['bcc_to_sender'] = "Switch to sender map type";
$lang['mailbox']['bcc_to_rcpt'] = "Switch to recipient map type"; $lang['mailbox']['bcc_to_rcpt'] = "Switch to recipient map type";
$lang['mailbox']['add_bcc_entry'] = "Add BCC map"; $lang['mailbox']['add_bcc_entry'] = "Add BCC map";
$lang['mailbox']['bcc_info'] = "A recipient map type entry is used, when the local destination acts as recipient of a mail. Sender maps conform to the same principle.<br/> $lang['mailbox']['bcc_info'] = "BCC maps are used to silently forward copies of all messages to another address. A recipient map type entry is used, when the local destination acts as recipient of a mail. Sender maps conform to the same principle.<br/>
The local destination will not be informed about a failed delivery."; The local destination will not be informed about a failed delivery.";
$lang['mailbox']['address_rewriting'] = 'Address rewriting';
$lang['mailbox']['recipient_maps'] = 'Recipient maps';
$lang['mailbox']['recipient_map_info'] = 'Recipient maps are used to replace the destination address on a message before it is delivered.';
$lang['mailbox']['recipient_map_old'] = 'Original recipient';
$lang['mailbox']['recipient_map_new'] = 'New recipient';
$lang['mailbox']['add_recipient_map_entry'] = 'Add recipient map';

View File

@ -8,12 +8,7 @@ $lang['header']['restart_sogo'] = 'Reiniciar SOGo';
$lang['footer']['restart_sogo'] = 'Reiniciar SOGo'; $lang['footer']['restart_sogo'] = 'Reiniciar SOGo';
$lang['footer']['restart_now'] = 'Reiniciar ahora'; $lang['footer']['restart_now'] = 'Reiniciar ahora';
$lang['footer']['restart_sogo_info'] = 'Algunas tareas, por ejemplo agregar un dominio, requieren que reinicies SOGo para detectar cambios hechos en la UI de mailcow.<br><br><b>Importante:</b> Un reinicio sencillo puede tardar un poco en completarse, por favor espere a que termine.'; $lang['footer']['restart_sogo_info'] = 'Algunas tareas, por ejemplo agregar un dominio, requieren que reinicies SOGo para detectar cambios hechos en la UI de mailcow.<br><br><b>Importante:</b> Un reinicio sencillo puede tardar un poco en completarse, por favor espere a que termine.';
$lang['dkim']['confirm'] = "¿Estás Seguro?";
$lang['danger']['dkim_not_found'] = "Registro DKIM no encontrado";
$lang['danger']['dkim_remove_failed'] = "No se puede eliminar el registro DKIM seleccionado";
$lang['danger']['dkim_add_failed'] = "No se puede agregar el registro DKIM dado";
$lang['danger']['dkim_domain_or_sel_invalid'] = "Dominio DKIM ó selector inválido"; $lang['danger']['dkim_domain_or_sel_invalid'] = "Dominio DKIM ó selector inválido";
$lang['danger']['dkim_key_length_invalid'] = "Longitud de la llave DKIM inválida";
$lang['success']['dkim_removed'] = "Registro DKIM removido"; $lang['success']['dkim_removed'] = "Registro DKIM removido";
$lang['success']['dkim_added'] = "Registro DKIM guardado"; $lang['success']['dkim_added'] = "Registro DKIM guardado";
$lang['danger']['access_denied'] = "Acceso denegado o datos del formulario inválidos"; $lang['danger']['access_denied'] = "Acceso denegado o datos del formulario inválidos";
@ -25,8 +20,6 @@ $lang['danger']['alias_empty'] = "Dirección alias no debe estar vacía";
$lang['danger']['goto_empty'] = "Dirección \"goto\" no debe estar vacía"; $lang['danger']['goto_empty'] = "Dirección \"goto\" no debe estar vacía";
$lang['danger']['policy_list_from_exists'] = "Un registro con ese nombre ya existe"; $lang['danger']['policy_list_from_exists'] = "Un registro con ese nombre ya existe";
$lang['danger']['policy_list_from_invalid'] = "El registro tiene formato inválido"; $lang['danger']['policy_list_from_invalid'] = "El registro tiene formato inválido";
$lang['danger']['whitelist_exists'] = "Ya existe un registro con ese nombre en la lista blanca";
$lang['danger']['whitelist_from_invalid'] = "Formato inválido para el registro de lista blanca";
$lang['danger']['alias_invalid'] = "Dirección alias inválida"; $lang['danger']['alias_invalid'] = "Dirección alias inválida";
$lang['danger']['goto_invalid'] = "Dirección \"goto\" inválida"; $lang['danger']['goto_invalid'] = "Dirección \"goto\" inválida";
$lang['danger']['alias_domain_invalid'] = "El dominio alias es inválido"; $lang['danger']['alias_domain_invalid'] = "El dominio alias es inválido";
@ -38,26 +31,19 @@ $lang['danger']['aliasd_targetd_identical'] = "El dominio alias no debe ser igua
$lang['success']['alias_added'] = "Dirección/es alias ha/han sidgo agregada"; $lang['success']['alias_added'] = "Dirección/es alias ha/han sidgo agregada";
$lang['success']['alias_modified'] = "Cambios al alias guardados"; $lang['success']['alias_modified'] = "Cambios al alias guardados";
$lang['success']['mailbox_modified'] = "Cambios al buzón %s guardados"; $lang['success']['mailbox_modified'] = "Cambios al buzón %s guardados";
$lang['success']['msg_size_saved'] = "Limite del mensaje establecido";
$lang['danger']['aliasd_not_found'] = "Dominio alias no encontrado";
$lang['danger']['targetd_not_found'] = "Dominio destino no encontrado"; $lang['danger']['targetd_not_found'] = "Dominio destino no encontrado";
$lang['danger']['aliasd_exists'] = "Dominio alias ya existe";
$lang['success']['aliasd_added'] = "Agregado dominio alias %s"; $lang['success']['aliasd_added'] = "Agregado dominio alias %s";
$lang['success']['aliasd_modified'] = "Cambios al dominio alias %s guardados"; $lang['success']['aliasd_modified'] = "Cambios al dominio alias %s guardados";
$lang['success']['domain_modified'] = "Cambios al dominio %s guardados"; $lang['success']['domain_modified'] = "Cambios al dominio %s guardados";
$lang['success']['domain_admin_modified'] = "Cambios al administrador del dominio %s guardados"; $lang['success']['domain_admin_modified'] = "Cambios al administrador del dominio %s guardados";
$lang['success']['domain_admin_added'] = "Administrador del dominio %s agregado"; $lang['success']['domain_admin_added'] = "Administrador del dominio %s agregado";
$lang['success']['changes_general'] = 'Cambios guardados';
$lang['success']['admin_modified'] = "Cambios al administrador guardados"; $lang['success']['admin_modified'] = "Cambios al administrador guardados";
$lang['danger']['exit_code_not_null'] = "Error: Código de salida es %d";
$lang['danger']['mailbox_not_available'] = "Buzón no disponible";
$lang['danger']['username_invalid'] = "Nombre de usuario no se puede utilizar"; $lang['danger']['username_invalid'] = "Nombre de usuario no se puede utilizar";
$lang['danger']['password_mismatch'] = "Confirmación de contraseña no es identica"; $lang['danger']['password_mismatch'] = "Confirmación de contraseña no es identica";
$lang['danger']['password_complexity'] = "La contraseña no cumple con los requisitos"; $lang['danger']['password_complexity'] = "La contraseña no cumple con los requisitos";
$lang['danger']['password_empty'] = "El campo de la contraseña no debe estar vacío"; $lang['danger']['password_empty'] = "El campo de la contraseña no debe estar vacío";
$lang['danger']['login_failed'] = "Inicio de sesión fallido"; $lang['danger']['login_failed'] = "Inicio de sesión fallido";
$lang['danger']['mailbox_invalid'] = "Nombre de buzón inválido"; $lang['danger']['mailbox_invalid'] = "Nombre de buzón inválido";
$lang['danger']['mailbox_invalid_suggest'] = 'El nombre del buzón es inválido, ¿pretendías escribir "%s"?';
$lang['info']['fetchmail_planned'] = "La tarea para buscar correos se ha planeado. Por favor verifica el proceso más tarde."; $lang['info']['fetchmail_planned'] = "La tarea para buscar correos se ha planeado. Por favor verifica el proceso más tarde.";
$lang['danger']['fetchmail_source_empty'] = "Por favor define una carpeta fuente"; $lang['danger']['fetchmail_source_empty'] = "Por favor define una carpeta fuente";
$lang['danger']['fetchmail_dest_empty'] = "Por favor define una carpeta destino"; $lang['danger']['fetchmail_dest_empty'] = "Por favor define una carpeta destino";
@ -81,14 +67,10 @@ $lang['danger']['mailboxes_in_use'] = "Máx. de buzones debe ser mayor o igual a
$lang['danger']['aliases_in_use'] = "Máx. de alias debe ser mayor o igual a %d"; $lang['danger']['aliases_in_use'] = "Máx. de alias debe ser mayor o igual a %d";
$lang['danger']['sender_acl_invalid'] = "Valor del remitente ACL inválido"; $lang['danger']['sender_acl_invalid'] = "Valor del remitente ACL inválido";
$lang['danger']['domain_not_empty'] = "No se puede eliminar un dominio que no esté vacío"; $lang['danger']['domain_not_empty'] = "No se puede eliminar un dominio que no esté vacío";
$lang['warning']['spam_alias_temp_error'] = "Error temporal: No se puede agregar ese \"spam alias\", inténtelo más tarde.";
$lang['danger']['spam_alias_max_exceeded'] = "Máx. direcciones \"spam alias\" permitidas excedido";
$lang['danger']['fetchmail_active'] = "Un proceso ya se está ejecutando, por favor espera a que termine."; $lang['danger']['fetchmail_active'] = "Un proceso ya se está ejecutando, por favor espera a que termine.";
$lang['danger']['validity_missing'] = 'Por favor asigna un periodo de validez'; $lang['danger']['validity_missing'] = 'Por favor asigna un periodo de validez';
$lang['user']['off'] = "Apagado";
$lang['user']['user_change_fn'] = ""; $lang['user']['user_change_fn'] = "";
$lang['user']['user_settings'] = 'Configuración del usuario'; $lang['user']['user_settings'] = 'Configuración del usuario';
$lang['user']['mailbox_settings'] = 'Configuración del buzón';
$lang['user']['mailbox_details'] = 'Detalles del buzón'; $lang['user']['mailbox_details'] = 'Detalles del buzón';
$lang['user']['change_password'] = 'Cambiar contraseña'; $lang['user']['change_password'] = 'Cambiar contraseña';
$lang['user']['new_password'] = 'Nueva contraseña:'; $lang['user']['new_password'] = 'Nueva contraseña:';
@ -96,10 +78,8 @@ $lang['user']['save_changes'] = 'Guardar cambios';
$lang['user']['password_now'] = 'Contraseña actual (confirmar cambios):'; $lang['user']['password_now'] = 'Contraseña actual (confirmar cambios):';
$lang['user']['new_password_repeat'] = 'Confirmación de contraseña (repetir):'; $lang['user']['new_password_repeat'] = 'Confirmación de contraseña (repetir):';
$lang['user']['new_password_description'] = 'Requisitos: longitud de 6 caracteres, letras y números.'; $lang['user']['new_password_description'] = 'Requisitos: longitud de 6 caracteres, letras y números.';
$lang['user']['did_you_know'] = '<b>¿Sabías qué?</b> Puedes utilizar etiquetas en tu dirección email ("me+<b>privat</b>@example.com") para mover mensajes a una carpeta automáticamente (ejemplo: "privat").';
$lang['user']['spam_aliases'] = 'Alias de email temporales'; $lang['user']['spam_aliases'] = 'Alias de email temporales';
$lang['user']['alias'] = 'Alias'; $lang['user']['alias'] = 'Alias';
$lang['user']['aliases'] = 'Alias';
$lang['user']['is_catch_all'] = 'Atrapa-Todo para el/los dominio/s'; $lang['user']['is_catch_all'] = 'Atrapa-Todo para el/los dominio/s';
$lang['user']['aliases_also_send_as'] = 'También permitido para mandarse como'; $lang['user']['aliases_also_send_as'] = 'También permitido para mandarse como';
$lang['user']['aliases_send_as_all'] = 'No verifiques el acceso del remitente para los siguientes dominios'; $lang['user']['aliases_send_as_all'] = 'No verifiques el acceso del remitente para los siguientes dominios';
@ -138,8 +118,6 @@ $lang['user']['tls_enforce_in'] = 'Aplicar TLS entrante';
$lang['user']['tls_enforce_out'] = 'Aplicar TLS saliente'; $lang['user']['tls_enforce_out'] = 'Aplicar TLS saliente';
$lang['user']['no_record'] = 'Sin registro'; $lang['user']['no_record'] = 'Sin registro';
$lang['user']['misc_settings'] = 'Otras configuraciones de usuario';
$lang['user']['misc_delete_profile'] = 'Otras configuraciones de usuario';
$lang['user']['tag_handling'] = 'Establecer manejo para el correo etiquetado'; $lang['user']['tag_handling'] = 'Establecer manejo para el correo etiquetado';
$lang['user']['tag_in_subfolder'] = 'En subcarpeta'; $lang['user']['tag_in_subfolder'] = 'En subcarpeta';
@ -149,36 +127,16 @@ $lang['user']['tag_help_explain'] = 'En subcarpeta: una nueva subcarpeta llamada
En asunto: los nombres de las etiquetas serán añadidos al asunto de los correos, ejemplo: "[Facebook] Mis Noticias".'; En asunto: los nombres de las etiquetas serán añadidos al asunto de los correos, ejemplo: "[Facebook] Mis Noticias".';
$lang['user']['tag_help_example'] = 'Ejemplo de una dirección email etiquetada: mi<b>+Facebook</b>@ejemplo.org'; $lang['user']['tag_help_example'] = 'Ejemplo de una dirección email etiquetada: mi<b>+Facebook</b>@ejemplo.org';
$lang['start']['dashboard'] = '%s - panel';
$lang['start']['start_rc'] = 'Abrir Roundcube';
$lang['start']['start_sogo'] = 'Abrir SOGo';
$lang['start']['mailcow_apps_detail'] = 'Utiliza una aplicación de mailcow para acceder a tus correos, calendario, contactos y más.'; $lang['start']['mailcow_apps_detail'] = 'Utiliza una aplicación de mailcow para acceder a tus correos, calendario, contactos y más.';
$lang['start']['mailcow_panel'] = 'Iniciar mailcow UI';
$lang['start']['mailcow_panel_description'] = 'mailcow UI está disponible para administradores y usuarios de buzón.';
$lang['start']['mailcow_panel_detail'] = '<b>Administradores del dominio</b> crean, modifican o eliminan buzones y alias, cambia dominios y lee información más detallada sobre sus dominios asignados<br> $lang['start']['mailcow_panel_detail'] = '<b>Administradores del dominio</b> crean, modifican o eliminan buzones y alias, cambia dominios y lee información más detallada sobre sus dominios asignados<br>
<b>Usuarios de buzón</b> son capaces de crear alias de tiempo limitado (spam alias), cambiar su contraseña y la configuración del filtro de spam.'; <b>Usuarios de buzón</b> son capaces de crear alias de tiempo limitado (spam alias), cambiar su contraseña y la configuración del filtro de spam.';
$lang['start']['recommended_config'] = 'Configuración recomendada (sin ActiveSync)';
$lang['start']['imap_smtp_server'] = 'IMAP- y SMTP datos del servidor';
$lang['start']['imap_smtp_server_description'] = 'Para la mejor experiencia recomendamos utilizar <a href="%s" target="_blank"><b>Mozilla Thunderbird</b></a>.';
$lang['start']['imap_smtp_server_badge'] = 'Leer/Escribir correos';
$lang['start']['imap_smtp_server_auth_info'] = 'Por favor utiliza tu dirección de correo completa y el mecanismo de autenticación PLANO.<br> $lang['start']['imap_smtp_server_auth_info'] = 'Por favor utiliza tu dirección de correo completa y el mecanismo de autenticación PLANO.<br>
Tus datos para iniciar sesión serán encriptados por la encriptación obligatoria del servidor'; Tus datos para iniciar sesión serán encriptados por la encriptación obligatoria del servidor';
$lang['start']['managesieve'] = 'ManageSieve';
$lang['start']['managesieve_badge'] = 'Filtro de correos';
$lang['start']['managesieve_description'] = 'Por favor utiliza <b>Mozilla Thunderbird</b> con la <a style="text-decoration:none" target="_blank" href="%s"><b>extensión nightly sieve</b></a>.<br>Inicia Thunderbird, abre la configuración de complementos y suelta el archivo xpi descargado en la ventana abierta.<br>El servidor es <b>%s</b>, utiliza el puerto <b>4190</b> si se te pregunta. Los datos para iniciar sesión coinciden con los datos de tu correo.';
$lang['start']['service'] = 'Servicio';
$lang['start']['encryption'] = 'Método de encriptación';
$lang['start']['help'] = 'Mostrar/Ocultar panel de ayuda'; $lang['start']['help'] = 'Mostrar/Ocultar panel de ayuda';
$lang['start']['hostname'] = 'Hostname';
$lang['start']['port'] = 'Port';
$lang['start']['footer'] = '';
$lang['header']['mailcow_settings'] = 'Configuracion'; $lang['header']['mailcow_settings'] = 'Configuracion';
$lang['header']['administration'] = 'Administración'; $lang['header']['administration'] = 'Administración';
$lang['header']['mailboxes'] = 'Buzones'; $lang['header']['mailboxes'] = 'Buzones';
$lang['header']['user_settings'] = 'Configuraciones de usuario'; $lang['header']['user_settings'] = 'Configuraciones de usuario';
$lang['header']['login'] = 'Inicio de sesión';
$lang['header']['logged_in_as_logout'] = 'Sesión iniciada como <b>%s</b> (cerrar sesión)';
$lang['header']['locale'] = 'Idioma';
$lang['mailbox']['domain'] = 'Dominio'; $lang['mailbox']['domain'] = 'Dominio';
$lang['mailbox']['alias'] = 'Alias'; $lang['mailbox']['alias'] = 'Alias';
$lang['mailbox']['aliases'] = 'Alias'; $lang['mailbox']['aliases'] = 'Alias';
@ -188,7 +146,6 @@ $lang['mailbox']['mailbox_quota'] = 'Tamaño máx. de cuota';
$lang['mailbox']['domain_quota'] = 'Cuota'; $lang['mailbox']['domain_quota'] = 'Cuota';
$lang['mailbox']['active'] = 'Activo'; $lang['mailbox']['active'] = 'Activo';
$lang['mailbox']['action'] = 'Acción'; $lang['mailbox']['action'] = 'Acción';
$lang['mailbox']['ratelimit'] = 'Límite de la tarifa saliente/h';
$lang['mailbox']['backup_mx'] = 'Respaldar MX'; $lang['mailbox']['backup_mx'] = 'Respaldar MX';
$lang['mailbox']['domain_aliases'] = 'Alias de dominio'; $lang['mailbox']['domain_aliases'] = 'Alias de dominio';
$lang['mailbox']['target_domain'] = 'Dominio destino'; $lang['mailbox']['target_domain'] = 'Dominio destino';
@ -198,13 +155,10 @@ $lang['mailbox']['fname'] = 'Nombre completo';
$lang['mailbox']['filter_table'] = 'Filtrar tabla'; $lang['mailbox']['filter_table'] = 'Filtrar tabla';
$lang['mailbox']['yes'] = '&#10004;'; $lang['mailbox']['yes'] = '&#10004;';
$lang['mailbox']['no'] = '&#10008;'; $lang['mailbox']['no'] = '&#10008;';
$lang['mailbox']['quota'] = 'Cuota';
$lang['mailbox']['in_use'] = 'En uso (%)'; $lang['mailbox']['in_use'] = 'En uso (%)';
$lang['mailbox']['msg_num'] = 'Mensaje #'; $lang['mailbox']['msg_num'] = 'Mensaje #';
$lang['mailbox']['remove'] = 'Eliminar'; $lang['mailbox']['remove'] = 'Eliminar';
$lang['mailbox']['edit'] = 'Editar'; $lang['mailbox']['edit'] = 'Editar';
$lang['mailbox']['archive'] = 'Archivar';
$lang['mailbox']['no_record'] = 'Sin registro';
$lang['mailbox']['add_domain'] = 'Agregar dominio'; $lang['mailbox']['add_domain'] = 'Agregar dominio';
$lang['mailbox']['add_domain_alias'] = 'Agregar alias de dominio'; $lang['mailbox']['add_domain_alias'] = 'Agregar alias de dominio';
$lang['mailbox']['add_mailbox'] = 'Agregar buzón'; $lang['mailbox']['add_mailbox'] = 'Agregar buzón';
@ -212,35 +166,19 @@ $lang['mailbox']['add_alias'] = 'Agregar alias';
$lang['info']['no_action'] = 'No hay acción aplicable'; $lang['info']['no_action'] = 'No hay acción aplicable';
$lang['delete']['title'] = 'Eliminar objeto';
$lang['delete']['remove_domain_warning'] = '<b>Advertencia:</b> ¡Estás a punto de eliminar el dominio <b>%s</b>!';
$lang['delete']['remove_domainalias_warning'] = '<b>Advertencia:</b> ¡Estás a punto de eliminar el alias de dominio <b>%s</b>!';
$lang['delete']['remove_domainadmin_warning'] = '<b>Advertencia:</b> ¡Estás a punto de eliminar el administrador de dominio <b>%s</b>!';
$lang['delete']['remove_alias_warning'] = '<b>Advertencia:</b> ¡Estás a punto de eliminar la dirección alias <b>%s</b>!';
$lang['delete']['remove_mailbox_warning'] = '<b>Advertencia:</b> ¡Estás a punto de eliminar el buzón <b>%s</b>!';
$lang['delete']['remove_mailbox_details'] = 'El buzón será <b>purgado permanentemente</b>!';
$lang['delete']['remove_domain_details'] = 'Esto también eliminará alias de dominio.<br><br><b>Un dominio debe estar vacío para poder ser eliminado.</b>';
$lang['delete']['remove_alias_details'] = 'Los usuarios ya no serán capaces de recibir correos o enviar correos desde esta dirección.</b>';
$lang['delete']['remove_button'] = 'Eliminar';
$lang['delete']['previous'] = 'Página anterior';
$lang['edit']['save'] = 'Guardar cambios'; $lang['edit']['save'] = 'Guardar cambios';
$lang['edit']['archive'] = 'Acceso a archivos';
$lang['edit']['max_mailboxes'] = 'Máx. buzones posibles:'; $lang['edit']['max_mailboxes'] = 'Máx. buzones posibles:';
$lang['edit']['title'] = 'Editas objeto'; $lang['edit']['title'] = 'Editas objeto';
$lang['edit']['target_address'] = 'Dirección/es goto <small>(separadas por coma)</small>:'; $lang['edit']['target_address'] = 'Dirección/es goto <small>(separadas por coma)</small>:';
$lang['edit']['active'] = 'Activo'; $lang['edit']['active'] = 'Activo';
$lang['edit']['target_domain'] = 'Dominio destino:'; $lang['edit']['target_domain'] = 'Dominio destino:';
$lang['edit']['password'] = 'Contraseña:'; $lang['edit']['password'] = 'Contraseña:';
$lang['edit']['ratelimit'] = 'Límite de la tarifa saliente/h:';
$lang['danger']['ratelimt_less_one'] = 'El límite de la tarifa saliente/h no puede ser menos que 1';
$lang['edit']['password_repeat'] = 'Confirmación de contraseña (repetir):'; $lang['edit']['password_repeat'] = 'Confirmación de contraseña (repetir):';
$lang['edit']['domain_admin'] = 'Editar administrador del dominio'; $lang['edit']['domain_admin'] = 'Editar administrador del dominio';
$lang['edit']['domain'] = 'Editar dominio'; $lang['edit']['domain'] = 'Editar dominio';
$lang['edit']['alias_domain'] = 'Alias de dominio';
$lang['edit']['edit_alias_domain'] = 'Editar alias de dominio'; $lang['edit']['edit_alias_domain'] = 'Editar alias de dominio';
$lang['edit']['domains'] = 'Dominios'; $lang['edit']['domains'] = 'Dominios';
$lang['edit']['destroy'] = 'Entrada manual de datos';
$lang['edit']['alias'] = 'Editar alias'; $lang['edit']['alias'] = 'Editar alias';
$lang['edit']['mailbox'] = 'Editar buzón'; $lang['edit']['mailbox'] = 'Editar buzón';
$lang['edit']['description'] = 'Descripción:'; $lang['edit']['description'] = 'Descripción:';
@ -250,24 +188,17 @@ $lang['edit']['domain_quota'] = 'Cuota de dominio:';
$lang['edit']['backup_mx_options'] = 'Opciones del respaldo MX:'; $lang['edit']['backup_mx_options'] = 'Opciones del respaldo MX:';
$lang['edit']['relay_domain'] = 'Dominio de retransmisión'; $lang['edit']['relay_domain'] = 'Dominio de retransmisión';
$lang['edit']['relay_all'] = 'Retransmitir todos los recipientes'; $lang['edit']['relay_all'] = 'Retransmitir todos los recipientes';
$lang['edit']['dkim_signature'] = 'Firma ARC + DKIM:';
$lang['edit']['dkim_record_info'] = '<small>Por favor agrega un registro TXT con el siguiente valor a tu configuración DNS.</small>';
$lang['edit']['relay_all_info'] = '<small>Si eliges <b>no</b> retransmitir a todos los recipientes, necesitas agregar un buzón "blind"("ciego") por cada recipiente que debe ser retransmitido.</small>'; $lang['edit']['relay_all_info'] = '<small>Si eliges <b>no</b> retransmitir a todos los recipientes, necesitas agregar un buzón "blind"("ciego") por cada recipiente que debe ser retransmitido.</small>';
$lang['edit']['full_name'] = 'Nombre completo'; $lang['edit']['full_name'] = 'Nombre completo';
$lang['edit']['full_name'] = 'Nombre completo'; $lang['edit']['full_name'] = 'Nombre completo';
$lang['edit']['quota_mb'] = 'Cuota (MiB)'; $lang['edit']['quota_mb'] = 'Cuota (MiB)';
$lang['edit']['sender_acl'] = 'Permitir envío como:'; $lang['edit']['sender_acl'] = 'Permitir envío como:';
$lang['edit']['sender_acl_info'] = 'Los alias no pueden deseleccionarse.';
$lang['edit']['dkim_txt_name'] = 'Nombre del registro TXT:';
$lang['edit']['dkim_txt_value'] = 'Valor del registro TXT:';
$lang['edit']['previous'] = 'Página anterior'; $lang['edit']['previous'] = 'Página anterior';
$lang['edit']['unchanged_if_empty'] = 'Si no hay cambios dejalo en blanco'; $lang['edit']['unchanged_if_empty'] = 'Si no hay cambios dejalo en blanco';
$lang['edit']['dont_check_sender_acl'] = 'No verifiques remitente para el dominio %s'; $lang['edit']['dont_check_sender_acl'] = 'No verifiques remitente para el dominio %s';
$lang['add']['title'] = 'Agregar objeto';
$lang['add']['domain'] = 'Dominio'; $lang['add']['domain'] = 'Dominio';
$lang['add']['active'] = 'Activo'; $lang['add']['active'] = 'Activo';
$lang['add']['save'] = 'Guardar cambios';
$lang['add']['description'] = 'Descripción:'; $lang['add']['description'] = 'Descripción:';
$lang['add']['max_aliases'] = 'Máx. alias posibles:'; $lang['add']['max_aliases'] = 'Máx. alias posibles:';
$lang['add']['max_mailboxes'] = 'Máx. buzones posibles:'; $lang['add']['max_mailboxes'] = 'Máx. buzones posibles:';
@ -277,8 +208,6 @@ $lang['add']['backup_mx_options'] = 'Opciones del respaldo MX:';
$lang['add']['relay_all'] = 'Retransmitir todos los recipientes'; $lang['add']['relay_all'] = 'Retransmitir todos los recipientes';
$lang['add']['relay_domain'] = 'Retransmitir este dominio'; $lang['add']['relay_domain'] = 'Retransmitir este dominio';
$lang['add']['relay_all_info'] = '<small>Si eliges <b>no</b> retransmitir a todos los recipientes, necesitas agregar un buzón "blind"("ciego") por cada recipiente que debe ser retransmitido.</small>'; $lang['add']['relay_all_info'] = '<small>Si eliges <b>no</b> retransmitir a todos los recipientes, necesitas agregar un buzón "blind"("ciego") por cada recipiente que debe ser retransmitido.</small>';
$lang['add']['alias'] = 'Alias';
$lang['add']['alias_spf_fail'] = '<b>Nota:</b> Si tu dirección destino está en un buzón externo, el <b>servidor de correo que recibe</b> puede rechazar tu mensaje por una falla SPF.</a>';
$lang['add']['alias_address'] = 'Dirección/es alias:'; $lang['add']['alias_address'] = 'Dirección/es alias:';
$lang['add']['alias_address_info'] = '<small>Dirección/es de correo completa/s ó @ejemplo.com, para atrapar todos los mensajes para un dominio (separado por coma). <b>Dominios mailcow solamente</b>.</small>'; $lang['add']['alias_address_info'] = '<small>Dirección/es de correo completa/s ó @ejemplo.com, para atrapar todos los mensajes para un dominio (separado por coma). <b>Dominios mailcow solamente</b>.</small>';
$lang['add']['alias_domain_info'] = '<small>Nombres de dominio válidos solamente (separado por coma).</small>'; $lang['add']['alias_domain_info'] = '<small>Nombres de dominio válidos solamente (separado por coma).</small>';
@ -287,26 +216,17 @@ $lang['add']['target_address_info'] = '<small>Dirección/es de correo completa/s
$lang['add']['alias_domain'] = 'Dominio alias'; $lang['add']['alias_domain'] = 'Dominio alias';
$lang['add']['select'] = 'Por favor selecciona...'; $lang['add']['select'] = 'Por favor selecciona...';
$lang['add']['target_domain'] = 'Dominio destino:'; $lang['add']['target_domain'] = 'Dominio destino:';
$lang['add']['mailbox'] = 'Buzón';
$lang['add']['mailbox_username'] = 'Nombre de usuario (parte izquierda de una dirección de correo):'; $lang['add']['mailbox_username'] = 'Nombre de usuario (parte izquierda de una dirección de correo):';
$lang['add']['full_name'] = 'Nombre completo:'; $lang['add']['full_name'] = 'Nombre completo:';
$lang['add']['quota_mb'] = 'Cuota (MiB):'; $lang['add']['quota_mb'] = 'Cuota (MiB):';
$lang['add']['select_domain'] = 'Por favor elige un dominio primero'; $lang['add']['select_domain'] = 'Por favor elige un dominio primero';
$lang['add']['password'] = 'Constraseña:'; $lang['add']['password'] = 'Constraseña:';
$lang['add']['password_repeat'] = 'Confirmación de contraseña (repetir):'; $lang['add']['password_repeat'] = 'Confirmación de contraseña (repetir):';
$lang['add']['previous'] = 'Página anterior';
$lang['add']['restart_sogo_hint'] = '¡Necesitas reiniciar el contenedor del servicio SOGo antes de agregar un nuevo dominio!'; $lang['add']['restart_sogo_hint'] = '¡Necesitas reiniciar el contenedor del servicio SOGo antes de agregar un nuevo dominio!';
$lang['add']['port'] = 'Port'; $lang['add']['port'] = 'Port';
$lang['login']['title'] = 'Inicio de sesión';
$lang['login']['administration'] = 'Administración';
$lang['login']['administration_details'] = 'Por favor utiliza tu inicio de sesión de Administrador para realizar tareas administrativas.';
$lang['login']['user_settings'] = 'Configuración de usuario';
$lang['login']['user_settings_details'] = 'Usuarios de buzón pueden utilizar mailcow UI para cambiar sus contraseñas, crear alias temporales (alias de spam), ajustar el comportamiento del filtro de spam ó importar mensajes desde un servidor IMAP remoto.';
$lang['login']['username'] = 'Nombre de usuario'; $lang['login']['username'] = 'Nombre de usuario';
$lang['login']['password'] = 'Contraseña'; $lang['login']['password'] = 'Contraseña';
$lang['login']['reset_password'] = 'Reiniciar mi contraseña';
$lang['login']['login'] = 'Inicio de sesión'; $lang['login']['login'] = 'Inicio de sesión';
$lang['login']['previous'] = "Página anterior";
$lang['login']['delayed'] = 'El inicio de sesión ha sido retrasado %s segundos.'; $lang['login']['delayed'] = 'El inicio de sesión ha sido retrasado %s segundos.';
$lang['login']['tfa'] = "Autenticación de dos factores"; $lang['login']['tfa'] = "Autenticación de dos factores";
@ -316,34 +236,10 @@ $lang['login']['otp'] = "Contraseña de un solo uso";
$lang['login']['trash_login'] = "Inicio de sesión basura"; $lang['login']['trash_login'] = "Inicio de sesión basura";
$lang['admin']['search_domain_da'] = 'Buscar dominios'; $lang['admin']['search_domain_da'] = 'Buscar dominios';
$lang['admin']['restrictions'] = 'Restricciones Postfix';
$lang['admin']['rr'] = 'Restricciones Postfix para recipientes';
$lang['admin']['reset_defaults'] = 'Restablecer los valores predeterminados';
$lang['admin']['sr'] = 'Restricciones Postfix para remitentes';
$lang['admin']['r_inactive'] = 'Restricciones inactivas'; $lang['admin']['r_inactive'] = 'Restricciones inactivas';
$lang['admin']['r_active'] = 'Restricciones activas'; $lang['admin']['r_active'] = 'Restricciones activas';
$lang['admin']['r_info'] = 'Elementos en gris/deshabilitados en la lista de restricciones activas no son reconocidas como restricciones válidas para mailcow y no pueden ser movidas. Restricciones desconocidas serán establecidas en el orden de aparicion de todas maneras. <br>Puedes agregar nuevos elementos en <code>inc/vars.local.inc.php</code> para ser capaz de habilitarlas.'; $lang['admin']['r_info'] = 'Elementos en gris/deshabilitados en la lista de restricciones activas no son reconocidas como restricciones válidas para mailcow y no pueden ser movidas. Restricciones desconocidas serán establecidas en el orden de aparicion de todas maneras. <br>Puedes agregar nuevos elementos en <code>inc/vars.local.inc.php</code> para ser capaz de habilitarlas.';
$lang['admin']['public_folders'] = 'Carpetas Públicas';
$lang['admin']['public_folders_text'] = 'Un espacio de nombres "Public" (Público) será creado. Debajo del nombre de la carpeta pública se indica el nombre del primer buzón creado automáticamente dentro de este espacio de nombres';
$lang['admin']['public_folder_name'] = 'Nombre de la carpeta <small>(alfanumérico)</small>';
$lang['admin']['public_folder_enable'] = 'Habilitar carpeta pública';
$lang['admin']['public_folder_enable_text'] = 'Activar ésta opción no elimina correos en cualquier otra carpeta pública.';
$lang['admin']['public_folder_pusf'] = 'Habilitar el indicador visto por usuario';
$lang['admin']['public_folder_pusf_text'] = 'Un sistema habilitado por indicador "por usuario visto" no marcará un correo como leído para el Usuario B, cuando el Usuario A lo haya visto, pero el Usuario B no.';
$lang['admin']['privacy'] = 'Privacidad';
$lang['admin']['privacy_text'] = 'Ésta opción activa una tabla PCRE para remover "User-Agent", "X-Enigmail", "X-Mailer", "X-Originating-IP" y remplaza las cabezeras "Received: from" con localhost/127.0.0.1.';
$lang['admin']['privacy_anon_mail'] = 'Anonimizar correo saliente';
$lang['admin']['dkim_txt_name'] = 'Nombre del registro TXT:';
$lang['admin']['dkim_txt_value'] = 'Valor del registro TXT:';
$lang['admin']['dkim_key_length'] = 'Longitud de la llave DKIM (bits)'; $lang['admin']['dkim_key_length'] = 'Longitud de la llave DKIM (bits)';
$lang['admin']['previous'] = 'Página anterior';
$lang['admin']['quota_mb'] = 'Cuota (MiB):';
$lang['admin']['sender_acl'] = 'Permitir envío como:';
$lang['admin']['msg_size'] = 'Tamaño del mensaje';
$lang['admin']['msg_size_limit'] = 'Límite del tamaño del mensaje ahora';
$lang['admin']['msg_size_limit_details'] = 'Aplicando un nuebo límite reiniciará Postfix y el servidor web.';
$lang['admin']['maintenance'] = 'Mantenimiento e Información';
$lang['admin']['sys_info'] = 'información del sistema';
$lang['admin']['dkim_add_key'] = 'Agregar registro ARC/DKIM'; $lang['admin']['dkim_add_key'] = 'Agregar registro ARC/DKIM';
$lang['admin']['dkim_keys'] = 'Registros ARC/DKIM'; $lang['admin']['dkim_keys'] = 'Registros ARC/DKIM';
$lang['admin']['add'] = 'Agregar'; $lang['admin']['add'] = 'Agregar';
@ -365,8 +261,4 @@ $lang['admin']['unchanged_if_empty'] = 'Si no hay cambios dejalo en blanco';
$lang['admin']['yes'] = '&#10004;'; $lang['admin']['yes'] = '&#10004;';
$lang['admin']['no'] = '&#10008;'; $lang['admin']['no'] = '&#10008;';
$lang['admin']['access'] = 'Acceso'; $lang['admin']['access'] = 'Acceso';
$lang['admin']['invalid_max_msg_size'] = 'Tamaño máx. del mensaje no válido';
$lang['admin']['site_not_found'] = 'No se puede localizar la configuración del sitio de mailcow';
$lang['admin']['public_folder_empty'] = 'El nombre de la carpeta pública no debe estar vacío';
$lang['admin']['set_rr_failed'] = 'No se pueden establecer las restricciones de Postfix';
$lang['admin']['no_record'] = 'Sin registro'; $lang['admin']['no_record'] = 'Sin registro';

View File

@ -14,16 +14,10 @@ $lang['footer']['delete_these_items'] = "Merci de confirmer les changements sur
$lang['footer']['delete_now'] = "Effacer maintenant"; $lang['footer']['delete_now'] = "Effacer maintenant";
$lang['footer']['cancel'] = "Annuler"; $lang['footer']['cancel'] = "Annuler";
$lang['dkim']['confirm'] = "Êtes-vous sûr ?";
$lang['danger']['dkim_not_found'] = "Clé DKIM non trouvée";
$lang['danger']['dkim_remove_failed'] = "Impossible de retirer la clé DKIM sélectionnée";
$lang['danger']['dkim_add_failed'] = "Impossible d'ajouter la clé DKIM donnée";
$lang['danger']['dkim_domain_or_sel_invalid'] = "Domaine ou sélecteur DKIM invalide"; $lang['danger']['dkim_domain_or_sel_invalid'] = "Domaine ou sélecteur DKIM invalide";
$lang['danger']['dkim_key_length_invalid'] = "Longueur de clé DKIM invalide";
$lang['success']['dkim_removed'] = "La clé DKIM %s a été retirée"; $lang['success']['dkim_removed'] = "La clé DKIM %s a été retirée";
$lang['success']['dkim_added'] = "La clé DKIM a été enregistrée"; $lang['success']['dkim_added'] = "La clé DKIM a été enregistrée";
$lang['danger']['access_denied'] = "Accès refusé ou données de formulaire invalide"; $lang['danger']['access_denied'] = "Accès refusé ou données de formulaire invalide";
$lang['danger']['whitelist_from_invalid'] = "L'enregistrement liste blanche a un format non valide";
$lang['danger']['domain_invalid'] = "Le nom de domaine n'est pas valide"; $lang['danger']['domain_invalid'] = "Le nom de domaine n'est pas valide";
$lang['danger']['mailbox_quota_exceeds_domain_quota'] = "Le quota max. dépasse la limite de quota du domaine"; $lang['danger']['mailbox_quota_exceeds_domain_quota'] = "Le quota max. dépasse la limite de quota du domaine";
$lang['danger']['object_is_not_numeric'] = "La valeur %s n'est pas numérique"; $lang['danger']['object_is_not_numeric'] = "La valeur %s n'est pas numérique";
@ -34,7 +28,6 @@ $lang['danger']['last_key'] = "La dernière clé ne peut pas être effacée";
$lang['danger']['goto_empty'] = "L'adresse de destination ne peut pas être vide"; $lang['danger']['goto_empty'] = "L'adresse de destination ne peut pas être vide";
$lang['danger']['policy_list_from_exists'] = "Une entrée avec ce nom existe"; $lang['danger']['policy_list_from_exists'] = "Une entrée avec ce nom existe";
$lang['danger']['policy_list_from_invalid'] = "L'entrée a un format non valide"; $lang['danger']['policy_list_from_invalid'] = "L'entrée a un format non valide";
$lang['danger']['whitelist_exists'] = "Une entrée liste-blanche existe avec ce nom";
$lang['danger']['alias_invalid'] = "L'adresse alias est non valide"; $lang['danger']['alias_invalid'] = "L'adresse alias est non valide";
$lang['danger']['goto_invalid'] = "L'adresse de destination est non valide"; $lang['danger']['goto_invalid'] = "L'adresse de destination est non valide";
$lang['danger']['alias_domain_invalid'] = "Le domaine alias est non valide"; $lang['danger']['alias_domain_invalid'] = "Le domaine alias est non valide";
@ -51,18 +44,12 @@ $lang['success']['mailbox_modified'] = "Les changement sur la boîte %s ont ét
$lang['success']['resource_modified'] = "Les changement sur la boîte %s ont été enregistrés"; $lang['success']['resource_modified'] = "Les changement sur la boîte %s ont été enregistrés";
$lang['success']['object_modified'] = "Les changement sur l'objet %s ont été enregistrés"; $lang['success']['object_modified'] = "Les changement sur l'objet %s ont été enregistrés";
$lang['success']['f2b_modified'] = "Les changement sur les paramètres Fail2ban ont été enregistrés"; $lang['success']['f2b_modified'] = "Les changement sur les paramètres Fail2ban ont été enregistrés";
$lang['success']['msg_size_saved'] = "La limite de taille de message a été définie";
$lang['danger']['aliasd_not_found'] = "Domaine alias non trouvé";
$lang['danger']['targetd_not_found'] = "Domaine cible non trouvé"; $lang['danger']['targetd_not_found'] = "Domaine cible non trouvé";
$lang['danger']['aliasd_exists'] = "Le domaine alias existe déjà";
$lang['success']['aliasd_added'] = "Domaine alias %s ajouté"; $lang['success']['aliasd_added'] = "Domaine alias %s ajouté";
$lang['success']['domain_modified'] = "Les changement sur le domaine %s ont été enregistrés"; $lang['success']['domain_modified'] = "Les changement sur le domaine %s ont été enregistrés";
$lang['success']['domain_admin_modified'] = "Les changement sur l'administrateur de domaine %s ont été enregistrés"; $lang['success']['domain_admin_modified'] = "Les changement sur l'administrateur de domaine %s ont été enregistrés";
$lang['success']['domain_admin_added'] = "L'administrateur de domaine %s a été ajouté"; $lang['success']['domain_admin_added'] = "L'administrateur de domaine %s a été ajouté";
$lang['success']['changes_general'] = "Les changements ont été enregistrés";
$lang['success']['admin_modified'] = "Les changements sur l'administrateur ont été enregistrés"; $lang['success']['admin_modified'] = "Les changements sur l'administrateur ont été enregistrés";
$lang['danger']['exit_code_not_null'] = "Erreur : Le code de sortie était %d";
$lang['danger']['mailbox_not_available'] = "Boîte non disponible";
$lang['danger']['username_invalid'] = "L'identifiant ne peut pas être utilisé"; $lang['danger']['username_invalid'] = "L'identifiant ne peut pas être utilisé";
$lang['danger']['password_mismatch'] = "La confirmation du mot de passe n'est pas identique"; $lang['danger']['password_mismatch'] = "La confirmation du mot de passe n'est pas identique";
$lang['danger']['password_complexity'] = "Le mot de passe ne respecte pas les règles"; $lang['danger']['password_complexity'] = "Le mot de passe ne respecte pas les règles";
@ -71,7 +58,6 @@ $lang['danger']['login_failed'] = "La connexion a échoué";
$lang['danger']['mailbox_invalid'] = "Le nom de la boîte n'est pas valide"; $lang['danger']['mailbox_invalid'] = "Le nom de la boîte n'est pas valide";
$lang['danger']['description_invalid'] = "La description de la ressource n'est pas valide"; $lang['danger']['description_invalid'] = "La description de la ressource n'est pas valide";
$lang['danger']['resource_invalid'] = "Le nom de la ressource n'est pas valide"; $lang['danger']['resource_invalid'] = "Le nom de la ressource n'est pas valide";
$lang['danger']['mailbox_invalid_suggest'] = "Le nom de la boîte n'est pas valide. Vouliez-vous taper \"%s\" ?";
$lang['danger']['is_alias'] = "%s est déjà enregistré comme adresse alias"; $lang['danger']['is_alias'] = "%s est déjà enregistré comme adresse alias";
$lang['danger']['is_alias_or_mailbox'] = "%s est déjà enregistré comme un alias ou une boîte"; $lang['danger']['is_alias_or_mailbox'] = "%s est déjà enregistré comme un alias ou une boîte";
$lang['danger']['is_spam_alias'] = "%s est déjà enregistré comme une adresse alias de pourriel"; $lang['danger']['is_spam_alias'] = "%s est déjà enregistré comme une adresse alias de pourriel";
@ -96,16 +82,11 @@ $lang['danger']['mailboxes_in_use'] = "Boîtes max. doit être doit être supér
$lang['danger']['aliases_in_use'] = "Alias max. doit être supérieur ou égal à %d"; $lang['danger']['aliases_in_use'] = "Alias max. doit être supérieur ou égal à %d";
$lang['danger']['sender_acl_invalid'] = "La valeur ACL de l'expéditeur n'est pas valide"; $lang['danger']['sender_acl_invalid'] = "La valeur ACL de l'expéditeur n'est pas valide";
$lang['danger']['domain_not_empty'] = "Impossible de retiré un domaine non-vide"; $lang['danger']['domain_not_empty'] = "Impossible de retiré un domaine non-vide";
$lang['warning']['spam_alias_temp_error'] = "Erreur temporaire : impossible d'ajouter des alias de spam, merci d'essayer plus tard.";
$lang['danger']['spam_alias_max_exceeded'] = "Nombre max d'adresses pour les alias de spam dépassé";
$lang['danger']['validity_missing'] = "Merci d'attribuer une période de validité"; $lang['danger']['validity_missing'] = "Merci d'attribuer une période de validité";
$lang['user']['on'] = "On";
$lang['user']['off'] = "Off";
$lang['user']['messages'] = "messages"; // "123 messages" $lang['user']['messages'] = "messages"; // "123 messages"
$lang['user']['in_use'] = "Utilisé"; $lang['user']['in_use'] = "Utilisé";
$lang['user']['user_change_fn'] = ""; $lang['user']['user_change_fn'] = "";
$lang['user']['user_settings'] = "Paramètres utilisateur"; $lang['user']['user_settings'] = "Paramètres utilisateur";
$lang['user']['mailbox_settings'] = "Paramètres des boîtes";
$lang['user']['mailbox_details'] = "Détails des boîtes"; $lang['user']['mailbox_details'] = "Détails des boîtes";
$lang['user']['change_password'] = "Changement de mot de passe"; $lang['user']['change_password'] = "Changement de mot de passe";
$lang['user']['client_configuration'] = "Montrer les guides de configuration pour les programmes de courriels et les smartphones"; $lang['user']['client_configuration'] = "Montrer les guides de configuration pour les programmes de courriels et les smartphones";
@ -114,11 +95,8 @@ $lang['user']['save_changes'] = "Sauvegarder les changements";
$lang['user']['password_now'] = "Mot de passe actuel (confirmation des changements)"; $lang['user']['password_now'] = "Mot de passe actuel (confirmation des changements)";
$lang['user']['new_password_repeat'] = "Confirmation du mot de passe (répéter)"; $lang['user']['new_password_repeat'] = "Confirmation du mot de passe (répéter)";
$lang['user']['new_password_description'] = "Critère : 6 caractères de long, lettres et nombres."; $lang['user']['new_password_description'] = "Critère : 6 caractères de long, lettres et nombres.";
$lang['user']['did_you_know'] = "<b>Le saviez-vous ?</b> Vous pouvez utiliser des étiquettes dans vos adresses de courriel (\"moi+<b>prive</b>@exemple.com\") afin de déplacer les messages automatiquement vers un dossier (exemple: \"prive\").";
$lang['user']['spam_aliases'] = "Alias de courriel temporaires"; $lang['user']['spam_aliases'] = "Alias de courriel temporaires";
$lang['user']['alias'] = "Alias"; $lang['user']['alias'] = "Alias";
$lang['user']['aliases'] = "Alias";
$lang['user']['domain_aliases'] = "Adresses d'alias de domaine";
$lang['user']['is_catch_all'] = "Attrape-tout pour domaine(s)"; $lang['user']['is_catch_all'] = "Attrape-tout pour domaine(s)";
$lang['user']['aliases_also_send_as'] = "Peut également envoyer en tant qu'utilisateur"; $lang['user']['aliases_also_send_as'] = "Peut également envoyer en tant qu'utilisateur";
$lang['user']['aliases_send_as_all'] = "Ne pas vérifier les accès d'expéditeur pour le(s) domaine(s) suivant(s) et leurs alias de domaine"; $lang['user']['aliases_send_as_all'] = "Ne pas vérifier les accès d'expéditeur pour le(s) domaine(s) suivant(s) et leurs alias de domaine";
@ -128,7 +106,6 @@ $lang['user']['alias_valid_until'] = "Valide jusqu'à";
$lang['user']['alias_remove_all'] = "Retirer tous les alias"; $lang['user']['alias_remove_all'] = "Retirer tous les alias";
$lang['user']['alias_time_left'] = "Temps restant"; $lang['user']['alias_time_left'] = "Temps restant";
$lang['user']['alias_full_date'] = "d/m/Y, H:i:s T"; $lang['user']['alias_full_date'] = "d/m/Y, H:i:s T";
$lang['user']['syncjob_full_date'] = "d/m/Y, H:i:s T";
$lang['user']['alias_select_validity'] = "Période de validité"; $lang['user']['alias_select_validity'] = "Période de validité";
$lang['user']['sync_jobs'] = "Travaux de synchronisation"; $lang['user']['sync_jobs'] = "Travaux de synchronisation";
$lang['user']['hour'] = "Heure"; $lang['user']['hour'] = "Heure";
@ -161,8 +138,6 @@ $lang['user']['tls_enforce_in'] = "Imposer le TLS entrant";
$lang['user']['tls_enforce_out'] = "Imposer le TLS sortant"; $lang['user']['tls_enforce_out'] = "Imposer le TLS sortant";
$lang['user']['no_record'] = "Aucun enregistrement"; $lang['user']['no_record'] = "Aucun enregistrement";
$lang['user']['misc_settings'] = "Autre paramètres de profil";
$lang['user']['misc_delete_profile'] = "Autre paramètres de profil";
$lang['user']['tag_handling'] = "Définir la gestion des courriel étiquetés"; $lang['user']['tag_handling'] = "Définir la gestion des courriel étiquetés";
$lang['user']['tag_in_subfolder'] = "Dans un sous-dossier"; $lang['user']['tag_in_subfolder'] = "Dans un sous-dossier";
@ -176,7 +151,6 @@ $lang['user']['eas_reset_help'] = "Dans beaucoup de cas, une réinitialisation d
$lang['user']['encryption'] = "Chiffrement"; $lang['user']['encryption'] = "Chiffrement";
$lang['user']['username'] = "Nom d'utilisateur"; $lang['user']['username'] = "Nom d'utilisateur";
$lang['user']['password'] = "Mot de passe";
$lang['user']['last_run'] = "Dernière exécution"; $lang['user']['last_run'] = "Dernière exécution";
$lang['user']['excludes'] = "Exclu"; $lang['user']['excludes'] = "Exclu";
$lang['user']['interval'] = "Intervalle"; $lang['user']['interval'] = "Intervalle";
@ -184,45 +158,22 @@ $lang['user']['active'] = "Actif";
$lang['user']['action'] = "Action"; $lang['user']['action'] = "Action";
$lang['user']['edit'] = "Éditer"; $lang['user']['edit'] = "Éditer";
$lang['user']['remove'] = "Retirer"; $lang['user']['remove'] = "Retirer";
$lang['user']['delete_now'] = "Retirer maintenant";
$lang['user']['create_syncjob'] = "Création d'une nouvelle tache de synchronisation"; $lang['user']['create_syncjob'] = "Création d'une nouvelle tache de synchronisation";
$lang['start']['dashboard'] = "%s - tableau de bord";
$lang['start']['start_rc'] = "Ouvrir Roundcube";
$lang['start']['start_sogo'] = "Ouvrir SOGo";
$lang['start']['mailcow_apps_detail'] = "Utiliser l'application mailcow pour accéder à vos courriels, calendriers, contacts et bien plus."; $lang['start']['mailcow_apps_detail'] = "Utiliser l'application mailcow pour accéder à vos courriels, calendriers, contacts et bien plus.";
$lang['start']['mailcow_panel'] = "Démarrer l'interface mailcow";
$lang['start']['mailcow_panel_description'] = "L'interface mailcow est disponible pour les administrateurs et les utilisateurs de boîtes de courriels.";
$lang['start']['mailcow_panel_detail'] = "Les <b>administrateurs de domaine</b> créent, modifient ou effacent les boîtes de courriel et les alias. Ils modifient les domaines et ont accès aux informations à propos des domaines qui leur sont assignés.<br>Les <b>utilisateurs de boîtes</b> peuvent créer des alias limités dans le temps (alias de pourriel), changer leur mot de passe et leurs préférences de filtre à pourriel."; $lang['start']['mailcow_panel_detail'] = "Les <b>administrateurs de domaine</b> créent, modifient ou effacent les boîtes de courriel et les alias. Ils modifient les domaines et ont accès aux informations à propos des domaines qui leur sont assignés.<br>Les <b>utilisateurs de boîtes</b> peuvent créer des alias limités dans le temps (alias de pourriel), changer leur mot de passe et leurs préférences de filtre à pourriel.";
$lang['start']['recommended_config'] = "Configuration recommandée (sans ActiveSync)";
$lang['start']['imap_smtp_server'] = "Donnée des serveurs IMAP et SMTP";
$lang['start']['imap_smtp_server_description'] = "Pour une expérience optimale, nous vous recommandons d'utiliser <a href=\"%s\" target=\"_blank\"><b>Mozilla Thunderbird</b></a>.";
$lang['start']['imap_smtp_server_badge'] = "Lecture/Écriture des courriels";
$lang['start']['imap_smtp_server_auth_info'] = "Merci d'utiliser votre adresse de courriel complète couplée au mécanisme dauthentification \"PLAIN\".<br>Vos données de connexion seront chiffrées par le chiffrement imposé coté serveur.";
$lang['start']['managesieve'] = "ManageSieve";
$lang['start']['managesieve_badge'] = "Filtre de courriel";
$lang['start']['managesieve_description'] = "Merci d'utiliser <b>Mozilla Thunderbird</b> avec l'extension <a style=\"text-decoration:none\" target=\"_blank\" href=\"%s\"><b>nightly sieve</b></a>.<br>Démarrez Thunderbird, ouvrez les paramètres des extensions et déposez le fichier xpi fraîchement téléchargé dans la fenêtre ouverte.<br>Le nom du serveur est <b>%s</b>, utilisez le port <b>4190</b> si on vous le demande. Les données de connexion correspondent à celles de votre courriel.";
$lang['start']['service'] = "Service";
$lang['start']['encryption'] = "Méthode de chiffrement";
$lang['start']['help'] = "Montrer/Cacher le panneau d'aide"; $lang['start']['help'] = "Montrer/Cacher le panneau d'aide";
$lang['start']['hostname'] = "Nom d'hôte";
$lang['start']['port'] = "Port";
$lang['start']['footer'] = "";
$lang['header']['mailcow_settings'] = "Configuration"; $lang['header']['mailcow_settings'] = "Configuration";
$lang['header']['administration'] = "Administration"; $lang['header']['administration'] = "Administration";
$lang['header']['mailboxes'] = "Boîtes de courriel"; $lang['header']['mailboxes'] = "Boîtes de courriel";
$lang['header']['user_settings'] = "Paramètres utilisateur"; $lang['header']['user_settings'] = "Paramètres utilisateur";
$lang['header']['login'] = "Identifiant";
$lang['header']['logged_in_as_logout'] = "Connecté en tant que <b>%s</b> (déconnexion)";
$lang['header']['logged_in_as_logout_dual'] = "Connecté en tant que <b>%s <span class=\"text-info\">[%s]</span></b>"; $lang['header']['logged_in_as_logout_dual'] = "Connecté en tant que <b>%s <span class=\"text-info\">[%s]</span></b>";
$lang['header']['locale'] = "Langue";
$lang['mailbox']['domain'] = "Domaine"; $lang['mailbox']['domain'] = "Domaine";
$lang['mailbox']['spam_aliases'] = "Alias temp."; $lang['mailbox']['spam_aliases'] = "Alias temp.";
$lang['mailbox']['multiple_bookings'] = "Réservations multiples"; $lang['mailbox']['multiple_bookings'] = "Réservations multiples";
$lang['mailbox']['kind'] = "Type"; $lang['mailbox']['kind'] = "Type";
$lang['mailbox']['description'] = "Description"; $lang['mailbox']['description'] = "Description";
$lang['mailbox']['alias'] = "Alias"; $lang['mailbox']['alias'] = "Alias";
$lang['mailbox']['resource_name'] = "Nom des ressources";
$lang['mailbox']['aliases'] = "Alias"; $lang['mailbox']['aliases'] = "Alias";
$lang['mailbox']['domains'] = "Domaines"; $lang['mailbox']['domains'] = "Domaines";
$lang['mailbox']['mailboxes'] = "Boîtes"; $lang['mailbox']['mailboxes'] = "Boîtes";
@ -231,7 +182,6 @@ $lang['mailbox']['mailbox_quota'] = "Taille max. d'une boîte";
$lang['mailbox']['domain_quota'] = "Quota"; $lang['mailbox']['domain_quota'] = "Quota";
$lang['mailbox']['active'] = "Actif"; $lang['mailbox']['active'] = "Actif";
$lang['mailbox']['action'] = "Action"; $lang['mailbox']['action'] = "Action";
$lang['mailbox']['ratelimit'] = "Limite de vitesse en sortie/h";
$lang['mailbox']['backup_mx'] = "MX de secours"; $lang['mailbox']['backup_mx'] = "MX de secours";
$lang['mailbox']['domain_aliases'] = "Alias de domaine"; $lang['mailbox']['domain_aliases'] = "Alias de domaine";
$lang['mailbox']['target_domain'] = "Domaine cible"; $lang['mailbox']['target_domain'] = "Domaine cible";
@ -241,20 +191,15 @@ $lang['mailbox']['fname'] = "Nom complet";
$lang['mailbox']['filter_table'] = "Table de filtrage"; $lang['mailbox']['filter_table'] = "Table de filtrage";
$lang['mailbox']['yes'] = "&#10004;"; $lang['mailbox']['yes'] = "&#10004;";
$lang['mailbox']['no'] = "&#10008;"; $lang['mailbox']['no'] = "&#10008;";
$lang['mailbox']['quota'] = "Quota";
$lang['mailbox']['in_use'] = "Utilisation (%)"; $lang['mailbox']['in_use'] = "Utilisation (%)";
$lang['mailbox']['msg_num'] = "Message"; $lang['mailbox']['msg_num'] = "Message";
$lang['mailbox']['remove'] = "Retirer"; $lang['mailbox']['remove'] = "Retirer";
$lang['mailbox']['edit'] = "Éditer"; $lang['mailbox']['edit'] = "Éditer";
$lang['mailbox']['archive'] = "Archiver";
$lang['mailbox']['no_record'] = "Aucun enregistrement pour l'objet %s";
$lang['mailbox']['no_record_single'] = "Aucun enregistrement";
$lang['mailbox']['add_domain'] = "Ajouter un domaine"; $lang['mailbox']['add_domain'] = "Ajouter un domaine";
$lang['mailbox']['add_domain_alias'] = "Ajouter un alias de domaine"; $lang['mailbox']['add_domain_alias'] = "Ajouter un alias de domaine";
$lang['mailbox']['add_mailbox'] = "Ajouter une boîte de courriel"; $lang['mailbox']['add_mailbox'] = "Ajouter une boîte de courriel";
$lang['mailbox']['add_resource'] = "Ajouter une ressource"; $lang['mailbox']['add_resource'] = "Ajouter une ressource";
$lang['mailbox']['add_alias'] = "Ajouter un alias"; $lang['mailbox']['add_alias'] = "Ajouter un alias";
$lang['mailbox']['add_domain_record_first'] = "Merci de d'abord ajouter un domaine";
$lang['mailbox']['empty'] = "Aucun résultat"; $lang['mailbox']['empty'] = "Aucun résultat";
$lang['mailbox']['toggle_all'] = "Basculer tout"; $lang['mailbox']['toggle_all'] = "Basculer tout";
$lang['mailbox']['quick_actions'] = "Actions"; $lang['mailbox']['quick_actions'] = "Actions";
@ -266,21 +211,6 @@ $lang['mailbox']['last_run'] = "Dernière exécution";
$lang['info']['no_action'] = "Aucune action applicable"; $lang['info']['no_action'] = "Aucune action applicable";
$lang['delete']['title'] = "Retirer un objet";
$lang['delete']['remove_domain_warning'] = "<b>Attention :</b> vous êtes sur le point de retirer le domaine <b>%s</b> !";
$lang['delete']['remove_syncjob_warning'] = "<b>Attention :</b> vous êtes sur le point de retirer une tâche de synchronisation pour l'utilisateur <b>%s</b> !";
$lang['delete']['remove_domainalias_warning'] = "<b>Attention :</b> vous êtes sur le point de retirer l'alias de domaine <b>%s</b> !";
$lang['delete']['remove_domainadmin_warning'] = "<b>Attention :</b> vous êtes sur le point de retirer l'administrateur de domaine <b>%s</b> !";
$lang['delete']['remove_alias_warning'] = "<b>Attention :</b> vous êtes sur le point de retirer l'alias d'adresse <b>%s</b> !";
$lang['delete']['remove_mailbox_warning'] = "<b>Attention :</b> vous êtes sur le point de retirer la boîte de courriel <b>%s</b> !";
$lang['delete']['remove_mailbox_details'] = "La boîte de courriel sera <b>supprimée définitivement</b> !";
$lang['delete']['remove_resource_warning'] = "<b>Attention :</b> vous êtes sur le point de retirer la ressource <b>%s</b> !";
$lang['delete']['remove_resource_details'] = "La ressource sera <b>supprimée définitivement</b> !";
$lang['delete']['remove_domain_details'] = "Cela retire également les alias de domaine.<br><br><b>Un domaine doit être vide pour être retiré.</b>";
$lang['delete']['remove_syncjob_details'] = "Les objets de cette tâche de synchronisation ne seront plus récupérés depuis le serveur distant.";
$lang['delete']['remove_alias_details'] = "Les utilisateurs ne pourront plus recevoir ni envoyer de courriels depuis cette adresse.</b>";
$lang['delete']['remove_button'] = "Retirer";
$lang['delete']['previous'] = "Page précédente";
$lang['edit']['syncjob'] = "Éditer la tâche de synchronisation"; $lang['edit']['syncjob'] = "Éditer la tâche de synchronisation";
$lang['edit']['save'] = "Enregistrer les changements"; $lang['edit']['save'] = "Enregistrer les changements";
@ -291,22 +221,17 @@ $lang['edit']['maxage'] = "Age maximum en jours des messages qui seront récupé
$lang['edit']['subfolder2'] = "Sous-dossier où synchroniser à destination<br><small>(vide = ne pas utiliser de sous-dossier)</small>"; $lang['edit']['subfolder2'] = "Sous-dossier où synchroniser à destination<br><small>(vide = ne pas utiliser de sous-dossier)</small>";
$lang['edit']['mins_interval'] = "Intervalle (min)"; $lang['edit']['mins_interval'] = "Intervalle (min)";
$lang['edit']['exclude'] = "Objets à exclure (expression régulière)"; $lang['edit']['exclude'] = "Objets à exclure (expression régulière)";
$lang['edit']['archive'] = "Accès aux archives";
$lang['edit']['max_mailboxes'] = "Nombre max. de boîtes"; $lang['edit']['max_mailboxes'] = "Nombre max. de boîtes";
$lang['edit']['title'] = "Éditer l'objet"; $lang['edit']['title'] = "Éditer l'objet";
$lang['edit']['target_address'] = "Adresse(s) de destination <small>(séparés par des virgules)</small>"; $lang['edit']['target_address'] = "Adresse(s) de destination <small>(séparés par des virgules)</small>";
$lang['edit']['active'] = "Activer"; $lang['edit']['active'] = "Activer";
$lang['edit']['target_domain'] = "Domaine cible"; $lang['edit']['target_domain'] = "Domaine cible";
$lang['edit']['password'] = "Mot de passe"; $lang['edit']['password'] = "Mot de passe";
$lang['edit']['ratelimit'] = "Limite de vitesse sortante/h";
$lang['danger']['ratelimt_less_one'] = "La limite de vitesse sortante/h ne peut pas être inférieure à 1";
$lang['edit']['password_repeat'] = "Confirmation du mot de passe (répéter)"; $lang['edit']['password_repeat'] = "Confirmation du mot de passe (répéter)";
$lang['edit']['domain_admin'] = "Éditer l'administrateur de domaine"; $lang['edit']['domain_admin'] = "Éditer l'administrateur de domaine";
$lang['edit']['domain'] = "Éditer le domaine"; $lang['edit']['domain'] = "Éditer le domaine";
$lang['edit']['alias_domain'] = "Alias de domaine";
$lang['edit']['edit_alias_domain'] = "Éditer l'alias de domaine"; $lang['edit']['edit_alias_domain'] = "Éditer l'alias de domaine";
$lang['edit']['domains'] = "Domaines"; $lang['edit']['domains'] = "Domaines";
$lang['edit']['destroy'] = "Entrée des donnés manuelle";
$lang['edit']['alias'] = "Éditer l'alias"; $lang['edit']['alias'] = "Éditer l'alias";
$lang['edit']['mailbox'] = "Éditer la boîte"; $lang['edit']['mailbox'] = "Éditer la boîte";
$lang['edit']['description'] = "Description"; $lang['edit']['description'] = "Description";
@ -316,22 +241,16 @@ $lang['edit']['domain_quota'] = "Quota de domaine";
$lang['edit']['backup_mx_options'] = "Option de MX secondaire"; $lang['edit']['backup_mx_options'] = "Option de MX secondaire";
$lang['edit']['relay_domain'] = "Domaine de relais"; $lang['edit']['relay_domain'] = "Domaine de relais";
$lang['edit']['relay_all'] = "Relayer tous les destinataires"; $lang['edit']['relay_all'] = "Relayer tous les destinataires";
$lang['edit']['dkim_signature'] = "Signature ARC + DKIM";
$lang['edit']['dkim_record_info'] = "<small>Merci d'ajouter une entrée TXT avec la valeur donnée à votre configuration DNS.</small>";
$lang['edit']['relay_all_info'] = "<small>Si vous choisissez de ne <b>pas</b> relayer tous les destinataires, vous devrez ajouter une boîte \"aveugle\" pour chaque destinataire qui doit être relayé.</small>"; $lang['edit']['relay_all_info'] = "<small>Si vous choisissez de ne <b>pas</b> relayer tous les destinataires, vous devrez ajouter une boîte \"aveugle\" pour chaque destinataire qui doit être relayé.</small>";
$lang['edit']['full_name'] = "Nom complet"; $lang['edit']['full_name'] = "Nom complet";
$lang['edit']['quota_mb'] = "Quota (Mo)"; $lang['edit']['quota_mb'] = "Quota (Mo)";
$lang['edit']['sender_acl'] = "Autorisé à envoyé en tant que"; $lang['edit']['sender_acl'] = "Autorisé à envoyé en tant que";
$lang['edit']['sender_acl_info'] = "Les alias ne peuvent pas être désélectionnés.";
$lang['edit']['dkim_txt_name'] = "Nom de l'enregistrement TXT :";
$lang['edit']['dkim_txt_value'] = "Valeur de l'enregistrement TXT :";
$lang['edit']['previous'] = "Page précédente"; $lang['edit']['previous'] = "Page précédente";
$lang['edit']['unchanged_if_empty'] = "Si aucun changement, laisser vide"; $lang['edit']['unchanged_if_empty'] = "Si aucun changement, laisser vide";
$lang['edit']['dont_check_sender_acl'] = "Désactiver la vérification de l'émetteur pour le domaine %s + les domaines alias"; $lang['edit']['dont_check_sender_acl'] = "Désactiver la vérification de l'émetteur pour le domaine %s + les domaines alias";
$lang['edit']['multiple_bookings'] = "Inscriptions multiples"; $lang['edit']['multiple_bookings'] = "Inscriptions multiples";
$lang['edit']['kind'] = "Type"; $lang['edit']['kind'] = "Type";
$lang['edit']['resource'] = "Resource"; $lang['edit']['resource'] = "Resource";
$lang['edit']['goto_null'] = "Ignorer silencieusement le courriel";
$lang['add']['syncjob'] = "Ajouter une tâche de synchronisation"; $lang['add']['syncjob'] = "Ajouter une tâche de synchronisation";
$lang['add']['syncjob_hint'] = "Soyez prévenus que les mots de passe doivent être sauvés en clair !"; $lang['add']['syncjob_hint'] = "Soyez prévenus que les mots de passe doivent être sauvés en clair !";
@ -340,8 +259,6 @@ $lang['add']['port'] = "Port";
$lang['add']['username'] = "Identifiant"; $lang['add']['username'] = "Identifiant";
$lang['add']['enc_method'] = "Méthode de chiffrement"; $lang['add']['enc_method'] = "Méthode de chiffrement";
$lang['add']['mins_interval'] = "Période de relève (minutes)"; $lang['add']['mins_interval'] = "Période de relève (minutes)";
$lang['add']['maxage'] = "Age maximum des messages qui seront relevés depuis le distant (0 = ignorer l'age)";
$lang['add']['subfolder2'] = "Synchronisation dans un sous-dossier à destination";
$lang['add']['exclude'] = "Exclure des objets (expression régulière)"; $lang['add']['exclude'] = "Exclure des objets (expression régulière)";
$lang['add']['delete2duplicates'] = "Supprimer les doubles à destination"; $lang['add']['delete2duplicates'] = "Supprimer les doubles à destination";
$lang['add']['delete1'] = "Supprimer à la source une fois terminé"; $lang['add']['delete1'] = "Supprimer à la source une fois terminé";
@ -350,14 +267,11 @@ $lang['edit']['delete2duplicates'] = "Supprimer les doubles à destination";
$lang['edit']['delete1'] = "Supprimer à la source une fois terminé"; $lang['edit']['delete1'] = "Supprimer à la source une fois terminé";
$lang['edit']['delete2'] = "Supprimer les messages à destination qui ne sont pas présent à la source"; $lang['edit']['delete2'] = "Supprimer les messages à destination qui ne sont pas présent à la source";
$lang['add']['title'] = "Ajouter un objet";
$lang['add']['domain'] = "Domaine"; $lang['add']['domain'] = "Domaine";
$lang['add']['active'] = "Actif"; $lang['add']['active'] = "Actif";
$lang['add']['multiple_bookings'] = "Inscriptions multiples"; $lang['add']['multiple_bookings'] = "Inscriptions multiples";
$lang['add']['save'] = "Sauvegarder les changements";
$lang['add']['description'] = "Description"; $lang['add']['description'] = "Description";
$lang['add']['max_aliases'] = "Nombre max. des alias"; $lang['add']['max_aliases'] = "Nombre max. des alias";
$lang['add']['resource_name'] = "Nom de la ressource";
$lang['add']['max_mailboxes'] = "Nombre max. de boîtes"; $lang['add']['max_mailboxes'] = "Nombre max. de boîtes";
$lang['add']['mailbox_quota_m'] = "Quota max par boîte (Mo)"; $lang['add']['mailbox_quota_m'] = "Quota max par boîte (Mo)";
$lang['add']['domain_quota_m'] = "Quota total du domaine (Mo)"; $lang['add']['domain_quota_m'] = "Quota total du domaine (Mo)";
@ -365,8 +279,6 @@ $lang['add']['backup_mx_options'] = "Options de MX secondaire";
$lang['add']['relay_all'] = "Relayer tous les destinataires"; $lang['add']['relay_all'] = "Relayer tous les destinataires";
$lang['add']['relay_domain'] = "Relayer ce domaine"; $lang['add']['relay_domain'] = "Relayer ce domaine";
$lang['add']['relay_all_info'] = "<small>Si vous choisissez de ne <b>pas</b> relayer tous les destinataires, vous devrez ajouter une boîte \"aveugle\" pour chaque destinataire qui doit être relayé.</small>"; $lang['add']['relay_all_info'] = "<small>Si vous choisissez de ne <b>pas</b> relayer tous les destinataires, vous devrez ajouter une boîte \"aveugle\" pour chaque destinataire qui doit être relayé.</small>";
$lang['add']['alias'] = "Alias";
$lang['add']['alias_spf_fail'] = "<b>Note :</b> Si l'adresse de destination choisie est une boîte externe, la <b>serveur de réception</b> peut rejeter votre message pour cause d'échec SPF.</a>";
$lang['add']['alias_address'] = "Adresse(s) alias"; $lang['add']['alias_address'] = "Adresse(s) alias";
$lang['add']['alias_address_info'] = "<small>Adresse de courriel complète ou @exemple.com pour recevoir tous les messages d'un domaine (séparés par de virgules). <b>Domaines mailcow seulement</b></small>"; $lang['add']['alias_address_info'] = "<small>Adresse de courriel complète ou @exemple.com pour recevoir tous les messages d'un domaine (séparés par de virgules). <b>Domaines mailcow seulement</b></small>";
$lang['add']['alias_domain_info'] = "<small>Nom de domaine valide seulement (séparés par des virgules).</small>"; $lang['add']['alias_domain_info'] = "<small>Nom de domaine valide seulement (séparés par des virgules).</small>";
@ -375,8 +287,6 @@ $lang['add']['target_address_info'] = "<small>Adresse(s) de courriel complète(s
$lang['add']['alias_domain'] = "Alias de domaine"; $lang['add']['alias_domain'] = "Alias de domaine";
$lang['add']['select'] = "Merci de sélectionner..."; $lang['add']['select'] = "Merci de sélectionner...";
$lang['add']['target_domain'] = "Domaine cible"; $lang['add']['target_domain'] = "Domaine cible";
$lang['add']['mailbox'] = "Boîte de courriel";
$lang['add']['resource'] = "Ressource";
$lang['add']['kind'] = "Type"; $lang['add']['kind'] = "Type";
$lang['add']['mailbox_username'] = "Identifiant (côté gauche d'une adresse de courriel)"; $lang['add']['mailbox_username'] = "Identifiant (côté gauche d'une adresse de courriel)";
$lang['add']['full_name'] = "Nom complet"; $lang['add']['full_name'] = "Nom complet";
@ -384,20 +294,12 @@ $lang['add']['quota_mb'] = "Quota (Mo)";
$lang['add']['select_domain'] = "Merci de d'abord sélectionner un domaine"; $lang['add']['select_domain'] = "Merci de d'abord sélectionner un domaine";
$lang['add']['password'] = "Mot de passe"; $lang['add']['password'] = "Mot de passe";
$lang['add']['password_repeat'] = "Confirmation du mot de passe (répéter)"; $lang['add']['password_repeat'] = "Confirmation du mot de passe (répéter)";
$lang['add']['previous'] = "Page précédente";
$lang['add']['restart_sogo_hint'] = "Vous devrez redémarrer le container du service SOGo après l'ajout d'un nouveau domaine !"; $lang['add']['restart_sogo_hint'] = "Vous devrez redémarrer le container du service SOGo après l'ajout d'un nouveau domaine !";
$lang['add']['goto_null'] = "Ignorer silencieusement le courriel"; $lang['add']['goto_null'] = "Ignorer silencieusement le courriel";
$lang['login']['title'] = "Connexion";
$lang['login']['administration'] = "Administration";
$lang['login']['administration_details'] = "Merci d'utiliser votre identifiant d'administrateur pour effectuer les taches administratives.";
$lang['login']['user_settings'] = "Paramètres utilisateur";
$lang['login']['user_settings_details'] = "Les propriétaires de boîte de courriel peuvent utiliser l'interface mailcow pour changer leur mot de passe, créer des alias temporaires (alias de pourriel), ajuster le comportement du filtre à pourriel ou importer des messages depuis un serveur IMAP distant.";
$lang['login']['username'] = "Identifiant"; $lang['login']['username'] = "Identifiant";
$lang['login']['password'] = "Mot de passe"; $lang['login']['password'] = "Mot de passe";
$lang['login']['reset_password'] = "Réinitialiser mon mot de passe";
$lang['login']['login'] = "Connexion"; $lang['login']['login'] = "Connexion";
$lang['login']['previous'] = "Page précédente";
$lang['login']['delayed'] = "La connexion a été différée de %s seconds."; $lang['login']['delayed'] = "La connexion a été différée de %s seconds.";
$lang['tfa']['tfa'] = "Authentification à double facteur"; $lang['tfa']['tfa'] = "Authentification à double facteur";
@ -407,15 +309,11 @@ $lang['tfa']['key_id'] = "Un identifiant pour votre YubiKey";
$lang['tfa']['key_id_totp'] = "Un identifiant pour votre clé"; $lang['tfa']['key_id_totp'] = "Un identifiant pour votre clé";
$lang['tfa']['api_register'] = "mailcow utilise Yubico Cloud API. Merci d'obtenir un clé API pour votre clé <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">ici</a>"; $lang['tfa']['api_register'] = "mailcow utilise Yubico Cloud API. Merci d'obtenir un clé API pour votre clé <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">ici</a>";
$lang['tfa']['u2f'] = "Authentification U2F"; $lang['tfa']['u2f'] = "Authentification U2F";
$lang['tfa']['hotp'] = "Authentification HOTP";
$lang['tfa']['totp'] = "Mot de passe à usage unique basé sur le temps (Google Authenticator etc.)"; $lang['tfa']['totp'] = "Mot de passe à usage unique basé sur le temps (Google Authenticator etc.)";
$lang['tfa']['none'] = "Désactivé"; $lang['tfa']['none'] = "Désactivé";
$lang['tfa']['delete_tfa'] = "Invalider TFA"; $lang['tfa']['delete_tfa'] = "Invalider TFA";
$lang['tfa']['disable_tfa'] = "Désactiver TFA jusqu'à la prochaine connexion réussie"; $lang['tfa']['disable_tfa'] = "Désactiver TFA jusqu'à la prochaine connexion réussie";
$lang['tfa']['confirm_tfa'] = "Merci de confirmer votre mot de passe à usage unique dans le champ ci-dessous";
$lang['tfa']['confirm'] = "Confirmer"; $lang['tfa']['confirm'] = "Confirmer";
$lang['tfa']['otp'] = "Mot de passe à usage unique";
$lang['tfa']['trash_login'] = "Trash login";
$lang['tfa']['select'] = "Merci de sélectionner"; $lang['tfa']['select'] = "Merci de sélectionner";
$lang['tfa']['waiting_usb_auth'] = "<i>En attente du périphérique USB...</i><br><br>Merci de presser le bouton de votre périphérique U2F USB maintenant."; $lang['tfa']['waiting_usb_auth'] = "<i>En attente du périphérique USB...</i><br><br>Merci de presser le bouton de votre périphérique U2F USB maintenant.";
$lang['tfa']['waiting_usb_register'] = "<i>En attente du périphérique USB...</i><br><br>Merci de confirmer votre mot de passe au dessus et de valider votre enregistrement U2F en appuyant sur le bouton de votre périphérique U2F USB."; $lang['tfa']['waiting_usb_register'] = "<i>En attente du périphérique USB...</i><br><br>Merci de confirmer votre mot de passe au dessus et de valider votre enregistrement U2F en appuyant sur le bouton de votre périphérique U2F USB.";
@ -432,39 +330,14 @@ $lang['admin']['f2b_max_attempts'] = "Nb max de tentatives";
$lang['admin']['f2b_retry_window'] = "Fenêtre de nouvel essai (s) pour le nb max de tentatives"; $lang['admin']['f2b_retry_window'] = "Fenêtre de nouvel essai (s) pour le nb max de tentatives";
$lang['admin']['f2b_whitelist'] = "Réseau/hôtes en liste blanche"; $lang['admin']['f2b_whitelist'] = "Réseau/hôtes en liste blanche";
$lang['admin']['search_domain_da'] = "Chercher des domaines"; $lang['admin']['search_domain_da'] = "Chercher des domaines";
$lang['admin']['restrictions'] = "Restrictions Postfix";
$lang['admin']['rr'] = "Restrictions Postfix sur les destinataires";
$lang['admin']['sr'] = "Restriction Postfix sur les expéditeurs";
$lang['admin']['reset_defaults'] = "Réinitialiser aux valeurs par défaut";
$lang['admin']['r_inactive'] = "Restrictions inactives"; $lang['admin']['r_inactive'] = "Restrictions inactives";
$lang['admin']['r_active'] = "Restrictions actives"; $lang['admin']['r_active'] = "Restrictions actives";
$lang['admin']['r_info'] = "Les éléments grisé/invalidés dans la liste des restrictions active ne sont pas reconnus comme des restrictions valide par mailcow et ne peuvent pas être déplacés. Les restriction inconnues seront enregistrées dans leur ordre d'apparence.<br>Vous pouvez ajouter de nouveaux élément dans <code>inc/vars.local.inc.php</code> pour pouvoir les sélectionner."; $lang['admin']['r_info'] = "Les éléments grisé/invalidés dans la liste des restrictions active ne sont pas reconnus comme des restrictions valide par mailcow et ne peuvent pas être déplacés. Les restriction inconnues seront enregistrées dans leur ordre d'apparence.<br>Vous pouvez ajouter de nouveaux élément dans <code>inc/vars.local.inc.php</code> pour pouvoir les sélectionner.";
$lang['admin']['public_folders'] = "Dossiers publiques";
$lang['admin']['public_folders_text'] = "Un espace de nommage \"Public\" a été crée. Le nom du dossier publique ci-dessous indique le nom de la première boîte crée automatiquement à l'intérieur de cet espace de nommage.";
$lang['admin']['public_folder_name'] = "Nom de dossier <small>(alphanumérique)</small>";
$lang['admin']['public_folder_enable'] = "Activer le dossier publique";
$lang['admin']['public_folder_enable_text'] = "Changer cette option ne supprime aucun courriel dans les dossiers publiques.";
$lang['admin']['public_folder_pusf'] = "Activer le statut vu par utilisateur";
$lang['admin']['public_folder_pusf_text'] = "Lorsque le \"statut vu par utilisateur\" est activé, le système ne marquera pas un courriel comme lu pour l'utilisateur B si l'utilisateur l'a lu mais pas B.";
$lang['admin']['privacy'] = "Vie privée";
$lang['admin']['privacy_text'] = "Cette option active une table PCRE pour retirer \"User-Agent\", \"X-Enigmail\", \"X-Mailer\", \"X-Originating-IP\" et remplace les en-têtes \"Received: from\" avec localhost/127.0.0.1.";
$lang['admin']['privacy_anon_mail'] = "Anonymiser les courriels sortants";
$lang['admin']['dkim_txt_name'] = "Nom de l'enregistrement TXT :";
$lang['admin']['dkim_txt_value'] = "Valeur de l'enregistrement TXT :";
$lang['admin']['dkim_key_length'] = "Longueur de la clé DKIM (bits)"; $lang['admin']['dkim_key_length'] = "Longueur de la clé DKIM (bits)";
$lang['admin']['dkim_key_valid'] = "Clé valide"; $lang['admin']['dkim_key_valid'] = "Clé valide";
$lang['admin']['dkim_key_unused'] = "Clé non utilisée"; $lang['admin']['dkim_key_unused'] = "Clé non utilisée";
$lang['admin']['dkim_key_missing'] = "Clé manquante"; $lang['admin']['dkim_key_missing'] = "Clé manquante";
$lang['admin']['dkim_key_hint'] = "Le sélecteur des clés DKIM est toujours <code>dkim</code>.";
$lang['admin']['previous'] = "Page précédente";
$lang['admin']['quota_mb'] = "Quota (Mo) :";
$lang['admin']['sender_acl'] = "Autoriser à envoyer en tant que :";
$lang['admin']['msg_size'] = "Taille du message";
$lang['admin']['msg_size_limit'] = "Taille de message limite actuelle";
$lang['admin']['msg_size_limit_details'] = "Appliquer une nouvelle limite rechargera Postfix et le serveur web.";
$lang['admin']['save'] = "Enregistrer les changements"; $lang['admin']['save'] = "Enregistrer les changements";
$lang['admin']['maintenance'] = "Maintenance et Information";
$lang['admin']['sys_info'] = "Information système";
$lang['admin']['dkim_add_key'] = "Ajouter un clé ARC/DKIM"; $lang['admin']['dkim_add_key'] = "Ajouter un clé ARC/DKIM";
$lang['admin']['dkim_keys'] = "Clés ARC/DKIM"; $lang['admin']['dkim_keys'] = "Clés ARC/DKIM";
$lang['admin']['add'] = "Ajouter"; $lang['admin']['add'] = "Ajouter";
@ -486,20 +359,12 @@ $lang['admin']['unchanged_if_empty'] = "Si aucun changement, laisser vide";
$lang['admin']['yes'] = "&#10004;"; $lang['admin']['yes'] = "&#10004;";
$lang['admin']['no'] = "&#10008;"; $lang['admin']['no'] = "&#10008;";
$lang['admin']['access'] = "Accès"; $lang['admin']['access'] = "Accès";
$lang['admin']['invalid_max_msg_size'] = "Mauvaise taille de message max.";
$lang['admin']['site_not_found'] = "Impossible de trouver la configuration du site mailcow";
$lang['admin']['public_folder_empty'] = "Le nom du dossier publique ne peut pas être vide";
$lang['admin']['set_rr_failed'] = "Impossible de définir les restrictions Postfix";
$lang['admin']['no_record'] = "Aucun enregistrement"; $lang['admin']['no_record'] = "Aucun enregistrement";
$lang['admin']['filter_table'] = "Table de filtrage"; $lang['admin']['filter_table'] = "Table de filtrage";
$lang['admin']['empty'] = "Aucun résultat"; $lang['admin']['empty'] = "Aucun résultat";
$lang['admin']['time'] = "Temps";
$lang['admin']['priority'] = "Priorité";
$lang['admin']['message'] = "Message";
$lang['admin']['refresh'] = "Rafraîchir"; $lang['admin']['refresh'] = "Rafraîchir";
$lang['admin']['to_top'] = "Retour en haut"; $lang['admin']['to_top'] = "Retour en haut";
$lang['admin']['in_use_by'] = "Utilisé par"; $lang['admin']['in_use_by'] = "Utilisé par";
$lang['admin']['logs'] = "Journaux";
$lang['admin']['forwarding_hosts'] = "Hôtes de réexpédition"; $lang['admin']['forwarding_hosts'] = "Hôtes de réexpédition";
$lang['admin']['forwarding_hosts_hint'] = "Tous les messages entrant sont acceptés sans condition depuis les hôtes listés ici. Ces hôtes ne sont pas validés par DNSBLs ou sujets à un greylisting. Les pourriels reçus de ces hôtes ne sont jamais rejetés, mais occasionnellement, ils peuvent se retrouver dans le dossier Junk. L'usage le plus courant est pour les serveurs de courriels qui ont été configurés pour réexpédier leurs courriels entrant vers votre serveur mailcow."; $lang['admin']['forwarding_hosts_hint'] = "Tous les messages entrant sont acceptés sans condition depuis les hôtes listés ici. Ces hôtes ne sont pas validés par DNSBLs ou sujets à un greylisting. Les pourriels reçus de ces hôtes ne sont jamais rejetés, mais occasionnellement, ils peuvent se retrouver dans le dossier Junk. L'usage le plus courant est pour les serveurs de courriels qui ont été configurés pour réexpédier leurs courriels entrant vers votre serveur mailcow.";
$lang['admin']['forwarding_hosts_add_hint'] = "Vous pouvez aussi bien indiquer des adresses IPv4/IPv6, des réseaux en notation CIDR, des noms d'hôtes (qui se seront convertit en adresses IP), ou des noms de domaine (qui seront convertit en adresses IP par une requête SPF ou, en son absence, l'enregistrement MX)."; $lang['admin']['forwarding_hosts_add_hint'] = "Vous pouvez aussi bien indiquer des adresses IPv4/IPv6, des réseaux en notation CIDR, des noms d'hôtes (qui se seront convertit en adresses IP), ou des noms de domaine (qui seront convertit en adresses IP par une requête SPF ou, en son absence, l'enregistrement MX).";
@ -509,7 +374,6 @@ $lang['admin']['host'] = "Hôte";
$lang['admin']['source'] = "Source"; $lang['admin']['source'] = "Source";
$lang['admin']['add_forwarding_host'] = "Ajouter un hôte de réexpédition"; $lang['admin']['add_forwarding_host'] = "Ajouter un hôte de réexpédition";
$lang['admin']['add_relayhost'] = "Ajouter un hôte de relai"; $lang['admin']['add_relayhost'] = "Ajouter un hôte de relai";
$lang['delete']['remove_forwardinghost_warning'] = "<b>Attention :</b>vous êtes sur le point de retirer l'hôte de réexpédition <b>%s</b> !";
$lang['success']['forwarding_host_removed'] = "L'hôte de réexpédition %s a été retiré"; $lang['success']['forwarding_host_removed'] = "L'hôte de réexpédition %s a été retiré";
$lang['success']['forwarding_host_added'] = "L'hôte de réexpédition %s a été ajouté"; $lang['success']['forwarding_host_added'] = "L'hôte de réexpédition %s a été ajouté";
$lang['success']['relayhost_removed'] = "L'hôte de relai %s a été retiré"; $lang['success']['relayhost_removed'] = "L'hôte de relai %s a été retiré";
@ -529,10 +393,6 @@ $lang['admin']['add_row'] = "Ajouter une ligne";
$lang['admin']['reset_default'] = "Remise à zéro par défaut"; $lang['admin']['reset_default'] = "Remise à zéro par défaut";
$lang['admin']['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."; $lang['admin']['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.";
$lang['edit']['tls_policy'] = "Changer la politique TLS";
$lang['edit']['spam_score'] = "Définir un score personnalisé de pourriel"; $lang['edit']['spam_score'] = "Définir un score personnalisé de pourriel";
$lang['edit']['spam_policy'] = "Ajouter ou retirer des éléments des listes blanches/noires"; $lang['edit']['spam_policy'] = "Ajouter ou retirer des éléments des listes blanches/noires";
$lang['edit']['delimiter_action'] = "Modifier l'action des séparateurs";
$lang['edit']['syncjobs'] = "Ajouter ou modifier des tâches de synchronisation";
$lang['edit']['eas_reset'] = "Ré-initialisation des appareils EAS";
$lang['edit']['spam_alias'] = "Créer ou changer les adresses alias à temps limité"; $lang['edit']['spam_alias'] = "Créer ou changer les adresses alias à temps limité";

View File

@ -15,16 +15,10 @@ $lang['footer']['delete_these_items'] = 'Sicuro di voler eliminare gli oggetti s
$lang['footer']['delete_now'] = 'Elimina ora'; $lang['footer']['delete_now'] = 'Elimina ora';
$lang['footer']['cancel'] = 'Annulla'; $lang['footer']['cancel'] = 'Annulla';
$lang['dkim']['confirm'] = "Sicuro?";
$lang['danger']['dkim_not_found'] = "Chiave DKIM non trovata";
$lang['danger']['dkim_remove_failed'] = "Impossibile rimuovere la chiave DKIM selezionata";
$lang['danger']['dkim_add_failed'] = "Impossibile aggiungere la chiave DKIM selezionata";
$lang['danger']['dkim_domain_or_sel_invalid'] = "DKIM domain or selector invalid"; $lang['danger']['dkim_domain_or_sel_invalid'] = "DKIM domain or selector invalid";
$lang['danger']['dkim_key_length_invalid'] = "Lunghezza della chiave DKIM non valida";
$lang['success']['dkim_removed'] = "La chiave DKIM è stata rimossa"; $lang['success']['dkim_removed'] = "La chiave DKIM è stata rimossa";
$lang['success']['dkim_added'] = "La chiave DKIM è stata salvata"; $lang['success']['dkim_added'] = "La chiave DKIM è stata salvata";
$lang['danger']['access_denied'] = "Accesso negato o form di login non corretto"; $lang['danger']['access_denied'] = "Accesso negato o form di login non corretto";
$lang['danger']['whitelist_from_invalid'] = "Elemento Whitelist non valido";
$lang['danger']['domain_invalid'] = "Il nome di dominio non è valido"; $lang['danger']['domain_invalid'] = "Il nome di dominio non è valido";
$lang['danger']['mailbox_quota_exceeds_domain_quota'] = "La quota massima eccede la quota di dominio"; $lang['danger']['mailbox_quota_exceeds_domain_quota'] = "La quota massima eccede la quota di dominio";
$lang['danger']['object_is_not_numeric'] = "Il valore %s non è numerico"; $lang['danger']['object_is_not_numeric'] = "Il valore %s non è numerico";
@ -34,8 +28,6 @@ $lang['danger']['last_key'] = "L'ultima chiave non può essere rimossa";
$lang['danger']['goto_empty'] = "L'indirizzo di destinazione non può restare vuoto"; $lang['danger']['goto_empty'] = "L'indirizzo di destinazione non può restare vuoto";
$lang['danger']['policy_list_from_exists'] = "Un elemento con lo stesso nome è già presente"; $lang['danger']['policy_list_from_exists'] = "Un elemento con lo stesso nome è già presente";
$lang['danger']['policy_list_from_invalid'] = "L'elemento ha un formato non valido"; $lang['danger']['policy_list_from_invalid'] = "L'elemento ha un formato non valido";
$lang['danger']['whitelist_exists'] = "Un elemento è già presente con lo stesso nome tra i whitelist";
$lang['danger']['whitelist_from_invalid'] = "L'elemento Whitelist ha un formato non valido";
$lang['danger']['alias_invalid'] = "L'indirizzo alias non è valido"; $lang['danger']['alias_invalid'] = "L'indirizzo alias non è valido";
$lang['danger']['goto_invalid'] = "Goto address non è valido"; $lang['danger']['goto_invalid'] = "Goto address non è valido";
$lang['danger']['alias_domain_invalid'] = "Alias domain non è valido"; $lang['danger']['alias_domain_invalid'] = "Alias domain non è valido";
@ -51,19 +43,13 @@ $lang['success']['aliasd_modified'] = "I cambiamenti all'alias domain è stato s
$lang['success']['mailbox_modified'] = "I cambiamenti alla mailbox %s è stato salvato"; $lang['success']['mailbox_modified'] = "I cambiamenti alla mailbox %s è stato salvato";
$lang['success']['resource_modified'] = "I cambiamenti alla mailbox %s è stato salvato"; $lang['success']['resource_modified'] = "I cambiamenti alla mailbox %s è stato salvato";
$lang['success']['object_modified'] = "I cambiamenti all'oggetto %s è stato salvato"; $lang['success']['object_modified'] = "I cambiamenti all'oggetto %s è stato salvato";
$lang['success']['msg_size_saved'] = "Il limite di dimensione messaggio è stato impostato";
$lang['danger']['aliasd_not_found'] = "l'alias del dominio non è stato trovato";
$lang['danger']['targetd_not_found'] = "Il target del dominio non è stato trovato"; $lang['danger']['targetd_not_found'] = "Il target del dominio non è stato trovato";
$lang['danger']['aliasd_exists'] = "L'Alias di dominio esiste già";
$lang['success']['aliasd_added'] = 'Aggiunto l\'alias per il dominio %s'; $lang['success']['aliasd_added'] = 'Aggiunto l\'alias per il dominio %s';
$lang['success']['aliasd_modified'] = "I cambiamenti a alias domain %s è stato salvato"; $lang['success']['aliasd_modified'] = "I cambiamenti a alias domain %s è stato salvato";
$lang['success']['domain_modified'] = "I cambiamenti a domain %s è stato salvato"; $lang['success']['domain_modified'] = "I cambiamenti a domain %s è stato salvato";
$lang['success']['domain_admin_modified'] = "I cambiamenti a domain administrator %s è stato salvato"; $lang['success']['domain_admin_modified'] = "I cambiamenti a domain administrator %s è stato salvato";
$lang['success']['domain_admin_added'] = "L'amministratore di dominio %s è stato aggiunto"; $lang['success']['domain_admin_added'] = "L'amministratore di dominio %s è stato aggiunto";
$lang['success']['changes_general'] = 'I cambiamenti sono stati salvati';
$lang['success']['admin_modified'] = "I cambiamenti a administrator è stato salvato"; $lang['success']['admin_modified'] = "I cambiamenti a administrator è stato salvato";
$lang['danger']['exit_code_not_null'] = 'Errore: Il codice di uscita è %d';
$lang['danger']['mailbox_not_available'] = "Casella non disponibile";
$lang['danger']['username_invalid'] = "Username non può essere utilizzato"; $lang['danger']['username_invalid'] = "Username non può essere utilizzato";
$lang['danger']['password_mismatch'] = "La password di conferma non corrisponde"; $lang['danger']['password_mismatch'] = "La password di conferma non corrisponde";
$lang['danger']['password_complexity'] = "La password non soddisfa le regole di sicurezza"; $lang['danger']['password_complexity'] = "La password non soddisfa le regole di sicurezza";
@ -72,7 +58,6 @@ $lang['danger']['login_failed'] = "Login fallito";
$lang['danger']['mailbox_invalid'] = "Il nome della casella non è valido"; $lang['danger']['mailbox_invalid'] = "Il nome della casella non è valido";
$lang['danger']['description_invalid'] = 'La descrizione della risorsa non è valido'; $lang['danger']['description_invalid'] = 'La descrizione della risorsa non è valido';
$lang['danger']['resource_invalid'] = "Il nome della risorsa non è valido"; $lang['danger']['resource_invalid'] = "Il nome della risorsa non è valido";
$lang['danger']['mailbox_invalid_suggest'] = 'Il nome della casella non è valido, avevi in mente "%s"?';
$lang['danger']['is_alias'] = "%s è già presente come alias"; $lang['danger']['is_alias'] = "%s è già presente come alias";
$lang['danger']['is_alias_or_mailbox'] = "%s è già presente come alias o casella"; $lang['danger']['is_alias_or_mailbox'] = "%s è già presente come alias o casella";
$lang['danger']['is_spam_alias'] = "%s è già presente come indirizzo spam alias"; $lang['danger']['is_spam_alias'] = "%s è già presente come indirizzo spam alias";
@ -97,16 +82,11 @@ $lang['danger']['mailboxes_in_use'] = "La quota della casella massima deve esser
$lang['danger']['aliases_in_use'] = "Il numero massimo di alias must deve essere maggiore o uguale a %d"; $lang['danger']['aliases_in_use'] = "Il numero massimo di alias must deve essere maggiore o uguale a %d";
$lang['danger']['sender_acl_invalid'] = "Il valore di Sender ACL non è valido"; $lang['danger']['sender_acl_invalid'] = "Il valore di Sender ACL non è valido";
$lang['danger']['domain_not_empty'] = "Non posso rimuovere domini in non vuoti"; $lang['danger']['domain_not_empty'] = "Non posso rimuovere domini in non vuoti";
$lang['warning']['spam_alias_temp_error'] = "Errore temporaneo: Impossibile aggiungere alias di spam, provare più tardi.";
$lang['danger']['spam_alias_max_exceeded'] = "Il numero massimo di indirizzi come spam alias superato";
$lang['danger']['validity_missing'] = 'Assegnare un periodo di validità'; $lang['danger']['validity_missing'] = 'Assegnare un periodo di validità';
$lang['user']['on'] = "On";
$lang['user']['off'] = "Off";
$lang['user']['messages'] = "messaggi"; // "123 messages" $lang['user']['messages'] = "messaggi"; // "123 messages"
$lang['user']['in_use'] = "Utilizzati"; $lang['user']['in_use'] = "Utilizzati";
$lang['user']['user_change_fn'] = ""; $lang['user']['user_change_fn'] = "";
$lang['user']['user_settings'] = 'Impostazioni utente'; $lang['user']['user_settings'] = 'Impostazioni utente';
$lang['user']['mailbox_settings'] = 'Impostazioni casella';
$lang['user']['mailbox_details'] = 'Dettagli casella'; $lang['user']['mailbox_details'] = 'Dettagli casella';
$lang['user']['change_password'] = 'Cambia password'; $lang['user']['change_password'] = 'Cambia password';
$lang['user']['new_password'] = 'Nuova password'; $lang['user']['new_password'] = 'Nuova password';
@ -114,11 +94,8 @@ $lang['user']['save_changes'] = 'Salva modifiche';
$lang['user']['password_now'] = 'Password attuale (conferma modifiche)'; $lang['user']['password_now'] = 'Password attuale (conferma modifiche)';
$lang['user']['new_password_repeat'] = 'Conferma password (ripeti)'; $lang['user']['new_password_repeat'] = 'Conferma password (ripeti)';
$lang['user']['new_password_description'] = 'Requisiti: Lunghezza di 6 caratteri, lettere e numeri.'; $lang['user']['new_password_description'] = 'Requisiti: Lunghezza di 6 caratteri, lettere e numeri.';
$lang['user']['did_you_know'] = '<b>Lo sapevi?</b> Puoi usare i tags nell\'indirizzo di posta ("me+<b>privat</b>@example.com") per muovere i messaggi automaticamente nelle cartelle (esempio: "privat").';
$lang['user']['spam_aliases'] = 'Indirizzi mail temporanei'; $lang['user']['spam_aliases'] = 'Indirizzi mail temporanei';
$lang['user']['alias'] = 'Alias'; $lang['user']['alias'] = 'Alias';
$lang['user']['aliases'] = 'Aliases';
$lang['user']['domain_aliases'] = 'Indirizzi alias del dominio';
$lang['user']['is_catch_all'] = 'Catch-all per il dominio/i'; $lang['user']['is_catch_all'] = 'Catch-all per il dominio/i';
$lang['user']['aliases_also_send_as'] = 'Può inviare come utente'; $lang['user']['aliases_also_send_as'] = 'Può inviare come utente';
$lang['user']['aliases_send_as_all'] = 'Do not check sender access for the following domain(s) and its alias domains'; $lang['user']['aliases_send_as_all'] = 'Do not check sender access for the following domain(s) and its alias domains';
@ -128,7 +105,6 @@ $lang['user']['alias_valid_until'] = 'Valido fino a';
$lang['user']['alias_remove_all'] = 'Rimuovi tutti gli alias'; $lang['user']['alias_remove_all'] = 'Rimuovi tutti gli alias';
$lang['user']['alias_time_left'] = 'Tempo rimanente'; $lang['user']['alias_time_left'] = 'Tempo rimanente';
$lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T'; $lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['syncjob_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['alias_select_validity'] = 'Periodo di validità'; $lang['user']['alias_select_validity'] = 'Periodo di validità';
$lang['user']['sync_jobs'] = 'Processi di sync'; $lang['user']['sync_jobs'] = 'Processi di sync';
$lang['user']['hour'] = 'Ora'; $lang['user']['hour'] = 'Ora';
@ -161,8 +137,6 @@ $lang['user']['tls_enforce_in'] = 'Imponi TLS in ingresso';
$lang['user']['tls_enforce_out'] = 'Imponi TLS in uscita'; $lang['user']['tls_enforce_out'] = 'Imponi TLS in uscita';
$lang['user']['no_record'] = 'Nessun elemento'; $lang['user']['no_record'] = 'Nessun elemento';
$lang['user']['misc_settings'] = 'Impostazioni di altri profili';
$lang['user']['misc_delete_profile'] = 'Impostazioni di altri profili';
$lang['user']['tag_handling'] = 'Imposta le gestione della mail evidenziate'; $lang['user']['tag_handling'] = 'Imposta le gestione della mail evidenziate';
$lang['user']['tag_in_subfolder'] = 'Nella sotto cartella'; $lang['user']['tag_in_subfolder'] = 'Nella sotto cartella';
@ -177,7 +151,6 @@ $lang['user']['eas_reset_help'] = 'In molti casi un ripristino risolve i problem
$lang['user']['encryption'] = 'Crittografia'; $lang['user']['encryption'] = 'Crittografia';
$lang['user']['username'] = 'Nome utente'; $lang['user']['username'] = 'Nome utente';
$lang['user']['password'] = 'Password';
$lang['user']['last_run'] = 'Ultima esecuzione'; $lang['user']['last_run'] = 'Ultima esecuzione';
$lang['user']['excludes'] = 'Esclude'; $lang['user']['excludes'] = 'Esclude';
$lang['user']['interval'] = 'Intervallo'; $lang['user']['interval'] = 'Intervallo';
@ -185,47 +158,25 @@ $lang['user']['active'] = 'Attiva';
$lang['user']['action'] = 'Azione'; $lang['user']['action'] = 'Azione';
$lang['user']['edit'] = 'Modifica'; $lang['user']['edit'] = 'Modifica';
$lang['user']['remove'] = 'Elimina'; $lang['user']['remove'] = 'Elimina';
$lang['user']['delete_now'] = 'Elimina ora';
$lang['user']['create_syncjob'] = 'Crea un azione di sync'; $lang['user']['create_syncjob'] = 'Crea un azione di sync';
$lang['start']['dashboard'] = '%s - dashboard';
$lang['start']['start_rc'] = 'Apri Roundcube';
$lang['start']['start_sogo'] = 'Apri SOGo';
$lang['start']['mailcow_apps_detail'] = 'Usa l\'app mailcow per accedere alla posta, calendari, contatti ed altro.'; $lang['start']['mailcow_apps_detail'] = 'Usa l\'app mailcow per accedere alla posta, calendari, contatti ed altro.';
$lang['start']['mailcow_panel'] = 'Avvia UI mailcow';
$lang['start']['mailcow_panel_description'] = 'L\'UI di mailcow per gli amministratori e gli utenti di caselle.';
$lang['start']['mailcow_panel_detail'] = '<b>Amministratori di dominio</b> crea, modifica o cancella caselle e alias, cambia i domini e informazioni relative ai domini associati.<br /> $lang['start']['mailcow_panel_detail'] = '<b>Amministratori di dominio</b> crea, modifica o cancella caselle e alias, cambia i domini e informazioni relative ai domini associati.<br />
<b>Utenti di caselle</b> possono creare degli alias temporanei (spam aliases), cambiare la loro password e le impostazioni relative ai filtri spam.'; <b>Utenti di caselle</b> possono creare degli alias temporanei (spam aliases), cambiare la loro password e le impostazioni relative ai filtri spam.';
$lang['start']['recommended_config'] = 'Configurazioni consigliate (senza ActiveSync)';
$lang['start']['imap_smtp_server'] = 'Dati server IMAP e SMTP';
$lang['start']['imap_smtp_server_description'] = 'Per l\'esperienza migliore utilizzare <a href="%s" target="_blank"><b>Mozilla Thunderbird</b></a>.';
$lang['start']['imap_smtp_server_badge'] = 'Leggi e scrivi le email';
$lang['start']['imap_smtp_server_auth_info'] = 'Please use your full email address and the PLAIN authentication mechanism.<br /> $lang['start']['imap_smtp_server_auth_info'] = 'Please use your full email address and the PLAIN authentication mechanism.<br />
Your login data will be encrypted by the server-side mandatory encryption.'; Your login data will be encrypted by the server-side mandatory encryption.';
$lang['start']['managesieve'] = 'ManageSieve';
$lang['start']['managesieve_badge'] = 'Filtri email';
$lang['start']['managesieve_description'] = 'Please use <b>Mozilla Thunderbird</b> with the <a style="text-decoration:none" target="_blank" href="%s"><b>nightly sieve extension</b></a>.<br />Start Thunderbird, open the add-on settings and drop the newly downloaded xpi file into the opened window.<br />The server name is <b>%s</b>, use port <b>4190</b> if you are asked for. The login data match your email login.';
$lang['start']['service'] = 'Servizio';
$lang['start']['encryption'] = 'Metodo di criptazione';
$lang['start']['help'] = 'Mostra/Nascondi pannello di aiuto'; $lang['start']['help'] = 'Mostra/Nascondi pannello di aiuto';
$lang['start']['hostname'] = 'Hostname';
$lang['start']['port'] = 'Porta';
$lang['start']['footer'] = '';
$lang['header']['mailcow_settings'] = 'Configurazione'; $lang['header']['mailcow_settings'] = 'Configurazione';
$lang['header']['administration'] = 'Amministrazione'; $lang['header']['administration'] = 'Amministrazione';
$lang['header']['mailboxes'] = 'Caselle'; $lang['header']['mailboxes'] = 'Caselle';
$lang['header']['user_settings'] = 'Impostazioni utente'; $lang['header']['user_settings'] = 'Impostazioni utente';
$lang['header']['login'] = 'Accedi';
$lang['header']['logged_in_as_logout'] = 'Accesso come <b>%s</b> (esci)';
$lang['header']['logged_in_as_logout_dual'] = 'Accesso come <b>%s <span class="text-info">[%s]</span></b>'; $lang['header']['logged_in_as_logout_dual'] = 'Accesso come <b>%s <span class="text-info">[%s]</span></b>';
$lang['header']['locale'] = 'Lingua';
$lang['mailbox']['domain'] = 'Dominio'; $lang['mailbox']['domain'] = 'Dominio';
$lang['mailbox']['spam_aliases'] = 'Alias temporanei'; $lang['mailbox']['spam_aliases'] = 'Alias temporanei';
$lang['mailbox']['multiple_bookings'] = 'Multiple bookings'; $lang['mailbox']['multiple_bookings'] = 'Multiple bookings';
$lang['mailbox']['kind'] = 'Tipo'; $lang['mailbox']['kind'] = 'Tipo';
$lang['mailbox']['description'] = 'Descrizione'; $lang['mailbox']['description'] = 'Descrizione';
$lang['mailbox']['alias'] = 'Alias'; $lang['mailbox']['alias'] = 'Alias';
$lang['mailbox']['resource_name'] = 'Nome risorsa';
$lang['mailbox']['aliases'] = 'Aliases'; $lang['mailbox']['aliases'] = 'Aliases';
$lang['mailbox']['domains'] = 'Domini'; $lang['mailbox']['domains'] = 'Domini';
$lang['mailbox']['mailboxes'] = 'Caselle'; $lang['mailbox']['mailboxes'] = 'Caselle';
@ -234,7 +185,6 @@ $lang['mailbox']['mailbox_quota'] = 'Massima dimensione della casella';
$lang['mailbox']['domain_quota'] = 'Quota'; $lang['mailbox']['domain_quota'] = 'Quota';
$lang['mailbox']['active'] = 'Attiva'; $lang['mailbox']['active'] = 'Attiva';
$lang['mailbox']['action'] = 'Azione'; $lang['mailbox']['action'] = 'Azione';
$lang['mailbox']['ratelimit'] = 'limite invio msg/h';
$lang['mailbox']['backup_mx'] = 'Backup MX'; $lang['mailbox']['backup_mx'] = 'Backup MX';
$lang['mailbox']['domain_aliases'] = 'Alias di domini'; $lang['mailbox']['domain_aliases'] = 'Alias di domini';
$lang['mailbox']['target_domain'] = 'Target domain'; $lang['mailbox']['target_domain'] = 'Target domain';
@ -244,20 +194,15 @@ $lang['mailbox']['fname'] = 'Nome completo';
$lang['mailbox']['filter_table'] = 'Filra tabella'; $lang['mailbox']['filter_table'] = 'Filra tabella';
$lang['mailbox']['yes'] = '&#10004;'; $lang['mailbox']['yes'] = '&#10004;';
$lang['mailbox']['no'] = '&#10008;'; $lang['mailbox']['no'] = '&#10008;';
$lang['mailbox']['quota'] = 'Quota';
$lang['mailbox']['in_use'] = 'In uso (%)'; $lang['mailbox']['in_use'] = 'In uso (%)';
$lang['mailbox']['msg_num'] = 'Messaggio #'; $lang['mailbox']['msg_num'] = 'Messaggio #';
$lang['mailbox']['remove'] = 'Rimuovi'; $lang['mailbox']['remove'] = 'Rimuovi';
$lang['mailbox']['edit'] = 'Modifica'; $lang['mailbox']['edit'] = 'Modifica';
$lang['mailbox']['archive'] = 'Archivio';
$lang['mailbox']['no_record'] = 'Nessun record per l\' oggetto %s';
$lang['mailbox']['no_record_single'] = 'Nessun record';
$lang['mailbox']['add_domain'] = 'Aggiungi Dominio'; $lang['mailbox']['add_domain'] = 'Aggiungi Dominio';
$lang['mailbox']['add_domain_alias'] = 'Aggiungi alias Dominio'; $lang['mailbox']['add_domain_alias'] = 'Aggiungi alias Dominio';
$lang['mailbox']['add_mailbox'] = 'Aggiungi casella mail'; $lang['mailbox']['add_mailbox'] = 'Aggiungi casella mail';
$lang['mailbox']['add_resource'] = 'Aggiungi risorsa'; $lang['mailbox']['add_resource'] = 'Aggiungi risorsa';
$lang['mailbox']['add_alias'] = 'Aggiungi alias'; $lang['mailbox']['add_alias'] = 'Aggiungi alias';
$lang['mailbox']['add_domain_record_first'] = 'Perfavore aggiungi il dominio prima';
$lang['mailbox']['empty'] = 'Nessun risultato'; $lang['mailbox']['empty'] = 'Nessun risultato';
$lang['mailbox']['toggle_all'] = 'Inverti tutti'; $lang['mailbox']['toggle_all'] = 'Inverti tutti';
$lang['mailbox']['quick_actions'] = 'Azione veloce'; $lang['mailbox']['quick_actions'] = 'Azione veloce';
@ -266,21 +211,6 @@ $lang['mailbox']['deactivate'] = 'Disattiva';
$lang['info']['no_action'] = 'Azione non applicabile'; $lang['info']['no_action'] = 'Azione non applicabile';
$lang['delete']['title'] = 'Rimuovi oggetti';
$lang['delete']['remove_domain_warning'] = '<b>Attenzione:</b> Sei sicuro di voler rimuovere il dominio <b>%s</b>!';
$lang['delete']['remove_syncjob_warning'] = '<b>Attenzione:</b> Sei sicuro di voler rimuovere la sincronizzazione per l\'utente <b>%s</b>!';
$lang['delete']['remove_domainalias_warning'] = '<b>Attenzione:</b> Sei sicuro di voler rimuovere l\' alias di dominio <b>%s</b>!';
$lang['delete']['remove_domainadmin_warning'] = '<b>Attenzione:</b> Sei sicuro di voler rimuovere l\' amministratore di dominio <b>%s</b>!';
$lang['delete']['remove_alias_warning'] = '<b>Attenzione:</b> Sei sicuro di voler rimuovere l\' alias <b>%s</b>!';
$lang['delete']['remove_mailbox_warning'] = '<b>Attenzione:</b> Sei sicuro di voler rimuovere la casella di posta <b>%s</b>!';
$lang['delete']['remove_mailbox_details'] = 'La casella di posta sarà <b>eliminata definitivamente</b>!';
$lang['delete']['remove_resource_warning'] = '<b>Attenzione:</b> Stai per rimuovere la risorsa <b>%s</b>!';
$lang['delete']['remove_resource_details'] = 'La risorsa sarà <b>eliminata definitivamente</b>!';
$lang['delete']['remove_domain_details'] = 'Questo rimuoverà anche gli alias di dominio.<br /><br /><b>Un dominio deve essere vuoto per essere rinmosso.</b>';
$lang['delete']['remove_syncjob_details'] = 'Gli oggetti provenienti da questa sincronizzazione non verranno più estratti dal server remoto.';
$lang['delete']['remove_alias_details'] = 'Gli utenti non potranno più ricevere posta per o inviare posta da questo indirizzo.</b>';
$lang['delete']['remove_button'] = 'Rimuovi';
$lang['delete']['previous'] = 'Pagina precedente';
$lang['edit']['syncjob'] = 'Modifica sincronizzazione'; $lang['edit']['syncjob'] = 'Modifica sincronizzazione';
$lang['edit']['save'] = 'Salva modifiche'; $lang['edit']['save'] = 'Salva modifiche';
@ -292,22 +222,17 @@ $lang['edit']['subfolder2'] = 'Sincronizza in una sottocartella<br /><small>(vuo
$lang['edit']['mins_interval'] = 'Intervallo (min)'; $lang['edit']['mins_interval'] = 'Intervallo (min)';
$lang['edit']['exclude'] = 'Escludi oggetti (regex)'; $lang['edit']['exclude'] = 'Escludi oggetti (regex)';
$lang['edit']['save'] = 'Salva modifiche'; $lang['edit']['save'] = 'Salva modifiche';
$lang['edit']['archive'] = 'Archivia accesso';
$lang['edit']['max_mailboxes'] = 'Caselle di posta massime'; $lang['edit']['max_mailboxes'] = 'Caselle di posta massime';
$lang['edit']['title'] = 'Modifica oggetto'; $lang['edit']['title'] = 'Modifica oggetto';
$lang['edit']['target_address'] = 'Vai all\'indirizzo/es <small>(comma-separated)</small>'; $lang['edit']['target_address'] = 'Vai all\'indirizzo/es <small>(comma-separated)</small>';
$lang['edit']['active'] = 'Attivo'; $lang['edit']['active'] = 'Attivo';
$lang['edit']['target_domain'] = 'Target dominio'; $lang['edit']['target_domain'] = 'Target dominio';
$lang['edit']['password'] = 'Password'; $lang['edit']['password'] = 'Password';
$lang['edit']['ratelimit'] = 'Traffico uscita limite/ora';
$lang['danger']['ratelimt_less_one'] = 'Traffico uscita limite/ora non deve essere inferiore a 1';
$lang['edit']['password_repeat'] = 'Conferma password (riscrivila)'; $lang['edit']['password_repeat'] = 'Conferma password (riscrivila)';
$lang['edit']['domain_admin'] = 'Modifica amministratore dominio'; $lang['edit']['domain_admin'] = 'Modifica amministratore dominio';
$lang['edit']['domain'] = 'Modifica dominio'; $lang['edit']['domain'] = 'Modifica dominio';
$lang['edit']['alias_domain'] = 'Alias dominio';
$lang['edit']['edit_alias_domain'] = 'Modifica Alias dominio'; $lang['edit']['edit_alias_domain'] = 'Modifica Alias dominio';
$lang['edit']['domains'] = 'Dominio'; $lang['edit']['domains'] = 'Dominio';
$lang['edit']['destroy'] = 'inserimento manuale dati';
$lang['edit']['alias'] = 'Modifica alias'; $lang['edit']['alias'] = 'Modifica alias';
$lang['edit']['mailbox'] = 'Modifica casella di posta'; $lang['edit']['mailbox'] = 'Modifica casella di posta';
$lang['edit']['description'] = 'Descrizione'; $lang['edit']['description'] = 'Descrizione';
@ -317,15 +242,10 @@ $lang['edit']['domain_quota'] = 'Spazio Dominio';
$lang['edit']['backup_mx_options'] = 'Backup MX options'; $lang['edit']['backup_mx_options'] = 'Backup MX options';
$lang['edit']['relay_domain'] = 'Relay dominio'; $lang['edit']['relay_domain'] = 'Relay dominio';
$lang['edit']['relay_all'] = 'Relay tutti i destinatari'; $lang['edit']['relay_all'] = 'Relay tutti i destinatari';
$lang['edit']['dkim_signature'] = 'Firma ARC + DKIM';
$lang['edit']['dkim_record_info'] = '<small>Aggiungere un record TXT con il valore specificato nell\' pannello DNS.</small>';
$lang['edit']['relay_all_info'] = '<small>Se si sceglie di <b>non</b> inviare tutti i destinatari, è necessario aggiungere una cassetta postale ("blind") per ogni singolo destinatario a cui deve essere inoltrato.</small>'; $lang['edit']['relay_all_info'] = '<small>Se si sceglie di <b>non</b> inviare tutti i destinatari, è necessario aggiungere una cassetta postale ("blind") per ogni singolo destinatario a cui deve essere inoltrato.</small>';
$lang['edit']['full_name'] = 'Nome completo'; $lang['edit']['full_name'] = 'Nome completo';
$lang['edit']['quota_mb'] = 'Spazio (MiB)'; $lang['edit']['quota_mb'] = 'Spazio (MiB)';
$lang['edit']['sender_acl'] = 'Consenti di inviare come'; $lang['edit']['sender_acl'] = 'Consenti di inviare come';
$lang['edit']['sender_acl_info'] = 'Gli alias non possono essere deselezionati';
$lang['edit']['dkim_txt_name'] = 'TXT record name:';
$lang['edit']['dkim_txt_value'] = 'TXT record value:';
$lang['edit']['previous'] = 'Pagina precedente'; $lang['edit']['previous'] = 'Pagina precedente';
$lang['edit']['unchanged_if_empty'] = 'Se immutato lasciare vuoto'; $lang['edit']['unchanged_if_empty'] = 'Se immutato lasciare vuoto';
$lang['edit']['dont_check_sender_acl'] = "Disattiva il controllo del mittente per il dominio %s + alias domains"; $lang['edit']['dont_check_sender_acl'] = "Disattiva il controllo del mittente per il dominio %s + alias domains";
@ -340,22 +260,17 @@ $lang['add']['port'] = 'Porta';
$lang['add']['username'] = 'Username'; $lang['add']['username'] = 'Username';
$lang['add']['enc_method'] = 'Metodo di criptazione'; $lang['add']['enc_method'] = 'Metodo di criptazione';
$lang['add']['mins_interval'] = 'intervallo di Pooling (minuti)'; $lang['add']['mins_interval'] = 'intervallo di Pooling (minuti)';
$lang['add']['maxage'] = 'Età massima dei messaggi che verranno interrogati dal server remoto (0 = ignora l\'età)';
$lang['add']['subfolder2'] = 'Sincronizza in una sottocartella nella destinazione';
$lang['add']['exclude'] = 'Escludi oggetti (regex)'; $lang['add']['exclude'] = 'Escludi oggetti (regex)';
$lang['add']['delete2duplicates'] = 'Elimina duplicati nella destinazione'; $lang['add']['delete2duplicates'] = 'Elimina duplicati nella destinazione';
$lang['add']['delete1'] = 'Elimina dalla sorgente al termine'; $lang['add']['delete1'] = 'Elimina dalla sorgente al termine';
$lang['edit']['delete2duplicates'] = 'Elimina duplicati nella destinazione'; $lang['edit']['delete2duplicates'] = 'Elimina duplicati nella destinazione';
$lang['edit']['delete1'] = 'Elimina dalla sorgente al termine'; $lang['edit']['delete1'] = 'Elimina dalla sorgente al termine';
$lang['add']['title'] = 'Aggiungi oggetti';
$lang['add']['domain'] = 'Dominio'; $lang['add']['domain'] = 'Dominio';
$lang['add']['active'] = 'Attiva'; $lang['add']['active'] = 'Attiva';
$lang['add']['multiple_bookings'] = 'Prenotazioni multiple'; $lang['add']['multiple_bookings'] = 'Prenotazioni multiple';
$lang['add']['save'] = 'Salva modifiche';
$lang['add']['description'] = 'Descrizione:'; $lang['add']['description'] = 'Descrizione:';
$lang['add']['max_aliases'] = 'Numero massimo alias:'; $lang['add']['max_aliases'] = 'Numero massimo alias:';
$lang['add']['resource_name'] = 'Nome della risorsa';
$lang['add']['max_mailboxes'] = 'Numero massimo caselle di posta:'; $lang['add']['max_mailboxes'] = 'Numero massimo caselle di posta:';
$lang['add']['mailbox_quota_m'] = 'Spazio massimo per casella di posta (MiB):'; $lang['add']['mailbox_quota_m'] = 'Spazio massimo per casella di posta (MiB):';
$lang['add']['domain_quota_m'] = 'Spazio totale dominio (MiB):'; $lang['add']['domain_quota_m'] = 'Spazio totale dominio (MiB):';
@ -363,8 +278,6 @@ $lang['add']['backup_mx_options'] = 'Backup MX options:';
$lang['add']['relay_all'] = 'Trasmettere a tutti i destinatari'; $lang['add']['relay_all'] = 'Trasmettere a tutti i destinatari';
$lang['add']['relay_domain'] = 'Trasmetti questo dominio'; $lang['add']['relay_domain'] = 'Trasmetti questo dominio';
$lang['add']['relay_all_info'] = '<small>Se si sceglie di <b>non</b> inviare tutti i destinatari, è necessario aggiungere una cassetta postale ("blind") per ogni singolo destinatario a cui deve essere inoltrato.</small>'; $lang['add']['relay_all_info'] = '<small>Se si sceglie di <b>non</b> inviare tutti i destinatari, è necessario aggiungere una cassetta postale ("blind") per ogni singolo destinatario a cui deve essere inoltrato.</small>';
$lang['add']['alias'] = 'Alias(es)';
$lang['add']['alias_spf_fail'] = '<b>Nota:</b> Se l\'indirizzo di destinazione scelto è una casella mail esterna, il <b>server mail ricevente</b> potrebbe rifiutare il messaggio a causa dell\' SPF.</a>';
$lang['add']['alias_address'] = 'Indirizzo alias/es:'; $lang['add']['alias_address'] = 'Indirizzo alias/es:';
$lang['add']['alias_address_info'] = '<small>Indirizzo e-mail completo/es @example.com, per catturare tutti i messaggi di un dominio (separati da virgola). <b>solo domini mailcow</b>.</small>'; $lang['add']['alias_address_info'] = '<small>Indirizzo e-mail completo/es @example.com, per catturare tutti i messaggi di un dominio (separati da virgola). <b>solo domini mailcow</b>.</small>';
$lang['add']['alias_domain_info'] = '<small>Solo nomi di dominio validi (cseparati da virgola).</small>'; $lang['add']['alias_domain_info'] = '<small>Solo nomi di dominio validi (cseparati da virgola).</small>';
@ -373,8 +286,6 @@ $lang['add']['target_address_info'] = '<small>Indirizzo e-mail completo/es (sepa
$lang['add']['alias_domain'] = 'Dominio alias'; $lang['add']['alias_domain'] = 'Dominio alias';
$lang['add']['select'] = 'Perfavore seleziona...'; $lang['add']['select'] = 'Perfavore seleziona...';
$lang['add']['target_domain'] = 'Target dominio:'; $lang['add']['target_domain'] = 'Target dominio:';
$lang['add']['mailbox'] = 'Casella di posta';
$lang['add']['resource'] = 'Risorsa';
$lang['add']['kind'] = 'Genere'; $lang['add']['kind'] = 'Genere';
$lang['add']['mailbox_username'] = 'Username (parte a sinistra della @):'; $lang['add']['mailbox_username'] = 'Username (parte a sinistra della @):';
$lang['add']['full_name'] = 'Nome completo:'; $lang['add']['full_name'] = 'Nome completo:';
@ -382,19 +293,11 @@ $lang['add']['quota_mb'] = 'Spazio (MiB):';
$lang['add']['select_domain'] = 'Perfavore seleziona il dominio prima'; $lang['add']['select_domain'] = 'Perfavore seleziona il dominio prima';
$lang['add']['password'] = 'Password:'; $lang['add']['password'] = 'Password:';
$lang['add']['password_repeat'] = 'Conferma password (riscrivi):'; $lang['add']['password_repeat'] = 'Conferma password (riscrivi):';
$lang['add']['previous'] = 'Pagina precedente';
$lang['add']['restart_sogo_hint'] = 'Dovrai riavviare il servizio SOGo dopo aver aggiunto un nuovo dominio!'; $lang['add']['restart_sogo_hint'] = 'Dovrai riavviare il servizio SOGo dopo aver aggiunto un nuovo dominio!';
$lang['login']['title'] = 'Accedi';
$lang['login']['administration'] = 'Amministrazione';
$lang['login']['administration_details'] = 'Utilizza il login di amministratore per eseguire attività amministrative.';
$lang['login']['user_settings'] = 'Settaggi utente';
$lang['login']['user_settings_details'] = 'Gli utenti delle caselle mail possono utilizzare l\'interfaccia utente di mailcow per modificare le password, creare alias temporanei e regolare il comportamento del filtro anti-spam o importare messaggi da un server IMAP remoto.';
$lang['login']['username'] = 'Username'; $lang['login']['username'] = 'Username';
$lang['login']['password'] = 'Password'; $lang['login']['password'] = 'Password';
$lang['login']['reset_password'] = 'Reset password';
$lang['login']['login'] = 'Login'; $lang['login']['login'] = 'Login';
$lang['login']['previous'] = "Pagina precendente";
$lang['login']['delayed'] = 'L\'accesso è stato ritardato di %s secondi.'; $lang['login']['delayed'] = 'L\'accesso è stato ritardato di %s secondi.';
$lang['tfa']['tfa'] = "Autenticazione a due fattori"; $lang['tfa']['tfa'] = "Autenticazione a due fattori";
$lang['tfa']['set_tfa'] = "Imposta il metodo di autenticazione a due fattori"; $lang['tfa']['set_tfa'] = "Imposta il metodo di autenticazione a due fattori";
@ -403,16 +306,12 @@ $lang['tfa']['key_id'] = "Identificatore per il tuo YubiKey";
$lang['tfa']['key_id_totp'] = "Identificatore per la tua chiave"; $lang['tfa']['key_id_totp'] = "Identificatore per la tua chiave";
$lang['tfa']['api_register'] = 'mailcow usa le Api Yubico Cloud. Richiedi una Chiave API <a href="https://upgrade.yubico.com/getapikey/" target="_blank">qui</a>'; $lang['tfa']['api_register'] = 'mailcow usa le Api Yubico Cloud. Richiedi una Chiave API <a href="https://upgrade.yubico.com/getapikey/" target="_blank">qui</a>';
$lang['tfa']['u2f'] = "Autenticazione U2F"; $lang['tfa']['u2f'] = "Autenticazione U2F";
$lang['tfa']['hotp'] = "Autenticazione HOTP";
$lang['tfa']['totp'] = "Autenticazione TOTP"; $lang['tfa']['totp'] = "Autenticazione TOTP";
$lang['tfa']['none'] = "Disattiva"; $lang['tfa']['none'] = "Disattiva";
$lang['tfa']['delete_tfa'] = "Disabilita TFA"; $lang['tfa']['delete_tfa'] = "Disabilita TFA";
$lang['tfa']['disable_tfa'] = "Disabilita TFA fino al prossimo accesso"; $lang['tfa']['disable_tfa'] = "Disabilita TFA fino al prossimo accesso";
$lang['tfa']['confirm_tfa'] = "Conferma la password nel capo sottostante";
$lang['tfa']['confirm'] = "Conferma"; $lang['tfa']['confirm'] = "Conferma";
$lang['tfa']['otp'] = "Password provvisoria";
$lang['tfa']['totp'] = "Time-based OTP (Google Authenticator etc.)"; $lang['tfa']['totp'] = "Time-based OTP (Google Authenticator etc.)";
$lang['tfa']['trash_login'] = "Trash login";
$lang['tfa']['select'] = "Seleziona"; $lang['tfa']['select'] = "Seleziona";
$lang['tfa']['waiting_usb_auth'] = "<i>Attendo il device USB...</i><br /><br />Tocca ora il pulsante sul dispositivo U2F USB."; $lang['tfa']['waiting_usb_auth'] = "<i>Attendo il device USB...</i><br /><br />Tocca ora il pulsante sul dispositivo U2F USB.";
$lang['tfa']['waiting_usb_register'] = "<i>Attendo il device USB...</i><br /><br />Inserisci la tua password sopra e conferma la tua registrazione U2F toccando il pulsante del dispositivo U2F USB."; $lang['tfa']['waiting_usb_register'] = "<i>Attendo il device USB...</i><br /><br />Inserisci la tua password sopra e conferma la tua registrazione U2F toccando il pulsante del dispositivo U2F USB.";
@ -421,40 +320,14 @@ $lang['tfa']['enter_qr_code'] = "Il codice TOTP se il tuo dispositivo non è in
$lang['tfa']['confirm_totp_token'] = "Conferma le modifiche inserendo il token generato"; $lang['tfa']['confirm_totp_token'] = "Conferma le modifiche inserendo il token generato";
$lang['admin']['search_domain_da'] = 'Ricerca domini'; $lang['admin']['search_domain_da'] = 'Ricerca domini';
$lang['admin']['restrictions'] = 'Restrizioni Postfix';
$lang['admin']['rr'] = 'Restrizioni del destinatario di Postfix';
$lang['admin']['sr'] = 'Restrizioni del mittente di Postfix';
$lang['admin']['reset_defaults'] = 'Ripristina i valori di default';
$lang['admin']['sr'] = 'Restrizioni del mittente di Postfix';
$lang['admin']['r_inactive'] = 'Restrizioni inattive'; $lang['admin']['r_inactive'] = 'Restrizioni inattive';
$lang['admin']['r_active'] = 'Restrizioni attive'; $lang['admin']['r_active'] = 'Restrizioni attive';
$lang['admin']['r_info'] = 'Gli elementi disabilitati nell\'elenco delle restrizioni attive non sono conosciute come restrizioni valide per la posta e non possono essere spostate. Le restrizioni sconosciute verranno comunque impostate in ordine di aspetto. <br />Puoi aggiungere nuovi elementi in <code>inc/vars.local.inc.php</code> per poterli attivare.'; $lang['admin']['r_info'] = 'Gli elementi disabilitati nell\'elenco delle restrizioni attive non sono conosciute come restrizioni valide per la posta e non possono essere spostate. Le restrizioni sconosciute verranno comunque impostate in ordine di aspetto. <br />Puoi aggiungere nuovi elementi in <code>inc/vars.local.inc.php</code> per poterli attivare.';
$lang['admin']['public_folders'] = 'Cartelle pubbliche';
$lang['admin']['public_folders_text'] = 'Verrà creato uno spazio "Public". Di seguito il nome della cartella pubblica indica il nome della prima casella di posta automaticamente creata all\'interno di questo spazio.';
$lang['admin']['public_folder_name'] = 'Nome cartella <small>(alfanumerico)</small>';
$lang['admin']['public_folder_enable'] = 'Abilita cartella public';
$lang['admin']['public_folder_enable_text'] = 'Procedere con questa operazione, non eliminerà nessuna cartella pubblica.';
$lang['admin']['public_folder_pusf'] = 'Abilita flag per utente';
$lang['admin']['public_folder_pusf_text'] = 'Quando è abilitato il flag per utente, un messaggio non verrà contrassegnato come letto per l\'utente B, quando l\'utente A lo ha visto, ma l\'utente B non lo ha fatto.';
$lang['admin']['privacy'] = 'Privacy';
$lang['admin']['privacy_text'] = 'Questa opzione abilita una tabella per rimuovere "User-Agent", "X-Enigmail", "X-Mailer", "X-Originating-IP" e sostituisce "Ricevuta: da" con intestazione localhost/127.0.0.1.';
$lang['admin']['privacy_anon_mail'] = 'Rende anonima la posta in uscita';
$lang['admin']['dkim_txt_name'] = 'Nome TXT record:';
$lang['admin']['dkim_txt_value'] = 'Valore TXT record:';
$lang['admin']['dkim_key_length'] = 'DKIM key length (bits)'; $lang['admin']['dkim_key_length'] = 'DKIM key length (bits)';
$lang['admin']['dkim_key_valid'] = 'Key valida'; $lang['admin']['dkim_key_valid'] = 'Key valida';
$lang['admin']['dkim_key_unused'] = 'Key non usata'; $lang['admin']['dkim_key_unused'] = 'Key non usata';
$lang['admin']['dkim_key_missing'] = 'Key mancante'; $lang['admin']['dkim_key_missing'] = 'Key mancante';
$lang['admin']['dkim_key_hint'] = 'Il selettore per chiave DKIM è sempre <code>dkim</code>.';
$lang['admin']['previous'] = 'Pagina precedente';
$lang['admin']['quota_mb'] = 'Spazio (MiB):';
$lang['admin']['sender_acl'] = 'Consenti di inviare come:';
$lang['admin']['msg_size'] = 'Dimensione del messaggio';
$lang['admin']['msg_size_limit'] = 'Limita la dimensione del messaggio';
$lang['admin']['msg_size_limit_details'] = 'Applicare un nuovo limite richiede il riavvio di Postfix e del webserver.';
$lang['admin']['save'] = 'Salva modifiche'; $lang['admin']['save'] = 'Salva modifiche';
$lang['admin']['maintenance'] = 'Manutenzione e informazione';
$lang['admin']['sys_info'] = 'Informazioni di sistema';
$lang['admin']['dkim_add_key'] = 'Aggiungi chiave ARC/DKIM'; $lang['admin']['dkim_add_key'] = 'Aggiungi chiave ARC/DKIM';
$lang['admin']['dkim_keys'] = 'chiave ARC/DKIM'; $lang['admin']['dkim_keys'] = 'chiave ARC/DKIM';
$lang['admin']['add'] = 'Aggiungi'; $lang['admin']['add'] = 'Aggiungi';
@ -476,10 +349,6 @@ $lang['admin']['unchanged_if_empty'] = 'Se immutato lasciare vuoto';
$lang['admin']['yes'] = '&#10004;'; $lang['admin']['yes'] = '&#10004;';
$lang['admin']['no'] = '&#10008;'; $lang['admin']['no'] = '&#10008;';
$lang['admin']['access'] = 'Accedi'; $lang['admin']['access'] = 'Accedi';
$lang['admin']['invalid_max_msg_size'] = 'Valore non valido della massima dimensione del messaggio';
$lang['admin']['site_not_found'] = 'Impossibile torvare la configurazione di mailcow';
$lang['admin']['public_folder_empty'] = 'Il nome della cartella pubblica non può essere vuoto';
$lang['admin']['set_rr_failed'] = 'Impossibile impostare restrizioni Postfix';
$lang['admin']['no_record'] = 'Nessun risultato'; $lang['admin']['no_record'] = 'Nessun risultato';
$lang['admin']['filter_table'] = 'Tabella filtro'; $lang['admin']['filter_table'] = 'Tabella filtro';
$lang['admin']['empty'] = 'Nessun risultato'; $lang['admin']['empty'] = 'Nessun risultato';
@ -489,7 +358,6 @@ $lang['admin']['forwarding_hosts_add_hint'] = 'È possibile specificare indirizz
$lang['edit']['host'] = 'Host'; $lang['edit']['host'] = 'Host';
$lang['edit']['source'] = 'Sorgente'; $lang['edit']['source'] = 'Sorgente';
$lang['admin']['add_forwarding_host'] = 'Aggiungi host inoltro'; $lang['admin']['add_forwarding_host'] = 'Aggiungi host inoltro';
$lang['delete']['remove_forwardinghost_warning'] = '<b>Attenzione:</b> Stai per rimuovere l\'host di inoltro <b>%s</b>!';
$lang['success']['forwarding_host_removed'] = "Inoltro dell' host %s è stato rimosso"; $lang['success']['forwarding_host_removed'] = "Inoltro dell' host %s è stato rimosso";
$lang['success']['forwarding_host_added'] = "Inoltro dell' host %s è stato aggiunto"; $lang['success']['forwarding_host_added'] = "Inoltro dell' host %s è stato aggiunto";
?> ?>

View File

@ -8,12 +8,7 @@ $lang['header']['restart_sogo'] = 'SOGo herstarten';
$lang['footer']['restart_sogo'] = 'SOGo herstarten'; $lang['footer']['restart_sogo'] = 'SOGo herstarten';
$lang['footer']['restart_now'] = 'Nu opnieuw starten'; $lang['footer']['restart_now'] = 'Nu opnieuw starten';
$lang['footer']['restart_sogo_info'] = 'Sommige taken, zoals het toevoegen van een domein, vereisen een herstart van SOGo om de veranderingen door te voeren.<br><br><b>Belangrijk:</b> Het opnieuw opstarten kan een poos duren, wacht a.u.b. totdat dit volledig voltooid is.'; $lang['footer']['restart_sogo_info'] = 'Sommige taken, zoals het toevoegen van een domein, vereisen een herstart van SOGo om de veranderingen door te voeren.<br><br><b>Belangrijk:</b> Het opnieuw opstarten kan een poos duren, wacht a.u.b. totdat dit volledig voltooid is.';
$lang['dkim']['confirm'] = "Weet u het zeker?";
$lang['danger']['dkim_not_found'] = "DKIM record niet gevonden.";
$lang['danger']['dkim_remove_failed'] = "Kan geselecteerde DKIM record niet verwijderen.";
$lang['danger']['dkim_add_failed'] = "Kan DKIM record niet toevoegen.";
$lang['danger']['dkim_domain_or_sel_invalid'] = "DKIM domein of selector zijn ongeldig."; $lang['danger']['dkim_domain_or_sel_invalid'] = "DKIM domein of selector zijn ongeldig.";
$lang['danger']['dkim_key_length_invalid'] = "Lengte DKIM sleutel ongeldig.";
$lang['success']['dkim_removed'] = "DKIM record is verwijderd."; $lang['success']['dkim_removed'] = "DKIM record is verwijderd.";
$lang['success']['dkim_added'] = "DKIM record is opgeslagen."; $lang['success']['dkim_added'] = "DKIM record is opgeslagen.";
$lang['danger']['access_denied'] = "Toegang geweigerd of ongeldige gegevens."; $lang['danger']['access_denied'] = "Toegang geweigerd of ongeldige gegevens.";
@ -25,8 +20,6 @@ $lang['danger']['alias_empty'] = "Aliasadres mag niet leeg blijven.";
$lang['danger']['goto_empty'] = "Doeladres mag niet leeg blijven."; $lang['danger']['goto_empty'] = "Doeladres mag niet leeg blijven.";
$lang['danger']['policy_list_from_exists'] = "Deze invoer bestaat al."; $lang['danger']['policy_list_from_exists'] = "Deze invoer bestaat al.";
$lang['danger']['policy_list_from_invalid'] = "Deze invoer heeft een ongeldig format."; $lang['danger']['policy_list_from_invalid'] = "Deze invoer heeft een ongeldig format.";
$lang['danger']['whitelist_exists'] = "Deze invoer staat op de witte lijst.";
$lang['danger']['whitelist_from_invalid'] = "Witte lijst invoer heeft een ongeldig format.";
$lang['danger']['alias_invalid'] = "Aliasadres is ongeldig."; $lang['danger']['alias_invalid'] = "Aliasadres is ongeldig.";
$lang['danger']['goto_invalid'] = "Doeladres is ongeldig."; $lang['danger']['goto_invalid'] = "Doeladres is ongeldig.";
$lang['danger']['alias_domain_invalid'] = "Aliasdomein is ongeldig."; $lang['danger']['alias_domain_invalid'] = "Aliasdomein is ongeldig.";
@ -38,26 +31,19 @@ $lang['danger']['aliasd_targetd_identical'] = "Het Aliasdomein kan niet gelijk z
$lang['success']['alias_added'] = "Aliasadres(sen) toegevoegd."; $lang['success']['alias_added'] = "Aliasadres(sen) toegevoegd.";
$lang['success']['alias_modified'] = "Wijzigingen aan Alias zijn opgeslagen."; $lang['success']['alias_modified'] = "Wijzigingen aan Alias zijn opgeslagen.";
$lang['success']['mailbox_modified'] = "Wijzigingen aan postvak %s zijn opgeslagen."; $lang['success']['mailbox_modified'] = "Wijzigingen aan postvak %s zijn opgeslagen.";
$lang['success']['msg_size_saved'] = "Maximale berichtgrootte opgeslagen.";
$lang['danger']['aliasd_not_found'] = "Aliasdomein werd niet gevonden.";
$lang['danger']['targetd_not_found'] = "Doeldomein werd niet gevonden."; $lang['danger']['targetd_not_found'] = "Doeldomein werd niet gevonden.";
$lang['danger']['aliasd_exists'] = "Aliasdomein bestaat al.";
$lang['success']['aliasd_added'] = "Aliasdomein %s toegevoegd."; $lang['success']['aliasd_added'] = "Aliasdomein %s toegevoegd.";
$lang['success']['aliasd_modified'] = "Wijzigingen aan aliasdomein %s zijn opgeslagen."; $lang['success']['aliasd_modified'] = "Wijzigingen aan aliasdomein %s zijn opgeslagen.";
$lang['success']['domain_modified'] = "Wijzigingen aan domein %s zijn opgeslagen."; $lang['success']['domain_modified'] = "Wijzigingen aan domein %s zijn opgeslagen.";
$lang['success']['domain_admin_modified'] = "Wijzigingen aan domeinbeheerder %s zijn opgeslagen."; $lang['success']['domain_admin_modified'] = "Wijzigingen aan domeinbeheerder %s zijn opgeslagen.";
$lang['success']['domain_admin_added'] = "Domeinbeheerder %s is toegevoegd."; $lang['success']['domain_admin_added'] = "Domeinbeheerder %s is toegevoegd.";
$lang['success']['changes_general'] = 'Wijzigingen zijn opgeslagen.';
$lang['success']['admin_modified'] = "Wijzigingen aan de beheerder zijn opgeslagen."; $lang['success']['admin_modified'] = "Wijzigingen aan de beheerder zijn opgeslagen.";
$lang['danger']['exit_code_not_null'] = "Fout: Exitcode was %d.";
$lang['danger']['mailbox_not_available'] = "Postvak niet beschikbaar.";
$lang['danger']['username_invalid'] = "Gebruikersnaam kan niet worden gebruikt."; $lang['danger']['username_invalid'] = "Gebruikersnaam kan niet worden gebruikt.";
$lang['danger']['password_mismatch'] = "Bevestigingswachtwoord verschilt."; $lang['danger']['password_mismatch'] = "Bevestigingswachtwoord verschilt.";
$lang['danger']['password_complexity'] = "Het wachtwoord voldoet niet aan de vereisten."; $lang['danger']['password_complexity'] = "Het wachtwoord voldoet niet aan de vereisten.";
$lang['danger']['password_empty'] = "Er moet een wachtwoord worden ingesteld."; $lang['danger']['password_empty'] = "Er moet een wachtwoord worden ingesteld.";
$lang['danger']['login_failed'] = "Aanmelding mislukt."; $lang['danger']['login_failed'] = "Aanmelding mislukt.";
$lang['danger']['mailbox_invalid'] = "De naam van het postvak is ongeldig."; $lang['danger']['mailbox_invalid'] = "De naam van het postvak is ongeldig.";
$lang['danger']['mailbox_invalid_suggest'] = "De naam van het postvak is ongeldig, bedoelde u \"%s\"?";
$lang['info']['fetchmail_planned'] = "Taak voor het ophalen van e-mails is gepland. Controleer dit proces later."; $lang['info']['fetchmail_planned'] = "Taak voor het ophalen van e-mails is gepland. Controleer dit proces later.";
$lang['danger']['fetchmail_source_empty'] = "Geef een bron-map op."; $lang['danger']['fetchmail_source_empty'] = "Geef een bron-map op.";
$lang['danger']['fetchmail_dest_empty'] = "Geef een doel-map op."; $lang['danger']['fetchmail_dest_empty'] = "Geef een doel-map op.";
@ -81,15 +67,10 @@ $lang['danger']['mailboxes_in_use'] = "Maximaal aantal postvakken moet >= %d.";
$lang['danger']['aliases_in_use'] = "Maximaal aantal aliassen moet >= %d."; $lang['danger']['aliases_in_use'] = "Maximaal aantal aliassen moet >= %d.";
$lang['danger']['sender_acl_invalid'] = "Verzender ACL-waarde is ongeldig."; $lang['danger']['sender_acl_invalid'] = "Verzender ACL-waarde is ongeldig.";
$lang['danger']['domain_not_empty'] = "Kan domein in gebruik niet verwijderen."; $lang['danger']['domain_not_empty'] = "Kan domein in gebruik niet verwijderen.";
$lang['warning']['spam_alias_temp_error'] = "Tijdelijke fout: Kan geen spam-alias toevoegen. Probeer het later nogmaals.";
$lang['danger']['spam_alias_max_exceeded'] = "Maximaal aantal spam-aliassen bereikt.";
$lang['danger']['fetchmail_active'] = "Er draait reeds een proces, wacht tot deze klaar is."; $lang['danger']['fetchmail_active'] = "Er draait reeds een proces, wacht tot deze klaar is.";
$lang['danger']['validity_missing'] = 'Voer een geldigheidstermijn in.'; $lang['danger']['validity_missing'] = 'Voer een geldigheidstermijn in.';
$lang['user']['on'] = "Aan";
$lang['user']['off'] = "Uit";
$lang['user']['user_change_fn'] = ""; $lang['user']['user_change_fn'] = "";
$lang['user']['user_settings'] = 'Gebruikersinstellingen'; $lang['user']['user_settings'] = 'Gebruikersinstellingen';
$lang['user']['mailbox_settings'] = 'Postvakinstellingen';
$lang['user']['mailbox_details'] = 'Postvakdetails'; $lang['user']['mailbox_details'] = 'Postvakdetails';
$lang['user']['change_password'] = 'Verander wachtwoord'; $lang['user']['change_password'] = 'Verander wachtwoord';
$lang['user']['new_password'] = 'Nieuw wachtwoord'; $lang['user']['new_password'] = 'Nieuw wachtwoord';
@ -97,7 +78,6 @@ $lang['user']['save_changes'] = 'Wijzigingen opslaan';
$lang['user']['password_now'] = 'Huidig wachtwoord (bevestig wijzigingen)'; $lang['user']['password_now'] = 'Huidig wachtwoord (bevestig wijzigingen)';
$lang['user']['new_password_repeat'] = 'Bevestig wachtwoord (herhalen)'; $lang['user']['new_password_repeat'] = 'Bevestig wachtwoord (herhalen)';
$lang['user']['new_password_description'] = 'Vereisten: 6 karakters lang, letters en nummers.'; $lang['user']['new_password_description'] = 'Vereisten: 6 karakters lang, letters en nummers.';
$lang['user']['did_you_know'] = '<b>Wist u dat?</b> U kunt tags in het e-mailadres gebruiken ("me+<b>prive</b>@voorbeeld.nl") om berichten automatisch naar een bijbehorende map te sturen (voorbeeld: "prive").';
$lang['user']['spam_aliases'] = 'Tijdelijk e-mailadres'; $lang['user']['spam_aliases'] = 'Tijdelijk e-mailadres';
$lang['user']['alias'] = 'Alias'; $lang['user']['alias'] = 'Alias';
$lang['user']['alias_create_random'] = 'Creëer willekeurige alias'; $lang['user']['alias_create_random'] = 'Creëer willekeurige alias';
@ -135,8 +115,6 @@ $lang['user']['tls_enforce_in'] = 'Forceer TLS-gebruik inkomend';
$lang['user']['tls_enforce_out'] = 'Forceer TLS-gebruik uitgaand'; $lang['user']['tls_enforce_out'] = 'Forceer TLS-gebruik uitgaand';
$lang['user']['no_record'] = 'Geen vermelding.'; $lang['user']['no_record'] = 'Geen vermelding.';
$lang['user']['misc_settings'] = 'Andere profielinstellingen';
$lang['user']['misc_delete_profile'] = 'Andere profielinstellingen';
$lang['user']['tag_handling'] = 'Omgaan met e-mail tags'; $lang['user']['tag_handling'] = 'Omgaan met e-mail tags';
$lang['user']['tag_in_subfolder'] = 'In onderliggende map'; $lang['user']['tag_in_subfolder'] = 'In onderliggende map';
$lang['user']['tag_in_subject'] = 'In onderwerp'; $lang['user']['tag_in_subject'] = 'In onderwerp';
@ -144,36 +122,16 @@ $lang['user']['tag_in_none'] = 'Niets doen';
$lang['user']['tag_help_explain'] = 'In onderliggende map: maakt onder INBOX een nieuwe map aan met de naam van de tag (bijv.: "INBOX/Facebook").<br> $lang['user']['tag_help_explain'] = 'In onderliggende map: maakt onder INBOX een nieuwe map aan met de naam van de tag (bijv.: "INBOX/Facebook").<br>
In onderwerp: de tag wordt vóór het oorspronkelijke e-mail onderwerp geplaatst (bijv.: "[Facebook] Mijn nieuws").'; In onderwerp: de tag wordt vóór het oorspronkelijke e-mail onderwerp geplaatst (bijv.: "[Facebook] Mijn nieuws").';
$lang['user']['tag_help_example'] = 'Voorbeeld van een e-mailadres met tag: ik<b>+Facebook</b>@voorbeeld.org'; $lang['user']['tag_help_example'] = 'Voorbeeld van een e-mailadres met tag: ik<b>+Facebook</b>@voorbeeld.org';
$lang['start']['dashboard'] = '%s - startpagina';
$lang['start']['start_rc'] = 'Open Roundcube';
$lang['start']['start_sogo'] = 'Open SOGo';
$lang['start']['mailcow_apps_detail'] = 'Gebruik een mailcow app om toegang te hebben tot uw e-mails, kalender, contactpersonen en meer.'; $lang['start']['mailcow_apps_detail'] = 'Gebruik een mailcow app om toegang te hebben tot uw e-mails, kalender, contactpersonen en meer.';
$lang['start']['mailcow_panel'] = 'Start mailcow UI';
$lang['start']['mailcow_panel_description'] = 'De mailcow UI is beschikbaar voor zowel beheerders als gebruikers.';
$lang['start']['mailcow_panel_detail'] = '<b>Domeinbeheerders</b> kunnen postvakken en aliassen aanmaken, wijzigen of verwijderen, domeinen veranderen of informatie krijgen over hun domein.<br> $lang['start']['mailcow_panel_detail'] = '<b>Domeinbeheerders</b> kunnen postvakken en aliassen aanmaken, wijzigen of verwijderen, domeinen veranderen of informatie krijgen over hun domein.<br>
<b>Gebruikers</b> kunnen tijdsgelimiteerde aliassen (spam-aliasses) aanmaken, hun wachtwoord wijzigen en spamfilterinstellingen wijzigen.'; <b>Gebruikers</b> kunnen tijdsgelimiteerde aliassen (spam-aliasses) aanmaken, hun wachtwoord wijzigen en spamfilterinstellingen wijzigen.';
$lang['start']['recommended_config'] = 'Aanbevoen instellingen (zonder ActiveSync)';
$lang['start']['imap_smtp_server'] = 'IMAP- en SMTP-server gegevens';
$lang['start']['imap_smtp_server_description'] = 'Voor de best mogelijke ervaring bevelen wij <a href="%s" target="_blank"><b>Mozilla Thunderbird</b></a> aan.';
$lang['start']['imap_smtp_server_badge'] = 'Lees/schrijf e-mails';
$lang['start']['imap_smtp_server_auth_info'] = 'Gebruik uw volledige e-mailadres en de onversleutelde (PLAIN) verificatiemechanisme.<br> $lang['start']['imap_smtp_server_auth_info'] = 'Gebruik uw volledige e-mailadres en de onversleutelde (PLAIN) verificatiemechanisme.<br>
De aanmeldgegevens zullen door de server worden versleuteld.'; De aanmeldgegevens zullen door de server worden versleuteld.';
$lang['start']['managesieve'] = 'ManageSieve';
$lang['start']['managesieve_badge'] = 'Emailfilter';
$lang['start']['managesieve_description'] = 'Gebruik <b>Mozilla Thunderbird</b> met een <a style="text-decoration:none" target="_blank" href="%s"><b>nightly sieve addon</b></a>.<br>Start Thunderbird, open de add-on instellingen en sleep het gedownloadde xpi-bestand naar dit venster.<br>Servernaam <b>%s</b>, Poort <b>4190</b>. De aanmeldgegevens zijn gelijk aan de gegevens voor uw e-mail.';
$lang['start']['service'] = 'Service';
$lang['start']['encryption'] = 'Versleutelmethode';
$lang['start']['help'] = 'Toon/Verberg Hulppaneel'; $lang['start']['help'] = 'Toon/Verberg Hulppaneel';
$lang['start']['hostname'] = 'Hostname';
$lang['start']['port'] = 'Poort';
$lang['start']['footer'] = '';
$lang['header']['mailcow_settings'] = 'Instellingen'; $lang['header']['mailcow_settings'] = 'Instellingen';
$lang['header']['administration'] = 'Beheer'; $lang['header']['administration'] = 'Beheer';
$lang['header']['mailboxes'] = 'Postvakken'; $lang['header']['mailboxes'] = 'Postvakken';
$lang['header']['user_settings'] = 'Gebruikersinstellingen'; $lang['header']['user_settings'] = 'Gebruikersinstellingen';
$lang['header']['login'] = 'Aanmelden';
$lang['header']['logged_in_as_logout'] = 'Aangemeld als <b>%s</b> (Afmelden)';
$lang['header']['locale'] = 'Taal';
$lang['mailbox']['domain'] = 'Domein'; $lang['mailbox']['domain'] = 'Domein';
$lang['mailbox']['alias'] = 'Alias'; $lang['mailbox']['alias'] = 'Alias';
$lang['mailbox']['aliases'] = 'Aliassen'; $lang['mailbox']['aliases'] = 'Aliassen';
@ -183,7 +141,6 @@ $lang['mailbox']['mailbox_quota'] = 'Max. grootte van een postvak';
$lang['mailbox']['domain_quota'] = 'Quotum'; $lang['mailbox']['domain_quota'] = 'Quotum';
$lang['mailbox']['active'] = 'Actief'; $lang['mailbox']['active'] = 'Actief';
$lang['mailbox']['action'] = 'Handeling'; $lang['mailbox']['action'] = 'Handeling';
$lang['mailbox']['ratelimit'] = 'Maximale snelheid uitgaand/uur';
$lang['mailbox']['backup_mx'] = 'Backup MX'; $lang['mailbox']['backup_mx'] = 'Backup MX';
$lang['mailbox']['domain_aliases'] = 'Domein-aliassen'; $lang['mailbox']['domain_aliases'] = 'Domein-aliassen';
$lang['mailbox']['target_domain'] = 'Doeldomein'; $lang['mailbox']['target_domain'] = 'Doeldomein';
@ -193,13 +150,10 @@ $lang['mailbox']['fname'] = 'Volledige naam';
$lang['mailbox']['filter_table'] = 'Filter tabel'; $lang['mailbox']['filter_table'] = 'Filter tabel';
$lang['mailbox']['yes'] = '&#10004;'; $lang['mailbox']['yes'] = '&#10004;';
$lang['mailbox']['no'] = '&#10008;'; $lang['mailbox']['no'] = '&#10008;';
$lang['mailbox']['quota'] = 'Quotum';
$lang['mailbox']['in_use'] = 'In gebruik (%)'; $lang['mailbox']['in_use'] = 'In gebruik (%)';
$lang['mailbox']['msg_num'] = 'Berichten #'; $lang['mailbox']['msg_num'] = 'Berichten #';
$lang['mailbox']['remove'] = 'Verwijder'; $lang['mailbox']['remove'] = 'Verwijder';
$lang['mailbox']['edit'] = 'Wijzig'; $lang['mailbox']['edit'] = 'Wijzig';
$lang['mailbox']['archive'] = 'Archief';
$lang['mailbox']['no_record'] = 'Geen vermelding';
$lang['mailbox']['add_domain'] = 'Toevoegen domein'; $lang['mailbox']['add_domain'] = 'Toevoegen domein';
$lang['mailbox']['add_domain_alias'] = 'Toevoegen domein-alias'; $lang['mailbox']['add_domain_alias'] = 'Toevoegen domein-alias';
$lang['mailbox']['add_mailbox'] = 'Toevoegen postvak'; $lang['mailbox']['add_mailbox'] = 'Toevoegen postvak';
@ -207,35 +161,19 @@ $lang['mailbox']['add_alias'] = 'Toevoegen alias';
$lang['info']['no_action'] = 'Geen handelingen uitvoerbaar'; $lang['info']['no_action'] = 'Geen handelingen uitvoerbaar';
$lang['delete']['title'] = 'Verwijder object';
$lang['delete']['remove_domain_warning'] = '<b>Let op:</b> U staat op het punt domein <b>%s</b> te verwijderen!';
$lang['delete']['remove_domainalias_warning'] = '<b>Let op:</b> U staat op het punt domeinalias <b>%s</b> te verwijderen!';
$lang['delete']['remove_domainadmin_warning'] = '<b>Let op:</b> U staat op het punt domeinbeheerder <b>%s</b> te verwijderen!';
$lang['delete']['remove_alias_warning'] = '<b>Let op:</b> U staat op het punt alias <b>%s</b> te verwijderen!';
$lang['delete']['remove_mailbox_warning'] = '<b>Let op::</b> U staat op het punt postvak <b>%s</b> te verwijderen!';
$lang['delete']['remove_mailbox_details'] = 'Het postvak zal <b>permanent</b> worden verwijderd!';
$lang['delete']['remove_domain_details'] = 'Dit verwijdert ook de domeinaliassen. <br><br><b>Een domein moet leeg zijn alvorens deze verwijderd kan worden.</b>';
$lang['delete']['remove_alias_details'] = '<b>Gebruikers zullen niet meer in staat zijn e-mails te ontvangen op -of te versturen vanaf- dit adres.</b>';
$lang['delete']['remove_button'] = 'Verwijder';
$lang['delete']['previous'] = 'Vorige pagina';
$lang['edit']['save'] = 'Wijzigingen opslaan'; $lang['edit']['save'] = 'Wijzigingen opslaan';
$lang['edit']['archive'] = 'Toegang tot archief';
$lang['edit']['max_mailboxes'] = 'Max. aantal postvakken:'; $lang['edit']['max_mailboxes'] = 'Max. aantal postvakken:';
$lang['edit']['title'] = 'Wijzig object'; $lang['edit']['title'] = 'Wijzig object';
$lang['edit']['target_address'] = 'Doeladres(sen) <small>(scheiden met komma)</small>:'; $lang['edit']['target_address'] = 'Doeladres(sen) <small>(scheiden met komma)</small>:';
$lang['edit']['active'] = 'Actief'; $lang['edit']['active'] = 'Actief';
$lang['edit']['target_domain'] = 'Doeldomein:'; $lang['edit']['target_domain'] = 'Doeldomein:';
$lang['edit']['password'] = 'Wachtwoord:'; $lang['edit']['password'] = 'Wachtwoord:';
$lang['edit']['ratelimit'] = 'Uitgaande e-mail beperking (aantal/uur):';
$lang['danger']['ratelimt_less_one'] = 'De uitgaande e-mail beperking moet >= 1';
$lang['edit']['password_repeat'] = 'Bevestig wachtwoord (herhalen):'; $lang['edit']['password_repeat'] = 'Bevestig wachtwoord (herhalen):';
$lang['edit']['domain_admin'] = 'Wijzig domeinbeheerder'; $lang['edit']['domain_admin'] = 'Wijzig domeinbeheerder';
$lang['edit']['domain'] = 'Wijzig domein'; $lang['edit']['domain'] = 'Wijzig domein';
$lang['edit']['alias_domain'] = 'Aliasdomein';
$lang['edit']['edit_alias_domain'] = 'Wijzig aliasdomein'; $lang['edit']['edit_alias_domain'] = 'Wijzig aliasdomein';
$lang['edit']['domains'] = 'Domeinen'; $lang['edit']['domains'] = 'Domeinen';
$lang['edit']['destroy'] = 'Handmatige invoer';
$lang['edit']['alias'] = 'Wijzig alias'; $lang['edit']['alias'] = 'Wijzig alias';
$lang['edit']['mailbox'] = 'Wijzig postvak'; $lang['edit']['mailbox'] = 'Wijzig postvak';
$lang['edit']['description'] = 'Beschrijving:'; $lang['edit']['description'] = 'Beschrijving:';
@ -245,24 +183,17 @@ $lang['edit']['domain_quota'] = 'Domeinquotum';
$lang['edit']['backup_mx_options'] = 'Backup MX opties:'; $lang['edit']['backup_mx_options'] = 'Backup MX opties:';
$lang['edit']['relay_domain'] = 'Doorschakeldomein'; $lang['edit']['relay_domain'] = 'Doorschakeldomein';
$lang['edit']['relay_all'] = 'Schakel alle ontvangers door'; $lang['edit']['relay_all'] = 'Schakel alle ontvangers door';
$lang['edit']['dkim_signature'] = 'ARC + DKIM handtekening:';
$lang['edit']['dkim_record_info'] = '<small>Voeg de volgende TXT-record toe aan de DNS-instellingen van uw domein.</small>';
$lang['edit']['relay_all_info'] = '<small>Indien u ervoor kiest om <b>niet</b> alle ontvangers door te schakelen, dient u per ontvanger die u wenst door te schakelen een (lege) postvak aan te maken.</small>'; $lang['edit']['relay_all_info'] = '<small>Indien u ervoor kiest om <b>niet</b> alle ontvangers door te schakelen, dient u per ontvanger die u wenst door te schakelen een (lege) postvak aan te maken.</small>';
$lang['edit']['full_name'] = 'Volledige naam'; $lang['edit']['full_name'] = 'Volledige naam';
$lang['edit']['quota_mb'] = 'Quotum (MiB)'; $lang['edit']['quota_mb'] = 'Quotum (MiB)';
$lang['edit']['sender_acl'] = 'Toestaan te verzenden als:'; $lang['edit']['sender_acl'] = 'Toestaan te verzenden als:';
$lang['edit']['sender_acl_info'] = 'Aliassen kunnen niet worden deselecteerd.';
$lang['edit']['dkim_txt_name'] = 'Naam TXT-record:';
$lang['edit']['dkim_txt_value'] = 'Waarde TXT-record:';
$lang['edit']['previous'] = 'Vorige pagina'; $lang['edit']['previous'] = 'Vorige pagina';
$lang['edit']['unchanged_if_empty'] = 'Leeg laten indien niet veranderd.'; $lang['edit']['unchanged_if_empty'] = 'Leeg laten indien niet veranderd.';
$lang['edit']['dont_check_sender_acl'] = 'Geen zenderverificatie uitvoeren voor domein %s.'; $lang['edit']['dont_check_sender_acl'] = 'Geen zenderverificatie uitvoeren voor domein %s.';
$lang['add']['port'] = 'Port'; $lang['add']['port'] = 'Port';
$lang['add']['title'] = 'Object toevoegen';
$lang['add']['domain'] = 'Domein'; $lang['add']['domain'] = 'Domein';
$lang['add']['active'] = 'Actief'; $lang['add']['active'] = 'Actief';
$lang['add']['save'] = 'Wijzigingen opslaan';
$lang['add']['description'] = 'Beschrijving:'; $lang['add']['description'] = 'Beschrijving:';
$lang['add']['max_aliases'] = 'Max. aantal aliassen:'; $lang['add']['max_aliases'] = 'Max. aantal aliassen:';
$lang['add']['max_mailboxes'] = 'Max. aantal postvakken:'; $lang['add']['max_mailboxes'] = 'Max. aantal postvakken:';
@ -272,8 +203,6 @@ $lang['add']['backup_mx_options'] = 'Backup MX opties:';
$lang['add']['relay_all'] = 'Doorschakelen van alle ontvangers'; $lang['add']['relay_all'] = 'Doorschakelen van alle ontvangers';
$lang['add']['relay_domain'] = 'Schakel dit domein door'; $lang['add']['relay_domain'] = 'Schakel dit domein door';
$lang['add']['relay_all_info'] = '<small>Indien u ervoor kiest om <b>niet</b> alle ontvangers door te schakelen, moet u voor iedere ontvanger die u wenst door te schakelen een een (lege) mailbox aanmaken.</small>'; $lang['add']['relay_all_info'] = '<small>Indien u ervoor kiest om <b>niet</b> alle ontvangers door te schakelen, moet u voor iedere ontvanger die u wenst door te schakelen een een (lege) mailbox aanmaken.</small>';
$lang['add']['alias'] = 'Alias(sen)';
$lang['add']['alias_spf_fail'] = '<b>Opmerking:</b> Als het gekozen doeladres een extern postvak is, kan de <b>ontvangende mailservver</b> mogelijk het bericht weigeren vanwege niet kloppende SPF-gegevens.</a>';
$lang['add']['alias_address'] = 'Aliasadres(sen):'; $lang['add']['alias_address'] = 'Aliasadres(sen):';
$lang['add']['alias_address_info'] = '<small>Volledig(e) emailadres(sen) of @voorbeeld.nl om alle berichten op te vangen van een domein (scheiden met komma). <b>Alleen mailcow-domeinen!</b></small>'; $lang['add']['alias_address_info'] = '<small>Volledig(e) emailadres(sen) of @voorbeeld.nl om alle berichten op te vangen van een domein (scheiden met komma). <b>Alleen mailcow-domeinen!</b></small>';
$lang['add']['alias_domain_info'] = '<small>Alleen geldige domeinen (scheiden met komma).</small>'; $lang['add']['alias_domain_info'] = '<small>Alleen geldige domeinen (scheiden met komma).</small>';
@ -282,26 +211,17 @@ $lang['add']['target_address_info'] = '<small>Volledig(e) e-mailadres(sen) (sche
$lang['add']['alias_domain'] = 'Aliasdomein'; $lang['add']['alias_domain'] = 'Aliasdomein';
$lang['add']['select'] = 'Kies uit...'; $lang['add']['select'] = 'Kies uit...';
$lang['add']['target_domain'] = 'Doeldomein:'; $lang['add']['target_domain'] = 'Doeldomein:';
$lang['add']['mailbox'] = 'Postvak';
$lang['add']['mailbox_username'] = 'Gebruikersnaam (linker deel van het e-mailadres):'; $lang['add']['mailbox_username'] = 'Gebruikersnaam (linker deel van het e-mailadres):';
$lang['add']['full_name'] = 'Volledige naam:'; $lang['add']['full_name'] = 'Volledige naam:';
$lang['add']['quota_mb'] = 'Quotum (MiB):'; $lang['add']['quota_mb'] = 'Quotum (MiB):';
$lang['add']['select_domain'] = 'Selecteer eerst een domein'; $lang['add']['select_domain'] = 'Selecteer eerst een domein';
$lang['add']['password'] = 'Wachtwoord:'; $lang['add']['password'] = 'Wachtwoord:';
$lang['add']['password_repeat'] = 'Bevestig wachtwoord (herhalen):'; $lang['add']['password_repeat'] = 'Bevestig wachtwoord (herhalen):';
$lang['add']['previous'] = 'Vorige pagina';
$lang['add']['restart_sogo_hint'] = 'SOGo dient opnieuw te worden gestart nadat een domein is toegevoegd!'; $lang['add']['restart_sogo_hint'] = 'SOGo dient opnieuw te worden gestart nadat een domein is toegevoegd!';
$lang['login']['title'] = 'Aanmelden';
$lang['login']['administration'] = 'Beheer';
$lang['login']['administration_details'] = 'Gebruik uw beheerders-login om administratieve taken uit te voeren.';
$lang['login']['user_settings'] = 'Gebruikersinstellingen';
$lang['login']['user_settings_details'] = 'Mailbox-gebruikers kunnen in het mailcow-gebruikersbeheer hun wachtwoorden wijzigen, tijdelijke aliassen aanmaken (tegengaan van spam), de spamfilter aanpassen of berichten van externe IMAP-servers importeren.';
$lang['login']['username'] = 'Gebruikersnaam'; $lang['login']['username'] = 'Gebruikersnaam';
$lang['login']['password'] = 'Wachtwoord'; $lang['login']['password'] = 'Wachtwoord';
$lang['login']['reset_password'] = 'Wijzig mijn wachtwoord';
$lang['login']['login'] = 'Aanmelden'; $lang['login']['login'] = 'Aanmelden';
$lang['login']['previous'] = "Vorige pagina";
$lang['login']['delayed'] = 'Aanmelding met %s sec. vertraagd.'; $lang['login']['delayed'] = 'Aanmelding met %s sec. vertraagd.';
$lang['login']['tfa'] = "Two-factor authentication"; $lang['login']['tfa'] = "Two-factor authentication";
@ -311,34 +231,10 @@ $lang['login']['otp'] = "Eenmalig wachtwoord";
$lang['login']['trash_login'] = "Verwijder login"; $lang['login']['trash_login'] = "Verwijder login";
$lang['admin']['search_domain_da'] = 'Doorzoek domeinen'; $lang['admin']['search_domain_da'] = 'Doorzoek domeinen';
$lang['admin']['restrictions'] = 'Postfix beperkingen';
$lang['admin']['rr'] = 'Postfix ontvangersbeperkingen';
$lang['admin']['sr'] = 'Postifx verzendersbeperkingen';
$lang['admin']['reset_defaults'] = 'Herstel standaardwaarden';
$lang['admin']['r_inactive'] = 'Inactieve beperkingen'; $lang['admin']['r_inactive'] = 'Inactieve beperkingen';
$lang['admin']['r_active'] = 'Actieve beperkignen'; $lang['admin']['r_active'] = 'Actieve beperkignen';
$lang['admin']['r_info'] = 'Grijze, uitgeschakelde, elementen in de lijst met actieve beperkingen zijn voor mailcow niet bekend als valide en kunnen daarom niet verplaatst worden.<br>U kunt nieuwe elementen toevoegen in <code>inc/vars.inc.php</code> om ze te (de)activeren.'; $lang['admin']['r_info'] = 'Grijze, uitgeschakelde, elementen in de lijst met actieve beperkingen zijn voor mailcow niet bekend als valide en kunnen daarom niet verplaatst worden.<br>U kunt nieuwe elementen toevoegen in <code>inc/vars.inc.php</code> om ze te (de)activeren.';
$lang['admin']['public_folders'] = 'Gemeenschappelijke mappen';
$lang['admin']['public_folders_text'] = 'Een namespace "Public" wordt aangemaakt. Onder deze map worden de automatisch aangemaakte postvakken in deze namespace weergegeven.';
$lang['admin']['public_folder_name'] = 'Mapnaam <small>(alphanumeriek)</small>';
$lang['admin']['public_folder_enable'] = 'Inschakelen gemeenschappelijke map';
$lang['admin']['public_folder_enable_text'] = 'Deze optie uitschakelen verwijderd géén e-mails uit de gemeenschappelijke mappen.';
$lang['admin']['public_folder_pusf'] = 'De \'gelezen\'-markering per gebruiker';
$lang['admin']['public_folder_pusf_text'] = 'Deze "\'gelezen\'-markering per gebruiker"-optie zorgt ervoor dat er per gebruiker afzonderlijk wordt bepaald of deze het bericht heeft gelezen.';
$lang['admin']['privacy'] = 'Privacy';
$lang['admin']['privacy_text'] = 'Deze optie activeert een PCRE-tabel die de "User-Agent", "X-Enigmail", "X-Mailer", "X-Originating-IP"-headers verwijderd en de "Received: from"-headers vervangt met localhost/127.0.0.1.';
$lang['admin']['privacy_anon_mail'] = 'Anonimiseer uitgaande e-mails';
$lang['admin']['dkim_txt_name'] = 'Naam TXT-record:';
$lang['admin']['dkim_txt_value'] = 'Waarde TXT-record:';
$lang['admin']['dkim_key_length'] = 'DKIM sleutel lengte (bits)'; $lang['admin']['dkim_key_length'] = 'DKIM sleutel lengte (bits)';
$lang['admin']['previous'] = 'Vorige pagina';
$lang['admin']['quota_mb'] = 'Quotum (MiB):';
$lang['admin']['sender_acl'] = 'Toestaan te verzenden als:';
$lang['admin']['msg_size'] = 'Berichtgrootte';
$lang['admin']['msg_size_limit'] = 'Huidige limiet berichtgroote';
$lang['admin']['msg_size_limit_details'] = 'Een nieuw limiet doorvoeren zal Postfix en de webserver herladen.';
$lang['admin']['maintenance'] = 'Onderhoud en informatie';
$lang['admin']['sys_info'] = 'Systeeminformatie';
$lang['admin']['dkim_add_key'] = 'ARC/DKIM-record toevoegen'; $lang['admin']['dkim_add_key'] = 'ARC/DKIM-record toevoegen';
$lang['admin']['dkim_keys'] = 'ARC/DKIM records'; $lang['admin']['dkim_keys'] = 'ARC/DKIM records';
$lang['admin']['add'] = 'Toevoegen'; $lang['admin']['add'] = 'Toevoegen';
@ -360,8 +256,4 @@ $lang['admin']['unchanged_if_empty'] = 'Leeg laten indien onveranderd';
$lang['admin']['yes'] = '&#10004;'; $lang['admin']['yes'] = '&#10004;';
$lang['admin']['no'] = '&#10008;'; $lang['admin']['no'] = '&#10008;';
$lang['admin']['access'] = 'Toegang'; $lang['admin']['access'] = 'Toegang';
$lang['admin']['invalid_max_msg_size'] = 'Ongeldige max. berichtgrootte';
$lang['admin']['site_not_found'] = 'Kan mailcow instellingenbeheer niet vinden';
$lang['admin']['public_folder_empty'] = 'Namen van gemeenschappelijke mappen mogen niet leeg blijven.';
$lang['admin']['set_rr_failed'] = 'Kan Postfix beperkingen niet opleggen.';
$lang['admin']['no_record'] = 'Geen vermelding'; $lang['admin']['no_record'] = 'Geen vermelding';

View File

@ -14,16 +14,10 @@ $lang['footer']['delete_these_items'] = 'Czy jesteś pewien, że chcesz usunąć
$lang['footer']['delete_now'] = 'Usuń teraz'; $lang['footer']['delete_now'] = 'Usuń teraz';
$lang['footer']['cancel'] = 'Anuluj'; $lang['footer']['cancel'] = 'Anuluj';
$lang['dkim']['confirm'] = 'Na pewno?';
$lang['danger']['dkim_not_found'] = 'Nie znaleziono klucza DKIM';
$lang['danger']['dkim_remove_failed'] = 'Nie można usunšć wybranego klucza DKIM';
$lang['danger']['dkim_add_failed'] = 'Nie można dodać danego klucza DKIM';
$lang['danger']['dkim_domain_or_sel_invalid'] = 'Nieprawidłowa domena lub selektor DKIM'; $lang['danger']['dkim_domain_or_sel_invalid'] = 'Nieprawidłowa domena lub selektor DKIM';
$lang['danger']['dkim_key_length_invalid'] = 'Nieprawidłowa długość klucza DKIM';
$lang['success']['dkim_removed'] = 'Klucz DKIM %s został usunięty'; $lang['success']['dkim_removed'] = 'Klucz DKIM %s został usunięty';
$lang['success']['dkim_added'] = 'Klucz DKIM został zapisany'; $lang['success']['dkim_added'] = 'Klucz DKIM został zapisany';
$lang['danger']['access_denied'] = 'Odmowa dostępu lub nieprawidłowe dane w formularzu'; $lang['danger']['access_denied'] = 'Odmowa dostępu lub nieprawidłowe dane w formularzu';
$lang['danger']['whitelist_from_invalid'] = 'Nieprawidłowy wpis na białą listę';
$lang['danger']['domain_invalid'] = 'Błędna nazwa domeny'; $lang['danger']['domain_invalid'] = 'Błędna nazwa domeny';
$lang['danger']['mailbox_quota_exceeds_domain_quota'] = 'Maksymalna wartość przekracza limit domeny'; $lang['danger']['mailbox_quota_exceeds_domain_quota'] = 'Maksymalna wartość przekracza limit domeny';
$lang['danger']['object_is_not_numeric'] = 'Wartość %s nie jest liczbą'; $lang['danger']['object_is_not_numeric'] = 'Wartość %s nie jest liczbą';
@ -34,8 +28,6 @@ $lang['danger']['last_key'] = 'Nie można usunšć ostatniego klucza';
$lang['danger']['goto_empty'] = "Adres Idź do nie może być pusty"; $lang['danger']['goto_empty'] = "Adres Idź do nie może być pusty";
$lang['danger']['policy_list_from_exists'] = "Rekord o danej nazwie już istnieje"; $lang['danger']['policy_list_from_exists'] = "Rekord o danej nazwie już istnieje";
$lang['danger']['policy_list_from_invalid'] = "Rekord posiada nieprawidłowy format"; $lang['danger']['policy_list_from_invalid'] = "Rekord posiada nieprawidłowy format";
$lang['danger']['whitelist_exists'] = "Wpis na białej liście o danej nazwie już istnieje";
$lang['danger']['whitelist_from_invalid'] = "Rekord na białej liście posiada nieprawidłowy format";
$lang['danger']['alias_invalid'] = "Alias nieprawidłowy"; $lang['danger']['alias_invalid'] = "Alias nieprawidłowy";
$lang['danger']['goto_invalid'] = "Adres Idź do jest nieprawidłowy"; $lang['danger']['goto_invalid'] = "Adres Idź do jest nieprawidłowy";
$lang['danger']['alias_domain_invalid'] = "Alias domeny nieprawidłowy"; $lang['danger']['alias_domain_invalid'] = "Alias domeny nieprawidłowy";
@ -52,19 +44,13 @@ $lang['success']['mailbox_modified'] = "Zapisano zmiany w skrzynce %s";
$lang['success']['resource_modified'] = "Zapisano zmiany w skrzynce %s"; $lang['success']['resource_modified'] = "Zapisano zmiany w skrzynce %s";
$lang['success']['object_modified'] = "Zapisano zmiany w obiekcie %s"; $lang['success']['object_modified'] = "Zapisano zmiany w obiekcie %s";
$lang['success']['f2b_modified'] = "Zmiany w Fail2ban zostały zapisane"; $lang['success']['f2b_modified'] = "Zmiany w Fail2ban zostały zapisane";
$lang['success']['msg_size_saved'] = "Ustawiono limit rozmiaru wiadomości";
$lang['danger']['aliasd_not_found'] = "Nie znaleziono aliasu domeny";
$lang['danger']['targetd_not_found'] = "Nie znaleziono domeny docelowej"; $lang['danger']['targetd_not_found'] = "Nie znaleziono domeny docelowej";
$lang['danger']['aliasd_exists'] = "Alias domeny już istnieje";
$lang['success']['aliasd_added'] = "Dodano alias domeny %s"; $lang['success']['aliasd_added'] = "Dodano alias domeny %s";
$lang['success']['aliasd_modified'] = "Zapisano zmiany w aliasie domeny %s"; $lang['success']['aliasd_modified'] = "Zapisano zmiany w aliasie domeny %s";
$lang['success']['domain_modified'] = "Zapisano zmiany w domenie %s"; $lang['success']['domain_modified'] = "Zapisano zmiany w domenie %s";
$lang['success']['domain_admin_modified'] = "Zapisano zmiany w administratorze domeny %s"; $lang['success']['domain_admin_modified'] = "Zapisano zmiany w administratorze domeny %s";
$lang['success']['domain_admin_added'] = "Dodano administratora domeny %s"; $lang['success']['domain_admin_added'] = "Dodano administratora domeny %s";
$lang['success']['changes_general'] = 'Zapisano zmiany';
$lang['success']['admin_modified'] = "Zapisano zmiany w administratorze"; $lang['success']['admin_modified'] = "Zapisano zmiany w administratorze";
$lang['danger']['exit_code_not_null'] = "Błšd: kod zakończenia wyniósł %d";
$lang['danger']['mailbox_not_available'] = "Skrzynka niedostępna";
$lang['danger']['username_invalid'] = "Nie można użyć nazwy użytkownika"; $lang['danger']['username_invalid'] = "Nie można użyć nazwy użytkownika";
$lang['danger']['password_mismatch'] = "Powtórzone hasło jest niezgodne"; $lang['danger']['password_mismatch'] = "Powtórzone hasło jest niezgodne";
$lang['danger']['password_complexity'] = "Hasło niezgodne z polityką"; $lang['danger']['password_complexity'] = "Hasło niezgodne z polityką";
@ -73,7 +59,6 @@ $lang['danger']['login_failed'] = "Niepowodzenie logowania";
$lang['danger']['mailbox_invalid'] = "Nieprawidłowa nazwa skrzynki"; $lang['danger']['mailbox_invalid'] = "Nieprawidłowa nazwa skrzynki";
$lang['danger']['description_invalid'] = 'Nieprawidłowy opis źródła'; $lang['danger']['description_invalid'] = 'Nieprawidłowy opis źródła';
$lang['danger']['resource_invalid'] = "Nieprawidłowa nazwa zasobu"; $lang['danger']['resource_invalid'] = "Nieprawidłowa nazwa zasobu";
$lang['danger']['mailbox_invalid_suggest'] = 'Nazwa skrzynki jest nieprawidłowa, czy chciałeś wpisać "%s"?';
$lang['danger']['is_alias'] = "%s został już podany jako alias"; $lang['danger']['is_alias'] = "%s został już podany jako alias";
$lang['danger']['is_alias_or_mailbox'] = "%s podano wcześniej jako alias lub skrzynkę"; $lang['danger']['is_alias_or_mailbox'] = "%s podano wcześniej jako alias lub skrzynkę";
$lang['danger']['is_spam_alias'] = "%s podano wcześniej jako alias dla spam"; $lang['danger']['is_spam_alias'] = "%s podano wcześniej jako alias dla spam";
@ -98,16 +83,11 @@ $lang['danger']['mailboxes_in_use'] = "Maks. liczba skrzynek musi być większa
$lang['danger']['aliases_in_use'] = "Maks. liczba aliasów musi być większa od lub równa %d"; $lang['danger']['aliases_in_use'] = "Maks. liczba aliasów musi być większa od lub równa %d";
$lang['danger']['sender_acl_invalid'] = "ACL Nadawcy jest nieprawidłowy"; $lang['danger']['sender_acl_invalid'] = "ACL Nadawcy jest nieprawidłowy";
$lang['danger']['domain_not_empty'] = "Nie można usunšć niepustej domeny"; $lang['danger']['domain_not_empty'] = "Nie można usunšć niepustej domeny";
$lang['warning']['spam_alias_temp_error'] = "Tymczasowy błąd: nie można dodać spam aliasu, proszę spróbować później.";
$lang['danger']['spam_alias_max_exceeded'] = "Przekroczono maks. dopuszczalną liczbę spam aliasów";
$lang['danger']['validity_missing'] = 'Proszę wyznaczyć termin ważności'; $lang['danger']['validity_missing'] = 'Proszę wyznaczyć termin ważności';
$lang['user']['on'] = "Aktywny";
$lang['user']['off'] = "Nieaktywny";
$lang['user']['messages'] = "wiadomości"; // "123 wiadomości" $lang['user']['messages'] = "wiadomości"; // "123 wiadomości"
$lang['user']['in_use'] = "Użyte"; $lang['user']['in_use'] = "Użyte";
$lang['user']['user_change_fn'] = ""; $lang['user']['user_change_fn'] = "";
$lang['user']['user_settings'] = 'Ustawienia użytkownika'; $lang['user']['user_settings'] = 'Ustawienia użytkownika';
$lang['user']['mailbox_settings'] = ' Ustawienia skrzynki';
$lang['user']['mailbox_details'] = ' Szczegóły skrzynki'; $lang['user']['mailbox_details'] = ' Szczegóły skrzynki';
$lang['user']['change_password'] = 'Zmień hasło'; $lang['user']['change_password'] = 'Zmień hasło';
$lang['user']['new_password'] = 'Nowe hasło'; $lang['user']['new_password'] = 'Nowe hasło';
@ -115,11 +95,8 @@ $lang['user']['save_changes'] = 'Zapisz zmiany';
$lang['user']['password_now'] = 'Bieżące hasło(potwierdź zmiany)'; $lang['user']['password_now'] = 'Bieżące hasło(potwierdź zmiany)';
$lang['user']['new_password_repeat'] = 'Potwierdź hasło(powtórz)'; $lang['user']['new_password_repeat'] = 'Potwierdź hasło(powtórz)';
$lang['user']['new_password_description'] = 'Wymagania: 6 znaków, litery i liczby.'; $lang['user']['new_password_description'] = 'Wymagania: 6 znaków, litery i liczby.';
$lang['user']['did_you_know'] = '<b>Czy wiedziałeś?</b> Możesz używać oznakowań w Twoim adresie email ("ja+<b>prywatny</b>@example.com"), żeby automatycznie umieszczać wiadomości w folderach (na przykład: "prywatny").';
$lang['user']['spam_aliases'] = 'Tymczasowy alias email'; $lang['user']['spam_aliases'] = 'Tymczasowy alias email';
$lang['user']['alias'] = 'Alias'; $lang['user']['alias'] = 'Alias';
$lang['user']['aliases'] = 'Aliasy';
$lang['user']['domain_aliases'] = 'Aliasy domeny';
$lang['user']['is_catch_all'] = 'Funkcja catch-all dla domen/y'; $lang['user']['is_catch_all'] = 'Funkcja catch-all dla domen/y';
$lang['user']['aliases_also_send_as'] = 'Możliwe również wysłanie jako użytkownik'; $lang['user']['aliases_also_send_as'] = 'Możliwe również wysłanie jako użytkownik';
$lang['user']['aliases_send_as_all'] = 'Nie sprawdzaj dostępu nadawcy dla następujących domen(y) i ich/jej aliasów'; $lang['user']['aliases_send_as_all'] = 'Nie sprawdzaj dostępu nadawcy dla następujących domen(y) i ich/jej aliasów';
@ -129,7 +106,6 @@ $lang['user']['alias_valid_until'] = 'Ważny do';
$lang['user']['alias_remove_all'] = 'Usuń wszystkie aliasy'; $lang['user']['alias_remove_all'] = 'Usuń wszystkie aliasy';
$lang['user']['alias_time_left'] = 'Pozostało'; $lang['user']['alias_time_left'] = 'Pozostało';
$lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T'; $lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['syncjob_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['alias_select_validity'] = 'Okres ważności'; $lang['user']['alias_select_validity'] = 'Okres ważności';
$lang['user']['sync_jobs'] = 'Polecenie synchronizacji'; $lang['user']['sync_jobs'] = 'Polecenie synchronizacji';
$lang['user']['hour'] = 'Godzina'; $lang['user']['hour'] = 'Godzina';
@ -163,8 +139,6 @@ $lang['user']['tls_enforce_in'] = 'Uruchom TLS przychodzące';
$lang['user']['tls_enforce_out'] = 'Uruchom TLS wychodzące'; $lang['user']['tls_enforce_out'] = 'Uruchom TLS wychodzące';
$lang['user']['no_record'] = 'Brak rekordu'; $lang['user']['no_record'] = 'Brak rekordu';
$lang['user']['misc_settings'] = 'Ustawienia innego profilu';
$lang['user']['misc_delete_profile'] = 'Ustawienia innego profilu';
$lang['user']['tag_handling'] = 'Ustaw obsługę znaczników pocztowych'; $lang['user']['tag_handling'] = 'Ustaw obsługę znaczników pocztowych';
$lang['user']['tag_in_subfolder'] = 'W podfolderze'; $lang['user']['tag_in_subfolder'] = 'W podfolderze';
@ -179,7 +153,6 @@ $lang['user']['eas_reset_help'] = 'W wielu przypadkach zresetowanie pamięci pod
$lang['user']['encryption'] = 'Szyfrowanie'; $lang['user']['encryption'] = 'Szyfrowanie';
$lang['user']['username'] = 'Nazwa użytkownika'; $lang['user']['username'] = 'Nazwa użytkownika';
$lang['user']['password'] = 'Hasło';
$lang['user']['last_run'] = 'Ostatnie uruchomienie'; $lang['user']['last_run'] = 'Ostatnie uruchomienie';
$lang['user']['excludes'] = 'Wyłączenia'; $lang['user']['excludes'] = 'Wyłączenia';
$lang['user']['interval'] = 'Zakres'; $lang['user']['interval'] = 'Zakres';
@ -187,47 +160,25 @@ $lang['user']['active'] = 'Aktywny';
$lang['user']['action'] = 'Działanie'; $lang['user']['action'] = 'Działanie';
$lang['user']['edit'] = 'Edytuj'; $lang['user']['edit'] = 'Edytuj';
$lang['user']['remove'] = 'Usuń'; $lang['user']['remove'] = 'Usuń';
$lang['user']['delete_now'] = 'Usuń teraz';
$lang['user']['create_syncjob'] = 'Utwórz nowe polecenie synchronizacji'; $lang['user']['create_syncjob'] = 'Utwórz nowe polecenie synchronizacji';
$lang['start']['dashboard'] = '%s - panel';
$lang['start']['start_rc'] = 'Otwórz Roundcube';
$lang['start']['start_sogo'] = 'Otwórz SOGo';
$lang['start']['mailcow_apps_detail'] = 'Użyj aplikacji mailcow, aby mieć dostęp do wiadomości, kalendarza, kontaktów i innych.'; $lang['start']['mailcow_apps_detail'] = 'Użyj aplikacji mailcow, aby mieć dostęp do wiadomości, kalendarza, kontaktów i innych.';
$lang['start']['mailcow_panel'] = 'Włącz mailcow UI';
$lang['start']['mailcow_panel_description'] = 'Mailcow UI jest dostępny dla administratorów i użytkowników skrzynek.';
$lang['start']['mailcow_panel_detail'] = '<b>Administratorzy domeny</b> tworzą, modyfikują lub usuwają skrzynki i aliasy, zmieniają domeny i czytają dalsze informacje o przypisanych im domenach.<br> $lang['start']['mailcow_panel_detail'] = '<b>Administratorzy domeny</b> tworzą, modyfikują lub usuwają skrzynki i aliasy, zmieniają domeny i czytają dalsze informacje o przypisanych im domenach.<br>
<b>Użytkownicy skrzynek</b> mogą tworzyć ograniczone czasowo aliasy (aliasy spam), zmieniać swoje hasła i ustawienia filtru spam.'; <b>Użytkownicy skrzynek</b> mogą tworzyć ograniczone czasowo aliasy (aliasy spam), zmieniać swoje hasła i ustawienia filtru spam.';
$lang['start']['recommended_config'] = 'Zalecana konfiguracja (bez ActiveSync)';
$lang['start']['imap_smtp_server'] = 'IMAP- i dane serwera SMTP';
$lang['start']['imap_smtp_server_description'] = 'Zalecamy używanie <a href="%s" target="_blank"><b>Mozilla Thunderbird</b></a>.';
$lang['start']['imap_smtp_server_badge'] = 'Przeczytaj/Napisz wiadomość';
$lang['start']['imap_smtp_server_auth_info'] = 'Proszę korzystać z pełnego adresu email i mechanizmu uwierzytelniania PLAIN.<br> $lang['start']['imap_smtp_server_auth_info'] = 'Proszę korzystać z pełnego adresu email i mechanizmu uwierzytelniania PLAIN.<br>
Twoje dane logowania zostaną zaszyfrowane przez obowiązkowe szyfrowanie po stronie serwera.'; Twoje dane logowania zostaną zaszyfrowane przez obowiązkowe szyfrowanie po stronie serwera.';
$lang['start']['managesieve'] = 'ManageSieve';
$lang['start']['managesieve_badge'] = 'Filtruj wiadomości';
$lang['start']['managesieve_description'] = 'Proszę używać <b>Mozilla Thunderbird</b> z <a style="text-decoration:none" target="_blank" href="%s"><b>rozszerzeniem nightly sieve </b></a>.<br>Uruchom Thunderbird, otwórz ustawienia rozszerzenia i przenieś nowo pobrany plik xpi do otwartego okna.<br>Nazwa serwera to <b>%s</b>, użyj portu <b>4190</b>, jeśli zostaniesz o to poproszony. Dane logowanie są takie same jak Twój email logowania.';
$lang['start']['service'] = 'Usługa';
$lang['start']['encryption'] = 'Metoda szyfrowania';
$lang['start']['help'] = 'Pokaż/Ukryj panel pomocy'; $lang['start']['help'] = 'Pokaż/Ukryj panel pomocy';
$lang['start']['hostname'] = 'Nazwa hosta';
$lang['start']['port'] = 'Port';
$lang['start']['footer'] = '';
$lang['header']['mailcow_settings'] = 'Konfiguracja'; $lang['header']['mailcow_settings'] = 'Konfiguracja';
$lang['header']['administration'] = 'Administrowanie'; $lang['header']['administration'] = 'Administrowanie';
$lang['header']['mailboxes'] = 'Skrzynki'; $lang['header']['mailboxes'] = 'Skrzynki';
$lang['header']['user_settings'] = 'Ustawienia użytkownika'; $lang['header']['user_settings'] = 'Ustawienia użytkownika';
$lang['header']['login'] = 'Zaloguj się';
$lang['header']['logged_in_as_logout'] = 'Zalogowano jako <b>%s</b> (wyloguj)';
$lang['header']['logged_in_as_logout_dual'] = 'Zalogowano jako <b>%s <span class="text-info">[%s]</span></b>'; $lang['header']['logged_in_as_logout_dual'] = 'Zalogowano jako <b>%s <span class="text-info">[%s]</span></b>';
$lang['header']['locale'] = 'Język';
$lang['mailbox']['domain'] = 'Domena'; $lang['mailbox']['domain'] = 'Domena';
$lang['mailbox']['spam_aliases'] = 'Alias tymczasowy'; $lang['mailbox']['spam_aliases'] = 'Alias tymczasowy';
$lang['mailbox']['multiple_bookings'] = 'Wielokrotne rejestracje'; $lang['mailbox']['multiple_bookings'] = 'Wielokrotne rejestracje';
$lang['mailbox']['kind'] = 'Rodzaj'; $lang['mailbox']['kind'] = 'Rodzaj';
$lang['mailbox']['description'] = 'Opis'; $lang['mailbox']['description'] = 'Opis';
$lang['mailbox']['alias'] = 'Alias'; $lang['mailbox']['alias'] = 'Alias';
$lang['mailbox']['resource_name'] = 'Nazwa zasobu';
$lang['mailbox']['aliases'] = 'Aliasy'; $lang['mailbox']['aliases'] = 'Aliasy';
$lang['mailbox']['domains'] = 'Domeny'; $lang['mailbox']['domains'] = 'Domeny';
$lang['mailbox']['mailboxes'] = 'Skrzynki'; $lang['mailbox']['mailboxes'] = 'Skrzynki';
@ -236,7 +187,6 @@ $lang['mailbox']['mailbox_quota'] = 'Maks. wielkość skrzynki';
$lang['mailbox']['domain_quota'] = 'Wartość'; $lang['mailbox']['domain_quota'] = 'Wartość';
$lang['mailbox']['active'] = 'Aktywny'; $lang['mailbox']['active'] = 'Aktywny';
$lang['mailbox']['action'] = 'Działanie'; $lang['mailbox']['action'] = 'Działanie';
$lang['mailbox']['ratelimit'] = ' Maksymalna prędkość wychodząca/h';
$lang['mailbox']['backup_mx'] = 'Backup MX'; $lang['mailbox']['backup_mx'] = 'Backup MX';
$lang['mailbox']['domain_aliases'] = 'Aliasy domeny'; $lang['mailbox']['domain_aliases'] = 'Aliasy domeny';
$lang['mailbox']['target_domain'] = 'Domena docelowa'; $lang['mailbox']['target_domain'] = 'Domena docelowa';
@ -246,20 +196,15 @@ $lang['mailbox']['fname'] = 'Pełna nazwa';
$lang['mailbox']['filter_table'] = 'Tabela filtru'; $lang['mailbox']['filter_table'] = 'Tabela filtru';
$lang['mailbox']['yes'] = '&#10004;'; $lang['mailbox']['yes'] = '&#10004;';
$lang['mailbox']['no'] = '&#10008;'; $lang['mailbox']['no'] = '&#10008;';
$lang['mailbox']['quota'] = 'Wielkość';
$lang['mailbox']['in_use'] = 'W użyciu (%)'; $lang['mailbox']['in_use'] = 'W użyciu (%)';
$lang['mailbox']['msg_num'] = 'Wiadomość #'; $lang['mailbox']['msg_num'] = 'Wiadomość #';
$lang['mailbox']['remove'] = 'Usuń'; $lang['mailbox']['remove'] = 'Usuń';
$lang['mailbox']['edit'] = 'Edytuj'; $lang['mailbox']['edit'] = 'Edytuj';
$lang['mailbox']['archive'] = 'Archiwizuj';
$lang['mailbox']['no_record'] = 'Brak rekordu dla obiektu %s';
$lang['mailbox']['no_record_single'] = 'Brak rekordu';
$lang['mailbox']['add_domain'] = 'Dodaj domenę'; $lang['mailbox']['add_domain'] = 'Dodaj domenę';
$lang['mailbox']['add_domain_alias'] = 'Dodaj alias domeny'; $lang['mailbox']['add_domain_alias'] = 'Dodaj alias domeny';
$lang['mailbox']['add_mailbox'] = 'Dodaj skrzynkę'; $lang['mailbox']['add_mailbox'] = 'Dodaj skrzynkę';
$lang['mailbox']['add_resource'] = 'Dodaj zasób'; $lang['mailbox']['add_resource'] = 'Dodaj zasób';
$lang['mailbox']['add_alias'] = 'Dodaj alias'; $lang['mailbox']['add_alias'] = 'Dodaj alias';
$lang['mailbox']['add_domain_record_first'] = 'Proszę najpierw dodać domenę';
$lang['mailbox']['empty'] = 'Brak wyników'; $lang['mailbox']['empty'] = 'Brak wyników';
$lang['mailbox']['toggle_all'] = 'Włącz wszystkie'; $lang['mailbox']['toggle_all'] = 'Włącz wszystkie';
$lang['mailbox']['quick_actions'] = 'Szybkie działania'; $lang['mailbox']['quick_actions'] = 'Szybkie działania';
@ -268,21 +213,6 @@ $lang['mailbox']['deactivate'] = 'Wyłącz';
$lang['info']['no_action'] = 'Żadne działanie nie ma zastosowania'; $lang['info']['no_action'] = 'Żadne działanie nie ma zastosowania';
$lang['delete']['title'] = 'Usuń obiekt';
$lang['delete']['remove_domain_warning'] = '<b>Ostrzeżenie:</b> Zamierzasz usunąć domenę <b>%s</b>!';
$lang['delete']['remove_syncjob_warning'] = '<b>Ostrzeżenie:</b> Zamierzasz usunąć polecenie synchronizacji dla użytkownika <b>%s</b>!';
$lang['delete']['remove_domainalias_warning'] = '<b>Ostrzeżenie:</b> Zamierzasz usunąć alias domeny <b>%s</b>!';
$lang['delete']['remove_domainadmin_warning'] = '<b>Ostrzeżenie:</b> Zamierzasz usunąć administratora domeny <b>%s</b>!';
$lang['delete']['remove_alias_warning'] = '<b>Ostrzeżenie:</b> Zamierzasz usunąć alias <b>%s</b>!';
$lang['delete']['remove_mailbox_warning'] = '<b>Ostrzeżenie:</b> Zamierzasz usunąć skrzynkę <b>%s</b>!';
$lang['delete']['remove_mailbox_details'] = 'Skrzynka zostanie <b>trwale opróżniona</b>!';
$lang['delete']['remove_resource_warning'] = '<b>Ostrzeżenie:</b> Zamierzasz usunąć zasób <b>%s</b>!';
$lang['delete']['remove_resource_details'] = 'zasób zostanie <b trwale usunięte</b>!';
$lang['delete']['remove_domain_details'] = 'Usuwasz również aliasy domeny.<br><br><b>Domena musi być pusta, aby móc ją usunąć.</b>';
$lang['delete']['remove_syncjob_details'] = 'Obiekty z danego polecenia synchronizacji nie będą więcej pobierane ze zdalnego serwera.';
$lang['delete']['remove_alias_details'] = 'Użytkownicy nie będą już mogli otrzymywać poczty na ten adres ani jej z niego wysyłać.</b>';
$lang['delete']['remove_button'] = 'Usuń';
$lang['delete']['previous'] = 'Poprzednia strona';
$lang['edit']['syncjob'] = 'Edytuj polecenie synchronizacji'; $lang['edit']['syncjob'] = 'Edytuj polecenie synchronizacji';
$lang['edit']['save'] = 'Zapisz zmiany'; $lang['edit']['save'] = 'Zapisz zmiany';
@ -294,22 +224,17 @@ $lang['edit']['subfolder2'] = 'Synchronizuj do podfolderu w skrzynce<br><small>(
$lang['edit']['mins_interval'] = 'Zakres (min)'; $lang['edit']['mins_interval'] = 'Zakres (min)';
$lang['edit']['exclude'] = 'Wyklucz obiekty (regex)'; $lang['edit']['exclude'] = 'Wyklucz obiekty (regex)';
$lang['edit']['save'] = 'Zapisz zmiany'; $lang['edit']['save'] = 'Zapisz zmiany';
$lang['edit']['archive'] = 'Dostęp do archiwum';
$lang['edit']['max_mailboxes'] = 'Maks. liczba skrzynek'; $lang['edit']['max_mailboxes'] = 'Maks. liczba skrzynek';
$lang['edit']['title'] = 'Edytuj obiekt'; $lang['edit']['title'] = 'Edytuj obiekt';
$lang['edit']['target_address'] = 'Adres/y Idź do <small>(rozdzielone przecinkiem)</small>'; $lang['edit']['target_address'] = 'Adres/y Idź do <small>(rozdzielone przecinkiem)</small>';
$lang['edit']['active'] = 'Aktywny'; $lang['edit']['active'] = 'Aktywny';
$lang['edit']['target_domain'] = 'Domena docelowa'; $lang['edit']['target_domain'] = 'Domena docelowa';
$lang['edit']['password'] = 'Hasło'; $lang['edit']['password'] = 'Hasło';
$lang['edit']['ratelimit'] = 'Maksymalna prędkość wychodząca/h';
$lang['danger']['ratelimt_less_one'] = 'Maksymalna prędkość wychodząca/h nie może być mniejsza niż 1';
$lang['edit']['password_repeat'] = 'Potwierdź hasło(powtórz)'; $lang['edit']['password_repeat'] = 'Potwierdź hasło(powtórz)';
$lang['edit']['domain_admin'] = 'Edytuj administratora domeny'; $lang['edit']['domain_admin'] = 'Edytuj administratora domeny';
$lang['edit']['domain'] = 'Edytuj domenę'; $lang['edit']['domain'] = 'Edytuj domenę';
$lang['edit']['alias_domain'] = 'Alias domeny';
$lang['edit']['edit_alias_domain'] = 'Edytuj alias domeny'; $lang['edit']['edit_alias_domain'] = 'Edytuj alias domeny';
$lang['edit']['domains'] = 'Domeny'; $lang['edit']['domains'] = 'Domeny';
$lang['edit']['destroy'] = 'Ręczne wprowadzanie danych';
$lang['edit']['alias'] = 'Edytuj alias'; $lang['edit']['alias'] = 'Edytuj alias';
$lang['edit']['mailbox'] = 'Edytuj skrzynkę'; $lang['edit']['mailbox'] = 'Edytuj skrzynkę';
$lang['edit']['description'] = 'Opis'; $lang['edit']['description'] = 'Opis';
@ -319,15 +244,10 @@ $lang['edit']['domain_quota'] = 'Wartość domeny';
$lang['edit']['backup_mx_options'] = 'Opcje backup MX'; $lang['edit']['backup_mx_options'] = 'Opcje backup MX';
$lang['edit']['relay_domain'] = 'Domena przekaźnikowa'; $lang['edit']['relay_domain'] = 'Domena przekaźnikowa';
$lang['edit']['relay_all'] = 'Przekaż wszystkim odbiorcom'; $lang['edit']['relay_all'] = 'Przekaż wszystkim odbiorcom';
$lang['edit']['dkim_signature'] = 'Sygnatura DKIM';
$lang['edit']['dkim_record_info'] = '<small>Proszę dodać rekord TXT o podanej wartości do swoich ustawień DNS.</small>';
$lang['edit']['relay_all_info'] = '<small>Jeśli decydujesz się <b>nie</b> przekazywać wszystkim odbiorcom, musisz dodać ("ślepą")skrzynkę dla każdego poszczególnego odbiorcy, któremu należy przekazać.</small>'; $lang['edit']['relay_all_info'] = '<small>Jeśli decydujesz się <b>nie</b> przekazywać wszystkim odbiorcom, musisz dodać ("ślepą")skrzynkę dla każdego poszczególnego odbiorcy, któremu należy przekazać.</small>';
$lang['edit']['full_name'] = 'Pełna nazwa'; $lang['edit']['full_name'] = 'Pełna nazwa';
$lang['edit']['quota_mb'] = 'Wartość (MiB)'; $lang['edit']['quota_mb'] = 'Wartość (MiB)';
$lang['edit']['sender_acl'] = 'Zezwalaj na wysłanie jako'; $lang['edit']['sender_acl'] = 'Zezwalaj na wysłanie jako';
$lang['edit']['sender_acl_info'] = 'Nie można cofnąć wyboru aliasów.';
$lang['edit']['dkim_txt_name'] = 'Nazwa rekordu TXT:';
$lang['edit']['dkim_txt_value'] = 'Wartość rekordu TXT:';
$lang['edit']['previous'] = 'Poprzednia strona'; $lang['edit']['previous'] = 'Poprzednia strona';
$lang['edit']['unchanged_if_empty'] = 'Jeżli bez zmian, nie wypełniaj'; $lang['edit']['unchanged_if_empty'] = 'Jeżli bez zmian, nie wypełniaj';
$lang['edit']['dont_check_sender_acl'] = "Wyłącz sprawdzanie nadawcy dla domeny %s + aliasów domeny"; $lang['edit']['dont_check_sender_acl'] = "Wyłącz sprawdzanie nadawcy dla domeny %s + aliasów domeny";
@ -342,22 +262,17 @@ $lang['add']['port'] = 'Port';
$lang['add']['username'] = 'Nazwa użytkownika'; $lang['add']['username'] = 'Nazwa użytkownika';
$lang['add']['enc_method'] = 'Metoda szyfrowania'; $lang['add']['enc_method'] = 'Metoda szyfrowania';
$lang['add']['mins_interval'] = 'Zakres pobierania (minuty)'; $lang['add']['mins_interval'] = 'Zakres pobierania (minuty)';
$lang['add']['maxage'] = 'Maksymalny wiek wiadomości, które będą pobierane ze zdalnego (0 = pomiń wiek)';
$lang['add']['subfolder2'] = 'Synchronizuj do podfolderu w miejscu docelowym';
$lang['add']['exclude'] = 'Wyklucz obiekty (regex)'; $lang['add']['exclude'] = 'Wyklucz obiekty (regex)';
$lang['add']['delete2duplicates'] = 'Usuń duplikaty w miejscu docelowym'; $lang['add']['delete2duplicates'] = 'Usuń duplikaty w miejscu docelowym';
$lang['add']['delete1'] = 'Usuń ze źródła po zakończeniu'; $lang['add']['delete1'] = 'Usuń ze źródła po zakończeniu';
$lang['edit']['delete2duplicates'] = 'Usuń duplikaty w miejscu docelowym'; $lang['edit']['delete2duplicates'] = 'Usuń duplikaty w miejscu docelowym';
$lang['edit']['delete1'] = 'Usuń ze źródła po zakończeniu'; $lang['edit']['delete1'] = 'Usuń ze źródła po zakończeniu';
$lang['add']['title'] = 'Dodaj obiekt';
$lang['add']['domain'] = 'Domena'; $lang['add']['domain'] = 'Domena';
$lang['add']['active'] = 'Aktywny'; $lang['add']['active'] = 'Aktywny';
$lang['add']['multiple_bookings'] = 'Wielokrotne rejestracje'; $lang['add']['multiple_bookings'] = 'Wielokrotne rejestracje';
$lang['add']['save'] = 'Zapisz zmiany';
$lang['add']['description'] = 'Opis:'; $lang['add']['description'] = 'Opis:';
$lang['add']['max_aliases'] = 'Maks. liczba aliasów:'; $lang['add']['max_aliases'] = 'Maks. liczba aliasów:';
$lang['add']['resource_name'] = 'Nazwa zasobu';
$lang['add']['max_mailboxes'] = 'Maks. liczba skrzynek:'; $lang['add']['max_mailboxes'] = 'Maks. liczba skrzynek:';
$lang['add']['mailbox_quota_m'] = 'Maks. wartość na skrzynkę (MiB):'; $lang['add']['mailbox_quota_m'] = 'Maks. wartość na skrzynkę (MiB):';
$lang['add']['domain_quota_m'] = 'Łączna wartość domeny (MiB):'; $lang['add']['domain_quota_m'] = 'Łączna wartość domeny (MiB):';
@ -365,8 +280,6 @@ $lang['add']['backup_mx_options'] = 'Opcje Backup MX:';
$lang['add']['relay_all'] = 'Przekaż wszystkim odbiorcom'; $lang['add']['relay_all'] = 'Przekaż wszystkim odbiorcom';
$lang['add']['relay_domain'] = 'Domena przekaźnikowa'; $lang['add']['relay_domain'] = 'Domena przekaźnikowa';
$lang['add']['relay_all_info'] = '<small>Jeśli decydujesz się <b>nie</b> przekazywać wszystkim odbiorcom, musisz dodać ("ślepą")skrzynkę dla każdego poszczególnego odbiorcy, któremu należy przekazać.</small>'; $lang['add']['relay_all_info'] = '<small>Jeśli decydujesz się <b>nie</b> przekazywać wszystkim odbiorcom, musisz dodać ("ślepą")skrzynkę dla każdego poszczególnego odbiorcy, któremu należy przekazać.</small>';
$lang['add']['alias'] = 'Alias(y)';
$lang['add']['alias_spf_fail'] = '<b>Uwaga:</b> Jeśli Twój wybrany adres docelowy jest skrzynką zewnętrzną, <b>odbierający serwer pocztowy</b> może odrzucić wiadomość z powodu błędu SPF.</a>';
$lang['add']['alias_address'] = 'Alias/y:'; $lang['add']['alias_address'] = 'Alias/y:';
$lang['add']['alias_address_info'] = '<small>Pełny/e adres/y email lub @example.com, aby przejąć wszystkie wiadomości dla domeny (oddzielone przecinkami). <b>tylko domeny mailcow</b>.</small>'; $lang['add']['alias_address_info'] = '<small>Pełny/e adres/y email lub @example.com, aby przejąć wszystkie wiadomości dla domeny (oddzielone przecinkami). <b>tylko domeny mailcow</b>.</small>';
$lang['add']['alias_domain_info'] = '<small>Tylko prawidłowe nazwy domen (oddzielone przecinkami).</small>'; $lang['add']['alias_domain_info'] = '<small>Tylko prawidłowe nazwy domen (oddzielone przecinkami).</small>';
@ -375,8 +288,6 @@ $lang['add']['target_address_info'] = '<small> Pełny/e adres/y email (oddzielon
$lang['add']['alias_domain'] = 'Alias domeny'; $lang['add']['alias_domain'] = 'Alias domeny';
$lang['add']['select'] = 'Proszę wybrać...'; $lang['add']['select'] = 'Proszę wybrać...';
$lang['add']['target_domain'] = 'Domena docelowa:'; $lang['add']['target_domain'] = 'Domena docelowa:';
$lang['add']['mailbox'] = 'Skrzynka';
$lang['add']['resource'] = 'Zasób';
$lang['add']['kind'] = 'Rodzaj'; $lang['add']['kind'] = 'Rodzaj';
$lang['add']['mailbox_username'] = 'Nazwa użytkownika (lewa strona adresu email):'; $lang['add']['mailbox_username'] = 'Nazwa użytkownika (lewa strona adresu email):';
$lang['add']['full_name'] = 'Pełna nazwa:'; $lang['add']['full_name'] = 'Pełna nazwa:';
@ -384,19 +295,11 @@ $lang['add']['quota_mb'] = 'Wartość (MiB):';
$lang['add']['select_domain'] = 'Proszę najpierw wybrać domenę'; $lang['add']['select_domain'] = 'Proszę najpierw wybrać domenę';
$lang['add']['password'] = 'Hasło:'; $lang['add']['password'] = 'Hasło:';
$lang['add']['password_repeat'] = 'Potwierdź hasło(powtórz):'; $lang['add']['password_repeat'] = 'Potwierdź hasło(powtórz):';
$lang['add']['previous'] = 'Poprzednia strona';
$lang['add']['restart_sogo_hint'] = 'Po dodaniu nowej domeny będziesz musiał ponownie uruchomić kontener serwisowy SOGo!'; $lang['add']['restart_sogo_hint'] = 'Po dodaniu nowej domeny będziesz musiał ponownie uruchomić kontener serwisowy SOGo!';
$lang['login']['title'] = 'Zaloguj się';
$lang['login']['administration'] = 'Administrowanie';
$lang['login']['administration_details'] = 'Proszę używać loginu Administratora do wykonywania zadań administracyjnych.';
$lang['login']['user_settings'] = 'Ustawienia użytkownika';
$lang['login']['user_settings_details'] = 'Użytkownicy skrzynek mogą używać mailcow UI do zmiany ich haseł, tworzenia tymczasowych aliasów (spam aliasów), dostosowania filtru spam lub importowania wiadomości z zdalnego serweru IMAP.';
$lang['login']['username'] = 'Nazwa użytkownika'; $lang['login']['username'] = 'Nazwa użytkownika';
$lang['login']['password'] = 'Hasło'; $lang['login']['password'] = 'Hasło';
$lang['login']['reset_password'] = 'Resetuj hasło';
$lang['login']['login'] = 'Zaloguj się'; $lang['login']['login'] = 'Zaloguj się';
$lang['login']['previous'] = "Poprzednia strona";
$lang['login']['delayed'] = 'Logowanie zostało opóźnione o %s sekund.'; $lang['login']['delayed'] = 'Logowanie zostało opóźnione o %s sekund.';
$lang['tfa']['tfa'] = "Uwierzytelnianie dwuetapowe"; $lang['tfa']['tfa'] = "Uwierzytelnianie dwuetapowe";
@ -406,16 +309,12 @@ $lang['tfa']['key_id'] = "Identyfikator dla Twojego YubiKey";
$lang['tfa']['key_id_totp'] = "Identyfikator dla Twojego klucza"; $lang['tfa']['key_id_totp'] = "Identyfikator dla Twojego klucza";
$lang['tfa']['api_register'] = 'mailcow używa Yubico Cloud API. Proszę pobrać klucz API dla Twojego klucza <a href="https://upgrade.yubico.com/getapikey/" target="_blank">here</a>'; $lang['tfa']['api_register'] = 'mailcow używa Yubico Cloud API. Proszę pobrać klucz API dla Twojego klucza <a href="https://upgrade.yubico.com/getapikey/" target="_blank">here</a>';
$lang['tfa']['u2f'] = "Uwierzytelnianie U2F"; $lang['tfa']['u2f'] = "Uwierzytelnianie U2F";
$lang['tfa']['hotp'] = "Uwierzytelnianie HOTP";
$lang['tfa']['totp'] = "Uwierzytelnianie TOTP"; $lang['tfa']['totp'] = "Uwierzytelnianie TOTP";
$lang['tfa']['none'] = "Deaktywuj"; $lang['tfa']['none'] = "Deaktywuj";
$lang['tfa']['delete_tfa'] = "Wyłącz TFA"; $lang['tfa']['delete_tfa'] = "Wyłącz TFA";
$lang['tfa']['disable_tfa'] = "Wyłącz TFA do kolejnego udanego logowania"; $lang['tfa']['disable_tfa'] = "Wyłącz TFA do kolejnego udanego logowania";
$lang['tfa']['confirm_tfa'] = "Potwierdź jednorazowe hasło w polu poniżej";
$lang['tfa']['confirm'] = "Potwierdź"; $lang['tfa']['confirm'] = "Potwierdź";
$lang['tfa']['otp'] = "Jednorazowe hasło";
$lang['tfa']['totp'] = "Time-based OTP (Google Authenticator itd.)"; $lang['tfa']['totp'] = "Time-based OTP (Google Authenticator itd.)";
$lang['tfa']['trash_login'] = "Login Trash";
$lang['tfa']['select'] = "Proszę wybrać"; $lang['tfa']['select'] = "Proszę wybrać";
$lang['tfa']['waiting_usb_auth'] = "<i>Czekam na urządzenie USB...</i><br><br>Wciśnij teraz przycisk na urządzeniu U2F USB."; $lang['tfa']['waiting_usb_auth'] = "<i>Czekam na urządzenie USB...</i><br><br>Wciśnij teraz przycisk na urządzeniu U2F USB.";
$lang['tfa']['waiting_usb_register'] = "<i> Czekam na urządzenie USB...</i><br><br>Wprowadź swoje hasło powyżej i potwierdź rejestrację U2F przez naciśnięcie przycisku na urządzeniu U2F USB."; $lang['tfa']['waiting_usb_register'] = "<i> Czekam na urządzenie USB...</i><br><br>Wprowadź swoje hasło powyżej i potwierdź rejestrację U2F przez naciśnięcie przycisku na urządzeniu U2F USB.";
@ -432,40 +331,14 @@ $lang['admin']['f2b_max_attempts'] = 'Max. ilość prób';
$lang['admin']['f2b_retry_window'] = 'Spróbuj ponownie (s) dla max. ilości prób'; // do spr $lang['admin']['f2b_retry_window'] = 'Spróbuj ponownie (s) dla max. ilości prób'; // do spr
$lang['admin']['f2b_whitelist'] = 'Biała lista sieci/hosty'; $lang['admin']['f2b_whitelist'] = 'Biała lista sieci/hosty';
$lang['admin']['search_domain_da'] = 'Szukaj domen'; $lang['admin']['search_domain_da'] = 'Szukaj domen';
$lang['admin']['restrictions'] = 'Ograniczenia Postfix ';
$lang['admin']['rr'] = 'Ograniczenia Postfix po stronie odbiorcy';
$lang['admin']['sr'] = 'Ograniczenia Postfix po stronie nadawcy';
$lang['admin']['reset_defaults'] = 'Przywróć domyślne';
$lang['admin']['sr'] = 'Ograniczenia Postfix po stronie nadawcy';
$lang['admin']['r_inactive'] = 'Nieaktywne ograniczenia'; $lang['admin']['r_inactive'] = 'Nieaktywne ograniczenia';
$lang['admin']['r_active'] = 'Aktywne ograniczenia'; $lang['admin']['r_active'] = 'Aktywne ograniczenia';
$lang['admin']['r_info'] = 'Zablokowane/Wyłączone elementy na liście aktywnych ograniczeń nie są rozpoznawane przez mailcow jako prawidłowe ograniczenia i nie można ich przesunąć. Niemniej jednak nierozpoznane ograniczenia zostaną wyświetlone w kolejności pojawiania się. <br>Nowe elementy można dodać w <code>inc/vars.local.inc.php</code>, aby móc je przełączać.'; $lang['admin']['r_info'] = 'Zablokowane/Wyłączone elementy na liście aktywnych ograniczeń nie są rozpoznawane przez mailcow jako prawidłowe ograniczenia i nie można ich przesunąć. Niemniej jednak nierozpoznane ograniczenia zostaną wyświetlone w kolejności pojawiania się. <br>Nowe elementy można dodać w <code>inc/vars.local.inc.php</code>, aby móc je przełączać.';
$lang['admin']['public_folders'] = 'Foldery publiczne';
$lang['admin']['public_folders_text'] = 'Przestrzeń nazw "Publiczny" zostanie utworzona. Poniższa nazwa folderu publicznego wskazuje na nazwę pierwszej automatycznie utworzonej skrzynki w ramach danej przestrzeni nazw.';
$lang['admin']['public_folder_name'] = 'Nazwa folderu <small>(alfanumeryczna)</small>';
$lang['admin']['public_folder_enable'] = 'Włącz folder publiczny';
$lang['admin']['public_folder_enable_text'] = 'Przełączenie tej opcji nie usunie wiadomości w żadnym folderze publicznym.';
$lang['admin']['public_folder_pusf'] = 'Włącz flagę widoczną dla danego użytkownika';
$lang['admin']['public_folder_pusf_text'] = 'System włączający "flagę widoczną dla danego użytkownika" nie oznaczy wiadomości jako przeczytaną dla Użytkownika B, jeśli Użytkownik A ją widział, a Użytkownik B nie.';
$lang['admin']['privacy'] = 'Bezpieczeństwo';
$lang['admin']['privacy_text'] = 'Ta opjca pozwala tabeli PCRE usunąć "User-Agent", "X-Enigmail", "X-Mailer", "X-Originating-IP" i zastąpić "Otrzymano: od" nagłówkami z hosta lokalnego/127.0.0.1.';
$lang['admin']['privacy_anon_mail'] = 'Utajnij pocztę wychodzącą';
$lang['admin']['dkim_txt_name'] = 'Nazwa rekordu TXT:';
$lang['admin']['dkim_txt_value'] = 'Wartość rekordu TXT:';
$lang['admin']['dkim_key_length'] = 'Długość klucza DKIM (bity)'; $lang['admin']['dkim_key_length'] = 'Długość klucza DKIM (bity)';
$lang['admin']['dkim_key_valid'] = 'Prawidłowy klucz'; $lang['admin']['dkim_key_valid'] = 'Prawidłowy klucz';
$lang['admin']['dkim_key_unused'] = 'Nieużywany klucz'; $lang['admin']['dkim_key_unused'] = 'Nieużywany klucz';
$lang['admin']['dkim_key_missing'] = 'Brak klucza'; $lang['admin']['dkim_key_missing'] = 'Brak klucza';
$lang['admin']['dkim_key_hint'] = 'Selektor dla kluczy DKIM to zawsze <code>dkim</code>.';
$lang['admin']['previous'] = 'Poprzednia strona';
$lang['admin']['quota_mb'] = 'Wartość (MiB):';
$lang['admin']['sender_acl'] = 'Zezwalaj na wysłanie jako:';
$lang['admin']['msg_size'] = 'Rozmiar wiadomości';
$lang['admin']['msg_size_limit'] = 'Aktualny limit rozmiaru wiadomości';
$lang['admin']['msg_size_limit_details'] = 'Zastosowania nowego limitu przeładuje Postfix i serwer www.';
$lang['admin']['save'] = 'Zapisz zmiany'; $lang['admin']['save'] = 'Zapisz zmiany';
$lang['admin']['maintenance'] = 'Konserwacja i Informacje';
$lang['admin']['sys_info'] = 'Informacje systemowe';
$lang['admin']['dkim_add_key'] = 'Dodaj klucz ARC/DKIM'; $lang['admin']['dkim_add_key'] = 'Dodaj klucz ARC/DKIM';
$lang['admin']['dkim_keys'] = 'Klucze ARC/DKIM'; $lang['admin']['dkim_keys'] = 'Klucze ARC/DKIM';
$lang['admin']['add'] = 'Dodaj'; $lang['admin']['add'] = 'Dodaj';
@ -488,24 +361,15 @@ $lang['admin']['unchanged_if_empty'] = 'W przypadku braku zmian, nie wypełniaj'
$lang['admin']['yes'] = '&#10004;'; $lang['admin']['yes'] = '&#10004;';
$lang['admin']['no'] = '&#10008;'; $lang['admin']['no'] = '&#10008;';
$lang['admin']['access'] = 'Dostęp'; $lang['admin']['access'] = 'Dostęp';
$lang['admin']['invalid_max_msg_size'] = 'Nieprawidłowy maks. rozmiar wiadomości';
$lang['admin']['site_not_found'] = 'Nie można zlokalizować konfiguracji witryny mailcow';
$lang['admin']['public_folder_empty'] = 'Nazwa folderu publicznego nie może pozostać pusta';
$lang['admin']['set_rr_failed'] = 'Nie można ustawić ograniczeń Postfix';
$lang['admin']['no_record'] = 'Brak rekordu'; $lang['admin']['no_record'] = 'Brak rekordu';
$lang['admin']['filter_table'] = 'Tabela filtru'; $lang['admin']['filter_table'] = 'Tabela filtru';
$lang['admin']['empty'] = 'Brak wyników'; $lang['admin']['empty'] = 'Brak wyników';
$lang['admin']['time'] = 'Czas';
$lang['admin']['priority'] = 'Priorytet';
$lang['admin']['message'] = 'Wiadomość';
$lang['admin']['refresh'] = 'Odśwież'; $lang['admin']['refresh'] = 'Odśwież';
$lang['admin']['logs'] = 'Logi';
$lang['admin']['forwarding_hosts'] = 'Hosty przekazujące'; $lang['admin']['forwarding_hosts'] = 'Hosty przekazujące';
$lang['admin']['forwarding_hosts_hint'] = 'Wiadomości przychodzące od hostów wyszczególnionych tutaj są akceptowane bezwarunkowo. Dane hosty nie są następnie sprawdzane względem list DNSBL lub poddawane metodzie szarych list. Otrzymany od nich spam nie jest nigdy odrzucany, ale opcjonalnie może zostać umieszczony w folderze spam. Najpopularniejsze zastosowanie dla takiego rozwiązania to wyszczególnienie serwerów poczty, na których ustawiono przekierowanie poczty przychodzącej na Twój serwer Mailcow.'; $lang['admin']['forwarding_hosts_hint'] = 'Wiadomości przychodzące od hostów wyszczególnionych tutaj są akceptowane bezwarunkowo. Dane hosty nie są następnie sprawdzane względem list DNSBL lub poddawane metodzie szarych list. Otrzymany od nich spam nie jest nigdy odrzucany, ale opcjonalnie może zostać umieszczony w folderze spam. Najpopularniejsze zastosowanie dla takiego rozwiązania to wyszczególnienie serwerów poczty, na których ustawiono przekierowanie poczty przychodzącej na Twój serwer Mailcow.';
$lang['admin']['forwarding_hosts_add_hint'] = 'Możesz albo wyszczególnić adresy IPv4/IPv6, sieci w notacji CIDR, nazwy hostów (które zostaną rozłożone na adresy IP), albo nazwy domen (które zostaną rozłożone na adresy IP poprzez sprawdzanie rekordów SPF lub, w razie ich braku, rekordów MX).'; $lang['admin']['forwarding_hosts_add_hint'] = 'Możesz albo wyszczególnić adresy IPv4/IPv6, sieci w notacji CIDR, nazwy hostów (które zostaną rozłożone na adresy IP), albo nazwy domen (które zostaną rozłożone na adresy IP poprzez sprawdzanie rekordów SPF lub, w razie ich braku, rekordów MX).';
$lang['admin']['host'] = 'Host'; $lang['admin']['host'] = 'Host';
$lang['admin']['source'] = 'źródło'; $lang['admin']['source'] = 'źródło';
$lang['admin']['add_forwarding_host'] = 'Dodaj hosta przekazującego'; $lang['admin']['add_forwarding_host'] = 'Dodaj hosta przekazującego';
$lang['delete']['remove_forwardinghost_warning'] = '<b>Ostrzeżenie:</b> Zamierzasz usunąć hosta przekazującego <b>%s</b>!';
$lang['success']['forwarding_host_removed'] = "Usunięto hosta przekazującego %s"; $lang['success']['forwarding_host_removed'] = "Usunięto hosta przekazującego %s";
$lang['success']['forwarding_host_added'] = "Dodano hosta przekazującego %s"; $lang['success']['forwarding_host_added'] = "Dodano hosta przekazującego %s";

View File

@ -5,12 +5,7 @@
$lang['footer']['loading'] = "Aguarde..."; $lang['footer']['loading'] = "Aguarde...";
$lang['getmail']['no_status'] = "Nenhum registro anterior encontrado"; $lang['getmail']['no_status'] = "Nenhum registro anterior encontrado";
$lang['dkim']['confirm'] = "Tem certeza?";
$lang['danger']['dkim_not_found'] = "Registro DKIM não encontrado";
$lang['danger']['dkim_remove_failed'] = "Não foi possível remover o registro DKIM selecionado";
$lang['danger']['dkim_add_failed'] = "Não foi possível adicionar o registro DKIM fornecido";
$lang['danger']['dkim_domain_or_sel_invalid'] = " Registro DKIM inválido"; $lang['danger']['dkim_domain_or_sel_invalid'] = " Registro DKIM inválido";
$lang['danger']['dkim_key_length_invalid'] = "Registro DKIM com tamanho inválido";
$lang['success']['dkim_removed'] = " Registro DKIM removido com sucesso"; $lang['success']['dkim_removed'] = " Registro DKIM removido com sucesso";
$lang['success']['dkim_added'] = "Registro DKIM salvo com sucesso"; $lang['success']['dkim_added'] = "Registro DKIM salvo com sucesso";
$lang['danger']['access_denied'] = "Acesso negado ou dados inválidos"; $lang['danger']['access_denied'] = "Acesso negado ou dados inválidos";
@ -22,8 +17,6 @@ $lang['danger']['alias_empty'] = "Você deve preencher o campo do Apelido";
$lang['danger']['goto_empty'] = "Você deve preencher o campo Encaminhar para"; $lang['danger']['goto_empty'] = "Você deve preencher o campo Encaminhar para";
$lang['danger']['blacklist_exists'] = "O registro já existe na BlackList"; $lang['danger']['blacklist_exists'] = "O registro já existe na BlackList";
$lang['danger']['blacklist_from_invalid'] = "O registro Blacklist possui formato inválido"; $lang['danger']['blacklist_from_invalid'] = "O registro Blacklist possui formato inválido";
$lang['danger']['whitelist_exists'] = "O registro já existe na WhiteList";
$lang['danger']['whitelist_from_invalid'] = "O registro Whitelist possui formato inválido";
$lang['danger']['alias_invalid'] = "O endereço digitado como Apelido é inválido"; $lang['danger']['alias_invalid'] = "O endereço digitado como Apelido é inválido";
$lang['danger']['goto_invalid'] = "O endereço digitado como Encaminhar para é inválido"; $lang['danger']['goto_invalid'] = "O endereço digitado como Encaminhar para é inválido";
$lang['danger']['alias_domain_invalid'] = "O endereço do Encaminhamento de Domínio é inválido"; $lang['danger']['alias_domain_invalid'] = "O endereço do Encaminhamento de Domínio é inválido";
@ -36,26 +29,19 @@ $lang['success']['alias_added'] = "Apelido(s) adicionado(s) com sucesso";
$lang['success']['alias_modified'] = "Apelido(s) alterados(s) com sucesso"; $lang['success']['alias_modified'] = "Apelido(s) alterados(s) com sucesso";
$lang['success']['aliasd_modified'] = "Direcionamento de Domínio(s) alterados(s) com sucesso"; $lang['success']['aliasd_modified'] = "Direcionamento de Domínio(s) alterados(s) com sucesso";
$lang['success']['mailbox_modified'] = "A conta %s foi alterada com sucesso"; $lang['success']['mailbox_modified'] = "A conta %s foi alterada com sucesso";
$lang['success']['msg_size_saved'] = "Limite do tamanho de mensagem ajustado com sucesso";
$lang['danger']['aliasd_not_found'] = "Encaminhamento de Domínio não encontrado";
$lang['danger']['targetd_not_found'] = "Domínio de Destino não encontrado"; $lang['danger']['targetd_not_found'] = "Domínio de Destino não encontrado";
$lang['danger']['aliasd_exists'] = "Encaminhamento de Domínio já existe";
$lang['success']['aliasd_added'] = "Adicionado Encaminhamento de Domínio %s"; $lang['success']['aliasd_added'] = "Adicionado Encaminhamento de Domínio %s";
$lang['success']['aliasd_modified'] = "Encaminhamento de Domínio %s alterado com sucesso"; $lang['success']['aliasd_modified'] = "Encaminhamento de Domínio %s alterado com sucesso";
$lang['success']['domain_modified'] = "Domínio %s alterado com sucesso"; $lang['success']['domain_modified'] = "Domínio %s alterado com sucesso";
$lang['success']['domain_admin_modified'] = "Changes to domain administrator %s have been saved"; $lang['success']['domain_admin_modified'] = "Changes to domain administrator %s have been saved";
$lang['success']['domain_admin_added'] = "Domínio administrator %s has been added"; $lang['success']['domain_admin_added'] = "Domínio administrator %s has been added";
$lang['success']['changes_general'] = 'Alteração efetuada com sucesso';
$lang['success']['admin_modified'] = "Administrador alterado com sucesso"; $lang['success']['admin_modified'] = "Administrador alterado com sucesso";
$lang['danger']['exit_code_not_null'] = "Falha: código de erro %d";
$lang['danger']['mailbox_not_available'] = "Conta não disponível";
$lang['danger']['username_invalid'] = "Nome de usuário inválido"; $lang['danger']['username_invalid'] = "Nome de usuário inválido";
$lang['danger']['password_mismatch'] = "As senhas não estão iguais"; $lang['danger']['password_mismatch'] = "As senhas não estão iguais";
$lang['danger']['password_complexity'] = "A senha não atende aos parâmetros de segurança"; $lang['danger']['password_complexity'] = "A senha não atende aos parâmetros de segurança";
$lang['danger']['password_empty'] = "A senha não pode ser vazia ou em branco"; $lang['danger']['password_empty'] = "A senha não pode ser vazia ou em branco";
$lang['danger']['login_failed'] = "Login falhou"; $lang['danger']['login_failed'] = "Login falhou";
$lang['danger']['mailbox_invalid'] = "Conta inválida"; $lang['danger']['mailbox_invalid'] = "Conta inválida";
$lang['danger']['mailbox_invalid_suggest'] = 'Conta inválida, sugestão: "%s"?';
$lang['info']['fetchmail_planned'] = "Procedimento de retirada de emails foi agendado. Verifique o processo mais tarde."; $lang['info']['fetchmail_planned'] = "Procedimento de retirada de emails foi agendado. Verifique o processo mais tarde.";
$lang['danger']['fetchmail_source_empty'] = "Definir a pasta de origem"; $lang['danger']['fetchmail_source_empty'] = "Definir a pasta de origem";
$lang['danger']['fetchmail_dest_empty'] = "Definir a pasta de destino"; $lang['danger']['fetchmail_dest_empty'] = "Definir a pasta de destino";
@ -79,15 +65,10 @@ $lang['danger']['mailboxes_in_use'] = "O máximo de Contas deve ser maior ou igu
$lang['danger']['aliases_in_use'] = "O máximo de Apelidos deve ser maior ou igual a %d"; $lang['danger']['aliases_in_use'] = "O máximo de Apelidos deve ser maior ou igual a %d";
$lang['danger']['sender_acl_invalid'] = "Campo Sender ACL é inválido"; $lang['danger']['sender_acl_invalid'] = "Campo Sender ACL é inválido";
$lang['danger']['domain_not_empty'] = "Não é possível remover um domínio com Contas/Apelidos/Direcionamentos"; $lang['danger']['domain_not_empty'] = "Não é possível remover um domínio com Contas/Apelidos/Direcionamentos";
$lang['warning']['spam_alias_temp_error'] = "Falha Temporária: Não foi possível adicionar Apelido para Spam.";
$lang['danger']['spam_alias_max_exceeded'] = "O número máximo de Apelidos para Spam foi excedido";
$lang['danger']['fetchmail_active'] = "O processo esta em andamento, aguarde o seu término."; $lang['danger']['fetchmail_active'] = "O processo esta em andamento, aguarde o seu término.";
$lang['danger']['validity_missing'] = 'Você deve definir um período de validade'; $lang['danger']['validity_missing'] = 'Você deve definir um período de validade';
$lang['user']['on'] = "On";
$lang['user']['off'] = "Off";
$lang['user']['user_change_fn'] = ""; $lang['user']['user_change_fn'] = "";
$lang['user']['user_settings'] = 'Configurações do usuário'; $lang['user']['user_settings'] = 'Configurações do usuário';
$lang['user']['mailbox_settings'] = 'Configrações da conta';
$lang['user']['mailbox_details'] = 'Detalhes da conta'; $lang['user']['mailbox_details'] = 'Detalhes da conta';
$lang['user']['change_password'] = 'Alterar senha'; $lang['user']['change_password'] = 'Alterar senha';
$lang['user']['new_password'] = 'Nova senha'; $lang['user']['new_password'] = 'Nova senha';
@ -95,10 +76,8 @@ $lang['user']['save_changes'] = 'Salvar';
$lang['user']['password_now'] = 'Senha atual (confirme a alteração)'; $lang['user']['password_now'] = 'Senha atual (confirme a alteração)';
$lang['user']['new_password_repeat'] = 'Confirmar senha (repetir)'; $lang['user']['new_password_repeat'] = 'Confirmar senha (repetir)';
$lang['user']['new_password_description'] = 'Requerido: mínimo de 6 characteres com letras e números.'; $lang['user']['new_password_description'] = 'Requerido: mínimo de 6 characteres com letras e números.';
$lang['user']['did_you_know'] = '<b>Você sabia?</b> Você pode usar tags no endereço de email ("conta+<b>privado</b>@example.com") para classificar as mensagens automaticamente para uma determinada pasta (exemplo: "privado").';
$lang['user']['spam_aliases'] = 'Apelidos temporários'; $lang['user']['spam_aliases'] = 'Apelidos temporários';
$lang['user']['alias'] = 'Apelido'; $lang['user']['alias'] = 'Apelido';
$lang['user']['aliases'] = 'Apelidos';
$lang['user']['aliases_send_as_all'] = 'Não verificar remetente para os domínios'; $lang['user']['aliases_send_as_all'] = 'Não verificar remetente para os domínios';
$lang['user']['alias_create_random'] = 'Gerar um apelido automaticamente'; $lang['user']['alias_create_random'] = 'Gerar um apelido automaticamente';
$lang['user']['alias_extend_all'] = 'Extender apelido por 1 hora'; $lang['user']['alias_extend_all'] = 'Extender apelido por 1 hora';
@ -134,39 +113,17 @@ $lang['user']['tls_policy_warning'] = '<strong>Aviso:</strong> Se você selecion
$lang['user']['tls_policy'] = 'Regras de Encryptação'; $lang['user']['tls_policy'] = 'Regras de Encryptação';
$lang['user']['tls_enforce_in'] = 'Forçar TLS na entrada'; $lang['user']['tls_enforce_in'] = 'Forçar TLS na entrada';
$lang['user']['tls_enforce_out'] = 'Forçar TLS na saída'; $lang['user']['tls_enforce_out'] = 'Forçar TLS na saída';
$lang['user']['misc_settings'] = 'Outras configurações';
$lang['user']['misc_delete_profile'] = 'Outras configurações';
$lang['user']['no_record'] = 'Nenhum registro'; $lang['user']['no_record'] = 'Nenhum registro';
$lang['start']['dashboard'] = '%s - Painel';
$lang['start']['start_rc'] = 'Webmail Roundcube';
$lang['start']['start_sogo'] = 'Abrir SOGo';
$lang['start']['mailcow_apps_detail'] = 'Use um mailcow app para acessar seus emails, calendário, contatos e outras informações.'; $lang['start']['mailcow_apps_detail'] = 'Use um mailcow app para acessar seus emails, calendário, contatos e outras informações.';
$lang['start']['mailcow_panel'] = 'Iniciar mailcow UI';
$lang['start']['mailcow_panel_description'] = 'O mailcow UI está disponível para Administradores e Usuários.';
$lang['start']['mailcow_panel_detail'] = '<b>Administradores:</b> podem criar, alterar ou apagar contas e apelidos , alterar domínios e outras informações de seus domínios atribuídos.<br> $lang['start']['mailcow_panel_detail'] = '<b>Administradores:</b> podem criar, alterar ou apagar contas e apelidos , alterar domínios e outras informações de seus domínios atribuídos.<br>
<b>Usuários:</b> podem criar apelidos por tempo determinado , alterar senha e configuração do nível do filtro de spam.'; <b>Usuários:</b> podem criar apelidos por tempo determinado , alterar senha e configuração do nível do filtro de spam.';
$lang['start']['recommended_config'] = 'Configuração recomendada (sem o ActiveSync)';
$lang['start']['imap_smtp_server'] = 'IMAP e SMTP server data';
$lang['start']['imap_smtp_server_description'] = 'Para uma melhor utilização use o <a href="%s" target="_blank"><b>Mozilla Thunderbird</b></a>.';
$lang['start']['imap_smtp_server_badge'] = 'Ler/Criar emails';
$lang['start']['imap_smtp_server_auth_info'] = 'Utilize o endereço de email completo com o método de autentucação PLAIN.<br> $lang['start']['imap_smtp_server_auth_info'] = 'Utilize o endereço de email completo com o método de autentucação PLAIN.<br>
Os dados de login serão encryptados pelo servidor.'; Os dados de login serão encryptados pelo servidor.';
$lang['start']['managesieve'] = 'ManageSieve';
$lang['start']['managesieve_badge'] = 'Filtro de email';
$lang['start']['managesieve_description'] = 'Utilize o <b>Mozilla Thunderbird</b> com a <a style="text-decoration:none" target="_blank" href="%s"><b>extensão para sieve</b></a>.<br>Inicie o Thunderbird, acesse os Complementos e solte o arquivo xpi que foi baixado, na janela aberta.<br>Preencha com o servidor <b>%s</b>, porta <b>4190</b> se for solicitado. Os dados de acesso são os mesmos da sua conta de email.';
$lang['start']['service'] = 'Serviço';
$lang['start']['encryption'] = 'Método de criptografia';
$lang['start']['help'] = 'Mostrar/Ocultar painel de ajuda'; $lang['start']['help'] = 'Mostrar/Ocultar painel de ajuda';
$lang['start']['hostname'] = 'Hostname';
$lang['start']['port'] = 'Porta';
$lang['start']['footer'] = 'Rodapé';
$lang['header']['mailcow_settings'] = 'Configuração'; $lang['header']['mailcow_settings'] = 'Configuração';
$lang['header']['administration'] = 'Administração'; $lang['header']['administration'] = 'Administração';
$lang['header']['mailboxes'] = 'Contas'; $lang['header']['mailboxes'] = 'Contas';
$lang['header']['user_settings'] = 'Configurações do usuário'; $lang['header']['user_settings'] = 'Configurações do usuário';
$lang['header']['login'] = 'Entrar';
$lang['header']['logged_in_as_logout'] = 'Olá <b>%s</b> (Clique para Sair)';
$lang['header']['locale'] = 'Idioma';
$lang['mailbox']['domain'] = 'Domínio'; $lang['mailbox']['domain'] = 'Domínio';
$lang['mailbox']['alias'] = 'Apelido'; $lang['mailbox']['alias'] = 'Apelido';
$lang['mailbox']['aliases'] = 'Apelidos'; $lang['mailbox']['aliases'] = 'Apelidos';
@ -176,7 +133,6 @@ $lang['mailbox']['mailbox_quota'] = 'Espaço máximo da Conta';
$lang['mailbox']['domain_quota'] = 'Espaço'; $lang['mailbox']['domain_quota'] = 'Espaço';
$lang['mailbox']['active'] = 'Ativo'; $lang['mailbox']['active'] = 'Ativo';
$lang['mailbox']['action'] = 'Ação'; $lang['mailbox']['action'] = 'Ação';
$lang['mailbox']['ratelimit'] = 'Limite de envios por hora';
$lang['mailbox']['backup_mx'] = 'Backup MX'; $lang['mailbox']['backup_mx'] = 'Backup MX';
$lang['mailbox']['domain_aliases'] = 'Encaminhamento de Domínio'; $lang['mailbox']['domain_aliases'] = 'Encaminhamento de Domínio';
$lang['mailbox']['target_domain'] = 'Domínio Destino'; $lang['mailbox']['target_domain'] = 'Domínio Destino';
@ -186,46 +142,27 @@ $lang['mailbox']['fname'] = 'Nome';
$lang['mailbox']['filter_table'] = 'Procurar'; $lang['mailbox']['filter_table'] = 'Procurar';
$lang['mailbox']['yes'] = '&#10004;'; $lang['mailbox']['yes'] = '&#10004;';
$lang['mailbox']['no'] = '&#10008;'; $lang['mailbox']['no'] = '&#10008;';
$lang['mailbox']['quota'] = 'Espaço';
$lang['mailbox']['in_use'] = 'Em uso (%)'; $lang['mailbox']['in_use'] = 'Em uso (%)';
$lang['mailbox']['msg_num'] = 'Mensagens'; $lang['mailbox']['msg_num'] = 'Mensagens';
$lang['mailbox']['remove'] = 'Remover'; $lang['mailbox']['remove'] = 'Remover';
$lang['mailbox']['edit'] = 'Alterar'; $lang['mailbox']['edit'] = 'Alterar';
$lang['mailbox']['archive'] = 'Arquivo';
$lang['mailbox']['no_record'] = 'Nenhum registro';
$lang['mailbox']['add_domain'] = 'Adicionar Domínio'; $lang['mailbox']['add_domain'] = 'Adicionar Domínio';
$lang['mailbox']['add_domain_alias'] = 'Adicionar Apelido de Domínio'; $lang['mailbox']['add_domain_alias'] = 'Adicionar Apelido de Domínio';
$lang['mailbox']['add_mailbox'] = 'Adicionar Conta de Email'; $lang['mailbox']['add_mailbox'] = 'Adicionar Conta de Email';
$lang['mailbox']['add_alias'] = 'Adicionar Apelido'; $lang['mailbox']['add_alias'] = 'Adicionar Apelido';
$lang['info']['no_action'] = 'Nenhuma ação foi definida'; $lang['info']['no_action'] = 'Nenhuma ação foi definida';
$lang['delete']['title'] = 'Remover objeto';
$lang['delete']['remove_domain_warning'] = '<b>Aviso:</b> Você está prestes a remover o Domínio <b>%s</b>!';
$lang['delete']['remove_domainalias_warning'] = '<b>Aviso:</b> Você está prestes a remover o Encaminhamento de Domínio <b>%s</b>!';
$lang['delete']['remove_domainadmin_warning'] = '<b>Aviso:</b> Você está prestes a remover o Administrador <b>%s</b>!';
$lang['delete']['remove_alias_warning'] = '<b>Aviso:</b> Você está prestes a remover o Apelido <b>%s</b>!';
$lang['delete']['remove_mailbox_warning'] = '<b>Aviso:</b> Você está prestes a remover a Conta <b>%s</b>!';
$lang['delete']['remove_mailbox_details'] = 'A Conta será <b>excluída permanentemente</b>!';
$lang['delete']['remove_domain_details'] = 'Esse procedimento removerá o Encaminhamento de Domínio.<br><br><b>O Domínio deve estar sem nenhuma configuração para ser removido.</b>';
$lang['delete']['remove_alias_details'] = 'Os usuários não poderão mais enviar ou receber emails através deste endereço.</b>';
$lang['delete']['remove_button'] = 'Remover';
$lang['delete']['previous'] = 'Voltar';
$lang['edit']['save'] = 'Salvar'; $lang['edit']['save'] = 'Salvar';
$lang['edit']['archive'] = 'Acesso ao arquivo';
$lang['edit']['max_mailboxes'] = 'Máximo de contas:'; $lang['edit']['max_mailboxes'] = 'Máximo de contas:';
$lang['edit']['title'] = 'Editar dos Objetos'; $lang['edit']['title'] = 'Editar dos Objetos';
$lang['edit']['target_address'] = 'Enviar para os emails <small>(separar por vírgula)</small>:'; $lang['edit']['target_address'] = 'Enviar para os emails <small>(separar por vírgula)</small>:';
$lang['edit']['active'] = 'Ativo'; $lang['edit']['active'] = 'Ativo';
$lang['edit']['target_domain'] = 'Domínio de Destino:'; $lang['edit']['target_domain'] = 'Domínio de Destino:';
$lang['edit']['password'] = 'Senha:'; $lang['edit']['password'] = 'Senha:';
$lang['edit']['ratelimit'] = 'Volume de envios por hora:';
$lang['danger']['ratelimt_less_one'] = 'Limite da taxa de saída por hora não pode ser inferior a 1';
$lang['edit']['password_repeat'] = 'Confirmar senha (repetir):'; $lang['edit']['password_repeat'] = 'Confirmar senha (repetir):';
$lang['edit']['domain_admin'] = 'Editar administrador de domínio'; $lang['edit']['domain_admin'] = 'Editar administrador de domínio';
$lang['edit']['domain'] = 'Editar domínio'; $lang['edit']['domain'] = 'Editar domínio';
$lang['edit']['alias_domain'] = 'Encaminhar domínio';
$lang['edit']['edit_alias_domain'] = 'Editar encaminhamento de domínio'; $lang['edit']['edit_alias_domain'] = 'Editar encaminhamento de domínio';
$lang['edit']['domains'] = 'Domínios'; $lang['edit']['domains'] = 'Domínios';
$lang['edit']['destroy'] = 'Inserir manualmente';
$lang['edit']['alias'] = 'Editar apelido'; $lang['edit']['alias'] = 'Editar apelido';
$lang['edit']['mailbox'] = 'Editar conta'; $lang['edit']['mailbox'] = 'Editar conta';
$lang['edit']['description'] = 'Descrição:'; $lang['edit']['description'] = 'Descrição:';
@ -235,22 +172,15 @@ $lang['edit']['domain_quota'] = 'Espaço do domínio:';
$lang['edit']['backup_mx_options'] = 'Opções de Backup MX:'; $lang['edit']['backup_mx_options'] = 'Opções de Backup MX:';
$lang['edit']['relay_domain'] = 'Relay de domínio'; $lang['edit']['relay_domain'] = 'Relay de domínio';
$lang['edit']['relay_all'] = 'Relay para todas as contas'; $lang['edit']['relay_all'] = 'Relay para todas as contas';
$lang['edit']['dkim_signature'] = 'Assinatura ARC + DKIM:';
$lang['edit']['dkim_record_info'] = '<small>Adicione um registro TXT com o mesmo a mesma configuração dos registros DNS.</small>';
$lang['edit']['relay_all_info'] = '<small>Se você escolher <b>não</b> direcionar todas as contas de email, você deve adicionar um ("blind") para cada uma das contas.</small>'; $lang['edit']['relay_all_info'] = '<small>Se você escolher <b>não</b> direcionar todas as contas de email, você deve adicionar um ("blind") para cada uma das contas.</small>';
$lang['edit']['full_name'] = 'Nome completo'; $lang['edit']['full_name'] = 'Nome completo';
$lang['edit']['quota_mb'] = 'Espaço (MiB)'; $lang['edit']['quota_mb'] = 'Espaço (MiB)';
$lang['edit']['sender_acl'] = 'Permitir Enviar como'; $lang['edit']['sender_acl'] = 'Permitir Enviar como';
$lang['edit']['sender_acl_info'] = 'Apelidos não podem ser removidos.';
$lang['edit']['dkim_txt_name'] = 'Nome do registro TXT:';
$lang['edit']['dkim_txt_value'] = 'Valor do registro TXT:';
$lang['edit']['previous'] = 'Voltar'; $lang['edit']['previous'] = 'Voltar';
$lang['edit']['unchanged_if_empty'] = 'Deixar em branco para não modificar'; $lang['edit']['unchanged_if_empty'] = 'Deixar em branco para não modificar';
$lang['edit']['dont_check_sender_acl'] = 'Não verificar o remetente para o domínio %s'; $lang['edit']['dont_check_sender_acl'] = 'Não verificar o remetente para o domínio %s';
$lang['add']['title'] = 'Adicionar objeto';
$lang['add']['domain'] = 'Domínio'; $lang['add']['domain'] = 'Domínio';
$lang['add']['active'] = 'Ativo'; $lang['add']['active'] = 'Ativo';
$lang['add']['save'] = 'Salvar';
$lang['add']['description'] = 'Descrição:'; $lang['add']['description'] = 'Descrição:';
$lang['add']['max_aliases'] = 'Máximo de apelidos:'; $lang['add']['max_aliases'] = 'Máximo de apelidos:';
$lang['add']['max_mailboxes'] = 'Máximo de contas:'; $lang['add']['max_mailboxes'] = 'Máximo de contas:';
@ -260,8 +190,6 @@ $lang['add']['backup_mx_options'] = 'Opções Backup MX:';
$lang['add']['relay_all'] = 'Relay para todas as contas'; $lang['add']['relay_all'] = 'Relay para todas as contas';
$lang['add']['relay_domain'] = 'Relay para todo domínio'; $lang['add']['relay_domain'] = 'Relay para todo domínio';
$lang['add']['relay_all_info'] = '<small>Se <b>não</b> selecionar para retransmitir todas as contas, você deve adicionar uma ("blind") para cada conta que será direcionada.</small>'; $lang['add']['relay_all_info'] = '<small>Se <b>não</b> selecionar para retransmitir todas as contas, você deve adicionar uma ("blind") para cada conta que será direcionada.</small>';
$lang['add']['alias'] = 'Apelido(s)';
$lang['add']['alias_spf_fail'] = '<b>Aviso:</b> Se você escolher uma conta externa, o <b>servidor externo</b> poderá rejeitar algumas mensagens por erro de SPF.</a>';
$lang['add']['alias_address'] = 'Apelidos:'; $lang['add']['alias_address'] = 'Apelidos:';
$lang['add']['alias_address_info'] = '<small>Endereço de email completo ou @example.com, para uma conta coringa -catch all. (separado por vírgula). <b>apenas domínios cadastrados</b>.</small>'; $lang['add']['alias_address_info'] = '<small>Endereço de email completo ou @example.com, para uma conta coringa -catch all. (separado por vírgula). <b>apenas domínios cadastrados</b>.</small>';
$lang['add']['alias_domain_info'] = '<small>Domínios válidos apenas (separado por vírgulas).</small>'; $lang['add']['alias_domain_info'] = '<small>Domínios válidos apenas (separado por vírgulas).</small>';
@ -270,25 +198,16 @@ $lang['add']['target_address_info'] = '<small>Endereço de email completo (separ
$lang['add']['alias_domain'] = 'Encaminhamento de Domínio'; $lang['add']['alias_domain'] = 'Encaminhamento de Domínio';
$lang['add']['select'] = 'Selecione...'; $lang['add']['select'] = 'Selecione...';
$lang['add']['target_domain'] = 'Domínio de Destino:'; $lang['add']['target_domain'] = 'Domínio de Destino:';
$lang['add']['mailbox'] = 'Conta';
$lang['add']['mailbox_username'] = 'Usuário (primeira parte do endereço de email):'; $lang['add']['mailbox_username'] = 'Usuário (primeira parte do endereço de email):';
$lang['add']['full_name'] = 'Nome:'; $lang['add']['full_name'] = 'Nome:';
$lang['add']['quota_mb'] = 'Espaço (MiB):'; $lang['add']['quota_mb'] = 'Espaço (MiB):';
$lang['add']['select_domain'] = 'Selecione um domínio antes'; $lang['add']['select_domain'] = 'Selecione um domínio antes';
$lang['add']['password'] = 'Senha:'; $lang['add']['password'] = 'Senha:';
$lang['add']['password_repeat'] = 'Confirmar a senha (repetir):'; $lang['add']['password_repeat'] = 'Confirmar a senha (repetir):';
$lang['add']['previous'] = 'Voltar';
$lang['add']['port'] = 'Port'; $lang['add']['port'] = 'Port';
$lang['login']['title'] = 'Entrar';
$lang['login']['administration'] = 'Administração';
$lang['login']['administration_details'] = 'Utilize o login de Administrador para efetuar tarefas de administração.';
$lang['login']['user_settings'] = 'Configuração do usuário';
$lang['login']['user_settings_details'] = 'Usuários podem utilizar o mailcow UI para alterar suas senhas, criar apelidos temporários (Apelido Anti-Spam), adjustar a sensibilidade do filtro the spam ou importar mensagens de um servidor IMAP.';
$lang['login']['username'] = 'Usuário'; $lang['login']['username'] = 'Usuário';
$lang['login']['password'] = 'Senha'; $lang['login']['password'] = 'Senha';
$lang['login']['reset_password'] = 'Esqueci minha senha';
$lang['login']['login'] = 'Entrar'; $lang['login']['login'] = 'Entrar';
$lang['login']['previous'] = "Voltar";
$lang['login']['delayed'] = 'Sua entrada será atrasada por %s segundos.'; $lang['login']['delayed'] = 'Sua entrada será atrasada por %s segundos.';
$lang['login']['tfa'] = "Autenticação em duas etapas"; $lang['login']['tfa'] = "Autenticação em duas etapas";
$lang['login']['tfa_details'] = "Confirme sua senha no campo abaixo"; $lang['login']['tfa_details'] = "Confirme sua senha no campo abaixo";
@ -296,36 +215,11 @@ $lang['login']['confirm'] = "Confirmar";
$lang['login']['otp'] = "Senha única"; $lang['login']['otp'] = "Senha única";
$lang['login']['trash_login'] = "Tentativas de entrada"; $lang['login']['trash_login'] = "Tentativas de entrada";
$lang['admin']['search_domain_da'] = 'Selecione o(s) domínio(s)'; $lang['admin']['search_domain_da'] = 'Selecione o(s) domínio(s)';
$lang['admin']['restrictions'] = 'Postfix Restrictions';
$lang['admin']['rr'] = 'Postfix Recipient Restrictions';
$lang['admin']['sr'] = 'Postfix Sender Restrictions';
$lang['admin']['reset_defaults'] = 'Voltar configuração padrão';
$lang['admin']['sr'] = 'Postfix Sender Restrictions';
$lang['admin']['r_inactive'] = 'Restrictions Inativos'; $lang['admin']['r_inactive'] = 'Restrictions Inativos';
$lang['admin']['r_active'] = 'Restrictions Ativos'; $lang['admin']['r_active'] = 'Restrictions Ativos';
$lang['admin']['r_info'] = 'Greyed out/disabled elements on the list of active restrictions are not known as valid restrictions to mailcow and cannot be moved. Unknown restrictions will be set in order of appearance anyway. <br>You can add new elements in <code>inc/vars.local.inc.php</code> to be able to toggle them.'; $lang['admin']['r_info'] = 'Greyed out/disabled elements on the list of active restrictions are not known as valid restrictions to mailcow and cannot be moved. Unknown restrictions will be set in order of appearance anyway. <br>You can add new elements in <code>inc/vars.local.inc.php</code> to be able to toggle them.';
$lang['admin']['public_folders'] = 'Pastas públicas';
$lang['admin']['public_folders_text'] = 'A pasta "Public" esta criada. Abaixo a pasta pública indica o nome da primeira pasta criada automaticamente na conta, com este nome.';
$lang['admin']['public_folder_name'] = 'Nome da Pasta <small>(alfa numérico)</small>';
$lang['admin']['public_folder_enable'] = 'Habilitar Pasta Pública';
$lang['admin']['public_folder_enable_text'] = 'Ao alterar esta configuração os emails das pastas públicas não serão apagados.';
$lang['admin']['public_folder_pusf'] = 'Habilitar visualização por usuário';
$lang['admin']['public_folder_pusf_text'] = 'A "per-user seen flag"-enabled system will not mark a mail as read for User B, when User A has seen it, but User B did not.';
$lang['admin']['privacy'] = 'Privacidade';
$lang['admin']['privacy_text'] = 'Esta opção habilita a tabela PCRE para remover "User-Agent", "X-Enigmail", "X-Mailer", "X-Originating-IP" e substitui pelo Header "Received: from" localhost/127.0.0.1.';
$lang['admin']['privacy_anon_mail'] = 'Limpar o Cabeçalho dos emails de saída';
$lang['admin']['dkim_txt_name'] = 'Registro TXT:';
$lang['admin']['dkim_txt_value'] = 'Valor do TXT:';
$lang['admin']['dkim_key_length'] = 'Tamanho do registro DKIM (bits)'; $lang['admin']['dkim_key_length'] = 'Tamanho do registro DKIM (bits)';
$lang['admin']['previous'] = 'Voltar';
$lang['admin']['quota_mb'] = 'Espaço (MiB):';
$lang['admin']['sender_acl'] = 'Permitir Enviar como:';
$lang['admin']['msg_size'] = 'Tamanho da mensagem';
$lang['admin']['msg_size_limit'] = 'Tamanho limite de mensagem atual';
$lang['admin']['msg_size_limit_details'] = 'Ao aplicar um novo limite os Serviços de Email e Web serão reiniciados.';
$lang['admin']['save'] = 'Salvar'; $lang['admin']['save'] = 'Salvar';
$lang['admin']['maintenance'] = 'Manutenção e Informação';
$lang['admin']['sys_info'] = 'Informações de Sistema';
$lang['admin']['dkim_add_key'] = 'Adicionar registro ARC/DKIM'; $lang['admin']['dkim_add_key'] = 'Adicionar registro ARC/DKIM';
$lang['admin']['dkim_keys'] = 'Registro ARC/DKIM'; $lang['admin']['dkim_keys'] = 'Registro ARC/DKIM';
$lang['admin']['add'] = 'Salvar'; $lang['admin']['add'] = 'Salvar';
@ -347,8 +241,4 @@ $lang['admin']['unchanged_if_empty'] = 'Deixar em branco para não alterar';
$lang['admin']['yes'] = '&#10004;'; $lang['admin']['yes'] = '&#10004;';
$lang['admin']['no'] = '&#10008;'; $lang['admin']['no'] = '&#10008;';
$lang['admin']['access'] = 'Acessos'; $lang['admin']['access'] = 'Acessos';
$lang['admin']['invalid_max_msg_size'] = 'Tamanho máximo da mensagem inválido';
$lang['admin']['site_not_found'] = 'Não foi possível localizar as configuração do painel mailcow';
$lang['admin']['public_folder_empty'] = 'O nome da Pasta Pública deve ser preenchido';
$lang['admin']['set_rr_failed'] = 'Não foi possível alterar Postfix Restrictions';
$lang['admin']['no_record'] = 'Nenhum registro'; $lang['admin']['no_record'] = 'Nenhum registro';

View File

@ -14,12 +14,7 @@ $lang['footer']['delete_these_items'] = 'Пожалуйста, подтверд
$lang['footer']['delete_now'] = 'Удалить'; $lang['footer']['delete_now'] = 'Удалить';
$lang['footer']['cancel'] = 'Отмена'; $lang['footer']['cancel'] = 'Отмена';
$lang['dkim']['confirm'] = "Вы уверены?";
$lang['danger']['dkim_not_found'] = "DKIM ключ не найден";
$lang['danger']['dkim_remove_failed'] = "Не удается удалить выбранный DKIM ключ";
$lang['danger']['dkim_add_failed'] = "Невозможно добавить данный DKIM ключ";
$lang['danger']['dkim_domain_or_sel_invalid'] = "DKIM домен или селектор недопустимы"; $lang['danger']['dkim_domain_or_sel_invalid'] = "DKIM домен или селектор недопустимы";
$lang['danger']['dkim_key_length_invalid'] = "Недопустимая длина DKIM ключа";
$lang['success']['dkim_removed'] = "DKIM ключ %s удален"; $lang['success']['dkim_removed'] = "DKIM ключ %s удален";
$lang['success']['dkim_added'] = "DKIM ключ сохранен"; $lang['success']['dkim_added'] = "DKIM ключ сохранен";
$lang['danger']['access_denied'] = "Доступ запрещен или указаны неверные данные"; $lang['danger']['access_denied'] = "Доступ запрещен или указаны неверные данные";
@ -33,8 +28,6 @@ $lang['danger']['last_key'] = 'Нельзя удалить последний к
$lang['danger']['goto_empty'] = "Основной адрес не может быть пустым"; $lang['danger']['goto_empty'] = "Основной адрес не может быть пустым";
$lang['danger']['policy_list_from_exists'] = "Запись с указанным именем уже существует"; $lang['danger']['policy_list_from_exists'] = "Запись с указанным именем уже существует";
$lang['danger']['policy_list_from_invalid'] = "Запись имеет недопустимый формат"; $lang['danger']['policy_list_from_invalid'] = "Запись имеет недопустимый формат";
$lang['danger']['whitelist_exists'] = "Указанная запись уже существует в белом списке";
$lang['danger']['whitelist_from_invalid'] = "Запись белого списка имеет неверный формат";
$lang['danger']['alias_invalid'] = "Недопустимый псевдоним адрес"; $lang['danger']['alias_invalid'] = "Недопустимый псевдоним адрес";
$lang['danger']['goto_invalid'] = "Недопустимый основной адрес"; $lang['danger']['goto_invalid'] = "Недопустимый основной адрес";
$lang['danger']['alias_domain_invalid'] = "Недопустимый псевдоним домена"; $lang['danger']['alias_domain_invalid'] = "Недопустимый псевдоним домена";
@ -50,19 +43,13 @@ $lang['success']['mailbox_modified'] = "Изменения почтового я
$lang['success']['resource_modified'] = "Изменения почтового ящика %s сохранены"; $lang['success']['resource_modified'] = "Изменения почтового ящика %s сохранены";
$lang['success']['object_modified'] = "Изменения объекта %s сохранены"; $lang['success']['object_modified'] = "Изменения объекта %s сохранены";
$lang['success']['f2b_modified'] = "Изменения параметров Fail2ban сохранены"; $lang['success']['f2b_modified'] = "Изменения параметров Fail2ban сохранены";
$lang['success']['msg_size_saved'] = "Установить ограничение на размер сообщения";
$lang['danger']['aliasd_not_found'] = "Псевдоним домена не найден";
$lang['danger']['targetd_not_found'] = "Основной домен не найден"; $lang['danger']['targetd_not_found'] = "Основной домен не найден";
$lang['danger']['aliasd_exists'] = "Псевдоним домена уже существует";
$lang['success']['aliasd_added'] = "Добавлен псевдоним домена %s"; $lang['success']['aliasd_added'] = "Добавлен псевдоним домена %s";
$lang['success']['aliasd_modified'] = "Сохранить изменения псевдонима домена %s"; $lang['success']['aliasd_modified'] = "Сохранить изменения псевдонима домена %s";
$lang['success']['domain_modified'] = "Сохранить изменения домена %s"; $lang['success']['domain_modified'] = "Сохранить изменения домена %s";
$lang['success']['domain_admin_modified'] = "Сохранить изменения администратора домена %s"; $lang['success']['domain_admin_modified'] = "Сохранить изменения администратора домена %s";
$lang['success']['domain_admin_added'] = "Администратор домена %s добавлен"; $lang['success']['domain_admin_added'] = "Администратор домена %s добавлен";
$lang['success']['changes_general'] = 'Изменения сохранены';
$lang['success']['admin_modified'] = "Изменения администратора домена сохранены"; $lang['success']['admin_modified'] = "Изменения администратора домена сохранены";
$lang['danger']['exit_code_not_null'] = "Ошибка: Код ошибки %d";
$lang['danger']['mailbox_not_available'] = "Почтовый ящик недоступен";
$lang['danger']['username_invalid'] = "Нельзя использовать это имя пользователя"; $lang['danger']['username_invalid'] = "Нельзя использовать это имя пользователя";
$lang['danger']['password_mismatch'] = "Введенные пароли не совпадают"; $lang['danger']['password_mismatch'] = "Введенные пароли не совпадают";
$lang['danger']['password_complexity'] = "Пароль не соответствует требованиям"; $lang['danger']['password_complexity'] = "Пароль не соответствует требованиям";
@ -71,7 +58,6 @@ $lang['danger']['login_failed'] = "Введен неверный логин ил
$lang['danger']['mailbox_invalid'] = "Недопустимый адрес почтового ящика"; $lang['danger']['mailbox_invalid'] = "Недопустимый адрес почтового ящика";
$lang['danger']['description_invalid'] = 'Недопустимое описание ресурса'; $lang['danger']['description_invalid'] = 'Недопустимое описание ресурса';
$lang['danger']['resource_invalid'] = "Недопустимое имя ресурса"; $lang['danger']['resource_invalid'] = "Недопустимое имя ресурса";
$lang['danger']['mailbox_invalid_suggest'] = 'Недопустимое имя почтового ящика, возможно вы имели в виду "%s"?';
$lang['danger']['is_alias'] = "%s уже известен как псевдоним адреса"; $lang['danger']['is_alias'] = "%s уже известен как псевдоним адреса";
$lang['danger']['is_alias_or_mailbox'] = "%s уже известен как псевдоним или почтовый ящик"; $lang['danger']['is_alias_or_mailbox'] = "%s уже известен как псевдоним или почтовый ящик";
$lang['danger']['is_spam_alias'] = "%s уже известен как временный адрес псевдонима"; $lang['danger']['is_spam_alias'] = "%s уже известен как временный адрес псевдонима";
@ -96,16 +82,11 @@ $lang['danger']['mailboxes_in_use'] = "Максимальный лимит по
$lang['danger']['aliases_in_use'] = "Максимальный лимит псевдоним адресов должен быть больше или равен %d"; $lang['danger']['aliases_in_use'] = "Максимальный лимит псевдоним адресов должен быть больше или равен %d";
$lang['danger']['sender_acl_invalid'] = "Недопустимое значение ACL отправителя"; $lang['danger']['sender_acl_invalid'] = "Недопустимое значение ACL отправителя";
$lang['danger']['domain_not_empty'] = "Нельзя удалить непустой домен"; $lang['danger']['domain_not_empty'] = "Нельзя удалить непустой домен";
$lang['warning']['spam_alias_temp_error'] = "Временная ошибка: не удается добавить временный псевдоним адрес, пожалуйста, попробуйте еще раз позже.";
$lang['danger']['spam_alias_max_exceeded'] = "Превышение максимально разрешенных временных псевдоним адресов";
$lang['danger']['validity_missing'] = 'Пожалуйста, назначьте срок действия'; $lang['danger']['validity_missing'] = 'Пожалуйста, назначьте срок действия';
$lang['user']['on'] = "Вкл.";
$lang['user']['off'] = "Выкл.";
$lang['user']['messages'] = "письма"; // "123 messages" $lang['user']['messages'] = "письма"; // "123 messages"
$lang['user']['in_use'] = "Используется"; $lang['user']['in_use'] = "Используется";
$lang['user']['user_change_fn'] = ""; $lang['user']['user_change_fn'] = "";
$lang['user']['user_settings'] = 'Настройки пользователя'; $lang['user']['user_settings'] = 'Настройки пользователя';
$lang['user']['mailbox_settings'] = 'Настройки почтового ящика';
$lang['user']['mailbox_details'] = 'Сведения о почтовом ящике'; $lang['user']['mailbox_details'] = 'Сведения о почтовом ящике';
$lang['user']['change_password'] = 'Смена пароля'; $lang['user']['change_password'] = 'Смена пароля';
$lang['user']['client_configuration'] = 'Конфигурации для клиентов электронной почты и смартфонов'; $lang['user']['client_configuration'] = 'Конфигурации для клиентов электронной почты и смартфонов';
@ -114,11 +95,8 @@ $lang['user']['save_changes'] = 'Сохранить изменения';
$lang['user']['password_now'] = 'Текущий пароль (подтверждение изменения)'; $lang['user']['password_now'] = 'Текущий пароль (подтверждение изменения)';
$lang['user']['new_password_repeat'] = 'Подтверждение пароля (повтор)'; $lang['user']['new_password_repeat'] = 'Подтверждение пароля (повтор)';
$lang['user']['new_password_description'] = 'Требование: 6 символов, букв и цифр.'; $lang['user']['new_password_description'] = 'Требование: 6 символов, букв и цифр.';
$lang['user']['did_you_know'] = '<b>Знаете ли вы?</b> Вы можете использовать теги в вашем адресе электронной почты ("news+<b>my</b>@example.com") для автоматического перемещения сообщений в папку (пример: "news").';
$lang['user']['spam_aliases'] = 'Временные псевдонимы электронной почты'; $lang['user']['spam_aliases'] = 'Временные псевдонимы электронной почты';
$lang['user']['alias'] = 'Псевдоним'; $lang['user']['alias'] = 'Псевдоним';
$lang['user']['aliases'] = 'Псевдонимы';
$lang['user']['domain_aliases'] = 'Адреса псевдонимов домена';
$lang['user']['is_catch_all'] = 'Catch-all для домена'; $lang['user']['is_catch_all'] = 'Catch-all для домена';
$lang['user']['aliases_also_send_as'] = 'Также разрешено отправлять как пользователь'; $lang['user']['aliases_also_send_as'] = 'Также разрешено отправлять как пользователь';
$lang['user']['aliases_send_as_all'] = 'Не проверять доступ отправителя для следующих доменов и псевдонимов домена'; $lang['user']['aliases_send_as_all'] = 'Не проверять доступ отправителя для следующих доменов и псевдонимов домена';
@ -128,7 +106,6 @@ $lang['user']['alias_valid_until'] = 'Действителен до';
$lang['user']['alias_remove_all'] = 'Удалить все псевдоним адреса'; $lang['user']['alias_remove_all'] = 'Удалить все псевдоним адреса';
$lang['user']['alias_time_left'] = 'Осталось времени'; $lang['user']['alias_time_left'] = 'Осталось времени';
$lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T'; $lang['user']['alias_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['syncjob_full_date'] = 'd.m.Y, H:i:s T';
$lang['user']['alias_select_validity'] = 'Период действия'; $lang['user']['alias_select_validity'] = 'Период действия';
$lang['user']['sync_jobs'] = 'Задания синхронизации'; $lang['user']['sync_jobs'] = 'Задания синхронизации';
$lang['user']['hour'] = 'Час'; $lang['user']['hour'] = 'Час';
@ -161,8 +138,6 @@ $lang['user']['tls_enforce_in'] = 'Принудительное TLS входящ
$lang['user']['tls_enforce_out'] = 'Принудительное TLS исходящих'; $lang['user']['tls_enforce_out'] = 'Принудительное TLS исходящих';
$lang['user']['no_record'] = 'Нет записи'; $lang['user']['no_record'] = 'Нет записи';
$lang['user']['misc_settings'] = 'Другие настройки профиля';
$lang['user']['misc_delete_profile'] = 'Другие настройки профиля';
$lang['user']['tag_handling'] = 'Set handling for tagged mail'; $lang['user']['tag_handling'] = 'Set handling for tagged mail';
$lang['user']['tag_in_subfolder'] = 'В подпапку'; $lang['user']['tag_in_subfolder'] = 'В подпапку';
@ -177,7 +152,6 @@ $lang['user']['eas_reset_help'] = 'In many cases a device cache reset will help
$lang['user']['encryption'] = 'Шифрование'; $lang['user']['encryption'] = 'Шифрование';
$lang['user']['username'] = 'Имя пользователя'; $lang['user']['username'] = 'Имя пользователя';
$lang['user']['password'] = 'Пароль';
$lang['user']['last_run'] = 'Последний запуск'; $lang['user']['last_run'] = 'Последний запуск';
$lang['user']['excludes'] = 'Исключает'; $lang['user']['excludes'] = 'Исключает';
$lang['user']['interval'] = 'Интервал'; $lang['user']['interval'] = 'Интервал';
@ -185,45 +159,22 @@ $lang['user']['active'] = 'Активный';
$lang['user']['action'] = 'Действия'; $lang['user']['action'] = 'Действия';
$lang['user']['edit'] = 'Изменить'; $lang['user']['edit'] = 'Изменить';
$lang['user']['remove'] = 'Удалить'; $lang['user']['remove'] = 'Удалить';
$lang['user']['delete_now'] = 'Удалить сейчас';
$lang['user']['create_syncjob'] = 'Создание нового задания синхронизации'; $lang['user']['create_syncjob'] = 'Создание нового задания синхронизации';
$lang['start']['dashboard'] = '%s - панель';
$lang['start']['start_rc'] = 'Открыть Roundcube';
$lang['start']['start_sogo'] = 'Открыть SOGo';
$lang['start']['mailcow_apps_detail'] = 'Используйте приложения для доступа к вашей почте, календарю, контактам и многое другое.'; $lang['start']['mailcow_apps_detail'] = 'Используйте приложения для доступа к вашей почте, календарю, контактам и многое другое.';
$lang['start']['mailcow_panel'] = 'Открыть пользовательский интерфейс mailcow';
$lang['start']['mailcow_panel_description'] = 'Пользовательский интерфейс mailcow доступен для администраторов и пользователей почтовых ящиков.';
$lang['start']['mailcow_panel_detail'] = '<b>Администраторы домена</b> создавать, изменять или удалять почтовые ящики и псевдонимы, изменение доменов и смотреть информацию о своих назначенных доменов. <br><b>Пользователи почтовых ящиков</b> имеют возможность создавать временные псевдонимы (спам псевдонимы), менять свой пароль и настройки фильтра спама.'; $lang['start']['mailcow_panel_detail'] = '<b>Администраторы домена</b> создавать, изменять или удалять почтовые ящики и псевдонимы, изменение доменов и смотреть информацию о своих назначенных доменов. <br><b>Пользователи почтовых ящиков</b> имеют возможность создавать временные псевдонимы (спам псевдонимы), менять свой пароль и настройки фильтра спама.';
$lang['start']['recommended_config'] = 'Рекомендуемая конфигурация (без ActiveSync)';
$lang['start']['imap_smtp_server'] = 'Данные сервера IMAP и SMTP';
$lang['start']['imap_smtp_server_description'] = 'Для получения наилучших результатов мы рекомендуем использовать <a href="%s" target="_blank"> <b>Mozilla Thunderbird</b></a>.';
$lang['start']['imap_smtp_server_badge'] = 'Read/Write emails';
$lang['start']['imap_smtp_server_auth_info'] = 'Пожалуйста, используйте ваш полный адрес электронной почты и механизма обычной проверки подлинности. <br>Ваши регистрационные данные будут зашифрованы на стороне сервера обязательного шифрования.';
$lang['start']['managesieve'] = 'ManageSieve';
$lang['start']['managesieve_badge'] = 'Фильтр почты';
$lang['start']['managesieve_description'] = 'Please use <b>Mozilla Thunderbird</b> with the <a style="text-decoration:none" target="_blank" href="%s"><b>nightly sieve extension</b></a>.<br>Start Thunderbird, open the add-on settings and drop the newly downloaded xpi file into the opened window.<br>The server name is <b>%s</b>, use port <b>4190</b> if you are asked for. The login data match your email login.';
$lang['start']['service'] = 'Сервисы';
$lang['start']['encryption'] = 'Метод шифрования';
$lang['start']['help'] = 'Справка'; $lang['start']['help'] = 'Справка';
$lang['start']['hostname'] = 'Имя хоста';
$lang['start']['port'] = 'Порт';
$lang['start']['footer'] = '';
$lang['header']['mailcow_settings'] = 'Конфигурация'; $lang['header']['mailcow_settings'] = 'Конфигурация';
$lang['header']['administration'] = 'Администрирование'; $lang['header']['administration'] = 'Администрирование';
$lang['header']['mailboxes'] = 'Почтовые ящики'; $lang['header']['mailboxes'] = 'Почтовые ящики';
$lang['header']['user_settings'] = 'Настройки пользователя'; $lang['header']['user_settings'] = 'Настройки пользователя';
$lang['header']['login'] = 'Логин';
$lang['header']['logged_in_as_logout'] = 'Вы вошли как <b>%s</b> (выйти)';
$lang['header']['logged_in_as_logout_dual'] = 'Вы вошли как <b>%s <span class="text-info">[%s]</span></b>'; $lang['header']['logged_in_as_logout_dual'] = 'Вы вошли как <b>%s <span class="text-info">[%s]</span></b>';
$lang['header']['locale'] = 'Язык';
$lang['mailbox']['domain'] = 'Домен'; $lang['mailbox']['domain'] = 'Домен';
$lang['mailbox']['spam_aliases'] = 'Временный псевдоним'; $lang['mailbox']['spam_aliases'] = 'Временный псевдоним';
$lang['mailbox']['multiple_bookings'] = 'Multiple bookings'; $lang['mailbox']['multiple_bookings'] = 'Multiple bookings';
$lang['mailbox']['kind'] = 'Вид'; $lang['mailbox']['kind'] = 'Вид';
$lang['mailbox']['description'] = 'Описание'; $lang['mailbox']['description'] = 'Описание';
$lang['mailbox']['alias'] = 'Псевдоним'; $lang['mailbox']['alias'] = 'Псевдоним';
$lang['mailbox']['resource_name'] = 'Название ресурса';
$lang['mailbox']['aliases'] = 'Псевдонимы'; $lang['mailbox']['aliases'] = 'Псевдонимы';
$lang['mailbox']['domains'] = 'Домены'; $lang['mailbox']['domains'] = 'Домены';
$lang['mailbox']['mailboxes'] = 'Почтовые ящики'; $lang['mailbox']['mailboxes'] = 'Почтовые ящики';
@ -232,7 +183,6 @@ $lang['mailbox']['mailbox_quota'] = 'Максимальный размер по
$lang['mailbox']['domain_quota'] = 'Квота'; $lang['mailbox']['domain_quota'] = 'Квота';
$lang['mailbox']['active'] = 'Активный'; $lang['mailbox']['active'] = 'Активный';
$lang['mailbox']['action'] = 'Действия'; $lang['mailbox']['action'] = 'Действия';
$lang['mailbox']['ratelimit'] = 'Outgoing rate limit/h';
$lang['mailbox']['backup_mx'] = 'Резервное копирование MX'; $lang['mailbox']['backup_mx'] = 'Резервное копирование MX';
$lang['mailbox']['domain_aliases'] = 'Псевдонимы доменов'; $lang['mailbox']['domain_aliases'] = 'Псевдонимы доменов';
$lang['mailbox']['target_domain'] = 'Целевой домен'; $lang['mailbox']['target_domain'] = 'Целевой домен';
@ -242,20 +192,15 @@ $lang['mailbox']['fname'] = 'Полное имя';
$lang['mailbox']['filter_table'] = 'Поиск'; $lang['mailbox']['filter_table'] = 'Поиск';
$lang['mailbox']['yes'] = '&#10004;'; $lang['mailbox']['yes'] = '&#10004;';
$lang['mailbox']['no'] = '&#10008;'; $lang['mailbox']['no'] = '&#10008;';
$lang['mailbox']['quota'] = 'Квота';
$lang['mailbox']['in_use'] = 'Использовано (%)'; $lang['mailbox']['in_use'] = 'Использовано (%)';
$lang['mailbox']['msg_num'] = 'Письма #'; $lang['mailbox']['msg_num'] = 'Письма #';
$lang['mailbox']['remove'] = 'Удалить'; $lang['mailbox']['remove'] = 'Удалить';
$lang['mailbox']['edit'] = 'Изменить'; $lang['mailbox']['edit'] = 'Изменить';
$lang['mailbox']['archive'] = 'Архив';
$lang['mailbox']['no_record'] = 'Нет записей для объекта %s';
$lang['mailbox']['no_record_single'] = 'Нет записей';
$lang['mailbox']['add_domain'] = 'Добавить домен'; $lang['mailbox']['add_domain'] = 'Добавить домен';
$lang['mailbox']['add_domain_alias'] = 'Добавить псевдоним домена'; $lang['mailbox']['add_domain_alias'] = 'Добавить псевдоним домена';
$lang['mailbox']['add_mailbox'] = 'Добавить почтовый ящик'; $lang['mailbox']['add_mailbox'] = 'Добавить почтовый ящик';
$lang['mailbox']['add_resource'] = 'Добавить ресурс'; $lang['mailbox']['add_resource'] = 'Добавить ресурс';
$lang['mailbox']['add_alias'] = 'Добавить псевдоним'; $lang['mailbox']['add_alias'] = 'Добавить псевдоним';
$lang['mailbox']['add_domain_record_first'] = 'Пожалуйста, сначала добавьте домен';
$lang['mailbox']['empty'] = 'Нет результатов'; $lang['mailbox']['empty'] = 'Нет результатов';
$lang['mailbox']['toggle_all'] = 'Выбрать все'; $lang['mailbox']['toggle_all'] = 'Выбрать все';
$lang['mailbox']['quick_actions'] = 'Действия'; $lang['mailbox']['quick_actions'] = 'Действия';
@ -267,21 +212,6 @@ $lang['mailbox']['last_run'] = 'Последний запуск';
$lang['info']['no_action'] = 'Действий не предусмотрено'; $lang['info']['no_action'] = 'Действий не предусмотрено';
$lang['delete']['title'] = 'Удалить объект';
$lang['delete']['remove_domain_warning'] = '<b>Внимание:</b> Вы собираетесь удалить домен <b>%s</b>!';
$lang['delete']['remove_syncjob_warning'] = '<b>Внимание:</b> Вы собираетесь удалить задание синхронизации пользователя <b>%s</b>!';
$lang['delete']['remove_domainalias_warning'] = '<b>Внимание:</b> Вы собираетесь удалить псевдоним домена <b>%s</b>!';
$lang['delete']['remove_domainadmin_warning'] = '<b>Внимание:</b> Вы собираетесь удалить администратора домена <b>%s</b>!';
$lang['delete']['remove_alias_warning'] = '<b>Внимание:</b> Вы собираетесь удалить псевдоним адреса <b>%s</b>!';
$lang['delete']['remove_mailbox_warning'] = '<b>Внимание:</b> Вы собираетесь удалить почтовый ящик <b>%s</b>!';
$lang['delete']['remove_mailbox_details'] = 'Почтовый ящик будет <b>очищен навсегда</b>!';
$lang['delete']['remove_resource_warning'] = '<b>Внимание:</b> Вы собираетесь удалить ресурс <b>%s</b>!';
$lang['delete']['remove_resource_details'] = 'Ресурс будет <b>очищен навсегда</b>!';
$lang['delete']['remove_domain_details'] = 'Это действие также удаляет псевдонимы домена. <br><br><b>Домен должен быть пустым для удаления.</b>';
$lang['delete']['remove_syncjob_details'] = 'Объекты из этого задания синхронизации больше не будут извлекаться с удаленного сервера.';
$lang['delete']['remove_alias_details'] = 'Пользователи больше не смогут получать почту или отправлять почту с этого адреса.</b>';
$lang['delete']['remove_button'] = 'Удалить';
$lang['delete']['previous'] = 'Предыдущая страница';
$lang['edit']['syncjob'] = 'Изменить задание синхронизации'; $lang['edit']['syncjob'] = 'Изменить задание синхронизации';
$lang['edit']['username'] = 'Имя пользователя'; $lang['edit']['username'] = 'Имя пользователя';
@ -292,22 +222,17 @@ $lang['edit']['subfolder2'] = 'Sync into subfolder on destination<br><small>(emp
$lang['edit']['mins_interval'] = 'Интервал (минуты)'; $lang['edit']['mins_interval'] = 'Интервал (минуты)';
$lang['edit']['exclude'] = 'Исключить объекты (regex)'; $lang['edit']['exclude'] = 'Исключить объекты (regex)';
$lang['edit']['save'] = 'Сохранить изменения'; $lang['edit']['save'] = 'Сохранить изменения';
$lang['edit']['archive'] = 'Доступ в архив';
$lang['edit']['max_mailboxes'] = 'Максимум почтовых ящиков'; $lang['edit']['max_mailboxes'] = 'Максимум почтовых ящиков';
$lang['edit']['title'] = 'Изменение объекта'; $lang['edit']['title'] = 'Изменение объекта';
$lang['edit']['target_address'] = 'Goto address/es <small>(comma-separated)</small>'; $lang['edit']['target_address'] = 'Goto address/es <small>(comma-separated)</small>';
$lang['edit']['active'] = 'Активный'; $lang['edit']['active'] = 'Активный';
$lang['edit']['target_domain'] = 'Целевой домен'; $lang['edit']['target_domain'] = 'Целевой домен';
$lang['edit']['password'] = 'Пароль'; $lang['edit']['password'] = 'Пароль';
$lang['edit']['ratelimit'] = 'Outgoing rate limit/h';
$lang['danger']['ratelimt_less_one'] = 'Outgoing rate limit/h must not be less than 1';
$lang['edit']['password_repeat'] = 'Подтверждение пароля (повтор)'; $lang['edit']['password_repeat'] = 'Подтверждение пароля (повтор)';
$lang['edit']['domain_admin'] = 'Изменение администратора домена'; $lang['edit']['domain_admin'] = 'Изменение администратора домена';
$lang['edit']['domain'] = 'Изменение домена'; $lang['edit']['domain'] = 'Изменение домена';
$lang['edit']['alias_domain'] = 'Псевдоним домена';
$lang['edit']['edit_alias_domain'] = 'Изменить псевдоним домена'; $lang['edit']['edit_alias_domain'] = 'Изменить псевдоним домена';
$lang['edit']['domains'] = 'Домены'; $lang['edit']['domains'] = 'Домены';
$lang['edit']['destroy'] = 'Ручной ввод данных';
$lang['edit']['alias'] = 'Изменить псевдоним'; $lang['edit']['alias'] = 'Изменить псевдоним';
$lang['edit']['mailbox'] = 'Изменение почтового ящика'; $lang['edit']['mailbox'] = 'Изменение почтового ящика';
$lang['edit']['description'] = 'Описание'; $lang['edit']['description'] = 'Описание';
@ -317,22 +242,16 @@ $lang['edit']['domain_quota'] = 'Квота домена';
$lang['edit']['backup_mx_options'] = 'Параметры резервного копирования MX'; $lang['edit']['backup_mx_options'] = 'Параметры резервного копирования MX';
$lang['edit']['relay_domain'] = 'Домен ретрансляции'; $lang['edit']['relay_domain'] = 'Домен ретрансляции';
$lang['edit']['relay_all'] = 'Ретрансляция всех получателей'; $lang['edit']['relay_all'] = 'Ретрансляция всех получателей';
$lang['edit']['dkim_signature'] = 'ARC + DKIM подпись';
$lang['edit']['dkim_record_info'] = '<small>Please add a TXT record with the given value to your DNS settings.</small>';
$lang['edit']['relay_all_info'] = '<small>If you choose <b>not</b> to relay all recipients, you will need to add a ("blind") mailbox for every single recipient that should be relayed.</small>'; $lang['edit']['relay_all_info'] = '<small>If you choose <b>not</b> to relay all recipients, you will need to add a ("blind") mailbox for every single recipient that should be relayed.</small>';
$lang['edit']['full_name'] = 'Полное имя'; $lang['edit']['full_name'] = 'Полное имя';
$lang['edit']['quota_mb'] = 'Квота (MiB)'; $lang['edit']['quota_mb'] = 'Квота (MiB)';
$lang['edit']['sender_acl'] = 'Allow to send as'; $lang['edit']['sender_acl'] = 'Allow to send as';
$lang['edit']['sender_acl_info'] = 'Псевдонимы не могут быть отменены.';
$lang['edit']['dkim_txt_name'] = 'Имя TXT записи:';
$lang['edit']['dkim_txt_value'] = 'Значение TXT записи:';
$lang['edit']['previous'] = 'Предыдущая страница'; $lang['edit']['previous'] = 'Предыдущая страница';
$lang['edit']['unchanged_if_empty'] = 'Если без изменений оставьте пустым'; $lang['edit']['unchanged_if_empty'] = 'Если без изменений оставьте пустым';
$lang['edit']['dont_check_sender_acl'] = "Отключить проверку отправителя для домена %s + псевдонимов домена"; $lang['edit']['dont_check_sender_acl'] = "Отключить проверку отправителя для домена %s + псевдонимов домена";
$lang['edit']['multiple_bookings'] = 'Multiple bookings'; $lang['edit']['multiple_bookings'] = 'Multiple bookings';
$lang['edit']['kind'] = 'Вид'; $lang['edit']['kind'] = 'Вид';
$lang['edit']['resource'] = 'Ресурс'; $lang['edit']['resource'] = 'Ресурс';
$lang['edit']['goto_null'] = 'Отключить почту';
$lang['add']['syncjob'] = 'Добавить задание синхронизации'; $lang['add']['syncjob'] = 'Добавить задание синхронизации';
$lang['add']['syncjob_hint'] = 'Имейте в виду, что пароли должны быть сохранены в виде простого текста!'; $lang['add']['syncjob_hint'] = 'Имейте в виду, что пароли должны быть сохранены в виде простого текста!';
@ -341,8 +260,6 @@ $lang['add']['port'] = 'Порт';
$lang['add']['username'] = 'Имя пользователя'; $lang['add']['username'] = 'Имя пользователя';
$lang['add']['enc_method'] = 'Метод шифрования'; $lang['add']['enc_method'] = 'Метод шифрования';
$lang['add']['mins_interval'] = 'Интервал опроса (в минутах)'; $lang['add']['mins_interval'] = 'Интервал опроса (в минутах)';
$lang['add']['maxage'] = 'Максимальный возраст писем в днях, которые будут опрошены с удаленного хоста (0 = игнорировать возраст)';
$lang['add']['subfolder2'] = 'Синхронизировать в подпапку по назначению';
$lang['add']['exclude'] = 'Исключить объекты (regex)'; $lang['add']['exclude'] = 'Исключить объекты (regex)';
$lang['add']['delete2duplicates'] = 'Удаление дубликатов по назначению'; $lang['add']['delete2duplicates'] = 'Удаление дубликатов по назначению';
$lang['add']['delete1'] = 'Удаление из источника после завершения'; $lang['add']['delete1'] = 'Удаление из источника после завершения';
@ -351,14 +268,11 @@ $lang['edit']['delete2duplicates'] = 'Удаление дубликатов по
$lang['edit']['delete1'] = 'Удаление из источника после завершения'; $lang['edit']['delete1'] = 'Удаление из источника после завершения';
$lang['edit']['delete2'] = 'Удаление писем по месту назначения, которые не находятся на исходном'; $lang['edit']['delete2'] = 'Удаление писем по месту назначения, которые не находятся на исходном';
$lang['add']['title'] = 'Добавить объект';
$lang['add']['domain'] = 'Домен'; $lang['add']['domain'] = 'Домен';
$lang['add']['active'] = 'Активный'; $lang['add']['active'] = 'Активный';
$lang['add']['multiple_bookings'] = 'Multiple bookings'; $lang['add']['multiple_bookings'] = 'Multiple bookings';
$lang['add']['save'] = 'Сохранить изменения';
$lang['add']['description'] = 'Описание'; $lang['add']['description'] = 'Описание';
$lang['add']['max_aliases'] = 'Максимум псевдонимов'; $lang['add']['max_aliases'] = 'Максимум псевдонимов';
$lang['add']['resource_name'] = 'Название ресурса';
$lang['add']['max_mailboxes'] = 'Максимум почтовых ящиков'; $lang['add']['max_mailboxes'] = 'Максимум почтовых ящиков';
$lang['add']['mailbox_quota_m'] = 'Максимальная квота почтового ящика (MiB)'; $lang['add']['mailbox_quota_m'] = 'Максимальная квота почтового ящика (MiB)';
$lang['add']['domain_quota_m'] = 'Квота домена (MiB)'; $lang['add']['domain_quota_m'] = 'Квота домена (MiB)';
@ -366,8 +280,6 @@ $lang['add']['backup_mx_options'] = 'Параметры резервного к
$lang['add']['relay_all'] = 'Ретрансляция всех получателей'; $lang['add']['relay_all'] = 'Ретрансляция всех получателей';
$lang['add']['relay_domain'] = 'Ретрансляция этого домена'; $lang['add']['relay_domain'] = 'Ретрансляция этого домена';
$lang['add']['relay_all_info'] = '<small>Если вы выбрали <b>не</b> для ретрансляции всех получателей, вам нужно будет добавить ("слепой") почтовый ящик для каждого получателя, который должен быть ретранслирован.</small>'; $lang['add']['relay_all_info'] = '<small>Если вы выбрали <b>не</b> для ретрансляции всех получателей, вам нужно будет добавить ("слепой") почтовый ящик для каждого получателя, который должен быть ретранслирован.</small>';
$lang['add']['alias'] = 'Псевдоним(ы)';
$lang['add']['alias_spf_fail'] = '<b>Note:</b> If your chosen destination address is an external mailbox, the <b>receiving mailserver</b> may reject your message due to an SPF failure.</a>';
$lang['add']['alias_address'] = 'Псевдоним адрес(а)'; $lang['add']['alias_address'] = 'Псевдоним адрес(а)';
$lang['add']['alias_address_info'] = '<small>Полный почтовый адрес(а) или @example.com, чтобы поймать все сообщения для домена (разделенных запятыми). <b>только домены mailcow</b>.</small>'; $lang['add']['alias_address_info'] = '<small>Полный почтовый адрес(а) или @example.com, чтобы поймать все сообщения для домена (разделенных запятыми). <b>только домены mailcow</b>.</small>';
$lang['add']['alias_domain_info'] = '<small>Действительные имена доменов (разделенные запятыми).</small>'; $lang['add']['alias_domain_info'] = '<small>Действительные имена доменов (разделенные запятыми).</small>';
@ -376,8 +288,6 @@ $lang['add']['target_address_info'] = '<small>Адрес(а) почтовых я
$lang['add']['alias_domain'] = 'Псевдоним домена'; $lang['add']['alias_domain'] = 'Псевдоним домена';
$lang['add']['select'] = 'Пожалуйста, выберите...'; $lang['add']['select'] = 'Пожалуйста, выберите...';
$lang['add']['target_domain'] = 'Целевой домен'; $lang['add']['target_domain'] = 'Целевой домен';
$lang['add']['mailbox'] = 'Почтовый ящик';
$lang['add']['resource'] = 'Ресурс';
$lang['add']['kind'] = 'Вид'; $lang['add']['kind'] = 'Вид';
$lang['add']['mailbox_username'] = 'Имя пользователя (часть адреса электронной почты слева)'; $lang['add']['mailbox_username'] = 'Имя пользователя (часть адреса электронной почты слева)';
$lang['add']['full_name'] = 'Полное имя'; $lang['add']['full_name'] = 'Полное имя';
@ -385,20 +295,12 @@ $lang['add']['quota_mb'] = 'Квота (MiB)';
$lang['add']['select_domain'] = 'Пожалуйста, сначала выберите домен'; $lang['add']['select_domain'] = 'Пожалуйста, сначала выберите домен';
$lang['add']['password'] = 'Пароль'; $lang['add']['password'] = 'Пароль';
$lang['add']['password_repeat'] = 'Подтверждение пароля (повтор)'; $lang['add']['password_repeat'] = 'Подтверждение пароля (повтор)';
$lang['add']['previous'] = 'Предыдущая страница';
$lang['add']['restart_sogo_hint'] = 'После добавления нового домена вам необходимо перезагрузить контейнер службы SOGo!'; $lang['add']['restart_sogo_hint'] = 'После добавления нового домена вам необходимо перезагрузить контейнер службы SOGo!';
$lang['add']['goto_null'] = 'Отключить почту'; $lang['add']['goto_null'] = 'Отключить почту';
$lang['login']['title'] = 'Логин';
$lang['login']['administration'] = 'Администрирование';
$lang['login']['administration_details'] = 'Пожалуйста, используйте вашу учетную запись администратора для выполнения административных задач.';
$lang['login']['user_settings'] = 'Настройки пользователя';
$lang['login']['user_settings_details'] = 'Пользователи почтовых ящиков могут использовать пользовательский интерфейс mailcow для изменения пароля, создавать временные псевдонимы (спам псевдонимы), настроить поведение фильтра спама или импортировать сообщения из удаленного сервера IMAP.';
$lang['login']['username'] = 'Имя пользователя'; $lang['login']['username'] = 'Имя пользователя';
$lang['login']['password'] = 'Пароль'; $lang['login']['password'] = 'Пароль';
$lang['login']['reset_password'] = 'Сбросить мой пароль';
$lang['login']['login'] = 'Логин'; $lang['login']['login'] = 'Логин';
$lang['login']['previous'] = "Предыдущая страница";
$lang['login']['delayed'] = 'Вход был задержан на %s секунд.'; $lang['login']['delayed'] = 'Вход был задержан на %s секунд.';
$lang['tfa']['tfa'] = "Двухфакторная проверка подлинности"; $lang['tfa']['tfa'] = "Двухфакторная проверка подлинности";
@ -408,15 +310,11 @@ $lang['tfa']['key_id'] = "Идентификатор вашего YubiKey";
$lang['tfa']['key_id_totp'] = "Идентификатор для вашего ключа"; $lang['tfa']['key_id_totp'] = "Идентификатор для вашего ключа";
$lang['tfa']['api_register'] = 'mailcow uses the Yubico Cloud API. Please get an API key for your key <a href="https://upgrade.yubico.com/getapikey/" target="_blank">here</a>'; $lang['tfa']['api_register'] = 'mailcow uses the Yubico Cloud API. Please get an API key for your key <a href="https://upgrade.yubico.com/getapikey/" target="_blank">here</a>';
$lang['tfa']['u2f'] = "U2F аутентификация"; $lang['tfa']['u2f'] = "U2F аутентификация";
$lang['tfa']['hotp'] = "HOTP аутентификация";
$lang['tfa']['none'] = "Отключить"; $lang['tfa']['none'] = "Отключить";
$lang['tfa']['delete_tfa'] = "Отключить TFA"; $lang['tfa']['delete_tfa'] = "Отключить TFA";
$lang['tfa']['disable_tfa'] = "Отключить TFA до следующего успешного входа"; $lang['tfa']['disable_tfa'] = "Отключить TFA до следующего успешного входа";
$lang['tfa']['confirm_tfa'] = "Пожалуйста, подтвердите ваш одноразовый пароль в поле ниже";
$lang['tfa']['confirm'] = "Подтвердите"; $lang['tfa']['confirm'] = "Подтвердите";
$lang['tfa']['otp'] = "Одноразовый пароль";
$lang['tfa']['totp'] = "На основе времени OTP (Google Authenticator и др.)"; $lang['tfa']['totp'] = "На основе времени OTP (Google Authenticator и др.)";
$lang['tfa']['trash_login'] = "Некорректный логин";
$lang['tfa']['select'] = "Пожалуйста, выберите"; $lang['tfa']['select'] = "Пожалуйста, выберите";
$lang['tfa']['waiting_usb_auth'] = "<i>Waiting for USB device...</i><br><br>Please tap the button on your U2F USB device now."; $lang['tfa']['waiting_usb_auth'] = "<i>Waiting for USB device...</i><br><br>Please tap the button on your U2F USB device now.";
$lang['tfa']['waiting_usb_register'] = "<i>Waiting for USB device...</i><br><br>Please enter your password above and confirm your U2F registration by tapping the button on your U2F USB device."; $lang['tfa']['waiting_usb_register'] = "<i>Waiting for USB device...</i><br><br>Please enter your password above and confirm your U2F registration by tapping the button on your U2F USB device.";
@ -433,38 +331,13 @@ $lang['admin']['f2b_max_attempts'] = 'Max. attempts';
$lang['admin']['f2b_retry_window'] = 'Retry window (s) for max. attempts'; $lang['admin']['f2b_retry_window'] = 'Retry window (s) for max. attempts';
$lang['admin']['f2b_whitelist'] = 'Whitelisted networks/hosts'; $lang['admin']['f2b_whitelist'] = 'Whitelisted networks/hosts';
$lang['admin']['search_domain_da'] = 'Поиск доменов'; $lang['admin']['search_domain_da'] = 'Поиск доменов';
$lang['admin']['restrictions'] = 'Postfix Restrictions';
$lang['admin']['rr'] = 'Postfix Recipient Restrictions';
$lang['admin']['reset_defaults'] = 'Сброс по умолчанию';
$lang['admin']['sr'] = 'Postfix Sender Restrictions';
$lang['admin']['r_inactive'] = 'Inactive restrictions'; $lang['admin']['r_inactive'] = 'Inactive restrictions';
$lang['admin']['r_active'] = 'Active restrictions'; $lang['admin']['r_active'] = 'Active restrictions';
$lang['admin']['r_info'] = 'Greyed out/disabled elements on the list of active restrictions are not known as valid restrictions to mailcow and cannot be moved. Unknown restrictions will be set in order of appearance anyway. <br>You can add new elements in <code>inc/vars.local.inc.php</code> to be able to toggle them.'; $lang['admin']['r_info'] = 'Greyed out/disabled elements on the list of active restrictions are not known as valid restrictions to mailcow and cannot be moved. Unknown restrictions will be set in order of appearance anyway. <br>You can add new elements in <code>inc/vars.local.inc.php</code> to be able to toggle them.';
$lang['admin']['public_folders'] = 'Общие папки';
$lang['admin']['public_folders_text'] = 'A namespace "Public" is created. Below\'s public folder name indicates the name of the first auto-created mailbox within this namespace.';
$lang['admin']['public_folder_name'] = 'Имя папки';
$lang['admin']['public_folder_enable'] = 'Включение общих папок';
$lang['admin']['public_folder_enable_text'] = 'Отключение этой опции не приведет к удалению почты из общих папок.';
$lang['admin']['public_folder_pusf'] = 'Enable per-user seen flag';
$lang['admin']['public_folder_pusf_text'] = 'A "per-user seen flag"-enabled system will not mark a mail as read for User B, when User A has seen it, but User B did not.';
$lang['admin']['privacy'] = 'Конфиденциальность';
$lang['admin']['privacy_text'] = 'This option enables a PCRE table to remove "User-Agent", "X-Enigmail", "X-Mailer", "X-Originating-IP" and replaces "Received: from" headers with localhost/127.0.0.1.';
$lang['admin']['privacy_anon_mail'] = 'Анонимизировать исходящую почту';
$lang['admin']['dkim_txt_name'] = 'Имя TXT записи:';
$lang['admin']['dkim_txt_value'] = 'Значение TXT записи:';
$lang['admin']['dkim_key_length'] = 'Длина DKIM ключа (bits)'; $lang['admin']['dkim_key_length'] = 'Длина DKIM ключа (bits)';
$lang['admin']['dkim_key_valid'] = 'Действительный ключ'; $lang['admin']['dkim_key_valid'] = 'Действительный ключ';
$lang['admin']['dkim_key_unused'] = 'Ключ не используется'; $lang['admin']['dkim_key_unused'] = 'Ключ не используется';
$lang['admin']['dkim_key_missing'] = 'Ключ отсутствует'; $lang['admin']['dkim_key_missing'] = 'Ключ отсутствует';
$lang['admin']['dkim_key_hint'] = 'Селектор для DKIM ключей всегда является <code>dkim</code>.';
$lang['admin']['previous'] = 'Предыдущая страница';
$lang['admin']['quota_mb'] = 'Квота (MiB):';
$lang['admin']['sender_acl'] = 'Разрешить отправлять письма от:';
$lang['admin']['msg_size'] = 'Максимальный размер писем';
$lang['admin']['msg_size_limit'] = 'Ограничение размера писем теперь';
$lang['admin']['msg_size_limit_details'] = 'Применяя новый лимит будет перезагружен Postfix и веб-сервер.';
$lang['admin']['maintenance'] = 'Техническое обслуживание и информация';
$lang['admin']['sys_info'] = 'Сведения о системе';
$lang['admin']['dkim_add_key'] = 'Добавить ARC/DKIM ключ'; $lang['admin']['dkim_add_key'] = 'Добавить ARC/DKIM ключ';
$lang['admin']['dkim_keys'] = 'ARC/DKIM ключи'; $lang['admin']['dkim_keys'] = 'ARC/DKIM ключи';
$lang['admin']['add'] = 'Добавить'; $lang['admin']['add'] = 'Добавить';
@ -487,20 +360,12 @@ $lang['admin']['unchanged_if_empty'] = 'Если без изменений ос
$lang['admin']['yes'] = '&#10004;'; $lang['admin']['yes'] = '&#10004;';
$lang['admin']['no'] = '&#10008;'; $lang['admin']['no'] = '&#10008;';
$lang['admin']['access'] = 'Доступ к'; $lang['admin']['access'] = 'Доступ к';
$lang['admin']['invalid_max_msg_size'] = 'Неверно указан максимальный размер писем';
$lang['admin']['site_not_found'] = 'Не удается найти конфигурацию сайта mailcow';
$lang['admin']['public_folder_empty'] = 'Имя общей папки не должно быть пустым';
$lang['admin']['set_rr_failed'] = 'Не удается задать ограничения Postfix';
$lang['admin']['no_record'] = 'Нет записей'; $lang['admin']['no_record'] = 'Нет записей';
$lang['admin']['filter_table'] = 'Поиск'; $lang['admin']['filter_table'] = 'Поиск';
$lang['admin']['empty'] = 'Нет результатов'; $lang['admin']['empty'] = 'Нет результатов';
$lang['admin']['time'] = 'Время';
$lang['admin']['priority'] = 'Приоритет';
$lang['admin']['message'] = 'Письма';
$lang['admin']['refresh'] = 'Обновить'; $lang['admin']['refresh'] = 'Обновить';
$lang['admin']['to_top'] = 'Вернуться к началу'; $lang['admin']['to_top'] = 'Вернуться к началу';
$lang['admin']['in_use_by'] = 'Используемый в'; $lang['admin']['in_use_by'] = 'Используемый в';
$lang['admin']['logs'] = 'Журналы';
$lang['admin']['forwarding_hosts'] = 'Переадресация хостов'; $lang['admin']['forwarding_hosts'] = 'Переадресация хостов';
$lang['admin']['forwarding_hosts_hint'] = 'Безоговорочно входящие сообщения принимаются от любых хостов, перечисленных здесь. Затем эти хосты не проверяется DNSBL и greylisting. Спам, полученный от них никогда не отклоняется, но при необходимости он может быть помещен в папку Спам. Чаще всего для этого требуется указать почтовые серверы, на которых вы создали правило перенаправления входящих сообщений электронной почты на сервер mailcow.'; $lang['admin']['forwarding_hosts_hint'] = 'Безоговорочно входящие сообщения принимаются от любых хостов, перечисленных здесь. Затем эти хосты не проверяется DNSBL и greylisting. Спам, полученный от них никогда не отклоняется, но при необходимости он может быть помещен в папку Спам. Чаще всего для этого требуется указать почтовые серверы, на которых вы создали правило перенаправления входящих сообщений электронной почты на сервер mailcow.';
$lang['admin']['forwarding_hosts_add_hint'] = 'Можно либо указать IPv4/IPv6-адресов сетей в нотации CIDR, имена узлов (которые будут разрешаться в IP-адреса) или доменные имена (которые будут решаться с IP-адресами путем запроса SPF записей или, в случае их отсутствия, MX записей).'; $lang['admin']['forwarding_hosts_add_hint'] = 'Можно либо указать IPv4/IPv6-адресов сетей в нотации CIDR, имена узлов (которые будут разрешаться в IP-адреса) или доменные имена (которые будут решаться с IP-адресами путем запроса SPF записей или, в случае их отсутствия, MX записей).';
@ -510,7 +375,6 @@ $lang['admin']['host'] = 'Хост';
$lang['admin']['source'] = 'Источник'; $lang['admin']['source'] = 'Источник';
$lang['admin']['add_forwarding_host'] = 'Добавить перенаправление узла'; $lang['admin']['add_forwarding_host'] = 'Добавить перенаправление узла';
$lang['admin']['add_relayhost'] = 'Добавление промежуточного узла'; $lang['admin']['add_relayhost'] = 'Добавление промежуточного узла';
$lang['delete']['remove_forwardinghost_warning'] = '<b>Внимание:</b> Вы собираетесь удалить узел пересылки <b>%s</b>!';
$lang['success']['forwarding_host_removed'] = "Перенаправление узла %s удалено"; $lang['success']['forwarding_host_removed'] = "Перенаправление узла %s удалено";
$lang['success']['forwarding_host_added'] = "Перенаправление узла %s добавлено"; $lang['success']['forwarding_host_added'] = "Перенаправление узла %s добавлено";
$lang['success']['relayhost_removed'] = "Промежуточный узел %s удален"; $lang['success']['relayhost_removed'] = "Промежуточный узел %s удален";
@ -530,10 +394,6 @@ $lang['admin']['add_row'] = "Добавить строку";
$lang['admin']['reset_default'] = "Восстановить по умолчанию"; $lang['admin']['reset_default'] = "Восстановить по умолчанию";
$lang['admin']['merged_vars_hint'] = 'Серым цветом выделены строки полученные из <code>vars.(local.)inc.php</code> и не могут быть изменены.'; $lang['admin']['merged_vars_hint'] = 'Серым цветом выделены строки полученные из <code>vars.(local.)inc.php</code> и не могут быть изменены.';
$lang['edit']['tls_policy'] = "Изменение политики TLS";
$lang['edit']['spam_score'] = "Задать индивидуальное определение спама"; $lang['edit']['spam_score'] = "Задать индивидуальное определение спама";
$lang['edit']['spam_policy'] = "Добавление или удаление элементов в белом/черном списке"; $lang['edit']['spam_policy'] = "Добавление или удаление элементов в белом/черном списке";
$lang['edit']['delimiter_action'] = "Изменение разделителя действий";
$lang['edit']['syncjobs'] = "Добавление и изменение заданий синхронизации";
$lang['edit']['eas_reset'] = "Сброс устройства EAS";
$lang['edit']['spam_alias'] = "Создать или изменить временные псевдоним адреса"; $lang['edit']['spam_alias'] = "Создать или изменить временные псевдоним адреса";

View File

@ -21,7 +21,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
</li> </li>
<li role="presentation"><a href="#tab-syncjobs" aria-controls="tab-syncjobs" role="tab" data-toggle="tab"><?=$lang['mailbox']['sync_jobs'];?></a></li> <li role="presentation"><a href="#tab-syncjobs" aria-controls="tab-syncjobs" role="tab" data-toggle="tab"><?=$lang['mailbox']['sync_jobs'];?></a></li>
<li role="presentation"><a href="#tab-filters" aria-controls="tab-filters" role="tab" data-toggle="tab"><?=$lang['mailbox']['filters'];?></a></li> <li role="presentation"><a href="#tab-filters" aria-controls="tab-filters" role="tab" data-toggle="tab"><?=$lang['mailbox']['filters'];?></a></li>
<li role="presentation"><a href="#tab-bcc" aria-controls="tab-filters" role="tab" data-toggle="tab"><?=$lang['mailbox']['bcc_maps'];?></a></li> <li role="presentation"><a href="#tab-bcc" aria-controls="tab-filters" role="tab" data-toggle="tab"><?=$lang['mailbox']['address_rewriting'];?></a></li>
</ul> </ul>
<div class="row"> <div class="row">
@ -234,6 +234,34 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
</div> </div>
</div> </div>
</div> </div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><?=$lang['mailbox']['recipient_maps'];?></h3>
</div>
<p style="margin:10px" class="help-block"><?=$lang['mailbox']['recipient_map_info'];?></p>
<div class="table-responsive">
<table class="table table-striped" id="recipient_map_table"></table>
</div>
<?php
if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "admin"))
$display = 'block';
else
$display = 'none';
?>
<div class="mass-actions-mailbox" style="display: <?php echo $display; ?>">
<div class="btn-group">
<a class="btn btn-sm btn-default" id="toggle_multi_select_all" data-id="recipient_map" href="#"><span class="glyphicon glyphicon-check" aria-hidden="true"></span> <?=$lang['mailbox']['toggle_all'];?></a>
<a class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" href="#"><?=$lang['mailbox']['quick_actions'];?> <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a id="edit_selected" data-id="recipient_map" data-api-url='edit/recipient_map' data-api-attr='{"active":"1"}' href="#"><?=$lang['mailbox']['activate'];?></a></li>
<li><a id="edit_selected" data-id="recipient_map" data-api-url='edit/recipient_map' data-api-attr='{"active":"0"}' href="#"><?=$lang['mailbox']['deactivate'];?></a></li>
<li role="separator" class="divider"></li>
<li><a id="delete_selected" data-id="recipient_map" data-api-url='delete/recipient_map' href="#"><?=$lang['mailbox']['remove'];?></a></li>
</ul>
<a class="btn btn-sm btn-success" href="#" data-toggle="modal" data-target="#addRecipientMapModalAdmin"><span class="glyphicon glyphicon-plus"></span> <?=$lang['mailbox']['add_recipient_map_entry'];?></a>
</div>
</div>
</div>
</div> </div>
</div> <!-- /tab-content --> </div> <!-- /tab-content -->
</div> <!-- /col-md-12 --> </div> <!-- /col-md-12 -->

View File

@ -595,6 +595,45 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
</div> </div>
</div> </div>
</div><!-- add add_bcc modal --> </div><!-- add add_bcc modal -->
<!-- add add_recipient_map modal -->
<div class="modal fade" id="addRecipientMapModalAdmin" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
<h3 class="modal-title"><?=$lang['mailbox']['recipient_maps'];?></h3>
</div>
<div class="modal-body">
<form class="form-horizontal" data-cached-form="true" role="form" data-id="add_recipient_map">
<div class="form-group">
<label class="control-label col-sm-2" for="recipient_map_old"><?=$lang['mailbox']['recipient_map_old'];?>:</label>
<div class="col-sm-10">
<textarea autocorrect="off" spellcheck="false" autocapitalize="none" class="form-control" rows="2" id="recipient_map_old" name="recipient_map_old" required></textarea>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="recipient_map_new"><?=$lang['mailbox']['recipient_map_new'];?>:</label>
<div class="col-sm-10">
<textarea autocorrect="off" spellcheck="false" autocapitalize="none" class="form-control" rows="2" id="recipient_map_new" name="recipient_map_new" required></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label><input type="checkbox" value="1" name="active" checked> <?=$lang['add']['active'];?></label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button class="btn btn-success" id="add_item" data-id="add_recipient_map" data-api-url='add/recipient_map' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
</div>
</div>
</div>
</div><!-- add add_recipient_map modal -->
<!-- log modal --> <!-- log modal -->
<div class="modal fade" id="syncjobLogModal" tabindex="-1" role="dialog" aria-labelledby="syncjobLogModalLabel"> <div class="modal fade" id="syncjobLogModal" tabindex="-1" role="dialog" aria-labelledby="syncjobLogModalLabel">
<div class="modal-dialog modal-lg" role="document"> <div class="modal-dialog modal-lg" role="document">

View File

@ -9,24 +9,24 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
<h3 class="modal-title"><span class="glyphicon glyphicon-info"></span> <?=$lang['quarantaine']['qitem'];?></h3> <h3 class="modal-title"><span class="glyphicon glyphicon-info"></span> <?=$lang['quarantine']['qitem'];?></h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div id="qid_error" style="display:none" class="alert alert-danger"></div> <div id="qid_error" style="display:none" class="alert alert-danger"></div>
<div class="form-group"> <div class="form-group">
<label for="qid_detail_subj"><h4><?=$lang['quarantaine']['subj'];?>:</h4></label> <label for="qid_detail_subj"><h4><?=$lang['quarantine']['subj'];?>:</h4></label>
<p id="qid_detail_subj"></p> <p id="qid_detail_subj"></p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="qid_detail_text"><h4><?=$lang['quarantaine']['text_plain_content'];?>:</h4></label> <label for="qid_detail_text"><h4><?=$lang['quarantine']['text_plain_content'];?>:</h4></label>
<pre id="qid_detail_text"></pre> <pre id="qid_detail_text"></pre>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="qid_detail_text_from_html"><h4><?=$lang['quarantaine']['text_from_html_content'];?>:</h4></label> <label for="qid_detail_text_from_html"><h4><?=$lang['quarantine']['text_from_html_content'];?>:</h4></label>
<pre id="qid_detail_text_from_html"></pre> <pre id="qid_detail_text_from_html"></pre>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="qid_detail_atts"><h4><?=$lang['quarantaine']['atts'];?>:</h4></label> <label for="qid_detail_atts"><h4><?=$lang['quarantine']['atts'];?>:</h4></label>
<div id="qid_detail_atts">-</div> <div id="qid_detail_atts">-</div>
</div> </div>
</div> </div>

View File

@ -11,20 +11,20 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
<div class="col-md-12"> <div class="col-md-12">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title"><?=$lang['quarantaine']['quarantaine'];?></h3> <h3 class="panel-title"><?=$lang['quarantine']['quarantine'];?></h3>
</div> </div>
<p style="margin:10px" class="help-block"><?=$lang['quarantaine']['qinfo'];?></p> <p style="margin:10px" class="help-block"><?=$lang['quarantine']['qinfo'];?></p>
<div class="table-responsive"> <div class="table-responsive">
<table id="quarantainetable" class="table table-striped"></table> <table id="quarantinetable" class="table table-striped"></table>
</div> </div>
<div class="mass-actions-quarantaine"> <div class="mass-actions-quarantine">
<div class="btn-group"> <div class="btn-group">
<a class="btn btn-sm btn-default" id="toggle_multi_select_all" data-id="qitems" href="#"><span class="glyphicon glyphicon-check" aria-hidden="true"></span> <?=$lang['quarantaine']['toggle_all'];?></a> <a class="btn btn-sm btn-default" id="toggle_multi_select_all" data-id="qitems" href="#"><span class="glyphicon glyphicon-check" aria-hidden="true"></span> <?=$lang['quarantine']['toggle_all'];?></a>
<a class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" href="#"><?=$lang['quarantaine']['quick_actions'];?> <span class="caret"></span></a> <a class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" href="#"><?=$lang['quarantine']['quick_actions'];?> <span class="caret"></span></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a id="edit_selected" data-id="qitems" data-api-url='edit/qitem' data-api-attr='{"action":"release"}' href="#"><?=$lang['quarantaine']['release'];?></a></li> <li><a id="edit_selected" data-id="qitems" data-api-url='edit/qitem' data-api-attr='{"action":"release"}' href="#"><?=$lang['quarantine']['release'];?></a></li>
<li role="separator" class="divider"></li> <li role="separator" class="divider"></li>
<li><a id="delete_selected" data-id="qitems" data-api-url='delete/qitem' href="#"><?=$lang['quarantaine']['remove'];?></a></li> <li><a id="delete_selected" data-id="qitems" data-api-url='delete/qitem' href="#"><?=$lang['quarantine']['remove'];?></a></li>
</ul> </ul>
</div> </div>
</div> </div>
@ -33,11 +33,11 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
</div> <!-- /row --> </div> <!-- /row -->
</div> <!-- /container --> </div> <!-- /container -->
<?php <?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/modals/quarantaine.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/modals/quarantine.php';
?> ?>
<script type='text/javascript'> <script type='text/javascript'>
<?php <?php
$lang_mailbox = json_encode($lang['quarantaine']); $lang_mailbox = json_encode($lang['quarantine']);
echo "var lang = ". $lang_mailbox . ";\n"; echo "var lang = ". $lang_mailbox . ";\n";
echo "var csrf_token = '". $_SESSION['CSRF']['TOKEN'] . "';\n"; echo "var csrf_token = '". $_SESSION['CSRF']['TOKEN'] . "';\n";
$role = ($_SESSION['mailcow_cc_role'] == "admin") ? 'admin' : 'domainadmin'; $role = ($_SESSION['mailcow_cc_role'] == "admin") ? 'admin' : 'domainadmin';
@ -46,7 +46,7 @@ echo "var pagination_size = '". $PAGINATION_SIZE . "';\n";
?> ?>
</script> </script>
<script src="js/footable.min.js"></script> <script src="js/footable.min.js"></script>
<script src="js/quarantaine.js"></script> <script src="js/quarantine.js"></script>
<?php <?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';
} else { } else {

View File

@ -89,6 +89,9 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == '
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
<div class="col-sm-offset-3 col-sm-9"> <div class="col-sm-offset-3 col-sm-9">
<?php if ($mailboxdata['attributes']['force_pw_update'] == "1"): ?>
<div class="alert alert-danger"><?=$lang['user']['force_pw_update'];?></div>
<?php endif; ?>
<p><a href="#pwChangeModal" data-toggle="modal">[<?=$lang['user']['change_password'];?>]</a></p> <p><a href="#pwChangeModal" data-toggle="modal">[<?=$lang['user']['change_password'];?>]</a></p>
<p><a target="_blank" href="https://mailcow.github.io/mailcow-dockerized-docs/client/#<?=$clientconfigstr;?>">[<?=$lang['user']['client_configuration'];?>]</a></p> <p><a target="_blank" href="https://mailcow.github.io/mailcow-dockerized-docs/client/#<?=$clientconfigstr;?>">[<?=$lang['user']['client_configuration'];?>]</a></p>
</div> </div>
@ -164,21 +167,21 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == '
<button type="button" class="btn btn-sm btn-default <?=($get_tagging_options == "subfolder") ? 'active' : null; ?>" <button type="button" class="btn btn-sm btn-default <?=($get_tagging_options == "subfolder") ? 'active' : null; ?>"
id="edit_selected" id="edit_selected"
data-item="<?= $username; ?>" data-item="<?= htmlentities($username); ?>"
data-id="delimiter_action" data-id="delimiter_action"
data-api-url='edit/delimiter_action' data-api-url='edit/delimiter_action'
data-api-attr='{"tagged_mail_handler":"subfolder"}'><?=$lang['user']['tag_in_subfolder'];?></button> data-api-attr='{"tagged_mail_handler":"subfolder"}'><?=$lang['user']['tag_in_subfolder'];?></button>
<button type="button" class="btn btn-sm btn-default <?=($get_tagging_options == "subject") ? 'active' : null; ?>" <button type="button" class="btn btn-sm btn-default <?=($get_tagging_options == "subject") ? 'active' : null; ?>"
id="edit_selected" id="edit_selected"
data-item="<?= $username; ?>" data-item="<?= htmlentities($username); ?>"
data-id="delimiter_action" data-id="delimiter_action"
data-api-url='edit/delimiter_action' data-api-url='edit/delimiter_action'
data-api-attr='{"tagged_mail_handler":"subject"}'><?=$lang['user']['tag_in_subject'];?></button> data-api-attr='{"tagged_mail_handler":"subject"}'><?=$lang['user']['tag_in_subject'];?></button>
<button type="button" class="btn btn-sm btn-default <?=($get_tagging_options == "none") ? 'active' : null; ?>" <button type="button" class="btn btn-sm btn-default <?=($get_tagging_options == "none") ? 'active' : null; ?>"
id="edit_selected" id="edit_selected"
data-item="<?= $username; ?>" data-item="<?= htmlentities($username); ?>"
data-id="delimiter_action" data-id="delimiter_action"
data-api-url='edit/delimiter_action' data-api-url='edit/delimiter_action'
data-api-attr='{"tagged_mail_handler":"none"}'><?=$lang['user']['tag_in_none'];?></button> data-api-attr='{"tagged_mail_handler":"none"}'><?=$lang['user']['tag_in_none'];?></button>
@ -201,14 +204,14 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == '
<button type="button" class="btn btn-sm btn-default <?=($get_tls_policy['tls_enforce_in'] == "1") ? "active" : null;?>" <button type="button" class="btn btn-sm btn-default <?=($get_tls_policy['tls_enforce_in'] == "1") ? "active" : null;?>"
id="edit_selected" id="edit_selected"
data-item="<?= $username; ?>" data-item="<?= htmlentities($username); ?>"
data-id="tls_policy" data-id="tls_policy"
data-api-url='edit/tls_policy' data-api-url='edit/tls_policy'
data-api-attr='{"tls_enforce_in":<?=($get_tls_policy['tls_enforce_in'] == "1") ? "0" : "1";?>}'><?=$lang['user']['tls_enforce_in'];?></button> data-api-attr='{"tls_enforce_in":<?=($get_tls_policy['tls_enforce_in'] == "1") ? "0" : "1";?>}'><?=$lang['user']['tls_enforce_in'];?></button>
<button type="button" class="btn btn-sm btn-default <?=($get_tls_policy['tls_enforce_out'] == "1") ? "active" : null;?>" <button type="button" class="btn btn-sm btn-default <?=($get_tls_policy['tls_enforce_out'] == "1") ? "active" : null;?>"
id="edit_selected" id="edit_selected"
data-item="<?= $username; ?>" data-item="<?= htmlentities($username); ?>"
data-id="tls_policy" data-id="tls_policy"
data-api-url='edit/tls_policy' data-api-url='edit/tls_policy'
data-api-attr='{"tls_enforce_out":<?=($get_tls_policy['tls_enforce_out'] == "1") ? "0" : "1";?>}'><?=$lang['user']['tls_enforce_out'];?></button> data-api-attr='{"tls_enforce_out":<?=($get_tls_policy['tls_enforce_out'] == "1") ? "0" : "1";?>}'><?=$lang['user']['tls_enforce_out'];?></button>
@ -225,7 +228,7 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == '
<div class="row"> <div class="row">
<div class="col-md-3 col-xs-5 text-right"><?=$lang['user']['eas_reset'];?>:</div> <div class="col-md-3 col-xs-5 text-right"><?=$lang['user']['eas_reset'];?>:</div>
<div class="col-md-9 col-xs-7"> <div class="col-md-9 col-xs-7">
<button class="btn btn-xs btn-default" id="delete_selected" data-text="<?=$lang['user']['eas_reset'];?>?" data-item="<?= $username; ?>" data-id="eas_cache" data-api-url='delete/eas_cache' href="#"><?=$lang['user']['eas_reset_now'];?></button> <button class="btn btn-xs btn-default" id="delete_selected" data-text="<?=$lang['user']['eas_reset'];?>?" data-item="<?= htmlentities($username); ?>" data-id="eas_cache" data-api-url='delete/eas_cache' href="#"><?=$lang['user']['eas_reset_now'];?></button>
<p class="help-block"><?=$lang['user']['eas_reset_help'];?></p> <p class="help-block"><?=$lang['user']['eas_reset_help'];?></p>
</div> </div>
</div> </div>
@ -315,7 +318,7 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == '
<div class="form-group"> <div class="form-group">
<div class="col-sm-10"> <div class="col-sm-10">
<button type="button" class="btn btn-sm btn-success" id="edit_selected" <button type="button" class="btn btn-sm btn-success" id="edit_selected"
data-item="<?= $username; ?>" data-item="<?= htmlentities($username); ?>"
data-id="spam_score" data-id="spam_score"
data-api-url='edit/spam-score' data-api-url='edit/spam-score'
data-api-attr='{}'><?=$lang['user']['save_changes'];?></button> data-api-attr='{}'><?=$lang['user']['save_changes'];?></button>
@ -346,7 +349,7 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == '
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" name="object_from" id="object_from" placeholder="*@example.org" required> <input type="text" class="form-control" name="object_from" id="object_from" placeholder="*@example.org" required>
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-default" id="add_item" data-id="add_wl_policy_mailbox" data-api-url='add/mailbox-policy' data-api-attr='{"username":"<?= $username; ?>","object_list":"wl"}' href="#"><span class="glyphicon glyphicon-plus"></span> <?=$lang['user']['spamfilter_table_add'];?></button> <button class="btn btn-default" id="add_item" data-id="add_wl_policy_mailbox" data-api-url='add/mailbox-policy' data-api-attr='{"username":<?= json_encode($username); ?>,"object_list":"wl"}' href="#"><span class="glyphicon glyphicon-plus"></span> <?=$lang['user']['spamfilter_table_add'];?></button>
</span> </span>
</div> </div>
</form> </form>
@ -372,10 +375,10 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == '
<form class="form-inline" data-id="add_bl_policy_mailbox"> <form class="form-inline" data-id="add_bl_policy_mailbox">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" name="object_from" id="object_from" placeholder="*@example.org" required> <input type="text" class="form-control" name="object_from" id="object_from" placeholder="*@example.org" required>
<input type="hidden" name="username" value="<?= $username ;?>"> <input type="hidden" name="username" value="<?= htmlentities($username) ;?>">
<input type="hidden" name="object_list" value="bl"> <input type="hidden" name="object_list" value="bl">
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-default" id="add_item" data-id="add_bl_policy_mailbox" data-api-url='add/mailbox-policy' data-api-attr='{"username":"<?= $username; ?>","object_list":"bl"}' href="#"><span class="glyphicon glyphicon-plus"></span> <?=$lang['user']['spamfilter_table_add'];?></button> <button class="btn btn-default" id="add_item" data-id="add_bl_policy_mailbox" data-api-url='add/mailbox-policy' data-api-attr='{"username":<?= json_encode($username); ?>,"object_list":"bl"}' href="#"><span class="glyphicon glyphicon-plus"></span> <?=$lang['user']['spamfilter_table_add'];?></button>
</span> </span>
</div> </div>
</form> </form>

View File

@ -10,6 +10,8 @@ services:
volumes: volumes:
- ./data/conf/unbound/unbound.conf:/etc/unbound/unbound.conf:ro - ./data/conf/unbound/unbound.conf:/etc/unbound/unbound.conf:ro
restart: always restart: always
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
networks: networks:
mailcow-network: mailcow-network:
ipv4_address: ${IPV4_NETWORK:-172.22.1}.254 ipv4_address: ${IPV4_NETWORK:-172.22.1}.254
@ -30,6 +32,10 @@ services:
restart: always restart: always
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
ports:
- "${SQL_PORT:-127.0.0.1:13306}:3306"
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
networks: networks:
mailcow-network: mailcow-network:
aliases: aliases:
@ -44,6 +50,8 @@ services:
- TZ=${TZ} - TZ=${TZ}
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
networks: networks:
mailcow-network: mailcow-network:
ipv4_address: ${IPV4_NETWORK:-172.22.1}.249 ipv4_address: ${IPV4_NETWORK:-172.22.1}.249
@ -51,7 +59,7 @@ services:
- redis - redis
clamd-mailcow: clamd-mailcow:
image: mailcow/clamd:1.8 image: mailcow/clamd:1.9
build: ./data/Dockerfiles/clamd build: ./data/Dockerfiles/clamd
restart: always restart: always
environment: environment:
@ -61,13 +69,15 @@ services:
- ./data/conf/clamav/:/etc/clamav/ - ./data/conf/clamav/:/etc/clamav/
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
networks: networks:
mailcow-network: mailcow-network:
aliases: aliases:
- clamd - clamd
rspamd-mailcow: rspamd-mailcow:
image: mailcow/rspamd:1.16 image: mailcow/rspamd:1.17
build: ./data/Dockerfiles/rspamd build: ./data/Dockerfiles/rspamd
stop_grace_period: 30s stop_grace_period: 30s
depends_on: depends_on:
@ -76,12 +86,13 @@ services:
- TZ=${TZ} - TZ=${TZ}
volumes: volumes:
- ./data/conf/rspamd/custom/:/etc/rspamd/custom:ro - ./data/conf/rspamd/custom/:/etc/rspamd/custom:ro
- ./data/conf/rspamd/override.d/:/etc/rspamd/override.d:ro - ./data/conf/rspamd/override.d/:/etc/rspamd/override.d:rw
- ./data/conf/rspamd/local.d/:/etc/rspamd/local.d:ro - ./data/conf/rspamd/local.d/:/etc/rspamd/local.d:ro
- ./data/conf/rspamd/lua/:/etc/rspamd/lua/:ro - ./data/conf/rspamd/lua/:/etc/rspamd/lua/:ro
- dkim-vol-1:/data/dkim - rspamd-sock:/rspamd-sock
- rspamd-vol-1:/var/lib/rspamd
restart: always restart: always
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
hostname: rspamd hostname: rspamd
@ -91,7 +102,7 @@ services:
- rspamd - rspamd
php-fpm-mailcow: php-fpm-mailcow:
image: mailcow/phpfpm:1.9 image: mailcow/phpfpm:1.12
build: ./data/Dockerfiles/phpfpm build: ./data/Dockerfiles/phpfpm
command: "php-fpm -d date.timezone=${TZ} -d expose_php=0" command: "php-fpm -d date.timezone=${TZ} -d expose_php=0"
depends_on: depends_on:
@ -99,13 +110,14 @@ services:
volumes: volumes:
- ./data/web:/web:rw - ./data/web:/web:rw
- ./data/conf/rspamd/dynmaps:/dynmaps:ro - ./data/conf/rspamd/dynmaps:/dynmaps:ro
- dkim-vol-1:/data/dkim - rspamd-sock:/rspamd-sock
- ./data/conf/rspamd/meta_exporter:/meta_exporter:ro - ./data/conf/rspamd/meta_exporter:/meta_exporter:ro
- ./data/conf/phpfpm/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf - ./data/conf/phpfpm/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf
- ./data/conf/phpfpm/php-fpm.d/system.conf:/usr/local/etc/php-fpm.d/system.conf - ./data/conf/phpfpm/php-fpm.d/system.conf:/usr/local/etc/php-fpm.d/system.conf
- ./data/conf/phpfpm/php-conf.d/opcache-recommended.ini:/usr/local/etc/php/conf.d/opcache-recommended.ini - ./data/conf/phpfpm/php-conf.d/opcache-recommended.ini:/usr/local/etc/php/conf.d/opcache-recommended.ini
- ./data/conf/phpfpm/php-conf.d/upload.ini:/usr/local/etc/php/conf.d/upload.ini
environment: environment:
- LOG_LINES=${LOG_LINES:-9999} - LOG_LINES=${LOG_LINES}
- TZ=${TZ} - TZ=${TZ}
- DBNAME=${DBNAME} - DBNAME=${DBNAME}
- DBUSER=${DBUSER} - DBUSER=${DBUSER}
@ -120,6 +132,8 @@ services:
- SMTPS_PORT=${SMTPS_PORT:-465} - SMTPS_PORT=${SMTPS_PORT:-465}
- SMTP_PORT=${SMTP_PORT:-25} - SMTP_PORT=${SMTP_PORT:-25}
restart: always restart: always
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
networks: networks:
@ -128,18 +142,20 @@ services:
- phpfpm - phpfpm
sogo-mailcow: sogo-mailcow:
image: mailcow/sogo:1.16 image: mailcow/sogo:1.18
build: ./data/Dockerfiles/sogo build: ./data/Dockerfiles/sogo
environment: environment:
- DBNAME=${DBNAME} - DBNAME=${DBNAME}
- DBUSER=${DBUSER} - DBUSER=${DBUSER}
- DBPASS=${DBPASS} - DBPASS=${DBPASS}
- TZ=${TZ} - TZ=${TZ}
- LOG_LINES=${LOG_LINES:-9999} - LOG_LINES=${LOG_LINES}
- MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME} - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
volumes: volumes:
- ./data/conf/sogo/:/etc/sogo/ - ./data/conf/sogo/:/etc/sogo/
restart: always restart: always
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
networks: networks:
@ -149,7 +165,7 @@ services:
- sogo - sogo
dovecot-mailcow: dovecot-mailcow:
image: mailcow/dovecot:1.22 image: mailcow/dovecot:1.23
build: ./data/Dockerfiles/dovecot build: ./data/Dockerfiles/dovecot
cap_add: cap_add:
- NET_BIND_SERVICE - NET_BIND_SERVICE
@ -159,8 +175,9 @@ services:
- ./data/conf/sogo/:/etc/sogo/ - ./data/conf/sogo/:/etc/sogo/
- vmail-vol-1:/var/vmail - vmail-vol-1:/var/vmail
- crypt-vol-1:/mail_crypt/ - crypt-vol-1:/mail_crypt/
- rspamd-sock:/rspamd-sock
environment: environment:
- LOG_LINES=${LOG_LINES:-9999} - LOG_LINES=${LOG_LINES}
- DBNAME=${DBNAME} - DBNAME=${DBNAME}
- DBUSER=${DBUSER} - DBUSER=${DBUSER}
- DBPASS=${DBPASS} - DBPASS=${DBPASS}
@ -180,6 +197,8 @@ services:
hard: 40000 hard: 40000
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
hostname: ${MAILCOW_HOSTNAME} hostname: ${MAILCOW_HOSTNAME}
networks: networks:
mailcow-network: mailcow-network:
@ -187,7 +206,7 @@ services:
- dovecot - dovecot
postfix-mailcow: postfix-mailcow:
image: mailcow/postfix:1.13 image: mailcow/postfix:1.14
build: ./data/Dockerfiles/postfix build: ./data/Dockerfiles/postfix
volumes: volumes:
- ./data/conf/postfix:/opt/postfix/conf - ./data/conf/postfix:/opt/postfix/conf
@ -195,7 +214,7 @@ services:
- postfix-vol-1:/var/spool/postfix - postfix-vol-1:/var/spool/postfix
- crypt-vol-1:/var/lib/zeyple - crypt-vol-1:/var/lib/zeyple
environment: environment:
- LOG_LINES=${LOG_LINES:-9999} - LOG_LINES=${LOG_LINES}
- TZ=${TZ} - TZ=${TZ}
- DBNAME=${DBNAME} - DBNAME=${DBNAME}
- DBUSER=${DBUSER} - DBUSER=${DBUSER}
@ -209,6 +228,8 @@ services:
restart: always restart: always
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
hostname: ${MAILCOW_HOSTNAME} hostname: ${MAILCOW_HOSTNAME}
networks: networks:
mailcow-network: mailcow-network:
@ -218,6 +239,8 @@ services:
memcached-mailcow: memcached-mailcow:
image: memcached:alpine image: memcached:alpine
restart: always restart: always
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
networks: networks:
@ -240,6 +263,7 @@ services:
until ping phpfpm -c1 > /dev/null; do sleep 1; done && until ping phpfpm -c1 > /dev/null; do sleep 1; done &&
until ping sogo -c1 > /dev/null; do sleep 1; done && until ping sogo -c1 > /dev/null; do sleep 1; done &&
until ping redis -c1 > /dev/null; do sleep 1; done && until ping redis -c1 > /dev/null; do sleep 1; done &&
until ping rspamd -c1 > /dev/null; do sleep 1; done &&
exec nginx -g 'daemon off;'" exec nginx -g 'daemon off;'"
environment: environment:
- HTTPS_PORT=${HTTPS_PORT:-443} - HTTPS_PORT=${HTTPS_PORT:-443}
@ -256,6 +280,8 @@ services:
- "${HTTPS_BIND:-0.0.0.0}:${HTTPS_PORT:-443}:${HTTPS_PORT:-443}" - "${HTTPS_BIND:-0.0.0.0}:${HTTPS_PORT:-443}:${HTTPS_PORT:-443}"
- "${HTTP_BIND:-0.0.0.0}:${HTTP_PORT:-80}:${HTTP_PORT:-80}" - "${HTTP_BIND:-0.0.0.0}:${HTTP_PORT:-80}:${HTTP_PORT:-80}"
restart: always restart: always
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
networks: networks:
@ -269,10 +295,12 @@ services:
- mysql-mailcow - mysql-mailcow
image: mailcow/acme:1.28 image: mailcow/acme:1.28
build: ./data/Dockerfiles/acme build: ./data/Dockerfiles/acme
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
environment: environment:
- LOG_LINES=${LOG_LINES:-9999} - LOG_LINES=${LOG_LINES}
- ADDITIONAL_SAN=${ADDITIONAL_SAN} - ADDITIONAL_SAN=${ADDITIONAL_SAN}
- MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME} - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
- DBNAME=${DBNAME} - DBNAME=${DBNAME}
@ -290,9 +318,9 @@ services:
aliases: aliases:
- acme - acme
fail2ban-mailcow: netfilter-mailcow:
image: mailcow/fail2ban:1.11 image: mailcow/netfilter:1.11
build: ./data/Dockerfiles/fail2ban build: ./data/Dockerfiles/netfilter
stop_grace_period: 30s stop_grace_period: 30s
depends_on: depends_on:
- dovecot-mailcow - dovecot-mailcow
@ -304,24 +332,28 @@ services:
privileged: true privileged: true
environment: environment:
- TZ=${TZ} - TZ=${TZ}
- SKIP_FAIL2BAN=${SKIP_FAIL2BAN:-n}
- IPV4_NETWORK=${IPV4_NETWORK:-172.22.1} - IPV4_NETWORK=${IPV4_NETWORK:-172.22.1}
- SNAT_TO_SOURCE=${SNAT_TO_SOURCE:-n}
network_mode: "host" network_mode: "host"
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
volumes: volumes:
- /lib/modules:/lib/modules:ro - /lib/modules:/lib/modules:ro
watchdog-mailcow: watchdog-mailcow:
image: mailcow/watchdog:1.13 image: mailcow/watchdog:1.14
# Debug # Debug
command: /watchdog.sh #command: /watchdog.sh
build: ./data/Dockerfiles/watchdog build: ./data/Dockerfiles/watchdog
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
volumes: volumes:
- vmail-vol-1:/vmail:ro - rspamd-sock:/rspamd-sock
restart: always restart: always
environment: environment:
- LOG_LINES=${LOG_LINES:-9999} - LOG_LINES=${LOG_LINES}
- TZ=${TZ} - TZ=${TZ}
- DBNAME=${DBNAME} - DBNAME=${DBNAME}
- DBUSER=${DBUSER} - DBUSER=${DBUSER}
@ -337,9 +369,11 @@ services:
- watchdog - watchdog
dockerapi-mailcow: dockerapi-mailcow:
image: mailcow/dockerapi:1.5 image: mailcow/dockerapi:1.9
restart: always restart: always
build: ./data/Dockerfiles/dockerapi build: ./data/Dockerfiles/dockerapi
sysctls:
- net.ipv6.conf.all.disable_ipv6=${SYSCTL_IPV6_DISABLED:-0}
oom_score_adj: -10 oom_score_adj: -10
environment: environment:
- TZ=${TZ} - TZ=${TZ}
@ -373,8 +407,8 @@ networks:
volumes: volumes:
vmail-vol-1: vmail-vol-1:
mysql-vol-1: mysql-vol-1:
dkim-vol-1:
redis-vol-1: redis-vol-1:
rspamd-vol-1: rspamd-vol-1:
postfix-vol-1: postfix-vol-1:
crypt-vol-1: crypt-vol-1:
rspamd-sock:

View File

@ -1,5 +1,18 @@
#!/bin/bash #!/bin/bash
+#exit on error and pipefail
+set -o errexit
+set -o pipefail
if grep --help 2>&1 | grep -q -i "busybox"; then
echo "BusybBox grep detected, please install gnu grep, \"apk add --no-cache --upgrade grep\""
exit 1
fi
if cp --help 2>&1 | grep -q -i "busybox"; then
echo "BusybBox cp detected, please install coreutils, \"apk add --no-cache --upgrade coreutils\""
exit 1
fi
if [[ -f mailcow.conf ]]; then if [[ -f mailcow.conf ]]; then
read -r -p "A config file exists and will be overwritten, are you sure you want to contine? [y/N] " response read -r -p "A config file exists and will be overwritten, are you sure you want to contine? [y/N] " response
case $response in case $response in
@ -28,6 +41,8 @@ else
read -p "Timezone: " -ei ${TZ} TZ read -p "Timezone: " -ei ${TZ} TZ
fi fi
[[ ! -f ./data/conf/rspamd/override.d/worker-controller-password.inc ]] && echo '# Placeholder' > ./data/conf/rspamd/override.d/worker-controller-password.inc
cat << EOF > mailcow.conf cat << EOF > mailcow.conf
# ------------------------------ # ------------------------------
# mailcow web ui configuration # mailcow web ui configuration
@ -74,6 +89,7 @@ POP_PORT=110
POPS_PORT=995 POPS_PORT=995
SIEVE_PORT=4190 SIEVE_PORT=4190
DOVEADM_PORT=127.0.0.1:19991 DOVEADM_PORT=127.0.0.1:19991
SQL_PORT=127.0.0.1:13306
# Your timezone # Your timezone
TZ=${TZ} TZ=${TZ}
@ -87,12 +103,10 @@ ADDITIONAL_SAN=
# Skip running ACME (acme-mailcow, Let's Encrypt certs) - y/n # Skip running ACME (acme-mailcow, Let's Encrypt certs) - y/n
SKIP_LETS_ENCRYPT=n SKIP_LETS_ENCRYPT=n
# Skip IPv4 check in ACME container - y/n # Skip IPv4 check in ACME container - y/n
SKIP_IP_CHECK=n SKIP_IP_CHECK=n
# Skip Fail2ban implementation (fail2ban-mailcow) - y/n
SKIP_FAIL2BAN=n
# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n # Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n
SKIP_CLAMD=n SKIP_CLAMD=n
@ -107,9 +121,17 @@ LOG_LINES=9999
# Internal IPv4 /24 subnet, format n.n.n. (expands to n.n.n.0/24) # Internal IPv4 /24 subnet, format n.n.n. (expands to n.n.n.0/24)
IPV4_NETWORK=172.22.1 IPV4_NETWORK=172.22.1
# Internal IPv6 subnet in fd00::/8 # Internal IPv6 subnet in fc00::/7
IPV6_NETWORK=fd4d:6169:6c63:6f77::/64 IPV6_NETWORK=fd4d:6169:6c63:6f77::/64
# Use this IP for outgoing connections (SNAT)' >> mailcow.conf
#SNAT_TO_SOURCE=" >> mailcow.conf
# Disable IPv6
# mailcow-network will still be created as IPv6 enabled, all containers will be created
# without IPv6 support.
# Use 1 for disabled, 0 for enabled
SYSCTL_IPV6_DISABLED=0
EOF EOF

View File

@ -0,0 +1,34 @@
#!/usr/bin/ruby
MASTER="en"
DIR = "#{__dir__}/.."
keys = %x[sed -r 's/.*(\\['.*'\\]\\['.*'\\]).*/\\1/g' #{DIR}/data/web/lang/lang.#{MASTER}.php | grep '^\\\[' | sed 's/\\[/\\\\[/g' | sed 's/\\]/\\\\]/g'|sort | uniq]
not_used_in_php = []
keys.split("\n").each do |key|
%x[git grep "#{key}" -- #{DIR}/data/web/*.php #{DIR}/data/web/inc #{DIR}/data/web/modals]
if $?.exitstatus > 0
not_used_in_php << key
end
end
# \['user'\]\['username'\]
# \['user'\]\['waiting'\]
# \['warning'\]\['spam_alias_temp_error'\]
not_used = []
not_used_in_php.each do |string|
section = string.scan(/([a-z]+)/)[0][0]
key = string.scan(/([a-z]+)/)[1][0]
%x[git grep lang.#{key} -- #{DIR}/data/web/js/#{section}.js]
if $?.exitstatus > 0
not_used << string
end
end
puts "# Remove unused translation keys:"
not_used.each do |key|
puts "sed -i \"/\\$lang#{key}.*;/d\" data/web/lang/lang.??.php"
end

View File

@ -1,23 +1,32 @@
#!/bin/bash #!/bin/bash
[[ -z ${1} ]] && { echo "No parameters given"; exit 1; }
for bin in curl dirmngr; do for bin in curl dirmngr; do
if [[ -z $(which ${bin}) ]]; then echo "Cannot find ${bin}, exiting..."; exit 1; fi if [[ -z $(which ${bin}) ]]; then echo "Cannot find ${bin}, exiting..."; exit 1; fi
done done
[[ -z ${1} ]] && NC_HELP=y
while [ "$1" != '' ]; do while [ "$1" != '' ]; do
case "${1}" in case "${1}" in
-p|--purge) NC_PURGE=y && shift;; -p|--purge) NC_PURGE=y && shift;;
-i|--install) NC_INSTALL=y && shift;; -i|--install) NC_INSTALL=y && shift;;
-h|--help) NC_HELP=y && shift;;
*) echo "Unknown parameter: ${1}" && shift;; *) echo "Unknown parameter: ${1}" && shift;;
esac esac
done done
if [[ ${NC_HELP} == "y" ]]; then
printf 'Usage:\n\n'
printf ' -p|--purge\n Purge Nextcloud\n'
printf ' -i|--install\n Install Nextcloud\n\n'
exit 0
fi
[[ ${NC_PURGE} == "y" ]] && [[ ${NC_INSTALL} == "y" ]] && { echo "Cannot use -p and -i at the same time"; } [[ ${NC_PURGE} == "y" ]] && [[ ${NC_INSTALL} == "y" ]] && { echo "Cannot use -p and -i at the same time"; }
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source ${SCRIPT_DIR}/../mailcow.conf cd ${SCRIPT_DIR}/../
source mailcow.conf
if [[ ${NC_PURGE} == "y" ]]; then if [[ ${NC_PURGE} == "y" ]]; then
@ -55,7 +64,7 @@ elif [[ ${NC_INSTALL} == "y" ]]; then
ADMIN_NC_PASS=$(</dev/urandom tr -dc A-Za-z0-9 | head -c 28) ADMIN_NC_PASS=$(</dev/urandom tr -dc A-Za-z0-9 | head -c 28)
curl -L# -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/latest-12.tar.bz2" \ curl -L# -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/latest-13.tar.bz2" || { echo "Failed to download Nextcloud archive."; exit 1; } \
&& tar -xjf nextcloud.tar.bz2 -C ./data/web/ \ && tar -xjf nextcloud.tar.bz2 -C ./data/web/ \
&& rm nextcloud.tar.bz2 \ && rm nextcloud.tar.bz2 \
&& rm -rf ./data/web/nextcloud/updater \ && rm -rf ./data/web/nextcloud/updater \

115
update.sh
View File

@ -1,12 +1,57 @@
#!/bin/bash #!/bin/bash
#exit on error and pipefail
set -o errexit
set -o pipefail
for bin in curl docker-compose docker git awk sha1sum; do for bin in curl docker-compose docker git awk sha1sum; do
if [[ -z $(which ${bin}) ]]; then echo "Cannot find ${bin}, exiting..."; exit 1; fi if [[ -z $(which ${bin}) ]]; then echo "Cannot find ${bin}, exiting..."; exit 1; fi
done done
export LC_ALL=C
DATE=$(date +%Y-%m-%d_%H_%M_%S)
BRANCH=$(git rev-parse --abbrev-ref HEAD)
while (($#)); do
case "${1}" in
--check|-c)
echo "Checking remote code for updates..."
git fetch origin ${BRANCH}
if [[ -z $(git log HEAD --pretty=format:"%H" | grep $(git rev-parse origin/${BRANCH})) ]]; then
echo "Updated code is available."
exit 0
else
echo "No updates available."
exit 3
fi
;;
--ours)
MERGE_STRATEGY=ours
;;
esac
done
[[ ! -f mailcow.conf ]] && { echo "mailcow.conf is missing"; exit 1;} [[ ! -f mailcow.conf ]] && { echo "mailcow.conf is missing"; exit 1;}
CONFIG_ARRAY=("SKIP_LETS_ENCRYPT" "USE_WATCHDOG" "WATCHDOG_NOTIFY_EMAIL" "SKIP_CLAMD" "SKIP_IP_CHECK" "SKIP_FAIL2BAN" "ADDITIONAL_SAN" "DOVEADM_PORT" "IPV4_NETWORK" "IPV6_NETWORK" "LOG_LINES") if grep --help 2>&1 | head -n 1 | grep -q -i "busybox"; then echo "BusybBox grep detected, please install gnu grep, \"apk add --no-cache --upgrade grep\""; exit 1; fi
if cp --help 2>&1 | head -n 1 | grep -q -i "busybox"; then echo "BusybBox cp detected, please install coreutils, \"apk add --no-cache --upgrade coreutils\""; exit 1; fi
CONFIG_ARRAY=(
"SKIP_LETS_ENCRYPT"
"USE_WATCHDOG"
"WATCHDOG_NOTIFY_EMAIL"
"SKIP_CLAMD"
"SKIP_IP_CHECK"
"ADDITIONAL_SAN"
"DOVEADM_PORT"
"IPV4_NETWORK"
"IPV6_NETWORK"
"LOG_LINES"
"SNAT_TO_SOURCE"
"SYSCTL_IPV6_DISABLED"
"SQL_PORT"
)
sed -i '$a\' mailcow.conf sed -i '$a\' mailcow.conf
for option in ${CONFIG_ARRAY[@]}; do for option in ${CONFIG_ARRAY[@]}; do
if [[ ${option} == "ADDITIONAL_SAN" ]]; then if [[ ${option} == "ADDITIONAL_SAN" ]]; then
@ -14,6 +59,15 @@ for option in ${CONFIG_ARRAY[@]}; do
echo "Adding new option \"${option}\" to mailcow.conf" echo "Adding new option \"${option}\" to mailcow.conf"
echo "${option}=" >> mailcow.conf echo "${option}=" >> mailcow.conf
fi fi
elif [[ ${option} == "SYSCTL_IPV6_DISABLED" ]]; then
if ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
echo "# Disable IPv6" >> mailcow.conf
echo "# mailcow-network will still be created as IPv6 enabled, all containers will be created" >> mailcow.conf
echo "# without IPv6 support." >> mailcow.conf
echo "# Use 1 for disabled, 0 for enabled" >> mailcow.conf
echo "SYSCTL_IPV6_DISABLED=0" >> mailcow.conf
fi
elif [[ ${option} == "COMPOSE_PROJECT_NAME" ]]; then elif [[ ${option} == "COMPOSE_PROJECT_NAME" ]]; then
if ! grep -q ${option} mailcow.conf; then if ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf" echo "Adding new option \"${option}\" to mailcow.conf"
@ -44,9 +98,21 @@ for option in ${CONFIG_ARRAY[@]}; do
elif [[ ${option} == "IPV6_NETWORK" ]]; then elif [[ ${option} == "IPV6_NETWORK" ]]; then
if ! grep -q ${option} mailcow.conf; then if ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf" echo "Adding new option \"${option}\" to mailcow.conf"
echo '# Internal IPv6 subnet in fd00::/8' >> mailcow.conf echo '# Internal IPv6 subnet in fc00::/7' >> mailcow.conf
echo "IPV6_NETWORK=fd4d:6169:6c63:6f77::/64" >> mailcow.conf echo "IPV6_NETWORK=fd4d:6169:6c63:6f77::/64" >> mailcow.conf
fi fi
elif [[ ${option} == "SQL_PORT" ]]; then
if ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
echo '# Bind SQL to 127.0.0.1 on port 13306' >> mailcow.conf
echo "SQL_PORT=127.0.0.1:13306" >> mailcow.conf
fi
elif [[ ${option} == "SNAT_TO_SOURCE" ]]; then
if ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"
echo '# Use this IP for outgoing connections (SNAT)' >> mailcow.conf
echo "#SNAT_TO_SOURCE=" >> mailcow.conf
fi
elif ! grep -q ${option} mailcow.conf; then elif ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf" echo "Adding new option \"${option}\" to mailcow.conf"
echo "${option}=n" >> mailcow.conf echo "${option}=n" >> mailcow.conf
@ -58,35 +124,10 @@ curl -o /dev/null google.com -sm3
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
echo -e "\e[31mfailed\e[0m" echo -e "\e[31mfailed\e[0m"
exit 1 exit 1
else else
echo -e "\e[32mOK\e[0m" echo -e "\e[32mOK\e[0m"
fi fi
set -o pipefail
export LC_ALL=C
DATE=$(date +%Y-%m-%d_%H_%M_%S)
BRANCH=$(git rev-parse --abbrev-ref HEAD)
declare -a DC_PARAMS
while (($#)); do
case "${1}" in
--check|-c)
echo "Checking remote code for updates..."
git fetch origin ${BRANCH}
if [[ $(git branch ${BRANCH} --contains $(git rev-parse origin/${BRANCH}) > /dev/null 2> /dev/null; echo $?) != 0 ]]; then
echo "Updated code is available."
exit 0
else
echo "No updates available."
exit 3
fi
;;
--no-start)
DC_PARAMS=(${DC_PARAMS[@]} "--no-start")
;;
esac
done
echo -e "\e[32mChecking for newer update script...\e[0m" echo -e "\e[32mChecking for newer update script...\e[0m"
SHA1_1=$(sha1sum update.sh) SHA1_1=$(sha1sum update.sh)
git fetch origin ${BRANCH} git fetch origin ${BRANCH}
@ -100,7 +141,7 @@ fi
if [[ -f mailcow.conf ]]; then if [[ -f mailcow.conf ]]; then
source mailcow.conf source mailcow.conf
else else
echo -e "\e[31mNo mailcow.conf - is mailcow installed?\e[0m" echo -e "\e[31mNo mailcow.conf - is mailcow installed?\e[0m"
exit 1 exit 1
fi fi
@ -118,13 +159,14 @@ docker-compose down
# Silently fixing remote url from andryyy to mailcow # Silently fixing remote url from andryyy to mailcow
git remote set-url origin https://github.com/mailcow/mailcow-dockerized git remote set-url origin https://github.com/mailcow/mailcow-dockerized
echo -e "\e[32mCommitting current status...\e[0m" echo -e "\e[32mCommitting current status...\e[0m"
git update-index --assume-unchanged data/conf/rspamd/override.d/worker-controller-password.inc
git add -u git add -u
git commit -am "Before update on ${DATE}" > /dev/null git commit -am "Before update on ${DATE}" > /dev/null
echo -e "\e[32mFetching updated code from remote...\e[0m" echo -e "\e[32mFetching updated code from remote...\e[0m"
git fetch origin ${BRANCH} git fetch origin ${BRANCH}
echo -e "\e[32mMerging local with remote code (recursive, options: \"theirs\", \"patience\"...\e[0m" echo -e "\e[32mMerging local with remote code (recursive, strategy: \"${MERGE_STRATEGY:-theirs}\", options: \"patience\"...\e[0m"
git config merge.defaultToUpstream true git config merge.defaultToUpstream true
git merge -Xtheirs -Xpatience -m "After update on ${DATE}" git merge -X${MERGE_STRATEGY:-theirs} -Xpatience -m "After update on ${DATE}"
# Need to use a variable to not pass return codes of if checks # Need to use a variable to not pass return codes of if checks
MERGE_RETURN=$? MERGE_RETURN=$?
if [[ ${MERGE_RETURN} == 128 ]]; then if [[ ${MERGE_RETURN} == 128 ]]; then
@ -147,11 +189,14 @@ fi
echo -e "\e[32mFetching new docker-compose version...\e[0m" echo -e "\e[32mFetching new docker-compose version...\e[0m"
sleep 2 sleep 2
if [[ $(curl -sL -w "%{http_code}" https://www.servercow.de/docker-compose/latest.php -o /dev/null) == "200" ]]; then if [[ ! -z $(which pip) && $(pip list --local | grep -c docker-compose) == 1 ]]; then
true
#prevent breaking a working docker-compose installed with pip
elif [[ $(curl -sL -w "%{http_code}" https://www.servercow.de/docker-compose/latest.php -o /dev/null) == "200" ]]; then
LATEST_COMPOSE=$(curl -#L https://www.servercow.de/docker-compose/latest.php) LATEST_COMPOSE=$(curl -#L https://www.servercow.de/docker-compose/latest.php)
curl -#L https://github.com/docker/compose/releases/download/${LATEST_COMPOSE}/docker-compose-$(uname -s)-$(uname -m) > $(which docker-compose) curl -#L https://github.com/docker/compose/releases/download/${LATEST_COMPOSE}/docker-compose-$(uname -s)-$(uname -m) > $(which docker-compose)
chmod +x $(which docker-compose) chmod +x $(which docker-compose)
else else
echo -e "\e[33mCannot determine latest docker-compose version, skipping...\e[0m" echo -e "\e[33mCannot determine latest docker-compose version, skipping...\e[0m"
fi fi
@ -165,7 +210,7 @@ cp -n data/assets/ssl-example/*.pem data/assets/ssl/
echo -e "\e[32mStarting mailcow...\e[0m" echo -e "\e[32mStarting mailcow...\e[0m"
sleep 2 sleep 2
docker-compose up -d --remove-orphans ${DC_PARAMS[@]} docker-compose up -d --remove-orphans
echo -e "\e[32mCollecting garbage...\e[0m" echo -e "\e[32mCollecting garbage...\e[0m"
IMGS_TO_DELETE=() IMGS_TO_DELETE=()
@ -203,7 +248,7 @@ if [[ ! -z ${IMGS_TO_DELETE[*]} ]]; then
read -r -p "Do you want to delete old image tags right now? [y/N] " response read -r -p "Do you want to delete old image tags right now? [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
docker rmi ${IMGS_TO_DELETE[*]} docker rmi ${IMGS_TO_DELETE[*]}
else else
echo "OK, skipped." echo "OK, skipped."
fi fi
fi fi