commit
a80b5b7dd0
2
.github/renovate.json
vendored
2
.github/renovate.json
vendored
@ -12,7 +12,7 @@
|
|||||||
"baseBranches": ["staging"],
|
"baseBranches": ["staging"],
|
||||||
"enabledManagers": ["github-actions", "regex", "docker-compose"],
|
"enabledManagers": ["github-actions", "regex", "docker-compose"],
|
||||||
"ignorePaths": [
|
"ignorePaths": [
|
||||||
"data\/web\/inc\/lib\/vendor\/matthiasmullie\/minify\/**"
|
"data\/web\/inc\/lib\/vendor\/**"
|
||||||
],
|
],
|
||||||
"regexManagers": [
|
"regexManagers": [
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,7 @@ jobs:
|
|||||||
if: github.event.pull_request.base.ref != 'staging' #check if the target branch is not staging
|
if: github.event.pull_request.base.ref != 'staging' #check if the target branch is not staging
|
||||||
steps:
|
steps:
|
||||||
- name: Send message
|
- name: Send message
|
||||||
uses: thollander/actions-comment-pull-request@v2.4.2
|
uses: thollander/actions-comment-pull-request@v2.4.3
|
||||||
with:
|
with:
|
||||||
GITHUB_TOKEN: ${{ secrets.CHECKIFPRISSTAGING_ACTION_PAT }}
|
GITHUB_TOKEN: ${{ secrets.CHECKIFPRISSTAGING_ACTION_PAT }}
|
||||||
message: |
|
message: |
|
||||||
|
@ -25,7 +25,7 @@ Please see [the official documentation](https://docs.mailcow.email/) for install
|
|||||||
|
|
||||||
[Telegram mailcow Off-Topic channel](https://t.me/mailcowOfftopic)
|
[Telegram mailcow Off-Topic channel](https://t.me/mailcowOfftopic)
|
||||||
|
|
||||||
[Official Twitter Account](https://twitter.com/mailcow_email)
|
[Official 𝕏 (Twitter) Account](https://twitter.com/mailcow_email)
|
||||||
|
|
||||||
Telegram desktop clients are available for [multiple platforms](https://desktop.telegram.org). You can search the groups history for keywords.
|
Telegram desktop clients are available for [multiple platforms](https://desktop.telegram.org). You can search the groups history for keywords.
|
||||||
|
|
||||||
@ -38,4 +38,4 @@ mailcow is a registered word mark of The Infrastructure Company GmbH, Parkstr. 4
|
|||||||
|
|
||||||
The project is managed and maintained by The Infrastructure Company GmbH.
|
The project is managed and maintained by The Infrastructure Company GmbH.
|
||||||
|
|
||||||
Originated from @andryyy (André)
|
Originated from @andryyy (André)
|
||||||
|
@ -2,9 +2,9 @@ FROM debian:bullseye-slim
|
|||||||
LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
|
LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
# renovate: datasource=github-tags depName=dovecot/core versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-tags depName=dovecot/core versioning=semver-coerced extractVersion=(?<version>.*)$
|
||||||
ARG DOVECOT=2.3.21
|
ARG DOVECOT=2.3.21
|
||||||
# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=(?<version>.*)$
|
||||||
ARG GOSU_VERSION=1.16
|
ARG GOSU_VERSION=1.16
|
||||||
ENV LC_ALL C
|
ENV LC_ALL C
|
||||||
|
|
||||||
|
@ -75,7 +75,8 @@ my $sth = $dbh->prepare("SELECT id,
|
|||||||
custom_params,
|
custom_params,
|
||||||
subscribeall,
|
subscribeall,
|
||||||
timeout1,
|
timeout1,
|
||||||
timeout2
|
timeout2,
|
||||||
|
dry
|
||||||
FROM imapsync
|
FROM imapsync
|
||||||
WHERE active = 1
|
WHERE active = 1
|
||||||
AND is_running = 0
|
AND is_running = 0
|
||||||
@ -111,13 +112,16 @@ while ($row = $sth->fetchrow_arrayref()) {
|
|||||||
$subscribeall = @$row[18];
|
$subscribeall = @$row[18];
|
||||||
$timeout1 = @$row[19];
|
$timeout1 = @$row[19];
|
||||||
$timeout2 = @$row[20];
|
$timeout2 = @$row[20];
|
||||||
|
$dry = @$row[21];
|
||||||
|
|
||||||
if ($enc1 eq "TLS") { $enc1 = "--tls1"; } elsif ($enc1 eq "SSL") { $enc1 = "--ssl1"; } else { undef $enc1; }
|
if ($enc1 eq "TLS") { $enc1 = "--tls1"; } elsif ($enc1 eq "SSL") { $enc1 = "--ssl1"; } else { undef $enc1; }
|
||||||
|
|
||||||
my $template = $run_dir . '/imapsync.XXXXXXX';
|
my $template = $run_dir . '/imapsync.XXXXXXX';
|
||||||
my $passfile1 = File::Temp->new(TEMPLATE => $template);
|
my $passfile1 = File::Temp->new(TEMPLATE => $template);
|
||||||
my $passfile2 = File::Temp->new(TEMPLATE => $template);
|
my $passfile2 = File::Temp->new(TEMPLATE => $template);
|
||||||
|
|
||||||
|
binmode( $passfile1, ":utf8" );
|
||||||
|
|
||||||
print $passfile1 "$password1\n";
|
print $passfile1 "$password1\n";
|
||||||
print $passfile2 trim($master_pass) . "\n";
|
print $passfile2 trim($master_pass) . "\n";
|
||||||
|
|
||||||
@ -148,6 +152,7 @@ while ($row = $sth->fetchrow_arrayref()) {
|
|||||||
"--host2", "localhost",
|
"--host2", "localhost",
|
||||||
"--user2", $user2 . '*' . trim($master_user),
|
"--user2", $user2 . '*' . trim($master_user),
|
||||||
"--passfile2", $passfile2->filename,
|
"--passfile2", $passfile2->filename,
|
||||||
|
($dry eq "1" ? ('--dry') : ()),
|
||||||
'--no-modulesversion',
|
'--no-modulesversion',
|
||||||
'--noreleasecheck'];
|
'--noreleasecheck'];
|
||||||
|
|
||||||
|
@ -3,15 +3,15 @@ LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
|
|||||||
|
|
||||||
# renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
||||||
ARG APCU_PECL_VERSION=5.1.22
|
ARG APCU_PECL_VERSION=5.1.22
|
||||||
# renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced extractVersion=(?<version>.*)$
|
||||||
ARG IMAGICK_PECL_VERSION=3.7.0
|
ARG IMAGICK_PECL_VERSION=3.7.0
|
||||||
# renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
||||||
ARG MAILPARSE_PECL_VERSION=3.1.6
|
ARG MAILPARSE_PECL_VERSION=3.1.6
|
||||||
# renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
||||||
ARG MEMCACHED_PECL_VERSION=3.2.0
|
ARG MEMCACHED_PECL_VERSION=3.2.0
|
||||||
# renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=(?<version>.*)$
|
||||||
ARG REDIS_PECL_VERSION=6.0.1
|
ARG REDIS_PECL_VERSION=6.0.1
|
||||||
# renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced extractVersion=(?<version>.*)$
|
||||||
ARG COMPOSER_VERSION=2.6.5
|
ARG COMPOSER_VERSION=2.6.5
|
||||||
|
|
||||||
RUN apk add -U --no-cache autoconf \
|
RUN apk add -U --no-cache autoconf \
|
||||||
|
@ -3,7 +3,7 @@ LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
|
|||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ARG SOGO_DEBIAN_REPOSITORY=http://packages.sogo.nu/nightly/5/debian/
|
ARG SOGO_DEBIAN_REPOSITORY=http://packages.sogo.nu/nightly/5/debian/
|
||||||
# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^(?<version>.*)$
|
||||||
ARG GOSU_VERSION=1.16
|
ARG GOSU_VERSION=1.16
|
||||||
ENV LC_ALL C
|
ENV LC_ALL C
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ FROM solr:7.7-slim
|
|||||||
|
|
||||||
USER root
|
USER root
|
||||||
|
|
||||||
# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=(?<version>.*)$
|
||||||
ARG GOSU_VERSION=1.16
|
ARG GOSU_VERSION=1.16
|
||||||
|
|
||||||
COPY solr.sh /
|
COPY solr.sh /
|
||||||
|
@ -86,7 +86,7 @@ server {
|
|||||||
deny all;
|
deny all;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
|
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+)\.php(?:$|\/) {
|
||||||
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
|
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
|
||||||
set $path_info $fastcgi_path_info;
|
set $path_info $fastcgi_path_info;
|
||||||
try_files $fastcgi_script_name =404;
|
try_files $fastcgi_script_name =404;
|
||||||
@ -105,7 +105,7 @@ server {
|
|||||||
fastcgi_read_timeout 1200;
|
fastcgi_read_timeout 1200;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
|
location ~ ^\/(?:updater|ocs-provider)(?:$|\/) {
|
||||||
try_files $uri/ =404;
|
try_files $uri/ =404;
|
||||||
index index.php;
|
index index.php;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Whitelist generated by Postwhite v3.4 on Sun Oct 1 00:14:59 UTC 2023
|
# Whitelist generated by Postwhite v3.4 on Wed Nov 1 00:14:24 UTC 2023
|
||||||
# https://github.com/stevejenkins/postwhite/
|
# https://github.com/stevejenkins/postwhite/
|
||||||
# 2019 total rules
|
# 2030 total rules
|
||||||
2a00:1450:4000::/36 permit
|
2a00:1450:4000::/36 permit
|
||||||
2a01:111:f400::/48 permit
|
2a01:111:f400::/48 permit
|
||||||
2a01:111:f403:8000::/50 permit
|
2a01:111:f403:8000::/50 permit
|
||||||
@ -211,6 +211,7 @@
|
|||||||
52.96.222.194 permit
|
52.96.222.194 permit
|
||||||
52.96.222.226 permit
|
52.96.222.226 permit
|
||||||
52.96.223.2 permit
|
52.96.223.2 permit
|
||||||
|
52.96.228.130 permit
|
||||||
52.96.229.242 permit
|
52.96.229.242 permit
|
||||||
52.100.0.0/14 permit
|
52.100.0.0/14 permit
|
||||||
52.103.0.0/17 permit
|
52.103.0.0/17 permit
|
||||||
@ -1369,6 +1370,8 @@
|
|||||||
128.245.0.0/20 permit
|
128.245.0.0/20 permit
|
||||||
128.245.64.0/20 permit
|
128.245.64.0/20 permit
|
||||||
128.245.176.0/20 permit
|
128.245.176.0/20 permit
|
||||||
|
128.245.240.0/24 permit
|
||||||
|
128.245.241.0/24 permit
|
||||||
128.245.242.0/24 permit
|
128.245.242.0/24 permit
|
||||||
128.245.242.16 permit
|
128.245.242.16 permit
|
||||||
128.245.242.17 permit
|
128.245.242.17 permit
|
||||||
@ -1378,6 +1381,7 @@
|
|||||||
128.245.245.0/24 permit
|
128.245.245.0/24 permit
|
||||||
128.245.246.0/24 permit
|
128.245.246.0/24 permit
|
||||||
128.245.247.0/24 permit
|
128.245.247.0/24 permit
|
||||||
|
128.245.248.0/21 permit
|
||||||
129.41.77.70 permit
|
129.41.77.70 permit
|
||||||
129.41.169.249 permit
|
129.41.169.249 permit
|
||||||
129.80.5.164 permit
|
129.80.5.164 permit
|
||||||
@ -1492,6 +1496,8 @@
|
|||||||
158.101.211.207 permit
|
158.101.211.207 permit
|
||||||
158.120.80.0/21 permit
|
158.120.80.0/21 permit
|
||||||
158.247.16.0/20 permit
|
158.247.16.0/20 permit
|
||||||
|
159.92.154.0/24 permit
|
||||||
|
159.92.155.0/24 permit
|
||||||
159.92.157.0/24 permit
|
159.92.157.0/24 permit
|
||||||
159.92.157.16 permit
|
159.92.157.16 permit
|
||||||
159.92.157.17 permit
|
159.92.157.17 permit
|
||||||
@ -1501,6 +1507,9 @@
|
|||||||
159.92.160.0/24 permit
|
159.92.160.0/24 permit
|
||||||
159.92.161.0/24 permit
|
159.92.161.0/24 permit
|
||||||
159.92.162.0/24 permit
|
159.92.162.0/24 permit
|
||||||
|
159.92.163.0/24 permit
|
||||||
|
159.92.164.0/22 permit
|
||||||
|
159.92.168.0/21 permit
|
||||||
159.112.240.0/20 permit
|
159.112.240.0/20 permit
|
||||||
159.112.242.162 permit
|
159.112.242.162 permit
|
||||||
159.135.132.128/25 permit
|
159.135.132.128/25 permit
|
||||||
@ -1549,6 +1558,7 @@
|
|||||||
168.245.127.231 permit
|
168.245.127.231 permit
|
||||||
169.148.129.0/24 permit
|
169.148.129.0/24 permit
|
||||||
169.148.131.0/24 permit
|
169.148.131.0/24 permit
|
||||||
|
169.148.144.0/25 permit
|
||||||
170.10.68.0/22 permit
|
170.10.68.0/22 permit
|
||||||
170.10.128.0/24 permit
|
170.10.128.0/24 permit
|
||||||
170.10.129.0/24 permit
|
170.10.129.0/24 permit
|
||||||
@ -1706,6 +1716,7 @@
|
|||||||
199.16.156.0/22 permit
|
199.16.156.0/22 permit
|
||||||
199.33.145.1 permit
|
199.33.145.1 permit
|
||||||
199.33.145.32 permit
|
199.33.145.32 permit
|
||||||
|
199.34.22.36 permit
|
||||||
199.59.148.0/22 permit
|
199.59.148.0/22 permit
|
||||||
199.67.84.0/24 permit
|
199.67.84.0/24 permit
|
||||||
199.67.86.0/24 permit
|
199.67.86.0/24 permit
|
||||||
|
@ -564,7 +564,7 @@ rspamd_config:register_symbol({
|
|||||||
else
|
else
|
||||||
local footer = parser:get_object()
|
local footer = parser:get_object()
|
||||||
|
|
||||||
if footer and type(footer) == "table" and (footer.html or footer.plain) then
|
if footer and type(footer) == "table" and (footer.html and footer.html ~= "" or footer.plain and footer.plain ~= "") then
|
||||||
rspamd_logger.infox(rspamd_config, "found domain wide footer for user %s: html=%s, plain=%s", uname, footer.html, footer.plain)
|
rspamd_logger.infox(rspamd_config, "found domain wide footer for user %s: html=%s, plain=%s", uname, footer.html, footer.plain)
|
||||||
|
|
||||||
local envfrom_mime = task:get_from(2)
|
local envfrom_mime = task:get_from(2)
|
||||||
@ -631,15 +631,19 @@ rspamd_config:register_symbol({
|
|||||||
end
|
end
|
||||||
local out_parts = {}
|
local out_parts = {}
|
||||||
for _,o in ipairs(out) do
|
for _,o in ipairs(out) do
|
||||||
if type(o) ~= 'table' then
|
if type(o) ~= 'table' then
|
||||||
out_parts[#out_parts + 1] = o
|
out_parts[#out_parts + 1] = o
|
||||||
out_parts[#out_parts + 1] = newline_s
|
out_parts[#out_parts + 1] = newline_s
|
||||||
else
|
else
|
||||||
out_parts[#out_parts + 1] = o[1]
|
local removePrefix = "--\x0D\x0AContent-Type"
|
||||||
if o[2] then
|
if string.lower(string.sub(tostring(o[1]), 1, string.len(removePrefix))) == string.lower(removePrefix) then
|
||||||
out_parts[#out_parts + 1] = newline_s
|
o[1] = string.sub(tostring(o[1]), string.len("--\x0D\x0A") + 1)
|
||||||
end
|
end
|
||||||
end
|
out_parts[#out_parts + 1] = o[1]
|
||||||
|
if o[2] then
|
||||||
|
out_parts[#out_parts + 1] = newline_s
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
task:set_message(out_parts)
|
task:set_message(out_parts)
|
||||||
else
|
else
|
||||||
|
@ -325,6 +325,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$timeout2 = intval($_data['timeout2']);
|
$timeout2 = intval($_data['timeout2']);
|
||||||
$skipcrossduplicates = intval($_data['skipcrossduplicates']);
|
$skipcrossduplicates = intval($_data['skipcrossduplicates']);
|
||||||
$automap = intval($_data['automap']);
|
$automap = intval($_data['automap']);
|
||||||
|
$dry = intval($_data['dry']);
|
||||||
$port1 = $_data['port1'];
|
$port1 = $_data['port1'];
|
||||||
$host1 = strtolower($_data['host1']);
|
$host1 = strtolower($_data['host1']);
|
||||||
$password1 = $_data['password1'];
|
$password1 = $_data['password1'];
|
||||||
@ -435,8 +436,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare("INSERT INTO `imapsync` (`user2`, `exclude`, `delete1`, `delete2`, `timeout1`, `timeout2`, `automap`, `skipcrossduplicates`, `maxbytespersecond`, `subscribeall`, `maxage`, `subfolder2`, `host1`, `authmech1`, `user1`, `password1`, `mins_interval`, `port1`, `enc1`, `delete2duplicates`, `custom_params`, `active`)
|
$stmt = $pdo->prepare("INSERT INTO `imapsync` (`user2`, `exclude`, `delete1`, `delete2`, `timeout1`, `timeout2`, `automap`, `skipcrossduplicates`, `maxbytespersecond`, `subscribeall`, `dry`, `maxage`, `subfolder2`, `host1`, `authmech1`, `user1`, `password1`, `mins_interval`, `port1`, `enc1`, `delete2duplicates`, `custom_params`, `active`)
|
||||||
VALUES (:user2, :exclude, :delete1, :delete2, :timeout1, :timeout2, :automap, :skipcrossduplicates, :maxbytespersecond, :subscribeall, :maxage, :subfolder2, :host1, :authmech1, :user1, :password1, :mins_interval, :port1, :enc1, :delete2duplicates, :custom_params, :active)");
|
VALUES (:user2, :exclude, :delete1, :delete2, :timeout1, :timeout2, :automap, :skipcrossduplicates, :maxbytespersecond, :subscribeall, :dry, :maxage, :subfolder2, :host1, :authmech1, :user1, :password1, :mins_interval, :port1, :enc1, :delete2duplicates, :custom_params, :active)");
|
||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
':user2' => $username,
|
':user2' => $username,
|
||||||
':custom_params' => $custom_params,
|
':custom_params' => $custom_params,
|
||||||
@ -450,6 +451,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
':skipcrossduplicates' => $skipcrossduplicates,
|
':skipcrossduplicates' => $skipcrossduplicates,
|
||||||
':maxbytespersecond' => $maxbytespersecond,
|
':maxbytespersecond' => $maxbytespersecond,
|
||||||
':subscribeall' => $subscribeall,
|
':subscribeall' => $subscribeall,
|
||||||
|
':dry' => $dry,
|
||||||
':subfolder2' => $subfolder2,
|
':subfolder2' => $subfolder2,
|
||||||
':host1' => $host1,
|
':host1' => $host1,
|
||||||
':authmech1' => 'PLAIN',
|
':authmech1' => 'PLAIN',
|
||||||
@ -2031,6 +2033,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$success = (isset($_data['success'])) ? NULL : $is_now['success'];
|
$success = (isset($_data['success'])) ? NULL : $is_now['success'];
|
||||||
$delete2duplicates = (isset($_data['delete2duplicates'])) ? intval($_data['delete2duplicates']) : $is_now['delete2duplicates'];
|
$delete2duplicates = (isset($_data['delete2duplicates'])) ? intval($_data['delete2duplicates']) : $is_now['delete2duplicates'];
|
||||||
$subscribeall = (isset($_data['subscribeall'])) ? intval($_data['subscribeall']) : $is_now['subscribeall'];
|
$subscribeall = (isset($_data['subscribeall'])) ? intval($_data['subscribeall']) : $is_now['subscribeall'];
|
||||||
|
$dry = (isset($_data['dry'])) ? intval($_data['dry']) : $is_now['dry'];
|
||||||
$delete1 = (isset($_data['delete1'])) ? intval($_data['delete1']) : $is_now['delete1'];
|
$delete1 = (isset($_data['delete1'])) ? intval($_data['delete1']) : $is_now['delete1'];
|
||||||
$delete2 = (isset($_data['delete2'])) ? intval($_data['delete2']) : $is_now['delete2'];
|
$delete2 = (isset($_data['delete2'])) ? intval($_data['delete2']) : $is_now['delete2'];
|
||||||
$automap = (isset($_data['automap'])) ? intval($_data['automap']) : $is_now['automap'];
|
$automap = (isset($_data['automap'])) ? intval($_data['automap']) : $is_now['automap'];
|
||||||
@ -2164,6 +2167,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
`timeout1` = :timeout1,
|
`timeout1` = :timeout1,
|
||||||
`timeout2` = :timeout2,
|
`timeout2` = :timeout2,
|
||||||
`subscribeall` = :subscribeall,
|
`subscribeall` = :subscribeall,
|
||||||
|
`dry` = :dry,
|
||||||
`active` = :active
|
`active` = :active
|
||||||
WHERE `id` = :id");
|
WHERE `id` = :id");
|
||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
@ -2189,6 +2193,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
':timeout1' => $timeout1,
|
':timeout1' => $timeout1,
|
||||||
':timeout2' => $timeout2,
|
':timeout2' => $timeout2,
|
||||||
':subscribeall' => $subscribeall,
|
':subscribeall' => $subscribeall,
|
||||||
|
':dry' => $dry,
|
||||||
':active' => $active,
|
':active' => $active,
|
||||||
));
|
));
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
|
@ -3,7 +3,7 @@ function init_db_schema() {
|
|||||||
try {
|
try {
|
||||||
global $pdo;
|
global $pdo;
|
||||||
|
|
||||||
$db_version = "14022023_1000";
|
$db_version = "15112023_1536";
|
||||||
|
|
||||||
$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));
|
||||||
@ -704,6 +704,7 @@ function init_db_schema() {
|
|||||||
"timeout1" => "SMALLINT NOT NULL DEFAULT '600'",
|
"timeout1" => "SMALLINT NOT NULL DEFAULT '600'",
|
||||||
"timeout2" => "SMALLINT NOT NULL DEFAULT '600'",
|
"timeout2" => "SMALLINT NOT NULL DEFAULT '600'",
|
||||||
"subscribeall" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
"subscribeall" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
||||||
|
"dry" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
||||||
"is_running" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
"is_running" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
||||||
"returned_text" => "LONGTEXT",
|
"returned_text" => "LONGTEXT",
|
||||||
"last_run" => "TIMESTAMP NULL DEFAULT NULL",
|
"last_run" => "TIMESTAMP NULL DEFAULT NULL",
|
||||||
|
@ -19,10 +19,10 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Cache dependencies
|
- name: Cache dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ~/.composer/cache/files
|
path: ~/.composer/cache/files
|
||||||
key: dependencies-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
|
key: dependencies-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
|
||||||
@ -52,10 +52,10 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Cache dependencies
|
- name: Cache dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ~/.composer/cache/files
|
path: ~/.composer/cache/files
|
||||||
key: dependencies-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
|
key: dependencies-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
|
||||||
|
@ -12,7 +12,7 @@ jobs:
|
|||||||
dependency-version: [prefer-lowest, prefer-stable]
|
dependency-version: [prefer-lowest, prefer-stable]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
@ -31,7 +31,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer update --no-progress --ignore-platform-reqs
|
run: composer update --no-progress --ignore-platform-reqs
|
||||||
@ -43,7 +43,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
|
@ -13,7 +13,7 @@ jobs:
|
|||||||
php-version: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
php-version: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: shivammathur/setup-php@v2
|
- uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
|
@ -25,7 +25,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
|
@ -32,7 +32,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: "Install PHP with extensions"
|
- name: "Install PHP with extensions"
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
@ -86,7 +86,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: "Install PHP with extensions"
|
- name: "Install PHP with extensions"
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
|
@ -18,7 +18,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: "Set-up PHP"
|
- name: "Set-up PHP"
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
@ -33,7 +33,7 @@ jobs:
|
|||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||||
|
|
||||||
- name: Cache dependencies
|
- name: Cache dependencies
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composercache.outputs.dir }}
|
path: ${{ steps.composercache.outputs.dir }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
@ -54,7 +54,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: "Run DOCtor-RST"
|
- name: "Run DOCtor-RST"
|
||||||
uses: docker://oskarstark/doctor-rst
|
uses: docker://oskarstark/doctor-rst
|
||||||
|
18
data/web/inc/presets/sieve/sieve_8.yml
Normal file
18
data/web/inc/presets/sieve/sieve_8.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
headline: lang.sieve_preset_8
|
||||||
|
content: |
|
||||||
|
require "fileinto";
|
||||||
|
require "mailbox";
|
||||||
|
require "variables";
|
||||||
|
require "subaddress";
|
||||||
|
require "envelope";
|
||||||
|
require "duplicate";
|
||||||
|
require "imap4flags";
|
||||||
|
if header :matches "To" "*mail@domain.tld*" {
|
||||||
|
redirect "anothermail@anotherdomain.tld";
|
||||||
|
setflag "\\seen"; /* Mark mail as read */
|
||||||
|
fileInto "INBOX/SubFolder"; /* Move mail on subfolder after */
|
||||||
|
} else {
|
||||||
|
# The rest goes into INBOX
|
||||||
|
# default is "implicit keep", we do it explicitly here
|
||||||
|
keep;
|
||||||
|
}
|
@ -97,6 +97,7 @@ $AVAILABLE_LANGUAGES = array(
|
|||||||
'lv-lv' => 'latviešu (Latvian)',
|
'lv-lv' => 'latviešu (Latvian)',
|
||||||
'nl-nl' => 'Nederlands (Dutch)',
|
'nl-nl' => 'Nederlands (Dutch)',
|
||||||
'pl-pl' => 'Język Polski (Polish)',
|
'pl-pl' => 'Język Polski (Polish)',
|
||||||
|
'pt-br' => 'Português brasileiro (Brazilian Portuguese)',
|
||||||
'pt-pt' => 'Português (Portuguese)',
|
'pt-pt' => 'Português (Portuguese)',
|
||||||
'ro-ro' => 'Română (Romanian)',
|
'ro-ro' => 'Română (Romanian)',
|
||||||
'ru-ru' => 'Pусский (Russian)',
|
'ru-ru' => 'Pусский (Russian)',
|
||||||
@ -235,118 +236,120 @@ $RSPAMD_MAPS = array(
|
|||||||
|
|
||||||
$IMAPSYNC_OPTIONS = array(
|
$IMAPSYNC_OPTIONS = array(
|
||||||
'whitelist' => array(
|
'whitelist' => array(
|
||||||
|
'abort',
|
||||||
|
'authmd51',
|
||||||
|
'authmd52',
|
||||||
'authmech1',
|
'authmech1',
|
||||||
'authmech2',
|
'authmech2',
|
||||||
'authuser1',
|
'authuser1',
|
||||||
'authuser2',
|
'authuser2',
|
||||||
'debugcontent',
|
|
||||||
'disarmreadreceipts',
|
|
||||||
'logdir',
|
|
||||||
'debugcrossduplicates',
|
|
||||||
'maxsize',
|
|
||||||
'minsize',
|
|
||||||
'minage',
|
|
||||||
'search',
|
|
||||||
'noabletosearch',
|
|
||||||
'pidfile',
|
|
||||||
'pidfilelocking',
|
|
||||||
'search1',
|
|
||||||
'search2',
|
|
||||||
'sslargs1',
|
|
||||||
'sslargs2',
|
|
||||||
'syncduplicates',
|
|
||||||
'usecache',
|
|
||||||
'synclabels',
|
|
||||||
'truncmess',
|
|
||||||
'domino2',
|
|
||||||
'expunge1',
|
|
||||||
'filterbuggyflags',
|
|
||||||
'justconnect',
|
|
||||||
'justfolders',
|
|
||||||
'maxlinelength',
|
|
||||||
'useheader',
|
|
||||||
'noabletosearch1',
|
|
||||||
'nolog',
|
|
||||||
'prefix1',
|
|
||||||
'prefix2',
|
|
||||||
'sep1',
|
|
||||||
'sep2',
|
|
||||||
'nofoldersizesatend',
|
|
||||||
'justfoldersizes',
|
|
||||||
'proxyauth1',
|
|
||||||
'skipemptyfolders',
|
|
||||||
'include',
|
|
||||||
'subfolder1',
|
|
||||||
'subscribed',
|
|
||||||
'subscribe',
|
|
||||||
'debug',
|
'debug',
|
||||||
|
'debugcontent',
|
||||||
|
'debugcrossduplicates',
|
||||||
|
'debugflags',
|
||||||
|
'debugfolders',
|
||||||
|
'debugimap',
|
||||||
|
'debugimap1',
|
||||||
'debugimap2',
|
'debugimap2',
|
||||||
|
'debugmemory',
|
||||||
|
'debugssl',
|
||||||
|
'delete1emptyfolders',
|
||||||
|
'delete2folders',
|
||||||
|
'disarmreadreceipts',
|
||||||
|
'domain1',
|
||||||
|
'domain2',
|
||||||
'domino1',
|
'domino1',
|
||||||
|
'domino2',
|
||||||
|
'dry',
|
||||||
|
'errorsmax',
|
||||||
'exchange1',
|
'exchange1',
|
||||||
'exchange2',
|
'exchange2',
|
||||||
|
'exitwhenover',
|
||||||
|
'expunge1',
|
||||||
|
'f1f2',
|
||||||
|
'filterbuggyflags',
|
||||||
|
'folder',
|
||||||
|
'folderfirst',
|
||||||
|
'folderlast',
|
||||||
|
'folderrec',
|
||||||
|
'gmail1',
|
||||||
|
'gmail2',
|
||||||
|
'idatefromheader',
|
||||||
|
'include',
|
||||||
|
'inet4',
|
||||||
|
'inet6',
|
||||||
|
'justconnect',
|
||||||
|
'justfolders',
|
||||||
|
'justfoldersizes',
|
||||||
'justlogin',
|
'justlogin',
|
||||||
'keepalive1',
|
'keepalive1',
|
||||||
'keepalive2',
|
'keepalive2',
|
||||||
|
'log',
|
||||||
|
'logdir',
|
||||||
|
'logfile',
|
||||||
|
'maxbytesafter',
|
||||||
|
'maxlinelength',
|
||||||
|
'maxmessagespersecond',
|
||||||
|
'maxsize',
|
||||||
|
'maxsleep',
|
||||||
|
'minage',
|
||||||
|
'minsize',
|
||||||
|
'noabletosearch',
|
||||||
|
'noabletosearch1',
|
||||||
'noabletosearch2',
|
'noabletosearch2',
|
||||||
|
'noexpunge1',
|
||||||
'noexpunge2',
|
'noexpunge2',
|
||||||
|
'nofoldersizesatend',
|
||||||
|
'noid',
|
||||||
|
'nolog',
|
||||||
|
'nomixfolders',
|
||||||
'noresyncflags',
|
'noresyncflags',
|
||||||
'nossl1',
|
'nossl1',
|
||||||
'nouidexpunge2',
|
'nossl2',
|
||||||
'syncinternaldates',
|
|
||||||
'idatefromheader',
|
|
||||||
'useuid',
|
|
||||||
'debugflags',
|
|
||||||
'debugimap',
|
|
||||||
'delete1emptyfolders',
|
|
||||||
'delete2folders',
|
|
||||||
'gmail2',
|
|
||||||
'office1',
|
|
||||||
'testslive6',
|
|
||||||
'debugimap1',
|
|
||||||
'errorsmax',
|
|
||||||
'tests',
|
|
||||||
'gmail1',
|
|
||||||
'maxmessagespersecond',
|
|
||||||
'maxbytesafter',
|
|
||||||
'maxsleep',
|
|
||||||
'abort',
|
|
||||||
'resyncflags',
|
|
||||||
'resynclabels',
|
|
||||||
'syncacls',
|
|
||||||
'nosyncacls',
|
'nosyncacls',
|
||||||
|
'notls1',
|
||||||
|
'notls2',
|
||||||
|
'nouidexpunge2',
|
||||||
'nousecache',
|
'nousecache',
|
||||||
'office2',
|
|
||||||
'testslive',
|
|
||||||
'debugmemory',
|
|
||||||
'exitwhenover',
|
|
||||||
'noid',
|
|
||||||
'noexpunge1',
|
|
||||||
'authmd51',
|
|
||||||
'logfile',
|
|
||||||
'proxyauth2',
|
|
||||||
'domain1',
|
|
||||||
'domain2',
|
|
||||||
'oauthaccesstoken1',
|
'oauthaccesstoken1',
|
||||||
'oauthaccesstoken2',
|
'oauthaccesstoken2',
|
||||||
'oauthdirect1',
|
'oauthdirect1',
|
||||||
'oauthdirect2',
|
'oauthdirect2',
|
||||||
'folder',
|
'office1',
|
||||||
'folderrec',
|
'office2',
|
||||||
'folderfirst',
|
'pidfile',
|
||||||
'folderlast',
|
'pidfilelocking',
|
||||||
'nomixfolders',
|
'prefix1',
|
||||||
'authmd52',
|
'prefix2',
|
||||||
'debugfolders',
|
'proxyauth1',
|
||||||
'nossl2',
|
'proxyauth2',
|
||||||
|
'resyncflags',
|
||||||
|
'resynclabels',
|
||||||
|
'search',
|
||||||
|
'search1',
|
||||||
|
'search2',
|
||||||
|
'sep1',
|
||||||
|
'sep2',
|
||||||
|
'showpasswords',
|
||||||
|
'skipemptyfolders',
|
||||||
'ssl2',
|
'ssl2',
|
||||||
|
'sslargs1',
|
||||||
|
'sslargs2',
|
||||||
|
'subfolder1',
|
||||||
|
'subscribe',
|
||||||
|
'subscribed',
|
||||||
|
'syncacls',
|
||||||
|
'syncduplicates',
|
||||||
|
'syncinternaldates',
|
||||||
|
'synclabels',
|
||||||
|
'tests',
|
||||||
|
'testslive',
|
||||||
|
'testslive6',
|
||||||
'tls2',
|
'tls2',
|
||||||
'notls2',
|
'truncmess',
|
||||||
'debugssl',
|
'usecache',
|
||||||
'notls1',
|
'useheader',
|
||||||
'inet4',
|
'useuid'
|
||||||
'inet6',
|
|
||||||
'log',
|
|
||||||
'showpasswords'
|
|
||||||
),
|
),
|
||||||
'blacklist' => array(
|
'blacklist' => array(
|
||||||
'skipmess',
|
'skipmess',
|
||||||
|
@ -1684,7 +1684,7 @@ function showVersionModal(title, version){
|
|||||||
function parseGithubMarkdownLinks(inputText) {
|
function parseGithubMarkdownLinks(inputText) {
|
||||||
var replacedText, replacePattern1;
|
var replacedText, replacePattern1;
|
||||||
|
|
||||||
replacePattern1 = /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
|
replacePattern1 = /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])(?![^<]*>)/gim;
|
||||||
replacedText = inputText.replace(replacePattern1, (matched, index, original, input_string) => {
|
replacedText = inputText.replace(replacePattern1, (matched, index, original, input_string) => {
|
||||||
if (matched.includes('github.com')){
|
if (matched.includes('github.com')){
|
||||||
// return short link if it's github link
|
// return short link if it's github link
|
||||||
|
@ -220,7 +220,7 @@ jQuery(function($){
|
|||||||
if (value.score > 0) highlightClass = 'negative';
|
if (value.score > 0) highlightClass = 'negative';
|
||||||
else if (value.score < 0) highlightClass = 'positive';
|
else if (value.score < 0) highlightClass = 'positive';
|
||||||
else highlightClass = 'neutral';
|
else highlightClass = 'neutral';
|
||||||
$('#qid_detail_symbols').append('<span data-bs-toggle="tooltip" class="rspamd-symbol ' + highlightClass + '" title="' + (value.options ? value.options.join(', ') : '') + '">' + value.name + ' (<span class="score">' + value.score + '</span>)</span>');
|
$('#qid_detail_symbols').append('<span data-bs-toggle="tooltip" class="rspamd-symbol ' + highlightClass + '" title="' + (value.options ? escapeHtml(value.options.join(', ')) : '') + '">' + value.name + ' (<span class="score">' + value.score + '</span>)</span>');
|
||||||
});
|
});
|
||||||
$('[data-bs-toggle="tooltip"]').tooltip();
|
$('[data-bs-toggle="tooltip"]').tooltip();
|
||||||
}
|
}
|
||||||
@ -295,3 +295,7 @@ jQuery(function($){
|
|||||||
$(".table_collapse_option").hide();
|
$(".table_collapse_option").hide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -147,6 +147,8 @@
|
|||||||
"ays": "Opravdu chcete pokračovat?",
|
"ays": "Opravdu chcete pokračovat?",
|
||||||
"ban_list_info": "Seznam blokovaných IP adres je zobrazen níže: <b>síť (zbývající čas blokování) - [akce]</b>.<br />IP adresy zařazené pro odblokování budou z aktivního seznamu odebrány během několika sekund.<br />Červeně označené položky jsou pernamentní bloky z blacklistu.",
|
"ban_list_info": "Seznam blokovaných IP adres je zobrazen níže: <b>síť (zbývající čas blokování) - [akce]</b>.<br />IP adresy zařazené pro odblokování budou z aktivního seznamu odebrány během několika sekund.<br />Červeně označené položky jsou pernamentní bloky z blacklistu.",
|
||||||
"change_logo": "Změnit logo",
|
"change_logo": "Změnit logo",
|
||||||
|
"logo_normal_label": "Normální",
|
||||||
|
"logo_dark_label": "Inverzní pro tmavý režim",
|
||||||
"configuration": "Nastavení",
|
"configuration": "Nastavení",
|
||||||
"convert_html_to_text": "Převést HTML do prostého textu",
|
"convert_html_to_text": "Převést HTML do prostého textu",
|
||||||
"credentials_transport_warning": "<b>Upozornění</b>: Přidání položky do transportní mapy aktualizuje také přihlašovací údaje všech záznamů s odpovídajícím skokem.",
|
"credentials_transport_warning": "<b>Upozornění</b>: Přidání položky do transportní mapy aktualizuje také přihlašovací údaje všech záznamů s odpovídajícím skokem.",
|
||||||
@ -206,6 +208,9 @@
|
|||||||
"include_exclude": "Zahrnout/Vyloučit",
|
"include_exclude": "Zahrnout/Vyloučit",
|
||||||
"include_exclude_info": "Ve výchozím nastavení (bez výběru), jsou adresovány <b>všechny mailové schránky</b>",
|
"include_exclude_info": "Ve výchozím nastavení (bez výběru), jsou adresovány <b>všechny mailové schránky</b>",
|
||||||
"includes": "Zahrnout tyto přijemce",
|
"includes": "Zahrnout tyto přijemce",
|
||||||
|
"ip_check": "Kontrola IP",
|
||||||
|
"ip_check_disabled": "Kontrola IP je vypnuta. Můžete ji zapnout v <br> <strong>System > Nastavení > Options > Přizpůsobení</strong>",
|
||||||
|
"ip_check_opt_in": "Přihlásit se k používání služby třetí strany <strong>ipv4.mailcow.email</strong> a <strong>ipv6.mailcow.email</strong> pro zjištění externích IP adres.",
|
||||||
"is_mx_based": "Na základě MX",
|
"is_mx_based": "Na základě MX",
|
||||||
"last_applied": "Naposledy použité",
|
"last_applied": "Naposledy použité",
|
||||||
"license_info": "Licence není povinná, pomůžete však dalšímu vývoji.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"SAL order\">Registrujte si své GUID</a>, nebo si <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Support order\">zaplaťte podporu pro svou instalaci mailcow.</a>",
|
"license_info": "Licence není povinná, pomůžete však dalšímu vývoji.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"SAL order\">Registrujte si své GUID</a>, nebo si <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Support order\">zaplaťte podporu pro svou instalaci mailcow.</a>",
|
||||||
@ -232,6 +237,7 @@
|
|||||||
"oauth2_renew_secret": "Vytvořit nový tajný klíč",
|
"oauth2_renew_secret": "Vytvořit nový tajný klíč",
|
||||||
"oauth2_revoke_tokens": "Odvolat všechny klientské tokeny",
|
"oauth2_revoke_tokens": "Odvolat všechny klientské tokeny",
|
||||||
"optional": "volitelné",
|
"optional": "volitelné",
|
||||||
|
"options": "Možnosti",
|
||||||
"password": "Heslo",
|
"password": "Heslo",
|
||||||
"password_length": "Délka hesla",
|
"password_length": "Délka hesla",
|
||||||
"password_policy": "Politika hesel",
|
"password_policy": "Politika hesel",
|
||||||
@ -337,9 +343,7 @@
|
|||||||
"verify": "Ověřit",
|
"verify": "Ověřit",
|
||||||
"yes": "✓",
|
"yes": "✓",
|
||||||
"f2b_ban_time_increment": "Délka banu je prodlužována s každým dalším banem",
|
"f2b_ban_time_increment": "Délka banu je prodlužována s každým dalším banem",
|
||||||
"f2b_max_ban_time": "Maximální délka banu (s)",
|
"f2b_max_ban_time": "Maximální délka banu (s)"
|
||||||
"ip_check": "Kontrola IP",
|
|
||||||
"ip_check_disabled": "Kontrola IP je vypnuta. Můžete ji zapnout v <br> <strong>System > Nastavení > Options > Přizpůsobení</strong>"
|
|
||||||
},
|
},
|
||||||
"danger": {
|
"danger": {
|
||||||
"access_denied": "Přístup odepřen nebo jsou neplatná data ve formuláři",
|
"access_denied": "Přístup odepřen nebo jsou neplatná data ve formuláři",
|
||||||
@ -443,6 +447,9 @@
|
|||||||
"target_domain_invalid": "Cílová doména %s je neplatná",
|
"target_domain_invalid": "Cílová doména %s je neplatná",
|
||||||
"targetd_not_found": "Cílová doména %s nenalezena",
|
"targetd_not_found": "Cílová doména %s nenalezena",
|
||||||
"targetd_relay_domain": "Cílová doména %s je předávaná",
|
"targetd_relay_domain": "Cílová doména %s je předávaná",
|
||||||
|
"template_exists": "Šablona %s již existuje",
|
||||||
|
"template_id_invalid": "Šablona ID %s je neplatná",
|
||||||
|
"template_name_invalid": "Název šablony je neplatný",
|
||||||
"temp_error": "Dočasná chyba",
|
"temp_error": "Dočasná chyba",
|
||||||
"text_empty": "Text nesmí být prázdný",
|
"text_empty": "Text nesmí být prázdný",
|
||||||
"tfa_token_invalid": "Neplatný TFA token",
|
"tfa_token_invalid": "Neplatný TFA token",
|
||||||
@ -461,27 +468,27 @@
|
|||||||
"yotp_verification_failed": "Yubico OTP ověření selhalo: %s"
|
"yotp_verification_failed": "Yubico OTP ověření selhalo: %s"
|
||||||
},
|
},
|
||||||
"datatables": {
|
"datatables": {
|
||||||
"emptyTable": "Tabulka neobsahuje žádná data",
|
"emptyTable": "Tabulka neobsahuje žádná data",
|
||||||
"info": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů",
|
"info": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů",
|
||||||
"infoEmpty": "Zobrazuji 0 až 0 z 0 záznamů",
|
"infoEmpty": "Zobrazuji 0 až 0 z 0 záznamů",
|
||||||
"infoFiltered": "(filtrováno z celkem _MAX_ záznamů)",
|
"infoFiltered": "(filtrováno z celkem _MAX_ záznamů)",
|
||||||
"loadingRecords": "Načítám...",
|
"loadingRecords": "Načítám...",
|
||||||
"zeroRecords": "Žádné záznamy nebyly nalezeny",
|
"zeroRecords": "Žádné záznamy nebyly nalezeny",
|
||||||
"paginate": {
|
"paginate": {
|
||||||
"first": "První",
|
"first": "První",
|
||||||
"last": "Poslední",
|
"last": "Poslední",
|
||||||
"next": "Další",
|
"next": "Další",
|
||||||
"previous": "Předchozí"
|
"previous": "Předchozí"
|
||||||
},
|
},
|
||||||
"aria": {
|
"aria": {
|
||||||
"sortAscending": ": aktivujte pro seřazení vzestupně",
|
"sortAscending": ": aktivujte pro seřazení vzestupně",
|
||||||
"sortDescending": ": aktivujte pro seřazení sestupně"
|
"sortDescending": ": aktivujte pro seřazení sestupně"
|
||||||
},
|
},
|
||||||
"lengthMenu": "Zobrazit _MENU_ výsledků",
|
"lengthMenu": "Zobrazit _MENU_ výsledků",
|
||||||
"processing": "Zpracovávání...",
|
"processing": "Zpracovávání...",
|
||||||
"search": "Vyhledávání:",
|
"search": "Vyhledávání:",
|
||||||
"decimal": ",",
|
"decimal": ",",
|
||||||
"thousands": " "
|
"thousands": " "
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"chart_this_server": "Graf (tento server)",
|
"chart_this_server": "Graf (tento server)",
|
||||||
@ -670,6 +677,7 @@
|
|||||||
"apps": "Aplikace",
|
"apps": "Aplikace",
|
||||||
"debug": "Systémové informace",
|
"debug": "Systémové informace",
|
||||||
"email": "E-Mail",
|
"email": "E-Mail",
|
||||||
|
"mailcow_system": "Systém",
|
||||||
"mailcow_config": "Nastavení",
|
"mailcow_config": "Nastavení",
|
||||||
"quarantine": "Karanténa",
|
"quarantine": "Karanténa",
|
||||||
"restart_netfilter": "Restartovat netfilter",
|
"restart_netfilter": "Restartovat netfilter",
|
||||||
@ -705,6 +713,7 @@
|
|||||||
"add_mailbox": "Přidat mailovou schránku",
|
"add_mailbox": "Přidat mailovou schránku",
|
||||||
"add_recipient_map_entry": "Přidat mapu příjemce",
|
"add_recipient_map_entry": "Přidat mapu příjemce",
|
||||||
"add_resource": "Přidat zdroj",
|
"add_resource": "Přidat zdroj",
|
||||||
|
"add_template": "Přidat šablonu",
|
||||||
"add_tls_policy_map": "Přidat mapu TLS pravidel",
|
"add_tls_policy_map": "Přidat mapu TLS pravidel",
|
||||||
"address_rewriting": "Přepisování adres",
|
"address_rewriting": "Přepisování adres",
|
||||||
"alias": "Alias",
|
"alias": "Alias",
|
||||||
@ -747,6 +756,7 @@
|
|||||||
"domain": "Doména",
|
"domain": "Doména",
|
||||||
"domain_admins": "Správci domén",
|
"domain_admins": "Správci domén",
|
||||||
"domain_aliases": "Doménové aliasy",
|
"domain_aliases": "Doménové aliasy",
|
||||||
|
"domain_templates": "Šablony domén",
|
||||||
"domain_quota": "Kvóta",
|
"domain_quota": "Kvóta",
|
||||||
"domain_quota_total": "Celková kvóta domény",
|
"domain_quota_total": "Celková kvóta domény",
|
||||||
"domains": "Domény",
|
"domains": "Domény",
|
||||||
@ -775,6 +785,7 @@
|
|||||||
"mailbox_defaults": "Výchozí nastavení",
|
"mailbox_defaults": "Výchozí nastavení",
|
||||||
"mailbox_defaults_info": "Definuje výchozí nastavení pro nové schránky",
|
"mailbox_defaults_info": "Definuje výchozí nastavení pro nové schránky",
|
||||||
"mailbox_defquota": "Výchozí velikost schránky",
|
"mailbox_defquota": "Výchozí velikost schránky",
|
||||||
|
"mailbox_templates": "Šablony schránek",
|
||||||
"mailbox_quota": "Max. velikost schránky",
|
"mailbox_quota": "Max. velikost schránky",
|
||||||
"mailboxes": "Mailové schránky",
|
"mailboxes": "Mailové schránky",
|
||||||
"max_aliases": "Max. počet aliasů",
|
"max_aliases": "Max. počet aliasů",
|
||||||
@ -842,6 +853,8 @@
|
|||||||
"table_size_show_n": "Zobrazit %s položek",
|
"table_size_show_n": "Zobrazit %s položek",
|
||||||
"target_address": "Cílová adresa",
|
"target_address": "Cílová adresa",
|
||||||
"target_domain": "Cílová doména",
|
"target_domain": "Cílová doména",
|
||||||
|
"templates": "Šablony",
|
||||||
|
"template": "Šablona",
|
||||||
"tls_enforce_in": "Vynutit TLS pro příchozí",
|
"tls_enforce_in": "Vynutit TLS pro příchozí",
|
||||||
"tls_enforce_out": "Vynutit TLS pro odchozí",
|
"tls_enforce_out": "Vynutit TLS pro odchozí",
|
||||||
"tls_map_dest": "Cíl",
|
"tls_map_dest": "Cíl",
|
||||||
@ -1006,6 +1019,9 @@
|
|||||||
"settings_map_added": "Přidána položka mapování nastavení",
|
"settings_map_added": "Přidána položka mapování nastavení",
|
||||||
"settings_map_removed": "Položka mapování nastavení: %s smazána",
|
"settings_map_removed": "Položka mapování nastavení: %s smazána",
|
||||||
"sogo_profile_reset": "SOGo profil uživatele %s vyresetován",
|
"sogo_profile_reset": "SOGo profil uživatele %s vyresetován",
|
||||||
|
"template_added": "Přidána šablona %s",
|
||||||
|
"template_modified": "Změny šablony %s byly uloženy",
|
||||||
|
"template_removed": "Šablona ID %s byla odstraněna",
|
||||||
"tls_policy_map_entry_deleted": "Položka mapy TLS pravidel ID %s smazána",
|
"tls_policy_map_entry_deleted": "Položka mapy TLS pravidel ID %s smazána",
|
||||||
"tls_policy_map_entry_saved": "Položka mapy TLS pravidel \"%s\" uložena",
|
"tls_policy_map_entry_saved": "Položka mapy TLS pravidel \"%s\" uložena",
|
||||||
"ui_texts": "Změny UI textů uloženy",
|
"ui_texts": "Změny UI textů uloženy",
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
"domain": "Domain",
|
"domain": "Domain",
|
||||||
"domain_matches_hostname": "Domain %s darf nicht dem Hostnamen entsprechen",
|
"domain_matches_hostname": "Domain %s darf nicht dem Hostnamen entsprechen",
|
||||||
"domain_quota_m": "Domain-Speicherplatz gesamt (MiB)",
|
"domain_quota_m": "Domain-Speicherplatz gesamt (MiB)",
|
||||||
|
"dry": "Synchronisation simulieren",
|
||||||
"enc_method": "Verschlüsselung",
|
"enc_method": "Verschlüsselung",
|
||||||
"exclude": "Elemente ausschließen (Regex)",
|
"exclude": "Elemente ausschließen (Regex)",
|
||||||
"full_name": "Vor- und Nachname",
|
"full_name": "Vor- und Nachname",
|
||||||
@ -857,7 +858,7 @@
|
|||||||
"sieve_preset_5": "Auto-Responder (Vacation, Urlaub)",
|
"sieve_preset_5": "Auto-Responder (Vacation, Urlaub)",
|
||||||
"sieve_preset_6": "E-Mails mit Nachricht abweisen",
|
"sieve_preset_6": "E-Mails mit Nachricht abweisen",
|
||||||
"sieve_preset_7": "Weiterleiten und behalten oder verwerfen",
|
"sieve_preset_7": "Weiterleiten und behalten oder verwerfen",
|
||||||
"sieve_preset_8": "Nachricht verwerfen, wenn Absender und Alias-Ziel identisch sind.",
|
"sieve_preset_8": "E-Mail eines bestimmten Absenders umleiten, als gelesen markieren und in Unterordner sortieren",
|
||||||
"sieve_preset_header": "Beispielinhalte zur Einsicht stehen nachstehend bereit. Siehe auch <a href=\"https://de.wikipedia.org/wiki/Sieve\" target=\"_blank\">Wikipedia</a>.",
|
"sieve_preset_header": "Beispielinhalte zur Einsicht stehen nachstehend bereit. Siehe auch <a href=\"https://de.wikipedia.org/wiki/Sieve\" target=\"_blank\">Wikipedia</a>.",
|
||||||
"sogo_visible": "Alias Sichtbarkeit in SOGo",
|
"sogo_visible": "Alias Sichtbarkeit in SOGo",
|
||||||
"sogo_visible_n": "Alias in SOGo verbergen",
|
"sogo_visible_n": "Alias in SOGo verbergen",
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
"domain": "Domain",
|
"domain": "Domain",
|
||||||
"domain_matches_hostname": "Domain %s matches hostname",
|
"domain_matches_hostname": "Domain %s matches hostname",
|
||||||
"domain_quota_m": "Total domain quota (MiB)",
|
"domain_quota_m": "Total domain quota (MiB)",
|
||||||
|
"dry": "Simulate synchronization",
|
||||||
"enc_method": "Encryption method",
|
"enc_method": "Encryption method",
|
||||||
"exclude": "Exclude objects (regex)",
|
"exclude": "Exclude objects (regex)",
|
||||||
"full_name": "Full name",
|
"full_name": "Full name",
|
||||||
@ -873,7 +874,7 @@
|
|||||||
"sieve_preset_5": "Auto responder (vacation)",
|
"sieve_preset_5": "Auto responder (vacation)",
|
||||||
"sieve_preset_6": "Reject mail with reponse",
|
"sieve_preset_6": "Reject mail with reponse",
|
||||||
"sieve_preset_7": "Redirect and keep/drop",
|
"sieve_preset_7": "Redirect and keep/drop",
|
||||||
"sieve_preset_8": "Discard message sent to an alias address the sender is part of",
|
"sieve_preset_8": "Redirect e-mail from a specific sender, mark as read and sort into subfolder",
|
||||||
"sieve_preset_header": "Please see the example presets below. For more details see <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipedia</a>.",
|
"sieve_preset_header": "Please see the example presets below. For more details see <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipedia</a>.",
|
||||||
"sogo_visible": "Alias is visible in SOGo",
|
"sogo_visible": "Alias is visible in SOGo",
|
||||||
"sogo_visible_n": "Hide alias in SOGo",
|
"sogo_visible_n": "Hide alias in SOGo",
|
||||||
|
@ -89,7 +89,7 @@
|
|||||||
"relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> Vous pouvez définir des cartes de transport vers une destination personnalisée pour ce domaine. sinon, une recherche MX sera effectuée.",
|
"relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> Vous pouvez définir des cartes de transport vers une destination personnalisée pour ce domaine. sinon, une recherche MX sera effectuée.",
|
||||||
"relay_unknown_only": "Relayer uniquement les boîtes inexistantes. Les boîtes existantes seront livrées localement.",
|
"relay_unknown_only": "Relayer uniquement les boîtes inexistantes. Les boîtes existantes seront livrées localement.",
|
||||||
"relayhost_wrapped_tls_info": "Veuillez <b>ne pas</b> utiliser des ports TLS wrappés (généralement utilisés sur le port 465).<br>\r\nUtilisez n'importe quel port non encapsulé et lancez STARTTLS. Une politique TLS pour appliquer TLS peut être créée dans \"Cartes de politique TLS\".",
|
"relayhost_wrapped_tls_info": "Veuillez <b>ne pas</b> utiliser des ports TLS wrappés (généralement utilisés sur le port 465).<br>\r\nUtilisez n'importe quel port non encapsulé et lancez STARTTLS. Une politique TLS pour appliquer TLS peut être créée dans \"Cartes de politique TLS\".",
|
||||||
"select": "Veuillez sélectionner...",
|
"select": "Veuillez sélectionner…",
|
||||||
"select_domain": "Sélectionner d'abord un domaine",
|
"select_domain": "Sélectionner d'abord un domaine",
|
||||||
"sieve_desc": "Description courte",
|
"sieve_desc": "Description courte",
|
||||||
"sieve_type": "Type de filtre",
|
"sieve_type": "Type de filtre",
|
||||||
@ -207,7 +207,7 @@
|
|||||||
"last_applied": "Dernière application",
|
"last_applied": "Dernière application",
|
||||||
"license_info": "Une licence n’est pas requise, mais contribue au développement.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"SAL order\">Enregistrer votre GUID ici</a> or <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Support order\">acheter le support pour votre intallation Mailcow.</a>",
|
"license_info": "Une licence n’est pas requise, mais contribue au développement.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"SAL order\">Enregistrer votre GUID ici</a> or <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Support order\">acheter le support pour votre intallation Mailcow.</a>",
|
||||||
"link": "Lien",
|
"link": "Lien",
|
||||||
"loading": "Veuillez patienter...",
|
"loading": "Veuillez patienter…",
|
||||||
"logo_info": "Votre image sera redimensionnée à une hauteur de 40 pixels pour la barre de navigation du haut et à un maximum de 250 pixels en largeur pour la page d'accueil. Un graphique extensible est fortement recommandé.",
|
"logo_info": "Votre image sera redimensionnée à une hauteur de 40 pixels pour la barre de navigation du haut et à un maximum de 250 pixels en largeur pour la page d'accueil. Un graphique extensible est fortement recommandé.",
|
||||||
"lookup_mx": "Faire correspondre la destination à MX (.outlook.com pour acheminer tous les messages ciblés vers un MX * .outlook.com sur ce tronçon)",
|
"lookup_mx": "Faire correspondre la destination à MX (.outlook.com pour acheminer tous les messages ciblés vers un MX * .outlook.com sur ce tronçon)",
|
||||||
"main_name": "\"mailcow UI\" nom",
|
"main_name": "\"mailcow UI\" nom",
|
||||||
@ -326,7 +326,11 @@
|
|||||||
"password_policy_lowerupper": "Doit contenir des caractères minuscules et majuscules",
|
"password_policy_lowerupper": "Doit contenir des caractères minuscules et majuscules",
|
||||||
"password_policy_numbers": "Doit contenir au moins un chiffre",
|
"password_policy_numbers": "Doit contenir au moins un chiffre",
|
||||||
"ip_check": "Vérification IP",
|
"ip_check": "Vérification IP",
|
||||||
"ip_check_disabled": "La vérification IP est désactivée. Vous pouvez l'activer sous<br> <strong>Système > Configuration > Options > Personnaliser</strong>"
|
"ip_check_disabled": "La vérification IP est désactivée. Vous pouvez l'activer sous<br> <strong>Système > Configuration > Options > Personnaliser</strong>",
|
||||||
|
"logo_normal_label": "Normal",
|
||||||
|
"logo_dark_label": "Inversé pour le mode sombre",
|
||||||
|
"allowed_methods": "Access-Control-Allow-Methods",
|
||||||
|
"allowed_origins": "Access-Control-Allow-Origin"
|
||||||
},
|
},
|
||||||
"danger": {
|
"danger": {
|
||||||
"access_denied": "Accès refusé ou données de formulaire non valides",
|
"access_denied": "Accès refusé ou données de formulaire non valides",
|
||||||
@ -598,9 +602,9 @@
|
|||||||
"delete_these_items": "Veuillez confirmer les modifications apportées à l’identifiant d’objet suivant",
|
"delete_these_items": "Veuillez confirmer les modifications apportées à l’identifiant d’objet suivant",
|
||||||
"hibp_nok": "Trouvé ! Il s’agit d’un mot de passe potentiellement dangereux !",
|
"hibp_nok": "Trouvé ! Il s’agit d’un mot de passe potentiellement dangereux !",
|
||||||
"hibp_ok": "Aucune correspondance trouvée.",
|
"hibp_ok": "Aucune correspondance trouvée.",
|
||||||
"loading": "Veuillez patienter...",
|
"loading": "Veuillez patienter…",
|
||||||
"restart_container": "Redémarrer le conteneur",
|
"restart_container": "Redémarrer le conteneur",
|
||||||
"restart_container_info": "<b>Important:</b> Un redémarrage en douceur peut prendre un certain temps, veuillez attendre qu’il soit terminé..",
|
"restart_container_info": "<b>Important:</b> Un redémarrage en douceur peut prendre un certain temps, veuillez attendre qu’il soit terminé.",
|
||||||
"restart_now": "Redémarrer maintenant",
|
"restart_now": "Redémarrer maintenant",
|
||||||
"restarting_container": "Redémarrage du conteneur, cela peut prendre un certain temps"
|
"restarting_container": "Redémarrage du conteneur, cela peut prendre un certain temps"
|
||||||
},
|
},
|
||||||
@ -935,7 +939,7 @@
|
|||||||
"disable_tfa": "Désactiver TFA jusqu’à la prochaine ouverture de session réussie",
|
"disable_tfa": "Désactiver TFA jusqu’à la prochaine ouverture de session réussie",
|
||||||
"enter_qr_code": "Votre code TOTP si votre appareil ne peut pas scanner les codes QR",
|
"enter_qr_code": "Votre code TOTP si votre appareil ne peut pas scanner les codes QR",
|
||||||
"error_code": "Code d'erreur",
|
"error_code": "Code d'erreur",
|
||||||
"init_webauthn": "Initialisation, veuillez patienter...",
|
"init_webauthn": "Initialisation, veuillez patienter…",
|
||||||
"key_id": "Un identifiant pour votre Périphérique",
|
"key_id": "Un identifiant pour votre Périphérique",
|
||||||
"key_id_totp": "Un identifiant pour votre clé",
|
"key_id_totp": "Un identifiant pour votre clé",
|
||||||
"none": "Désactiver",
|
"none": "Désactiver",
|
||||||
@ -948,8 +952,8 @@
|
|||||||
"tfa_token_invalid": "Token TFA invalide",
|
"tfa_token_invalid": "Token TFA invalide",
|
||||||
"totp": "OTP (One Time Password = Mot de passe à usage unique : Google Authenticator, Authy, etc.)",
|
"totp": "OTP (One Time Password = Mot de passe à usage unique : Google Authenticator, Authy, etc.)",
|
||||||
"webauthn": "Authentification WebAuthn",
|
"webauthn": "Authentification WebAuthn",
|
||||||
"waiting_usb_auth": "<i>En attente d’un périphérique USB...</i><br><br>S’il vous plaît appuyez maintenant sur le bouton de votre périphérique USB WebAuthn.",
|
"waiting_usb_auth": "<i>En attente d’un périphérique USB…</i><br><br>S’il vous plaît appuyez maintenant sur le bouton de votre périphérique USB WebAuthn.",
|
||||||
"waiting_usb_register": "<i>En attente d’un périphérique USB...</i><br><br>Veuillez entrer votre mot de passe ci-dessus et confirmer votre inscription WebAuthn en appuyant sur le bouton de votre périphérique USB WebAuthn.",
|
"waiting_usb_register": "<i>En attente d’un périphérique USB…</i><br><br>Veuillez entrer votre mot de passe ci-dessus et confirmer votre inscription WebAuthn en appuyant sur le bouton de votre périphérique USB WebAuthn.",
|
||||||
"yubi_otp": "Authentification OTP Yubico"
|
"yubi_otp": "Authentification OTP Yubico"
|
||||||
},
|
},
|
||||||
"fido2": {
|
"fido2": {
|
||||||
@ -999,9 +1003,9 @@
|
|||||||
"eas_reset": "Réinitialiser le cache de l’appareil Activesync",
|
"eas_reset": "Réinitialiser le cache de l’appareil Activesync",
|
||||||
"eas_reset_help": "Dans de nombreux cas, une réinitialisation du cache de l’appareil aidera à récupérer un profil Activesync cassé.<br><b>Attention :</b> Tous les éléments seront à nouveau téléchargés !",
|
"eas_reset_help": "Dans de nombreux cas, une réinitialisation du cache de l’appareil aidera à récupérer un profil Activesync cassé.<br><b>Attention :</b> Tous les éléments seront à nouveau téléchargés !",
|
||||||
"eas_reset_now": "Réinitialiser maintenant",
|
"eas_reset_now": "Réinitialiser maintenant",
|
||||||
"edit": "Editer",
|
"edit": "Éditer",
|
||||||
"email": "Email",
|
"email": "E-mail",
|
||||||
"email_and_dav": "Email, calendriers et contacts",
|
"email_and_dav": "E-mail, calendriers et contacts",
|
||||||
"encryption": "Cryptage",
|
"encryption": "Cryptage",
|
||||||
"excludes": "Exclut",
|
"excludes": "Exclut",
|
||||||
"expire_in": "Expire dans",
|
"expire_in": "Expire dans",
|
||||||
@ -1015,7 +1019,7 @@
|
|||||||
"is_catch_all": "Attrape-tout pour le domaine(s)",
|
"is_catch_all": "Attrape-tout pour le domaine(s)",
|
||||||
"last_mail_login": "Dernière connexion mail",
|
"last_mail_login": "Dernière connexion mail",
|
||||||
"last_run": "Dernière exécution",
|
"last_run": "Dernière exécution",
|
||||||
"loading": "Chargement...",
|
"loading": "Chargement…",
|
||||||
"mailbox_details": "Détails de la boîte",
|
"mailbox_details": "Détails de la boîte",
|
||||||
"messages": "messages",
|
"messages": "messages",
|
||||||
"never": "jamais",
|
"never": "jamais",
|
||||||
@ -1051,7 +1055,7 @@
|
|||||||
"shared_aliases": "Adresses alias partagées",
|
"shared_aliases": "Adresses alias partagées",
|
||||||
"shared_aliases_desc": "Les alias partagés ne sont pas affectés par les paramètres spécifiques à l’utilisateur tels que le filtre anti-spam ou la politique de chiffrement. Les filtres anti-spam correspondants ne peuvent être effectués que par un administrateur en tant que politique de domaine.",
|
"shared_aliases_desc": "Les alias partagés ne sont pas affectés par les paramètres spécifiques à l’utilisateur tels que le filtre anti-spam ou la politique de chiffrement. Les filtres anti-spam correspondants ne peuvent être effectués que par un administrateur en tant que politique de domaine.",
|
||||||
"show_sieve_filters": "Afficher le filtre de tamis actif de l’utilisateur",
|
"show_sieve_filters": "Afficher le filtre de tamis actif de l’utilisateur",
|
||||||
"sogo_profile_reset": "Remise é zéro du profil SOGo",
|
"sogo_profile_reset": "Remise à zéro du profil SOGo",
|
||||||
"sogo_profile_reset_help": "Ceci détruira un profil Sogo des utilisateurs et <b>supprimera toutes les données de contact et de calendrier irrécupérables</b>.",
|
"sogo_profile_reset_help": "Ceci détruira un profil Sogo des utilisateurs et <b>supprimera toutes les données de contact et de calendrier irrécupérables</b>.",
|
||||||
"sogo_profile_reset_now": "Remise à zéro du profil maintenant",
|
"sogo_profile_reset_now": "Remise à zéro du profil maintenant",
|
||||||
"spam_aliases": "Alias de courriel temporaire",
|
"spam_aliases": "Alias de courriel temporaire",
|
||||||
|
@ -394,7 +394,12 @@
|
|||||||
"filters": "Szűrők",
|
"filters": "Szűrők",
|
||||||
"login_as": "Bejelentkezés mint",
|
"login_as": "Bejelentkezés mint",
|
||||||
"quarantine": "Karantén műveletek",
|
"quarantine": "Karantén műveletek",
|
||||||
"bcc_maps": "BCC címek"
|
"bcc_maps": "BCC címek",
|
||||||
|
"domain_relayhost": "Relayhost megváltoztatása egy domainhez",
|
||||||
|
"protocol_access": "Protokoll-hozzáférés módosítása",
|
||||||
|
"quarantine_attachments": "Karantén mellékletek",
|
||||||
|
"quarantine_category": "Karantén értesítési kategória módosítása",
|
||||||
|
"quarantine_notification": "Karantén értesítések módosítása"
|
||||||
},
|
},
|
||||||
"diagnostics": {
|
"diagnostics": {
|
||||||
"dns_records": "DNS bejegyzések"
|
"dns_records": "DNS bejegyzések"
|
||||||
|
1295
data/web/lang/lang.pt-br.json
Normal file
1295
data/web/lang/lang.pt-br.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -342,7 +342,12 @@
|
|||||||
"username": "Uporabniško ime",
|
"username": "Uporabniško ime",
|
||||||
"validate_license_now": "Potrdi GUID z licenčnim strežnikom",
|
"validate_license_now": "Potrdi GUID z licenčnim strežnikom",
|
||||||
"verify": "Preveri",
|
"verify": "Preveri",
|
||||||
"yes": "✓"
|
"yes": "✓",
|
||||||
|
"logo_normal_label": "Navadno",
|
||||||
|
"logo_dark_label": "Za temni način",
|
||||||
|
"cors_settings": "Nastavitve CORS",
|
||||||
|
"allowed_methods": "Dovoljene metode za upravljanje dostopa",
|
||||||
|
"allowed_origins": "Upravljanje-dostopa-Dovoljeni-Viri"
|
||||||
},
|
},
|
||||||
"danger": {
|
"danger": {
|
||||||
"alias_goto_identical": "Alias in goto naslov morata biti identična",
|
"alias_goto_identical": "Alias in goto naslov morata biti identična",
|
||||||
@ -391,6 +396,161 @@
|
|||||||
"invalid_destination": "Ciljna oblika \"%s\" ni veljavna",
|
"invalid_destination": "Ciljna oblika \"%s\" ni veljavna",
|
||||||
"invalid_filter_type": "Neveljavna vrsta filtra",
|
"invalid_filter_type": "Neveljavna vrsta filtra",
|
||||||
"invalid_host": "Naveden je neveljaven gostitelj (host): %s",
|
"invalid_host": "Naveden je neveljaven gostitelj (host): %s",
|
||||||
"invalid_mime_type": "Neveljaven mime type"
|
"invalid_mime_type": "Neveljaven mime type",
|
||||||
|
"max_quota_in_use": "Kvota poštnega predala mora biti večja ali enaka %d MB",
|
||||||
|
"password_complexity": "Geslo ne ustreza varnostni politiki",
|
||||||
|
"pushover_credentials_missing": "Manjka Pushover token ali ključ",
|
||||||
|
"release_send_failed": "Sporočila ni bilo mogoče sprostiti: %s",
|
||||||
|
"tls_policy_map_dest_invalid": "Cilj politike ni veljaven",
|
||||||
|
"webauthn_authenticator_failed": "Izbrani avtentikator ni bil najden",
|
||||||
|
"reset_f2b_regex": "Regex filter ni bilo možno ponastaviti v ustreznem času. Prosim poskusite ponovno ali počakajte nekaj sekund in ponovno naložite stran.",
|
||||||
|
"target_domain_invalid": "Ciljna domena %s ni veljavna",
|
||||||
|
"validity_missing": "Prosim nastavite obdobje veljavnosti",
|
||||||
|
"invalid_recipient_map_old": "Naveden neveljaven izvirni prejemnik: %s",
|
||||||
|
"ip_list_empty": "Seznam dovoljenih IPjev ne sme biti prazen",
|
||||||
|
"is_alias": "%s je že znan kot alias naslov",
|
||||||
|
"is_alias_or_mailbox": "%s je že znan kot alias, poštni naslov, ali alias izveden iz alias domene",
|
||||||
|
"is_spam_alias": "%s že obstaja kot začasen alias (spam alias naslov)",
|
||||||
|
"last_key": "Zadnji ključ ne more biti izbrisan, prosim raje deaktivirajte dvofaktorsko avtentikacijo (TFA)",
|
||||||
|
"login_failed": "Prijava ni uspela",
|
||||||
|
"mailbox_defquota_exceeds_mailbox_maxquota": "Privzeta kvota presega najvišjo omejitev",
|
||||||
|
"mailbox_invalid": "Ime poštnega predala ni veljavno",
|
||||||
|
"mailbox_quota_exceeded": "Kvota presega omejitev domene (maksimalno %d MB)",
|
||||||
|
"mailbox_quota_exceeds_domain_quota": "Najvišja kvota presega omejitev domene",
|
||||||
|
"mailbox_quota_left_exceeded": "Ni dovolj prostora (preostali prostor: %d MB)",
|
||||||
|
"mailboxes_in_use": "Največje število poštnih predalov mora biti večje ali enako %d",
|
||||||
|
"malformed_username": "Nepravilno oblikovano uporabniško ime",
|
||||||
|
"map_content_empty": "Preslikava vsebine ne more biti prazna",
|
||||||
|
"max_alias_exceeded": "Preseženo največje število aliasov",
|
||||||
|
"max_mailbox_exceeded": "Preseženo največje število poštnih predalov (%d od %d)",
|
||||||
|
"maxquota_empty": "Največja kvota na poštni predal ne more biti 0",
|
||||||
|
"mysql_error": "Napaka MySQL: %s",
|
||||||
|
"network_host_invalid": "Nepravilno omrežje ali gostitel: %s",
|
||||||
|
"next_hop_interferes": "% moti naslednji skok %s",
|
||||||
|
"next_hop_interferes_any": "Obstoječi naslednji skok moti %s",
|
||||||
|
"nginx_reload_failed": "Ponovni zagon Nginx ni uspel: %s",
|
||||||
|
"no_user_defined": "Uporabnik ni določen",
|
||||||
|
"object_exists": "Objekt %s že obstaja",
|
||||||
|
"object_is_not_numeric": "Vrednost %s ni numerična",
|
||||||
|
"password_empty": "Geslo ne sme biti prazno",
|
||||||
|
"password_mismatch": "Potrditev gesla se ne ujema z geslom",
|
||||||
|
"policy_list_from_exists": "Zapis z tem imenom že obstaja",
|
||||||
|
"policy_list_from_invalid": "Zapis ima nepravilno obliko",
|
||||||
|
"private_key_error": "Napaka zasebnega ključa: %s",
|
||||||
|
"pushover_key": "Pushover ključ ni v pravilni obliki",
|
||||||
|
"pushover_token": "Pushover token ni v pravilni obliki",
|
||||||
|
"quota_not_0_not_numeric": "Quota mora biti število in večje ali enako 0",
|
||||||
|
"recipient_map_entry_exists": "Preslikava prejemnika \"%s\" že obstaja",
|
||||||
|
"redis_error": "Napaka Redis: %s",
|
||||||
|
"relayhost_invalid": "Vnos preslikave %s ni pravilen",
|
||||||
|
"resource_invalid": "Ime vira je neveljavno",
|
||||||
|
"rl_timeframe": "Časovni okvir za rate limit je nepravilen",
|
||||||
|
"rspamd_ui_pw_length": "Rspamd UI geslo mora biti dolgo vsaj 6 znakov",
|
||||||
|
"script_empty": "Script ne more biti prazen",
|
||||||
|
"sender_acl_invalid": "Vrednost ACL pošiljatelja %s ni veljavna",
|
||||||
|
"set_acl_failed": "Ni uspelo nastaviti ACL",
|
||||||
|
"settings_map_invalid": "ID preslikave nastavitev %s ni veljaven",
|
||||||
|
"sieve_error": "Napaka Sieve parserja: %s",
|
||||||
|
"spam_learn_error": "Napaka pri učenju spama: %s",
|
||||||
|
"subject_empty": "Predmet ne sme biti prazno",
|
||||||
|
"targetd_not_found": "Ciljna domena %s ni bila najdena",
|
||||||
|
"targetd_relay_domain": "Ciljna domena %s je relay domena",
|
||||||
|
"template_exists": "Predloga %s že obstaja",
|
||||||
|
"template_id_invalid": "ID predloge %s ni veljaven",
|
||||||
|
"template_name_invalid": "Ime predloge ni veljavno",
|
||||||
|
"text_empty": "Besedilo ne sme biti prazno",
|
||||||
|
"tfa_token_invalid": "Neveljaven token TFA",
|
||||||
|
"tls_policy_map_entry_exists": "Vpis preslikave TLS \"%s\" že obstaja",
|
||||||
|
"tls_policy_map_parameter_invalid": "Parameter politike ni pravilen",
|
||||||
|
"totp_verification_failed": "Neuspešno preverjanje TOTP",
|
||||||
|
"transport_dest_exists": "Cilj transporta \"%s\" že obstaja",
|
||||||
|
"webauthn_verification_failed": "Preverjanje WebAuthn ni uspelo: %s",
|
||||||
|
"webauthn_publickey_failed": "Na izbranem avtentikatorju ni shranjenega javnega ključa",
|
||||||
|
"webauthn_username_failed": "Izbrani avtentikator pripada drugemu uporabniškemu računu",
|
||||||
|
"unknown": "Pojavila se je neznana napaka",
|
||||||
|
"unknown_tfa_method": "Neznana metoda TFA",
|
||||||
|
"unlimited_quota_acl": "Neomejena kvota je prepovedana z ACL",
|
||||||
|
"username_invalid": "Uporabniško ime %s ne more biti uporabljeno",
|
||||||
|
"value_missing": "Prosim vnesite vse vrednosti",
|
||||||
|
"yotp_verification_failed": "Preverjanje Yubico OTP ni uspelo: %s",
|
||||||
|
"temp_error": "Začasna napaka",
|
||||||
|
"cors_invalid_method": "Navedena neveljavna Allow metoda",
|
||||||
|
"cors_invalid_origin": "Naveden neveljaven Allow-Origin",
|
||||||
|
"invalid_recipient_map_new": "Naveden neveljaven nov prejemnik: %s"
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"containers_info": "Informacije o vsebniku (containerju)",
|
||||||
|
"architecture": "Arhitektura",
|
||||||
|
"chart_this_server": "Diagram (ta strežnik)",
|
||||||
|
"container_running": "Aktiven",
|
||||||
|
"container_disabled": "Ustavljen ali onemogočen",
|
||||||
|
"container_stopped": "Ustavljen",
|
||||||
|
"cores": "Jedra",
|
||||||
|
"current_time": "Sistemski čas",
|
||||||
|
"disk_usage": "Zasedenost diska",
|
||||||
|
"docs": "Dokumenti",
|
||||||
|
"error_show_ip": "Ni mogoče preveriti javnega IP naslova",
|
||||||
|
"external_logs": "Zunanji dnevniki",
|
||||||
|
"last_modified": "Nazadnje spremenjeno",
|
||||||
|
"history_all_servers": "Zgodovina (vsi strežniki)",
|
||||||
|
"in_memory_logs": "In-memory dnevniki",
|
||||||
|
"jvm_memory_solr": "JVM zasedenost spomina",
|
||||||
|
"service": "Servis",
|
||||||
|
"show_ip": "Prikaži javni IP",
|
||||||
|
"size": "Velikost",
|
||||||
|
"solr_dead": "Solr se zaganja, je onemogočen ali se je ustavil.",
|
||||||
|
"solr_status": "Status Solr",
|
||||||
|
"started_at": "Zagnano ob",
|
||||||
|
"started_on": "Zagnano na",
|
||||||
|
"static_logs": "Statični dnevniki",
|
||||||
|
"success": "Uspešno",
|
||||||
|
"system_containers": "Sistem in Containerji",
|
||||||
|
"timezone": "Časovni pas",
|
||||||
|
"uptime": "Čas delovanja",
|
||||||
|
"update_available": "Posodobitev je na voljo",
|
||||||
|
"no_update_available": "Sistem je na najnovejši verziji",
|
||||||
|
"update_failed": "Ni mogoče preveriti za posodobitve",
|
||||||
|
"username": "Uporabniško ime",
|
||||||
|
"wip": "Trenutno v delu"
|
||||||
|
},
|
||||||
|
"datatables": {
|
||||||
|
"infoFiltered": "(filtrirano od _MAX_ skupaj zapisov)",
|
||||||
|
"collapse_all": "Strni vse",
|
||||||
|
"decimal": ",",
|
||||||
|
"emptyTable": "Ni podatkov",
|
||||||
|
"expand_all": "Razširi vse",
|
||||||
|
"info": "Prikazano _START_ do _END_ od _TOTAL_ zapisov",
|
||||||
|
"infoEmpty": "Prikazano 0 do 0 od 0 zapisov",
|
||||||
|
"thousands": ".",
|
||||||
|
"lengthMenu": "Prikaži _MENU_ zapise",
|
||||||
|
"loadingRecords": "Nalaganje...",
|
||||||
|
"processing": "Prosim počakajte...",
|
||||||
|
"search": "Iskanje:",
|
||||||
|
"zeroRecords": "Ni ujemajočih zapisov",
|
||||||
|
"paginate": {
|
||||||
|
"first": "Prva",
|
||||||
|
"last": "Zadnja",
|
||||||
|
"previous": "Prejšnja",
|
||||||
|
"next": "Naslednja"
|
||||||
|
},
|
||||||
|
"aria": {
|
||||||
|
"sortAscending": ": aktivirajte za razvrstitev stolpca naraščajoče",
|
||||||
|
"sortDescending": ": aktivirajte za razvrstitev stolpca padajoče"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"diagnostics": {
|
||||||
|
"cname_from_a": "Vrednost pridobljena iz A/AAAA zapisa. To je podprto, če zapis kaže na pravilen resurs.",
|
||||||
|
"dns_records": "DNS zapisi",
|
||||||
|
"dns_records_24hours": "Prosim upoštevajte, da lahko traja do 24 ur da se spremembe v DNS pravilno prikažejo na tej strani. Namen je da lahko enostavno vidite, kako konfigurirati svoje DNS zapise in preverite ali so vaši zapisi pravilno shranjeni v DNS.",
|
||||||
|
"dns_records_data": "Pravilni podatki",
|
||||||
|
"dns_records_docs": "Prosim preverite tudi <a target=\"_blank\" href=\"https://docs.mailcow.email/prerequisite/prerequisite-dns/\">dokumentacijo</a>.",
|
||||||
|
"dns_records_name": "Ime",
|
||||||
|
"dns_records_status": "Trenutno stanje",
|
||||||
|
"dns_records_type": "Vrsta",
|
||||||
|
"optional": "Ta zapis je opcijski."
|
||||||
|
},
|
||||||
|
"edit": {
|
||||||
|
"acl": "ACL (Dovoljenje)",
|
||||||
|
"active": "Aktivno"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
"alias_domain": "Alias doména",
|
"alias_domain": "Alias doména",
|
||||||
"alias_domain_info": "<small>Len platné mená domén (oddelené čiarkou).</small>",
|
"alias_domain_info": "<small>Len platné mená domén (oddelené čiarkou).</small>",
|
||||||
"app_name": "Meno aplikácie",
|
"app_name": "Meno aplikácie",
|
||||||
"app_passwd_protocols": "Povolené protokoly pre heslá aplikácií",
|
"app_passwd_protocols": "Povolené protokoly k heslu aplikácie",
|
||||||
"app_password": "Pridať heslo aplikácie",
|
"app_password": "Pridať heslo aplikácie",
|
||||||
"automap": "Skúsiť automaticky mapovať priečinky (\"Sent items\", \"Sent\" => \"Sent\" atd.)",
|
"automap": "Skúsiť automaticky mapovať priečinky (\"Sent items\", \"Sent\" => \"Sent\" atd.)",
|
||||||
"backup_mx_options": "Možnosti preposielania",
|
"backup_mx_options": "Možnosti preposielania",
|
||||||
@ -107,7 +107,6 @@
|
|||||||
"username": "Používateľské meno",
|
"username": "Používateľské meno",
|
||||||
"validate": "Overiť",
|
"validate": "Overiť",
|
||||||
"validation_success": "Úspešne overené",
|
"validation_success": "Úspešne overené",
|
||||||
"app_passwd_protocols": "Povolené protokoly k heslu aplikácie",
|
|
||||||
"tags": "Štítky"
|
"tags": "Štítky"
|
||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
@ -148,6 +147,8 @@
|
|||||||
"ays": "Naozaj chcete pokračovať?",
|
"ays": "Naozaj chcete pokračovať?",
|
||||||
"ban_list_info": "Zoznam zakázaných IP je zobrazený nižšie: <b>sieť (zostávajúci čas zákazu) - [akcia]</b>.<br />IP adresy zaradené na unban budú odstránené z aktívneho zoznamu v priebehu niekoľkých sekúnd.<br />Červené položky zobrazujú permanentné blokovanie.",
|
"ban_list_info": "Zoznam zakázaných IP je zobrazený nižšie: <b>sieť (zostávajúci čas zákazu) - [akcia]</b>.<br />IP adresy zaradené na unban budú odstránené z aktívneho zoznamu v priebehu niekoľkých sekúnd.<br />Červené položky zobrazujú permanentné blokovanie.",
|
||||||
"change_logo": "Zmeniť logo",
|
"change_logo": "Zmeniť logo",
|
||||||
|
"logo_normal_label": "Normálne",
|
||||||
|
"logo_dark_label": "Inverzné pre tmavý režim",
|
||||||
"configuration": "Konfigurácia",
|
"configuration": "Konfigurácia",
|
||||||
"convert_html_to_text": "Konvertovať HTML do obyčajného textu",
|
"convert_html_to_text": "Konvertovať HTML do obyčajného textu",
|
||||||
"credentials_transport_warning": "<b>Upozornenie</b>: Pridaním ďalšieho záznamu do transportnej mapy bude mať za následok aktualizovanie údajov pre všetky záznamy so zhodným ďalším skokom.",
|
"credentials_transport_warning": "<b>Upozornenie</b>: Pridaním ďalšieho záznamu do transportnej mapy bude mať za následok aktualizovanie údajov pre všetky záznamy so zhodným ďalším skokom.",
|
||||||
@ -207,6 +208,9 @@
|
|||||||
"include_exclude": "Zahrnúť/Vylúčiť",
|
"include_exclude": "Zahrnúť/Vylúčiť",
|
||||||
"include_exclude_info": "Ak nič nevyberiete tak bude adresované <b>všetkým schránkam</b>",
|
"include_exclude_info": "Ak nič nevyberiete tak bude adresované <b>všetkým schránkam</b>",
|
||||||
"includes": "Zahrnúť týchto príjemcov",
|
"includes": "Zahrnúť týchto príjemcov",
|
||||||
|
"ip_check": "Kontrola IP",
|
||||||
|
"ip_check_disabled": "Kontrola IP je vypnutá. Môžete ju zapnúť v ponuke<br> <strong>Systém > Konfigurácia > Možnosti > Prispôsobiť</strong>",
|
||||||
|
"ip_check_opt_in": "Prihlásiť sa k používaniu služby tretej strany <strong>ipv4.mailcow.email</strong> a <strong>ipv6.mailcow.email</strong> za účelom zistenia externých IP adries.",
|
||||||
"is_mx_based": "Na základe MX",
|
"is_mx_based": "Na základe MX",
|
||||||
"last_applied": "Naposledy aplikované",
|
"last_applied": "Naposledy aplikované",
|
||||||
"license_info": "Licencia nie je potrebná, ale napomáha ďalšiemu vývoju.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"SAL order\">Registrujte váš GUID tu</a> alebo <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Objednávka podpory\">zakúpte si podporu pre vašu mailcow inštaláciu.</a>",
|
"license_info": "Licencia nie je potrebná, ale napomáha ďalšiemu vývoju.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"SAL order\">Registrujte váš GUID tu</a> alebo <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Objednávka podpory\">zakúpte si podporu pre vašu mailcow inštaláciu.</a>",
|
||||||
@ -233,6 +237,7 @@
|
|||||||
"oauth2_renew_secret": "Vygenerovať nový tajný kľuč",
|
"oauth2_renew_secret": "Vygenerovať nový tajný kľuč",
|
||||||
"oauth2_revoke_tokens": "Odobrať všetky tokeny klienta",
|
"oauth2_revoke_tokens": "Odobrať všetky tokeny klienta",
|
||||||
"optional": "voliteľné",
|
"optional": "voliteľné",
|
||||||
|
"options": "Možnosti",
|
||||||
"password": "Heslo",
|
"password": "Heslo",
|
||||||
"password_length": "Dĺžka hesla",
|
"password_length": "Dĺžka hesla",
|
||||||
"password_policy": "Politika hesiel",
|
"password_policy": "Politika hesiel",
|
||||||
@ -440,6 +445,9 @@
|
|||||||
"target_domain_invalid": "Cieľová doména %s je neplatná",
|
"target_domain_invalid": "Cieľová doména %s je neplatná",
|
||||||
"targetd_not_found": "Cieľová doména %s sa nenašla",
|
"targetd_not_found": "Cieľová doména %s sa nenašla",
|
||||||
"targetd_relay_domain": "Cieľová doména %s je posielaná ďalej (relay)",
|
"targetd_relay_domain": "Cieľová doména %s je posielaná ďalej (relay)",
|
||||||
|
"template_exists": "Šablóna %s už existuje",
|
||||||
|
"template_id_invalid": "Šablóna ID %s je neplatná",
|
||||||
|
"template_name_invalid": "Názov šablóny je neplatný",
|
||||||
"temp_error": "Dočasná chyba",
|
"temp_error": "Dočasná chyba",
|
||||||
"text_empty": "Text nemôže byť prázdny",
|
"text_empty": "Text nemôže byť prázdny",
|
||||||
"tfa_token_invalid": "Neplatný TFA token",
|
"tfa_token_invalid": "Neplatný TFA token",
|
||||||
@ -529,7 +537,7 @@
|
|||||||
"allowed_protocols": "Povolené protokoly",
|
"allowed_protocols": "Povolené protokoly",
|
||||||
"app_name": "Meno aplikácie",
|
"app_name": "Meno aplikácie",
|
||||||
"app_passwd": "Heslo aplikácie",
|
"app_passwd": "Heslo aplikácie",
|
||||||
"app_passwd_protocols": "Povolené protokoly pre heslá aplikácií",
|
"app_passwd_protocols": "Povolené protokoly",
|
||||||
"automap": "Skúsiť automapovať priečinky (\"Sent items\", \"Sent\" => \"Sent\" atd.)",
|
"automap": "Skúsiť automapovať priečinky (\"Sent items\", \"Sent\" => \"Sent\" atd.)",
|
||||||
"backup_mx_options": "Možnosti preposielania",
|
"backup_mx_options": "Možnosti preposielania",
|
||||||
"bcc_dest_format": "Cieľ kópie musí byť jedna platná emailová adresa. Pokiaľ potrebujete posielať kópie na viac adries, vytvorte Alias a použite ho tu.",
|
"bcc_dest_format": "Cieľ kópie musí byť jedna platná emailová adresa. Pokiaľ potrebujete posielať kópie na viac adries, vytvorte Alias a použite ho tu.",
|
||||||
@ -614,8 +622,8 @@
|
|||||||
"sieve_desc": "Krátky popis",
|
"sieve_desc": "Krátky popis",
|
||||||
"sieve_type": "Typ filtru",
|
"sieve_type": "Typ filtru",
|
||||||
"skipcrossduplicates": "Preskočiť duplikované správy naprieč priečinkami (akceptuje sa prvý nález)",
|
"skipcrossduplicates": "Preskočiť duplikované správy naprieč priečinkami (akceptuje sa prvý nález)",
|
||||||
"sogo_access": "Udeliť priamy prístup k prihláseniu do služby SOGo",
|
"sogo_access": "Prideliť priame prihlásenie do SOGo",
|
||||||
"sogo_access_info": "Jednotné prihlásenie (SSO) z mail UI zostáva funkčné. Toto nastavenie nemá vplyv na prístup k všetkým ostatným službám, ani neodstraňuje alebo nemení existujúci profil používateľa SOGo.",
|
"sogo_access_info": "Jednotné prihlásenie z používateľského mail rozhrania zostáva funkčné. Toto nastavenie nemá vplyv na prístup k ostatným službám, ani neodstraňuje alebo nemení existujúci profil používateľa SOGo.",
|
||||||
"sogo_visible": "Alias je viditeľný v SOGo",
|
"sogo_visible": "Alias je viditeľný v SOGo",
|
||||||
"sogo_visible_info": "Táto voľba ovplyvňuje len objekty, ktoré dokážu byť zobrazené v SOGo (zdieľané alebo nezdieľané alias adresy ukazujúc na minimálne jednu lokálnu mailovú schránku). Ak je skrytý, alias nebude prezentovaný ako voliteľný odosielateľ v SOGo.",
|
"sogo_visible_info": "Táto voľba ovplyvňuje len objekty, ktoré dokážu byť zobrazené v SOGo (zdieľané alebo nezdieľané alias adresy ukazujúc na minimálne jednu lokálnu mailovú schránku). Ak je skrytý, alias nebude prezentovaný ako voliteľný odosielateľ v SOGo.",
|
||||||
"spam_alias": "Vytvoriť alebo zmeniť časovo limitované alias adresy",
|
"spam_alias": "Vytvoriť alebo zmeniť časovo limitované alias adresy",
|
||||||
@ -631,10 +639,7 @@
|
|||||||
"title": "Upraviť objekt",
|
"title": "Upraviť objekt",
|
||||||
"unchanged_if_empty": "Ak nemeníte, nechajte prázdne",
|
"unchanged_if_empty": "Ak nemeníte, nechajte prázdne",
|
||||||
"username": "Používateľské meno",
|
"username": "Používateľské meno",
|
||||||
"validate_save": "Validovať a uložiť",
|
"validate_save": "Validovať a uložiť"
|
||||||
"sogo_access": "Prideliť priame prihlásenie do SOGo",
|
|
||||||
"sogo_access_info": "Jednotné prihlásenie z používateľského mail rozhrania zostáva funkčné. Toto nastavenie nemá vplyv na prístup k ostatným službám, ani neodstraňuje alebo nemení existujúci profil používateľa SOGo.",
|
|
||||||
"app_passwd_protocols": "Povolené protokoly"
|
|
||||||
},
|
},
|
||||||
"fido2": {
|
"fido2": {
|
||||||
"confirm": "Potvrdiť",
|
"confirm": "Potvrdiť",
|
||||||
@ -671,6 +676,7 @@
|
|||||||
"apps": "Aplikácie",
|
"apps": "Aplikácie",
|
||||||
"debug": "Systémové informácie",
|
"debug": "Systémové informácie",
|
||||||
"email": "E-Mail",
|
"email": "E-Mail",
|
||||||
|
"mailcow_system": "Systém",
|
||||||
"mailcow_config": "Konfigurácia",
|
"mailcow_config": "Konfigurácia",
|
||||||
"quarantine": "Karanténa",
|
"quarantine": "Karanténa",
|
||||||
"restart_netfilter": "Reštartovať netfilter",
|
"restart_netfilter": "Reštartovať netfilter",
|
||||||
@ -706,6 +712,7 @@
|
|||||||
"add_mailbox": "Pridať mailovú schránku",
|
"add_mailbox": "Pridať mailovú schránku",
|
||||||
"add_recipient_map_entry": "Pridať mapu príjemcu",
|
"add_recipient_map_entry": "Pridať mapu príjemcu",
|
||||||
"add_resource": "Pridať zdroj",
|
"add_resource": "Pridať zdroj",
|
||||||
|
"add_template": "Pridať šablónu",
|
||||||
"add_tls_policy_map": "Pridať TLS mapu pravidiel",
|
"add_tls_policy_map": "Pridať TLS mapu pravidiel",
|
||||||
"address_rewriting": "Prepisovanie adries",
|
"address_rewriting": "Prepisovanie adries",
|
||||||
"alias": "Alias",
|
"alias": "Alias",
|
||||||
@ -748,6 +755,7 @@
|
|||||||
"domain": "Doména",
|
"domain": "Doména",
|
||||||
"domain_admins": "Administrátori domény",
|
"domain_admins": "Administrátori domény",
|
||||||
"domain_aliases": "Alias domény",
|
"domain_aliases": "Alias domény",
|
||||||
|
"domain_templates": "Šablóny domén",
|
||||||
"domain_quota": "Kvóta",
|
"domain_quota": "Kvóta",
|
||||||
"domain_quota_total": "Celkové kvóta domény",
|
"domain_quota_total": "Celkové kvóta domény",
|
||||||
"domains": "Domény",
|
"domains": "Domény",
|
||||||
@ -776,6 +784,7 @@
|
|||||||
"mailbox_defaults": "Predvolené nastavenia",
|
"mailbox_defaults": "Predvolené nastavenia",
|
||||||
"mailbox_defaults_info": "Definuje predvolené nastavenia pre nové schránky.",
|
"mailbox_defaults_info": "Definuje predvolené nastavenia pre nové schránky.",
|
||||||
"mailbox_defquota": "Predvolená veľkosť schránky",
|
"mailbox_defquota": "Predvolená veľkosť schránky",
|
||||||
|
"mailbox_templates": "Šablóny schránok",
|
||||||
"mailbox_quota": "Max. veľkosť schránky",
|
"mailbox_quota": "Max. veľkosť schránky",
|
||||||
"mailboxes": "Mailové schránky",
|
"mailboxes": "Mailové schránky",
|
||||||
"max_aliases": "Max. počet aliasov",
|
"max_aliases": "Max. počet aliasov",
|
||||||
@ -843,6 +852,8 @@
|
|||||||
"table_size_show_n": "Zobraziť %s položiek",
|
"table_size_show_n": "Zobraziť %s položiek",
|
||||||
"target_address": "Cieľová adresa",
|
"target_address": "Cieľová adresa",
|
||||||
"target_domain": "Cieľová doména",
|
"target_domain": "Cieľová doména",
|
||||||
|
"templates": "Šablóny",
|
||||||
|
"template": "Šablóna",
|
||||||
"tls_enforce_in": "Vynútiť TLS pre prichádzajúcu poštu",
|
"tls_enforce_in": "Vynútiť TLS pre prichádzajúcu poštu",
|
||||||
"tls_enforce_out": "Vynútiť TLS pre odchádzajúcu poštu",
|
"tls_enforce_out": "Vynútiť TLS pre odchádzajúcu poštu",
|
||||||
"tls_map_dest": "Cieľ",
|
"tls_map_dest": "Cieľ",
|
||||||
@ -1007,6 +1018,9 @@
|
|||||||
"settings_map_added": "Pridaná mapa nastavení",
|
"settings_map_added": "Pridaná mapa nastavení",
|
||||||
"settings_map_removed": "Odstránená mapa nastavení ID %s",
|
"settings_map_removed": "Odstránená mapa nastavení ID %s",
|
||||||
"sogo_profile_reset": "SOGo profil pre používateľa %s resetovaný",
|
"sogo_profile_reset": "SOGo profil pre používateľa %s resetovaný",
|
||||||
|
"template_added": "Pridaná šablóna %s",
|
||||||
|
"template_modified": "Zmeny šablóny %s boli uložené",
|
||||||
|
"template_removed": "Šablóna ID %s bola odstránená",
|
||||||
"tls_policy_map_entry_deleted": "Položka mapy TLS pravidiel %s vymazaná",
|
"tls_policy_map_entry_deleted": "Položka mapy TLS pravidiel %s vymazaná",
|
||||||
"tls_policy_map_entry_saved": "Položka mapy TLS pravidiel \"%s\" uložená",
|
"tls_policy_map_entry_saved": "Položka mapy TLS pravidiel \"%s\" uložená",
|
||||||
"ui_texts": "Zmeny v UI textoch uložené",
|
"ui_texts": "Zmeny v UI textoch uložené",
|
||||||
@ -1065,9 +1079,9 @@
|
|||||||
"apple_connection_profile": "Apple konfiguračný profil",
|
"apple_connection_profile": "Apple konfiguračný profil",
|
||||||
"apple_connection_profile_complete": "Tento profil zahŕňa IMAP a SMTP parametre, ako aj CalDAV (kalendáre) a CardDAV (kontakty) pre zariadenia Apple.",
|
"apple_connection_profile_complete": "Tento profil zahŕňa IMAP a SMTP parametre, ako aj CalDAV (kalendáre) a CardDAV (kontakty) pre zariadenia Apple.",
|
||||||
"apple_connection_profile_mailonly": "Tento profil zahŕňa IMAP a SMTP konfiguračné parametre pre zariadenia Apple.",
|
"apple_connection_profile_mailonly": "Tento profil zahŕňa IMAP a SMTP konfiguračné parametre pre zariadenia Apple.",
|
||||||
"apple_connection_profile_with_app_password": "Nové heslo aplikácie sa vygeneruje a pridá do profilu, takže pri nastavovaní zariadenia nie je potrebné zadávať žiadne heslo. Súbor nezdieľajte, pretože poskytuje úplný prístup k vašej poštovej schránke.",
|
"apple_connection_profile_with_app_password": "Nové heslo aplikácie sa vygeneruje a pridá do profilu, takže pri nastavovaní zariadenia nie je potrebné zadávať žiadne heslo. Súbor nezdieľajte, pretože poskytuje úplný prístup k vašej mail schránke.",
|
||||||
"change_password": "Zmeniť heslo",
|
"change_password": "Zmeniť heslo",
|
||||||
"change_password_hint_app_passwords": "Váš účet má %d hesiel aplikácií, ktoré nebudú zmenené. Ak ich chcete spravovať, prejdite na kartu Heslá aplikácií.",
|
"change_password_hint_app_passwords": "Vaše konto má %d hesiel aplikácií, ktoré nebudú zmenené. Ak ich chcete spravovať, prejdite na kartu Heslá aplikácií.",
|
||||||
"clear_recent_successful_connections": "Vymazať nedávne úspešné prihlásenia",
|
"clear_recent_successful_connections": "Vymazať nedávne úspešné prihlásenia",
|
||||||
"client_configuration": "Zobraziť konfiguračné pokyny pre emailových klientov a smartfóny",
|
"client_configuration": "Zobraziť konfiguračné pokyny pre emailových klientov a smartfóny",
|
||||||
"create_app_passwd": "Vytvoriť heslo aplikácie",
|
"create_app_passwd": "Vytvoriť heslo aplikácie",
|
||||||
@ -1078,7 +1092,7 @@
|
|||||||
"delete_ays": "Potvrďte zmazanie.",
|
"delete_ays": "Potvrďte zmazanie.",
|
||||||
"direct_aliases": "Priame alias adresy",
|
"direct_aliases": "Priame alias adresy",
|
||||||
"direct_aliases_desc": "Priame aliasy sú ovplyvnené spam filtrom a nastavením TLS pravidiel.",
|
"direct_aliases_desc": "Priame aliasy sú ovplyvnené spam filtrom a nastavením TLS pravidiel.",
|
||||||
"direct_protocol_access": "Tento používateľ mailovej schránky má <b>priamy, externý prístup</b> k nasledujúcim protokolom a aplikáciám. Toto nastavenie má pod kontrolou Váš správca. Na udelenie prístupu k jednotlivým protokolom a aplikáciám je možné vytvoriť heslá aplikácií.<br>Tlačidlo \" Prihláste sa do webmailu\" poskytuje jednotné prihlásenie do systému SOGo a je vždy k dispozícii.",
|
"direct_protocol_access": "Tento používateľ mailovej schránky má <b>priamy, externý prístup</b> k nasledujúcim protokolom a aplikáciám. Toto nastavenie kontroluje administrátor. Na udelenie prístupu k jednotlivým protokolom a aplikáciám je možné vytvoriť heslá aplikácií.<br>Tlačidlo \"Prihlásenie do webmailu\" poskytuje jednotné prihlásenie do systému SOGo a je vždy k dispozícii.",
|
||||||
"eas_reset": "Resetovať medzipamäť u ActiveSync zariadení",
|
"eas_reset": "Resetovať medzipamäť u ActiveSync zariadení",
|
||||||
"eas_reset_help": "Vo väčšine prípadov, reset medzipamäte ActiveSync pomôže opravit nefunkčný profil.<br><b>Pozor:</b> Všetky potrebné dáta budú opäť stiahnuté!",
|
"eas_reset_help": "Vo väčšine prípadov, reset medzipamäte ActiveSync pomôže opravit nefunkčný profil.<br><b>Pozor:</b> Všetky potrebné dáta budú opäť stiahnuté!",
|
||||||
"eas_reset_now": "Reset ActiveSync",
|
"eas_reset_now": "Reset ActiveSync",
|
||||||
@ -1202,10 +1216,7 @@
|
|||||||
"weeks": "týždne",
|
"weeks": "týždne",
|
||||||
"with_app_password": "s heslom aplikácie",
|
"with_app_password": "s heslom aplikácie",
|
||||||
"year": "rok",
|
"year": "rok",
|
||||||
"years": "rokov",
|
"years": "rokov"
|
||||||
"apple_connection_profile_with_app_password": "Nové heslo aplikácie sa vygeneruje a pridá do profilu, takže pri nastavovaní zariadenia nie je potrebné zadávať žiadne heslo. Súbor nezdieľajte, pretože poskytuje úplný prístup k vašej mail schránke.",
|
|
||||||
"change_password_hint_app_passwords": "Vaše konto má %d hesiel aplikácií, ktoré nebudú zmenené. Ak ich chcete spravovať, prejdite na kartu Heslá aplikácií.",
|
|
||||||
"direct_protocol_access": "Tento používateľ mailovej schránky má <b>priamy, externý prístup</b> k nasledujúcim protokolom a aplikáciám. Toto nastavenie kontroluje administrátor. Na udelenie prístupu k jednotlivým protokolom a aplikáciám je možné vytvoriť heslá aplikácií.<br>Tlačidlo \"Prihlásenie do webmailu\" poskytuje jednotné prihlásenie do systému SOGo a je vždy k dispozícii."
|
|
||||||
},
|
},
|
||||||
"warning": {
|
"warning": {
|
||||||
"cannot_delete_self": "Nemožno vymazať prihláseného používateľa",
|
"cannot_delete_self": "Nemožno vymazať prihláseného používateľa",
|
||||||
|
@ -1,61 +1,113 @@
|
|||||||
{
|
{
|
||||||
"acl": {
|
"acl": {
|
||||||
"alias_domains": "Takma alan adı ekle",
|
"alias_domains": "Alias domain ekle",
|
||||||
"app_passwds": "Uygulama şifrelerini yönet",
|
"app_passwds": "Uygulama şifrelerini yönet",
|
||||||
"delimiter_action": "Sınırlama işlemi",
|
"bcc_maps": "BCC haritası",
|
||||||
"domain_relayhost": "Bir alan adı için relayhost sunucusunu değiştir",
|
"delimiter_action": "Sınırlandırma işlemi",
|
||||||
"eas_reset": "EAS cihazlarını sıfırla",
|
|
||||||
"mailbox_relayhost": "Bir posta kutusunun relayhost sunucularını değiştir",
|
|
||||||
"pushover": "Bildirim",
|
|
||||||
"quarantine": "Karantina işlemleri",
|
|
||||||
"quarantine_attachments": "Ekleri karantinaya al",
|
|
||||||
"quarantine_notification": "Karantina bildirimlerini değiştir",
|
|
||||||
"smtp_ip_access": "SMTP sunucularının değiştirilmesine izin ver",
|
|
||||||
"sogo_access": "SOGo erişiminin yönetilmesine izin ver",
|
|
||||||
"domain_desc": "Alan adı açıklamasını değiştir",
|
"domain_desc": "Alan adı açıklamasını değiştir",
|
||||||
"extend_sender_acl": "Gönderenin acl'sini harici adreslere göre genişletmeye izin ver",
|
"domain_relayhost": "Alan adı için relayhost sunucusunu değiştir",
|
||||||
"spam_policy": "Engellenenler / İzin verilenler",
|
"eas_reset": "EAS cihazlarını sıfırla",
|
||||||
"filters": "Fitreler"
|
"extend_sender_acl": "Gönderen ACL'sini harici adreslerle genişletmeye izin ver",
|
||||||
|
"filters": "Filtreler",
|
||||||
|
"login_as": "E-posta kullanıcısı olarak giriş yapın",
|
||||||
|
"mailbox_relayhost": "Bir e-posta için relayhost'u değiştirin",
|
||||||
|
"prohibited": "ACL tarafından yasaklandı",
|
||||||
|
"protocol_access": "Protokol erişimini değiştirin",
|
||||||
|
"pushover": "Pushover",
|
||||||
|
"quarantine": "Karantina eylemleri",
|
||||||
|
"quarantine_attachments": "Ekleri karantinaya al",
|
||||||
|
"quarantine_category": "Karantina bildirim kategorisini değiştir",
|
||||||
|
"quarantine_notification": "Karantina bildirimlerini değiştir",
|
||||||
|
"ratelimit": "Rate limit",
|
||||||
|
"recipient_maps": "Alıcı haritaları",
|
||||||
|
"smtp_ip_access": "SMTP için izin verilen host değerlerini değiştirme",
|
||||||
|
"sogo_access": "SOGo erişiminin yönetilmesine izin verin",
|
||||||
|
"sogo_profile_reset": "SOGo profilini sıfırla",
|
||||||
|
"spam_alias": "Geçici alias değerleri",
|
||||||
|
"spam_policy": "Kara Liste/Beyaz Liste",
|
||||||
|
"spam_score": "Spam skoru",
|
||||||
|
"syncjobs": "Görevleri senkronize et",
|
||||||
|
"tls_policy": "TLS ilkesi",
|
||||||
|
"unlimited_quota": "E-postalar için sınırsız kota"
|
||||||
},
|
},
|
||||||
"add": {
|
"add": {
|
||||||
"activate_filter_warn": "Aktif edilirse diğer tüm filtreler devre dışı bırakılacak.",
|
"activate_filter_warn": "Aktif edilirse diğer tüm filtreler devre dışı bırakılacak.",
|
||||||
|
"active": "Aktif",
|
||||||
|
"add": "Ekle",
|
||||||
"add_domain_only": "Sadece alan adı ekle",
|
"add_domain_only": "Sadece alan adı ekle",
|
||||||
"alias_address": "Takma ad adres(leri)",
|
"add_domain_restart": "Alan adını ekleyin ve SOGo'yu yeniden başlatın",
|
||||||
|
"alias_address": "Takma adres",
|
||||||
|
"alias_address_info": "<small>Bir alan adına ilişkin tüm iletileri yakalamak için tam e-posta adresi veya @example.com olacak şeklinde girin (virgülle ayırın).<b>sadece mailcow alan adları</b>.</small>",
|
||||||
"alias_domain": "Takma alan adı",
|
"alias_domain": "Takma alan adı",
|
||||||
"alias_domain_info": "<small>Sadece geçerli alan adları (virgülle ayırın).</small>",
|
"alias_domain_info": "<small>Sadece geçerli alan adları (virgülle ayrılmış).</small>",
|
||||||
"backup_mx_options": "İletme ayarları",
|
"app_name": "Uygulama adı",
|
||||||
"delete2": "Kaynakta olmayan hedefteki mesajları sil",
|
"app_password": "Uygulama şifresi ekle",
|
||||||
|
"app_passwd_protocols": "Uygulama şifresi için izin verilen protokoller",
|
||||||
|
"automap": "Klasörleri otomatik eşleştirmeyi deneyin (\"Gönderilen postalar\", \"Gönderilen\" => \"Gönderilen\" vb.)",
|
||||||
|
"backup_mx_options": "Relay ayarları",
|
||||||
|
"bcc_dest_format": "BCC hedefi tek bir geçerli e-posta adresi olmalıdır.<br>Bir kopyayı birden fazla adrese göndermeniz gerekiyorsa, bir takma ad oluşturun ve bunu burada kullanın.",
|
||||||
|
"comment_info": "Özel bir yorum kullanıcı tarafından görülemezken, herkese açık bir yorum kullanıcının genel görünümünde üzerine gelindiğinde tooltip olarak gösterilir",
|
||||||
|
"custom_params": "Özel parametreler",
|
||||||
|
"custom_params_hint": "Doğru: --param=xy, yanlış: --param xy",
|
||||||
|
"delete1": "Tamamlandığında kaynaktan sil",
|
||||||
|
"delete2": "Eğer kaynakta yoksa hedefteki mesajları sil",
|
||||||
"delete2duplicates": "Hedefteki kopyaları sil",
|
"delete2duplicates": "Hedefteki kopyaları sil",
|
||||||
"disable_login": "Giriş yapmaya izin verme ( Gelen mailler yine de kabul edilir)",
|
"description": "Açıklama",
|
||||||
|
"destination": "Hedef",
|
||||||
|
"disable_login": "Giriş yapmaya izin verme (gelen mailler yine de kabul edilir)",
|
||||||
"domain": "Alan adı",
|
"domain": "Alan adı",
|
||||||
"domain_matches_hostname": "Alan adı %s ana bilgisayar adıyla eşleşiyor",
|
"domain_matches_hostname": "Alan adı %s ana bilgisayar adıyla eşleşiyor",
|
||||||
"add_domain_restart": "Alan adı ekleyin ve SOGo'yu yeniden başlatın",
|
|
||||||
"alias_address_info": "<small>Bir alan adına ilişkin tüm iletileri yakalamak için tam e-posta adresi veya @example.com olacak şeklinde girin (virgülle ayırın).<b>sadece mailcow alan adları</b>.</small>",
|
|
||||||
"domain_quota_m": "Toplam alan adı kotası (MiB)",
|
"domain_quota_m": "Toplam alan adı kotası (MiB)",
|
||||||
|
"enc_method": "Şifreleme yöntemi",
|
||||||
|
"exclude": "Hariç tutma kuralı (regex)",
|
||||||
|
"full_name": "Tam isim",
|
||||||
|
"gal": "Global Adres Listesi",
|
||||||
|
"gal_info": "GAL bir alan alanının tüm nesnelerini içerir ve herhangi bir kullanıcı tarafından düzenlenemez. Eğer devre dışı bırakırsanız SOGo üzerindeki free/busy bilgileri kaybolur! <b>Değişiklikleri uygulamak için SOGo'yu yeniden başlatın.</b>",
|
||||||
"generate": "oluştur",
|
"generate": "oluştur",
|
||||||
"goto_ham": "Ham olarak<span class=\"text-success\"><b>işaretle</b></span>",
|
"goto_ham": "Ham olarak<span class=\"text-success\"><b>işaretle</b></span>",
|
||||||
"goto_null": "Postaları sessizce çöpe at",
|
"goto_null": "Postaları çöpe at",
|
||||||
"goto_spam": "Spam olarak<span class=\"text-danger\"><b>işaretle</b></span>",
|
"goto_spam": "Spam olarak<span class=\"text-danger\"><b>işaretle</b></span>",
|
||||||
"hostname": "Ana sunucu",
|
"hostname": "Ana sunucu",
|
||||||
|
"inactive": "İnaktif",
|
||||||
"kind": "Tür",
|
"kind": "Tür",
|
||||||
"mailbox_quota_m": "Posta kutusu başına maksimum kota (MiB)",
|
"mailbox_quota_def": "Varsayılan e-posta kotası",
|
||||||
"max_aliases": "Maksimum olası takma adı",
|
"mailbox_quota_m": "E-posta başına maksimum kota (MiB)",
|
||||||
"max_mailboxes": "Maksimum olası posta kutusu",
|
"mailbox_username": "Kullanıcı adı (e-posta adresinin sol kısmı)",
|
||||||
"nexthop": "Sonraki atlama",
|
"max_aliases": "Maksimum takma adı limiti",
|
||||||
|
"max_mailboxes": "Maksimum e-posta hesabı",
|
||||||
|
"mins_interval": "Sorgulama döngüsü (dakika)",
|
||||||
|
"multiple_bookings": "Birden fazla rezervasyon",
|
||||||
|
"nexthop": "Next hop",
|
||||||
|
"password": "Şifre",
|
||||||
|
"password_repeat": "Şifre (tekrar)",
|
||||||
"port": "Port",
|
"port": "Port",
|
||||||
"public_comment": "Genel yorum",
|
"post_domain_add": "SOGo konteynerinin \"sogo-mailcow\" yeni bir alan adı eklendikten sonra yeniden başlatılması gerekiyor!<br><br>Ayrıca alan adlarının DNS yapılandırması da gözden geçirilmelidir. DNS yapılandırması onaylandıktan sonra, yeni etki alanınız için otomatik olarak sertifika oluşturmak üzere \"acme-mailcow\"u yeniden başlatın (autoconfig.<domain>, autodiscover.<domain>).<br>Bu adım isteğe bağlıdır ve her 24 saatte bir yeniden denenecektir.",
|
||||||
"relay_all": "Tüm alıcılara ilet",
|
"private_comment": "Özel not",
|
||||||
"relay_all_info": "Eğer <b>hiçbir</b> alıcıya iletilmemesini seçerseniz, aktarılması gereken her alıcı için bir (\"kör\") posta kutusu eklemeniz gerekecektir.",
|
"public_comment": "Herkese açık not",
|
||||||
"relay_domain": "Bu alan adını ilet",
|
"quota_mb": "Kota (MiB)",
|
||||||
"relay_transport_info": "<div class=\"label label-info\">Bilgi</div> Bu etki alanı için özel bir hedef için aktarım eşlemeleri tanımlayabilirsiniz. Ayarlanmazsa, bir MX araması yapılacaktır.",
|
"relay_all": "Tüm alıcıları aktar",
|
||||||
"relay_unknown_only": "Yalnızca mevcut olmayan posta kutularını ilet. Mevcut posta kutuları yerel olarak teslim edilecektir.",
|
"relay_all_info": "↪ Tüm alıcıları <b>aktarmamayı</b> seçerseniz, aktarılması gereken her alıcı için bir (\"kör\") posta kutusu eklemeniz gerekecektir.",
|
||||||
"relayhost_wrapped_tls_info": "Lütfen TLS ile örtülmüş portları <b> kullanmayın</b> (çoğu 465 portunda çalışır).<br>\nÖrtülmemiş port kullan ve STARTTLS üzerinden yayınla. TLS'yi zorlamak için bir TLS ilkesi \"TLS ilke eşlemeleri\" sayfası içinde oluşturulabilir.",
|
"relay_domain": "Bu etki alanını aktarın",
|
||||||
"skipcrossduplicates": "Klasörler arasında yinelenen mesajları atlayın (ilk mesaj seçilir)",
|
"relay_transport_info": "<div class=\"badge fs-6 bg-info\">Bilgi</div> Bu alan adı nezdinde özel bir hedef için transport haritası tanımlayabilirsiniz. Eğer ayarlanmazsa, MX taraması yapılacaktır.",
|
||||||
|
"relay_unknown_only": "Yalnızca mevcut olmayan e-postaları aktarın. Mevcut e-postalar local olarak teslim edilecektir.",
|
||||||
|
"relayhost_wrapped_tls_info": "Lütfen örtülü TLS portları <b>kullanmayın</b> (çoğunlukla 465 portunda kullanılır).<br>\r\nÖrtülmüş olmayan herhangi bir bağlantı noktası kullanın ve STARTTLS üzerinden yayınlayın. TLS'yi zorlamak için bir TLS ilkesi \"TLS ilke eşlemeleri\" sayfası içinde oluşturulabilir.",
|
||||||
|
"select": "Lütfen seçiniz...",
|
||||||
|
"select_domain": "Lütfen önce alan adı seçin",
|
||||||
|
"sieve_desc": "Kısa açıklama",
|
||||||
|
"sieve_type": "Filtre türü",
|
||||||
|
"skipcrossduplicates": "Klasörler arasında yinelenen(kopya) mesajları es geçin (ilk gelen mail baz alınır)",
|
||||||
|
"subscribeall": "Tüm klasörlere abone ol",
|
||||||
|
"syncjob": "Senkronizasyon görevi ekle",
|
||||||
|
"syncjob_hint": "Parolaların düz metin olarak kaydedilmesi gerektiğini unutmayın!",
|
||||||
|
"tags": "Etiketler",
|
||||||
"target_address": "Adreslere git",
|
"target_address": "Adreslere git",
|
||||||
"target_address_info": "<small>Tam e-posta adres(leri) girin ( virgülle ayırın).</small>",
|
"target_address_info": "<small>Tam e-posta adresleri (virgülle ayrılmış).</small>",
|
||||||
"target_domain": "Hedef alan adı",
|
"target_domain": "Hedef alan adı",
|
||||||
"timeout1": "Uzak ana bilgisayara bağlantısı zaman aşımına uğradı",
|
"timeout1": "Uzak ana bilgisayara bağlantı için zaman aşımı",
|
||||||
"timeout2": "Yerel ana bilgisayara bağlantı zaman aşımına uğradı"
|
"timeout2": "Yerel ana bilgisayara bağlantı için zaman aşımı",
|
||||||
|
"username": "Kullanıcı Adı",
|
||||||
|
"validate": "Doğrula",
|
||||||
|
"validation_success": "Doğrulama başarılı"
|
||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
"action": "İşlem",
|
"action": "İşlem",
|
||||||
@ -82,5 +134,18 @@
|
|||||||
"f2b_ban_time": "Yasaklama süresi (saniye)",
|
"f2b_ban_time": "Yasaklama süresi (saniye)",
|
||||||
"f2b_max_attempts": "Maksimum giriş denemesi",
|
"f2b_max_attempts": "Maksimum giriş denemesi",
|
||||||
"f2b_retry_window": "Maksimum girişim için deneme pencere(leri)"
|
"f2b_retry_window": "Maksimum girişim için deneme pencere(leri)"
|
||||||
|
},
|
||||||
|
"warning": {
|
||||||
|
"cannot_delete_self": "Cannot delete logged in user",
|
||||||
|
"domain_added_sogo_failed": "Alan adı eklendi ancak SOGo yeniden başlatılamadı, lütfen sunucu log kayıtlarını kontrol edin.",
|
||||||
|
"dovecot_restart_failed": "Dovecot yeniden başlatılamadı, lütfen log kayıtlarını kontrol edin",
|
||||||
|
"fuzzy_learn_error": "Fuzzy hash hatayı öğrendi: %s",
|
||||||
|
"hash_not_found": "Hash bulunamadı veya zaten silinmiş",
|
||||||
|
"ip_invalid": "Geçersiz IP atlandı: %s",
|
||||||
|
"is_not_primary_alias": "Birincil olmayan alias %s atlandı",
|
||||||
|
"no_active_admin": "Son etkin yönetici devre dışı bırakılamaz",
|
||||||
|
"quota_exceeded_scope": "Domain kotası aşıldı: Bu domain kapsamında yalnızca sınırsız e-posta oluşturulabilir!",
|
||||||
|
"session_token": "Form token geçersiz: Token uyuşmadı",
|
||||||
|
"session_ua": "Form token geçersiz: User-Agent doğrulama hatası"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
<input type="hidden" value="0" name="skipcrossduplicates">
|
<input type="hidden" value="0" name="skipcrossduplicates">
|
||||||
<input type="hidden" value="0" name="active">
|
<input type="hidden" value="0" name="active">
|
||||||
<input type="hidden" value="0" name="subscribeall">
|
<input type="hidden" value="0" name="subscribeall">
|
||||||
|
<input type="hidden" value="0" name="dry">
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<label class="control-label col-sm-2" for="host1">{{ lang.edit.hostname }}</label>
|
<label class="control-label col-sm-2" for="host1">{{ lang.edit.hostname }}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
@ -95,7 +96,7 @@
|
|||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<label class="control-label col-sm-2" for="custom_params">{{ lang.add.custom_params }}</label>
|
<label class="control-label col-sm-2" for="custom_params">{{ lang.add.custom_params }}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" class="form-control" name="custom_params" id="custom_params" value="{{ result.custom_params }}" placeholder="--dry --some-param=xy --other-param=yx">
|
<input type="text" class="form-control" name="custom_params" id="custom_params" value="{{ result.custom_params }}" placeholder="--some-param=xy --other-param=yx">
|
||||||
<small class="text-muted">{{ lang.add.custom_params_hint }}</small>
|
<small class="text-muted">{{ lang.add.custom_params_hint }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -141,6 +142,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row mb-2">
|
||||||
|
<div class="offset-sm-2 col-sm-10">
|
||||||
|
<div class="form-check">
|
||||||
|
<label><input type="checkbox" class="form-check-input" value="1" name="dry"{% if result.dry == '1' %} checked{% endif %}> {{ lang.add.dry }} (--dry)</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="offset-sm-2 col-sm-10">
|
<div class="offset-sm-2 col-sm-10">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
|
@ -955,7 +955,7 @@
|
|||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<label class="control-label col-sm-2 text-sm-end" for="custom_params">{{ lang.add.custom_params }}</label>
|
<label class="control-label col-sm-2 text-sm-end" for="custom_params">{{ lang.add.custom_params }}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" class="form-control" name="custom_params" placeholder="--dry --some-param=xy --other-param=yx">
|
<input type="text" class="form-control" name="custom_params" placeholder="--some-param=xy --other-param=yx">
|
||||||
<small class="text-muted">{{ lang.add.custom_params_hint }}</small>
|
<small class="text-muted">{{ lang.add.custom_params_hint }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -994,13 +994,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-4">
|
<div class="row mb-2">
|
||||||
<div class="offset-sm-2 col-sm-10">
|
<div class="offset-sm-2 col-sm-10">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<label><input type="checkbox" class="form-check-input" value="1" name="subscribeall" checked> {{ lang.add.subscribeall }} (--subscribeall)</label>
|
<label><input type="checkbox" class="form-check-input" value="1" name="subscribeall" checked> {{ lang.add.subscribeall }} (--subscribeall)</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="offset-sm-2 col-sm-10">
|
||||||
|
<div class="form-check">
|
||||||
|
<label><input type="checkbox" class="form-check-input" value="1" name="dry"> {{ lang.add.dry }} (--dry)</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<div class="offset-sm-2 col-sm-10">
|
<div class="offset-sm-2 col-sm-10">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
|
@ -167,6 +167,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row mb-2">
|
||||||
|
<div class="offset-sm-2 col-sm-10">
|
||||||
|
<div class="form-check">
|
||||||
|
<label><input type="checkbox" class="form-check-input" value="1" name="dry" checked> {{ lang.add.dry }} (--dry)</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="offset-sm-2 col-sm-10">
|
<div class="offset-sm-2 col-sm-10">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
|
@ -77,7 +77,7 @@ services:
|
|||||||
- clamd
|
- clamd
|
||||||
|
|
||||||
rspamd-mailcow:
|
rspamd-mailcow:
|
||||||
image: mailcow/rspamd:1.92
|
image: mailcow/rspamd:1.93
|
||||||
stop_grace_period: 30s
|
stop_grace_period: 30s
|
||||||
depends_on:
|
depends_on:
|
||||||
- dovecot-mailcow
|
- dovecot-mailcow
|
||||||
@ -218,7 +218,7 @@ services:
|
|||||||
- sogo
|
- sogo
|
||||||
|
|
||||||
dovecot-mailcow:
|
dovecot-mailcow:
|
||||||
image: mailcow/dovecot:1.25
|
image: mailcow/dovecot:1.26
|
||||||
depends_on:
|
depends_on:
|
||||||
- mysql-mailcow
|
- mysql-mailcow
|
||||||
dns:
|
dns:
|
||||||
@ -526,7 +526,7 @@ services:
|
|||||||
- watchdog
|
- watchdog
|
||||||
|
|
||||||
dockerapi-mailcow:
|
dockerapi-mailcow:
|
||||||
image: mailcow/dockerapi:2.05
|
image: mailcow/dockerapi:2.06
|
||||||
security_opt:
|
security_opt:
|
||||||
- label=disable
|
- label=disable
|
||||||
restart: always
|
restart: always
|
||||||
|
@ -28,8 +28,8 @@ done
|
|||||||
if docker compose > /dev/null 2>&1; then
|
if docker compose > /dev/null 2>&1; then
|
||||||
if docker compose version --short | grep "^2." > /dev/null 2>&1; then
|
if docker compose version --short | grep "^2." > /dev/null 2>&1; then
|
||||||
COMPOSE_VERSION=native
|
COMPOSE_VERSION=native
|
||||||
echo -e "\e[31mFound Docker Compose Plugin (native).\e[0m"
|
echo -e "\e[33mFound Docker Compose Plugin (native).\e[0m"
|
||||||
echo -e "\e[31mSetting the DOCKER_COMPOSE_VERSION Variable to native\e[0m"
|
echo -e "\e[33mSetting the DOCKER_COMPOSE_VERSION Variable to native\e[0m"
|
||||||
sleep 2
|
sleep 2
|
||||||
echo -e "\e[33mNotice: You´ll have to update this Compose Version via your Package Manager manually!\e[0m"
|
echo -e "\e[33mNotice: You´ll have to update this Compose Version via your Package Manager manually!\e[0m"
|
||||||
else
|
else
|
||||||
@ -41,8 +41,8 @@ elif docker-compose > /dev/null 2>&1; then
|
|||||||
if ! [[ $(alias docker-compose 2> /dev/null) ]] ; then
|
if ! [[ $(alias docker-compose 2> /dev/null) ]] ; then
|
||||||
if docker-compose version --short | grep "^2." > /dev/null 2>&1; then
|
if docker-compose version --short | grep "^2." > /dev/null 2>&1; then
|
||||||
COMPOSE_VERSION=standalone
|
COMPOSE_VERSION=standalone
|
||||||
echo -e "\e[31mFound Docker Compose Standalone.\e[0m"
|
echo -e "\e[33mFound Docker Compose Standalone.\e[0m"
|
||||||
echo -e "\e[31mSetting the DOCKER_COMPOSE_VERSION Variable to standalone\e[0m"
|
echo -e "\e[33mSetting the DOCKER_COMPOSE_VERSION Variable to standalone\e[0m"
|
||||||
sleep 2
|
sleep 2
|
||||||
echo -e "\e[33mNotice: For an automatic update of docker-compose please use the update_compose.sh scripts located at the helper-scripts folder.\e[0m"
|
echo -e "\e[33mNotice: For an automatic update of docker-compose please use the update_compose.sh scripts located at the helper-scripts folder.\e[0m"
|
||||||
else
|
else
|
||||||
|
122
helper-scripts/generate_caa_record.py
Executable file
122
helper-scripts/generate_caa_record.py
Executable file
@ -0,0 +1,122 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Based on github.com/diafygi/acme-tiny, original copyright:
|
||||||
|
# Copyright Daniel Roesler, under MIT license, see LICENSE at github.com/diafygi/acme-tiny
|
||||||
|
import argparse, subprocess, json, os, sys, base64, binascii, time, hashlib, re, copy, textwrap, logging
|
||||||
|
try:
|
||||||
|
from urllib.request import urlopen, Request # Python 3
|
||||||
|
except ImportError: # pragma: no cover
|
||||||
|
from urllib2 import urlopen, Request # Python 2
|
||||||
|
|
||||||
|
DEFAULT_DIRECTORY_URL = "https://acme-v02.api.letsencrypt.org/directory"
|
||||||
|
|
||||||
|
LOGGER = logging.getLogger(__name__)
|
||||||
|
LOGGER.addHandler(logging.StreamHandler())
|
||||||
|
LOGGER.setLevel(logging.INFO)
|
||||||
|
|
||||||
|
def get_id(account_key, log=LOGGER, directory_url=DEFAULT_DIRECTORY_URL, contact=None):
|
||||||
|
directory, acct_headers, alg, jwk = None, None, None, None # global variables
|
||||||
|
|
||||||
|
# helper functions - base64 encode for jose spec
|
||||||
|
def _b64(b):
|
||||||
|
return base64.urlsafe_b64encode(b).decode('utf8').replace("=", "")
|
||||||
|
|
||||||
|
# helper function - run external commands
|
||||||
|
def _cmd(cmd_list, stdin=None, cmd_input=None, err_msg="Command Line Error"):
|
||||||
|
proc = subprocess.Popen(cmd_list, stdin=stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
out, err = proc.communicate(cmd_input)
|
||||||
|
if proc.returncode != 0:
|
||||||
|
raise IOError("{0}\n{1}".format(err_msg, err))
|
||||||
|
return out
|
||||||
|
|
||||||
|
# helper function - make request and automatically parse json response
|
||||||
|
def _do_request(url, data=None, err_msg="Error", depth=0):
|
||||||
|
try:
|
||||||
|
resp = urlopen(Request(url, data=data, headers={"Content-Type": "application/jose+json", "User-Agent": "acme-tiny"}))
|
||||||
|
resp_data, code, headers = resp.read().decode("utf8"), resp.getcode(), resp.headers
|
||||||
|
except IOError as e:
|
||||||
|
resp_data = e.read().decode("utf8") if hasattr(e, "read") else str(e)
|
||||||
|
code, headers = getattr(e, "code", None), {}
|
||||||
|
try:
|
||||||
|
resp_data = json.loads(resp_data) # try to parse json results
|
||||||
|
except ValueError:
|
||||||
|
pass # ignore json parsing errors
|
||||||
|
if depth < 100 and code == 400 and resp_data['type'] == "urn:ietf:params:acme:error:badNonce":
|
||||||
|
raise IndexError(resp_data) # allow 100 retrys for bad nonces
|
||||||
|
if code not in [200, 201, 204]:
|
||||||
|
raise ValueError("{0}:\nUrl: {1}\nData: {2}\nResponse Code: {3}\nResponse: {4}".format(err_msg, url, data, code, resp_data))
|
||||||
|
return resp_data, code, headers
|
||||||
|
|
||||||
|
# helper function - make signed requests
|
||||||
|
def _send_signed_request(url, payload, err_msg, depth=0):
|
||||||
|
payload64 = "" if payload is None else _b64(json.dumps(payload).encode('utf8'))
|
||||||
|
new_nonce = _do_request(directory['newNonce'])[2]['Replay-Nonce']
|
||||||
|
protected = {"url": url, "alg": alg, "nonce": new_nonce}
|
||||||
|
protected.update({"jwk": jwk} if acct_headers is None else {"kid": acct_headers['Location']})
|
||||||
|
protected64 = _b64(json.dumps(protected).encode('utf8'))
|
||||||
|
protected_input = "{0}.{1}".format(protected64, payload64).encode('utf8')
|
||||||
|
out = _cmd(["openssl", "dgst", "-sha256", "-sign", account_key], stdin=subprocess.PIPE, cmd_input=protected_input, err_msg="OpenSSL Error")
|
||||||
|
data = json.dumps({"protected": protected64, "payload": payload64, "signature": _b64(out)})
|
||||||
|
try:
|
||||||
|
return _do_request(url, data=data.encode('utf8'), err_msg=err_msg, depth=depth)
|
||||||
|
except IndexError: # retry bad nonces (they raise IndexError)
|
||||||
|
return _send_signed_request(url, payload, err_msg, depth=(depth + 1))
|
||||||
|
|
||||||
|
# helper function - poll until complete
|
||||||
|
def _poll_until_not(url, pending_statuses, err_msg):
|
||||||
|
result, t0 = None, time.time()
|
||||||
|
while result is None or result['status'] in pending_statuses:
|
||||||
|
assert (time.time() - t0 < 3600), "Polling timeout" # 1 hour timeout
|
||||||
|
time.sleep(0 if result is None else 2)
|
||||||
|
result, _, _ = _send_signed_request(url, None, err_msg)
|
||||||
|
return result
|
||||||
|
|
||||||
|
# parse account key to get public key
|
||||||
|
log.info("Parsing account key...")
|
||||||
|
out = _cmd(["openssl", "rsa", "-in", account_key, "-noout", "-text"], err_msg="OpenSSL Error")
|
||||||
|
pub_pattern = r"modulus:[\s]+?00:([a-f0-9\:\s]+?)\npublicExponent: ([0-9]+)"
|
||||||
|
pub_hex, pub_exp = re.search(pub_pattern, out.decode('utf8'), re.MULTILINE|re.DOTALL).groups()
|
||||||
|
pub_exp = "{0:x}".format(int(pub_exp))
|
||||||
|
pub_exp = "0{0}".format(pub_exp) if len(pub_exp) % 2 else pub_exp
|
||||||
|
alg, jwk = "RS256", {
|
||||||
|
"e": _b64(binascii.unhexlify(pub_exp.encode("utf-8"))),
|
||||||
|
"kty": "RSA",
|
||||||
|
"n": _b64(binascii.unhexlify(re.sub(r"(\s|:)", "", pub_hex).encode("utf-8"))),
|
||||||
|
}
|
||||||
|
accountkey_json = json.dumps(jwk, sort_keys=True, separators=(',', ':'))
|
||||||
|
thumbprint = _b64(hashlib.sha256(accountkey_json.encode('utf8')).digest())
|
||||||
|
|
||||||
|
# get the ACME directory of urls
|
||||||
|
log.info("Getting directory...")
|
||||||
|
directory, _, _ = _do_request(directory_url, err_msg="Error getting directory")
|
||||||
|
log.info("Directory found!")
|
||||||
|
|
||||||
|
# create account and get the global key identifier
|
||||||
|
log.info("Registering account...")
|
||||||
|
reg_payload = {"termsOfServiceAgreed": True} if contact is None else {"termsOfServiceAgreed": True, "contact": contact}
|
||||||
|
account, code, acct_headers = _send_signed_request(directory['newAccount'], reg_payload, "Error registering")
|
||||||
|
log.info("Registered!" if code == 201 else "Already registered!")
|
||||||
|
|
||||||
|
return acct_headers['Location']
|
||||||
|
|
||||||
|
def main(argv=None):
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
|
description=textwrap.dedent("""\
|
||||||
|
Generate a CAA record for Mailcow.
|
||||||
|
|
||||||
|
Example Usage: python mailcow_gencaa.py --account-key data/assets/ssl/acme/account.pem
|
||||||
|
""")
|
||||||
|
)
|
||||||
|
parser.add_argument("--account-key", required=True, help="path to your Let's Encrypt account private key")
|
||||||
|
parser.add_argument("--quiet", action="store_const", const=logging.ERROR, help="suppress output except for errors")
|
||||||
|
parser.add_argument("--directory-url", default=DEFAULT_DIRECTORY_URL, help="certificate authority directory url, default is Let's Encrypt")
|
||||||
|
parser.add_argument("--contact", metavar="CONTACT", default=None, nargs="*", help="Contact details (e.g. mailto:aaa@bbb.com) for your account-key")
|
||||||
|
|
||||||
|
args = parser.parse_args(argv)
|
||||||
|
LOGGER.setLevel(args.quiet or LOGGER.level)
|
||||||
|
id = get_id(args.account_key, log=LOGGER, directory_url=args.directory_url, contact=args.contact)
|
||||||
|
print("Use this as your CAA record:")
|
||||||
|
print('issue 128 "letsencrypt.org;accounturi={}"'.format(id))
|
||||||
|
|
||||||
|
if __name__ == "__main__": # pragma: no cover
|
||||||
|
main(sys.argv[1:])
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?<version>.*)$
|
# renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?<version>.*)$
|
||||||
NEXTCLOUD_VERSION=27.1.2
|
NEXTCLOUD_VERSION=27.1.3
|
||||||
|
|
||||||
echo -ne "Checking prerequisites..."
|
echo -ne "Checking prerequisites..."
|
||||||
sleep 1
|
sleep 1
|
||||||
@ -106,6 +106,10 @@ elif [[ ${NC_UPDATE} == "y" ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
docker exec -it -u www-data $(docker ps -f name=php-fpm-mailcow -q) bash -c "php /web/nextcloud/updater/updater.phar"
|
docker exec -it -u www-data $(docker ps -f name=php-fpm-mailcow -q) bash -c "php /web/nextcloud/updater/updater.phar"
|
||||||
|
NC_SUBD=$(docker exec -i -u www-data $(docker ps -f name=php-fpm-mailcow -q) /web/nextcloud/occ config:system:get overwritehost)
|
||||||
|
mv ./data/conf/nginx/nextcloud.conf ./data/conf/nginx/nextcloud.conf-$(date +%s).bak
|
||||||
|
cp ./data/assets/nextcloud/nextcloud.conf ./data/conf/nginx/
|
||||||
|
sed -i "s/NC_SUBD/${NC_SUBD}/g" ./data/conf/nginx/nextcloud.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
elif [[ ${NC_INSTALL} == "y" ]]; then
|
elif [[ ${NC_INSTALL} == "y" ]]; then
|
||||||
|
137
update.sh
137
update.sh
@ -32,51 +32,44 @@ prefetch_images() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
docker_garbage() {
|
docker_garbage() {
|
||||||
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
IMGS_TO_DELETE=()
|
IMGS_TO_DELETE=()
|
||||||
for container in $(grep -oP "image: \Kmailcow.+" "${SCRIPT_DIR}/docker-compose.yml"); do
|
|
||||||
REPOSITORY=${container/:*}
|
|
||||||
TAG=${container/*:}
|
|
||||||
V_MAIN=${container/*.}
|
|
||||||
V_SUB=${container/*.}
|
|
||||||
EXISTING_TAGS=$(docker images | grep ${REPOSITORY} | awk '{ print $2 }')
|
|
||||||
for existing_tag in ${EXISTING_TAGS[@]}; do
|
|
||||||
V_MAIN_EXISTING=${existing_tag/*.}
|
|
||||||
V_SUB_EXISTING=${existing_tag/*.}
|
|
||||||
# Not an integer
|
|
||||||
[[ ! $V_MAIN_EXISTING =~ ^[0-9]+$ ]] && continue
|
|
||||||
[[ ! $V_SUB_EXISTING =~ ^[0-9]+$ ]] && continue
|
|
||||||
|
|
||||||
if [[ $V_MAIN_EXISTING == "latest" ]]; then
|
declare -A IMAGES_INFO
|
||||||
echo "Found deprecated label \"latest\" for repository $REPOSITORY, it should be deleted."
|
COMPOSE_IMAGES=($(grep -oP "image: \Kmailcow.+" "${SCRIPT_DIR}/docker-compose.yml"))
|
||||||
IMGS_TO_DELETE+=($REPOSITORY:$existing_tag)
|
|
||||||
elif [[ $V_MAIN_EXISTING -lt $V_MAIN ]]; then
|
for existing_image in $(docker images --format "{{.ID}}:{{.Repository}}:{{.Tag}}" | grep 'mailcow/'); do
|
||||||
echo "Found tag $existing_tag for $REPOSITORY, which is older than the current tag $TAG and should be deleted."
|
ID=$(echo $existing_image | cut -d ':' -f 1)
|
||||||
IMGS_TO_DELETE+=($REPOSITORY:$existing_tag)
|
REPOSITORY=$(echo $existing_image | cut -d ':' -f 2)
|
||||||
elif [[ $V_SUB_EXISTING -lt $V_SUB ]]; then
|
TAG=$(echo $existing_image | cut -d ':' -f 3)
|
||||||
echo "Found tag $existing_tag for $REPOSITORY, which is older than the current tag $TAG and should be deleted."
|
|
||||||
IMGS_TO_DELETE+=($REPOSITORY:$existing_tag)
|
if [[ " ${COMPOSE_IMAGES[@]} " =~ " ${REPOSITORY}:${TAG} " ]]; then
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
IMGS_TO_DELETE+=("$ID")
|
||||||
|
IMAGES_INFO["$ID"]="$REPOSITORY:$TAG"
|
||||||
fi
|
fi
|
||||||
done
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ ! -z ${IMGS_TO_DELETE[*]} ]]; then
|
if [[ ! -z ${IMGS_TO_DELETE[*]} ]]; then
|
||||||
echo "Run the following command to delete unused image tags:"
|
echo "The following unused mailcow images were found:"
|
||||||
echo
|
for id in "${IMGS_TO_DELETE[@]}"; do
|
||||||
echo " docker rmi ${IMGS_TO_DELETE[*]}"
|
echo " ${IMAGES_INFO[$id]} ($id)"
|
||||||
echo
|
done
|
||||||
if [ ! $FORCE ]; then
|
|
||||||
read -r -p "Do you want to delete old image tags right now? [y/N] " response
|
if [ ! $FORCE ]; then
|
||||||
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
|
read -r -p "Do you want to delete them to free up some space? [y/N] " response
|
||||||
docker rmi ${IMGS_TO_DELETE[*]}
|
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
|
||||||
|
docker rmi ${IMGS_TO_DELETE[*]}
|
||||||
|
else
|
||||||
|
echo "OK, skipped."
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "OK, skipped."
|
echo "Running in forced mode! Force removing old mailcow images..."
|
||||||
|
docker rmi ${IMGS_TO_DELETE[*]}
|
||||||
fi
|
fi
|
||||||
else
|
echo -e "\e[32mFurther cleanup...\e[0m"
|
||||||
echo "Running image removal without extra confirmation due to force mode."
|
echo "If you want to cleanup further garbage collected by Docker, please make sure all containers are up and running before cleaning your system by executing \"docker system prune\""
|
||||||
docker rmi ${IMGS_TO_DELETE[*]}
|
|
||||||
fi
|
|
||||||
echo -e "\e[32mFurther cleanup...\e[0m"
|
|
||||||
echo "If you want to cleanup further garbage collected by Docker, please make sure all containers are up and running before cleaning your system by executing \"docker system prune\""
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,8 +174,8 @@ if ! [[ "${DOCKER_COMPOSE_VERSION}" =~ ^(native|standalone)$ ]]; then
|
|||||||
if docker compose version --short | grep "2." > /dev/null 2>&1; then
|
if docker compose version --short | grep "2." > /dev/null 2>&1; then
|
||||||
DOCKER_COMPOSE_VERSION=native
|
DOCKER_COMPOSE_VERSION=native
|
||||||
COMPOSE_COMMAND="docker compose"
|
COMPOSE_COMMAND="docker compose"
|
||||||
echo -e "\e[31mFound Docker Compose Plugin (native).\e[0m"
|
echo -e "\e[33mFound Docker Compose Plugin (native).\e[0m"
|
||||||
echo -e "\e[31mSetting the DOCKER_COMPOSE_VERSION Variable to native\e[0m"
|
echo -e "\e[33mSetting the DOCKER_COMPOSE_VERSION Variable to native\e[0m"
|
||||||
sed -i 's/^DOCKER_COMPOSE_VERSION=.*/DOCKER_COMPOSE_VERSION=native/' $SCRIPT_DIR/mailcow.conf
|
sed -i 's/^DOCKER_COMPOSE_VERSION=.*/DOCKER_COMPOSE_VERSION=native/' $SCRIPT_DIR/mailcow.conf
|
||||||
sleep 2
|
sleep 2
|
||||||
echo -e "\e[33mNotice: You'll have to update this Compose Version via your Package Manager manually!\e[0m"
|
echo -e "\e[33mNotice: You'll have to update this Compose Version via your Package Manager manually!\e[0m"
|
||||||
@ -196,8 +189,8 @@ if ! [[ "${DOCKER_COMPOSE_VERSION}" =~ ^(native|standalone)$ ]]; then
|
|||||||
if docker-compose version --short | grep "^2." > /dev/null 2>&1; then
|
if docker-compose version --short | grep "^2." > /dev/null 2>&1; then
|
||||||
DOCKER_COMPOSE_VERSION=standalone
|
DOCKER_COMPOSE_VERSION=standalone
|
||||||
COMPOSE_COMMAND="docker-compose"
|
COMPOSE_COMMAND="docker-compose"
|
||||||
echo -e "\e[31mFound Docker Compose Standalone.\e[0m"
|
echo -e "\e[33mFound Docker Compose Standalone.\e[0m"
|
||||||
echo -e "\e[31mSetting the DOCKER_COMPOSE_VERSION Variable to standalone\e[0m"
|
echo -e "\e[33mSetting the DOCKER_COMPOSE_VERSION Variable to standalone\e[0m"
|
||||||
sed -i 's/^DOCKER_COMPOSE_VERSION=.*/DOCKER_COMPOSE_VERSION=standalone/' $SCRIPT_DIR/mailcow.conf
|
sed -i 's/^DOCKER_COMPOSE_VERSION=.*/DOCKER_COMPOSE_VERSION=standalone/' $SCRIPT_DIR/mailcow.conf
|
||||||
sleep 2
|
sleep 2
|
||||||
echo -e "\e[33mNotice: For an automatic update of docker-compose please use the update_compose.sh scripts located at the helper-scripts folder.\e[0m"
|
echo -e "\e[33mNotice: For an automatic update of docker-compose please use the update_compose.sh scripts located at the helper-scripts folder.\e[0m"
|
||||||
@ -893,7 +886,7 @@ done
|
|||||||
# git remote set-url origin https://github.com/mailcow/mailcow-dockerized
|
# git remote set-url origin https://github.com/mailcow/mailcow-dockerized
|
||||||
|
|
||||||
DEFAULT_REPO=https://github.com/mailcow/mailcow-dockerized
|
DEFAULT_REPO=https://github.com/mailcow/mailcow-dockerized
|
||||||
CURRENT_REPO=$(git remote get-url origin)
|
CURRENT_REPO=$(git config --get remote.origin.url)
|
||||||
if [ "$CURRENT_REPO" != "$DEFAULT_REPO" ]; then
|
if [ "$CURRENT_REPO" != "$DEFAULT_REPO" ]; then
|
||||||
echo "The Repository currently used is not the default Mailcow Repository."
|
echo "The Repository currently used is not the default Mailcow Repository."
|
||||||
echo "Currently Repository: $CURRENT_REPO"
|
echo "Currently Repository: $CURRENT_REPO"
|
||||||
@ -904,34 +897,38 @@ if [ "$CURRENT_REPO" != "$DEFAULT_REPO" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "\e[32mCommitting current status...\e[0m"
|
if [ ! $DEV ]; then
|
||||||
[[ -z "$(git config user.name)" ]] && git config user.name moo
|
echo -e "\e[32mCommitting current status...\e[0m"
|
||||||
[[ -z "$(git config user.email)" ]] && git config user.email moo@cow.moo
|
[[ -z "$(git config user.name)" ]] && git config user.name moo
|
||||||
[[ ! -z $(git ls-files data/conf/rspamd/override.d/worker-controller-password.inc) ]] && git rm data/conf/rspamd/override.d/worker-controller-password.inc
|
[[ -z "$(git config user.email)" ]] && git config user.email moo@cow.moo
|
||||||
git add -u
|
[[ ! -z $(git ls-files data/conf/rspamd/override.d/worker-controller-password.inc) ]] && git rm data/conf/rspamd/override.d/worker-controller-password.inc
|
||||||
git commit -am "Before update on ${DATE}" > /dev/null
|
git add -u
|
||||||
echo -e "\e[32mFetching updated code from remote...\e[0m"
|
git commit -am "Before update on ${DATE}" > /dev/null
|
||||||
git fetch origin #${BRANCH}
|
echo -e "\e[32mFetching updated code from remote...\e[0m"
|
||||||
echo -e "\e[32mMerging local with remote code (recursive, strategy: \"${MERGE_STRATEGY:-theirs}\", options: \"patience\"...\e[0m"
|
git fetch origin #${BRANCH}
|
||||||
git config merge.defaultToUpstream true
|
echo -e "\e[32mMerging local with remote code (recursive, strategy: \"${MERGE_STRATEGY:-theirs}\", options: \"patience\"...\e[0m"
|
||||||
git merge -X${MERGE_STRATEGY:-theirs} -Xpatience -m "After update on ${DATE}"
|
git config merge.defaultToUpstream true
|
||||||
# Need to use a variable to not pass return codes of if checks
|
git merge -X${MERGE_STRATEGY:-theirs} -Xpatience -m "After update on ${DATE}"
|
||||||
MERGE_RETURN=$?
|
# Need to use a variable to not pass return codes of if checks
|
||||||
if [[ ${MERGE_RETURN} == 128 ]]; then
|
MERGE_RETURN=$?
|
||||||
echo -e "\e[31m\nOh no, what happened?\n=> You most likely added files to your local mailcow instance that were now added to the official mailcow repository. Please move them to another location before updating mailcow.\e[0m"
|
if [[ ${MERGE_RETURN} == 128 ]]; then
|
||||||
exit 1
|
echo -e "\e[31m\nOh no, what happened?\n=> You most likely added files to your local mailcow instance that were now added to the official mailcow repository. Please move them to another location before updating mailcow.\e[0m"
|
||||||
elif [[ ${MERGE_RETURN} == 1 ]]; then
|
exit 1
|
||||||
echo -e "\e[93mPotenial conflict, trying to fix...\e[0m"
|
elif [[ ${MERGE_RETURN} == 1 ]]; then
|
||||||
git status --porcelain | grep -E "UD|DU" | awk '{print $2}' | xargs rm -v
|
echo -e "\e[93mPotenial conflict, trying to fix...\e[0m"
|
||||||
git add -A
|
git status --porcelain | grep -E "UD|DU" | awk '{print $2}' | xargs rm -v
|
||||||
git commit -m "After update on ${DATE}" > /dev/null
|
git add -A
|
||||||
git checkout .
|
git commit -m "After update on ${DATE}" > /dev/null
|
||||||
echo -e "\e[32mRemoved and recreated files if necessary.\e[0m"
|
git checkout .
|
||||||
elif [[ ${MERGE_RETURN} != 0 ]]; then
|
echo -e "\e[32mRemoved and recreated files if necessary.\e[0m"
|
||||||
echo -e "\e[31m\nOh no, something went wrong. Please check the error message above.\e[0m"
|
elif [[ ${MERGE_RETURN} != 0 ]]; then
|
||||||
echo
|
echo -e "\e[31m\nOh no, something went wrong. Please check the error message above.\e[0m"
|
||||||
echo "Run $COMPOSE_COMMAND up -d to restart your stack without updates or try again after fixing the mentioned errors."
|
echo
|
||||||
exit 1
|
echo "Run $COMPOSE_COMMAND up -d to restart your stack without updates or try again after fixing the mentioned errors."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
elif [ $DEV ]; then
|
||||||
|
echo -e "\e[33mDEVELOPER MODE: Not creating a git diff and commiting it to prevent development stuff within a backup diff...\e[0m"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "\e[32mFetching new images, if any...\e[0m"
|
echo -e "\e[32mFetching new images, if any...\e[0m"
|
||||||
|
Loading…
Reference in New Issue
Block a user