mirror of
https://github.com/mailcow/mailcow-dockerized.git
synced 2026-02-18 07:06:24 +00:00
Compare commits
129 Commits
feat/dovec
...
feat/php8.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae531fd7b0 | ||
|
|
3507ff2773 | ||
|
|
4132f6bd48 | ||
|
|
6af2addf3c | ||
|
|
f6eed6c441 | ||
|
|
b85837c803 | ||
|
|
653fc40d4c | ||
|
|
c17d80a6fd | ||
|
|
980bfa3aa0 | ||
|
|
664a954393 | ||
|
|
d5a27c4ccb | ||
|
|
6a8a2e2136 | ||
|
|
b859a52b8e | ||
|
|
10e0c42eff | ||
|
|
f47df263d7 | ||
|
|
2642d9109e | ||
|
|
6708b94ebb | ||
|
|
79cf0abc6e | ||
|
|
7de70322d6 | ||
|
|
417835dea8 | ||
|
|
3dcacc4187 | ||
|
|
69f0552d4f | ||
|
|
c443a9400a | ||
|
|
5c9f387d94 | ||
|
|
e9414d17e4 | ||
|
|
df4d3bb6e0 | ||
|
|
455ef084b4 | ||
|
|
c2948735f2 | ||
|
|
1ef0149076 | ||
|
|
922d173540 | ||
|
|
fd088cb504 | ||
|
|
721ee2394e | ||
|
|
c217be06c6 | ||
|
|
871c422ec1 | ||
|
|
3cc28af607 | ||
|
|
796e131c3a | ||
|
|
dd160cd508 | ||
|
|
732b321962 | ||
|
|
c51a769aec | ||
|
|
45a61755a5 | ||
|
|
769c57c355 | ||
|
|
2e7eb7c0fd | ||
|
|
4c83147d01 | ||
|
|
ca0bec4fc2 | ||
|
|
6f50dd17da | ||
|
|
4a331929d0 | ||
|
|
748bc893b6 | ||
|
|
e462602ddc | ||
|
|
4e0f435d12 | ||
|
|
46f0581936 | ||
|
|
20f04ecf6b | ||
|
|
ff43799763 | ||
|
|
85ca197615 | ||
|
|
d06d23bbaf | ||
|
|
702ed85dfd | ||
|
|
8abe74a562 | ||
|
|
2f8a181281 | ||
|
|
5c5287ca21 | ||
|
|
83ba8d5840 | ||
|
|
ce219668cf | ||
|
|
5b1b49a418 | ||
|
|
8978a9ad79 | ||
|
|
5f4a4fd759 | ||
|
|
171c591da4 | ||
|
|
9133b9899c | ||
|
|
701c9fb1b4 | ||
|
|
eabd22188b | ||
|
|
7028619742 | ||
|
|
c915bf2ee2 | ||
|
|
011edd5ac9 | ||
|
|
7ba3de4ced | ||
|
|
8ead77083f | ||
|
|
b2774fb50b | ||
|
|
4440bd46ad | ||
|
|
28985973eb | ||
|
|
f2c4697ca3 | ||
|
|
383b5affb5 | ||
|
|
ed4dcff63b | ||
|
|
caca32bbba | ||
|
|
d31e74c778 | ||
|
|
6c00e29276 | ||
|
|
9940c503a2 | ||
|
|
4b2862cb3c | ||
|
|
a36485f0f1 | ||
|
|
78168ee80a | ||
|
|
610609378f | ||
|
|
260906e350 | ||
|
|
2891bbf82a | ||
|
|
eb26bcbc94 | ||
|
|
84e230de8f | ||
|
|
f67a12d157 | ||
|
|
34b48eedfc | ||
|
|
0d900d4fc8 | ||
|
|
642ac6d02c | ||
|
|
94c1a6c4e1 | ||
|
|
262fe04286 | ||
|
|
1c438330c6 | ||
|
|
8cb25709ae | ||
|
|
221f2989b0 | ||
|
|
3d05207bc7 | ||
|
|
8c8497d885 | ||
|
|
56d083ced4 | ||
|
|
a90b3544a7 | ||
|
|
08aea7fb26 | ||
|
|
13f7f9830b | ||
|
|
2f75039194 | ||
|
|
1e192e14f4 | ||
|
|
9cd1f931fc | ||
|
|
8d7235b535 | ||
|
|
8446abd484 | ||
|
|
f67c0530f5 | ||
|
|
06db1d6a72 | ||
|
|
81775ab4d5 | ||
|
|
34877ecf9c | ||
|
|
dbde144014 | ||
|
|
5361a4a4ee | ||
|
|
0997548d7f | ||
|
|
921de02a2b | ||
|
|
48e90a72dc | ||
|
|
c0b7a98e6c | ||
|
|
6dc90186f9 | ||
|
|
0b0a65a3f3 | ||
|
|
6c5d82c4df | ||
|
|
5e66ffa366 | ||
|
|
4d88e19106 | ||
|
|
53c35493a5 | ||
|
|
ad9b328ed5 | ||
|
|
3d5b57889a | ||
|
|
6b8e981bdc |
69
.github/ISSUE_TEMPLATE/Bug_report.yml
vendored
69
.github/ISSUE_TEMPLATE/Bug_report.yml
vendored
@@ -11,22 +11,35 @@ body:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: I've found a bug and checked that ...
|
||||
description: Prior to placing the issue, please check following:** *(fill out each checkbox with an `X` once done)*
|
||||
label: Checklist prior issue creation
|
||||
description: Prior to creating the issue...
|
||||
options:
|
||||
- label: ... I understand that not following the below instructions will result in immediate closure and/or deletion of my issue.
|
||||
- label: I understand that failure to follow below instructions may cause this issue to be closed.
|
||||
required: true
|
||||
- label: ... I have understood that this bug report is dedicated for bugs, and not for support-related inquiries.
|
||||
- label: I understand that vague, incomplete or inaccurate information may cause this issue to be closed.
|
||||
required: true
|
||||
- label: ... I have understood that answers are voluntary and community-driven, and not commercial support.
|
||||
- label: I understand that this form is intended solely for reporting software bugs and not for support-related inquiries.
|
||||
required: true
|
||||
- label: ... I have verified that my issue has not been already answered in the past. I also checked previous [issues](https://github.com/mailcow/mailcow-dockerized/issues).
|
||||
- label: I understand that all responses are voluntary and community-driven, and do not constitute commercial support.
|
||||
required: true
|
||||
- label: I confirm that I have reviewed previous [issues](https://github.com/mailcow/mailcow-dockerized/issues) to ensure this matter has not already been addressed.
|
||||
required: true
|
||||
- label: I confirm that my environment meets all [prerequisite requirements](https://docs.mailcow.email/getstarted/prerequisite-system/) as specified in the official documentation.
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: Please provide a brief description of the bug in 1-2 sentences. If applicable, add screenshots to help explain your problem. Very useful for bugs in mailcow UI.
|
||||
render: plain text
|
||||
description: Please provide a brief description of the bug. If applicable, add screenshots to help explain your problem. (Very useful for bugs in mailcow UI.)
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: "Steps to reproduce:"
|
||||
description: "Please describe the steps to reproduce the bug. Screenshots can be added, if helpful."
|
||||
placeholder: |-
|
||||
1. ...
|
||||
2. ...
|
||||
3. ...
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
@@ -36,45 +49,36 @@ body:
|
||||
render: plain text
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: "Steps to reproduce:"
|
||||
description: "Please describe the steps to reproduce the bug. Screenshots can be added, if helpful."
|
||||
render: plain text
|
||||
placeholder: |-
|
||||
1. ...
|
||||
2. ...
|
||||
3. ...
|
||||
validations:
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
## System information
|
||||
### In this stage we would kindly ask you to attach general system information about your setup.
|
||||
In this stage we would kindly ask you to attach general system information about your setup.
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: "Which branch are you using?"
|
||||
description: "#### `git rev-parse --abbrev-ref HEAD`"
|
||||
description: "#### Run: `git rev-parse --abbrev-ref HEAD`"
|
||||
multiple: false
|
||||
options:
|
||||
- master
|
||||
- master (stable)
|
||||
- staging
|
||||
- nightly
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: "Which architecture are you using?"
|
||||
description: "#### `uname -m`"
|
||||
description: "#### Run: `uname -m`"
|
||||
multiple: false
|
||||
options:
|
||||
- x86
|
||||
- x86_64
|
||||
- ARM64 (aarch64)
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: "Operating System:"
|
||||
description: "#### Run: `lsb_release -ds`"
|
||||
placeholder: "e.g. Ubuntu 22.04 LTS"
|
||||
validations:
|
||||
required: true
|
||||
@@ -93,43 +97,44 @@ body:
|
||||
- type: input
|
||||
attributes:
|
||||
label: "Virtualization technology:"
|
||||
placeholder: "KVM, VMware, Xen, etc - **LXC and OpenVZ are not supported**"
|
||||
description: "LXC and OpenVZ are not supported!"
|
||||
placeholder: "KVM, VMware ESXi, Xen, etc"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: "Docker version:"
|
||||
description: "#### `docker version`"
|
||||
description: "#### Run: `docker version`"
|
||||
placeholder: "20.10.21"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: "docker-compose version or docker compose version:"
|
||||
description: "#### `docker-compose version` or `docker compose version`"
|
||||
description: "#### Run: `docker-compose version` or `docker compose version`"
|
||||
placeholder: "v2.12.2"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: "mailcow version:"
|
||||
description: "#### ```git describe --tags `git rev-list --tags --max-count=1` ```"
|
||||
placeholder: "2022-08"
|
||||
description: "#### Run: ```git describe --tags `git rev-list --tags --max-count=1` ```"
|
||||
placeholder: "2022-08x"
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: "Reverse proxy:"
|
||||
placeholder: "e.g. Nginx/Traefik"
|
||||
placeholder: "e.g. nginx/Traefik, or none"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: "Logs of git diff:"
|
||||
description: "#### Output of `git diff origin/master`, any other changes to the code? If so, **please post them**:"
|
||||
description: "#### Output of `git diff origin/master`, any other changes to the code? Sanitize if needed. If so, **please post them**:"
|
||||
render: plain text
|
||||
validations:
|
||||
required: true
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: "Logs of iptables -L -vn:"
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Mark/Close Stale Issues and Pull Requests 🗑️
|
||||
uses: actions/stale@v9.1.0
|
||||
uses: actions/stale@v10.1.0
|
||||
with:
|
||||
repo-token: ${{ secrets.STALE_ACTION_PAT }}
|
||||
days-before-stale: 60
|
||||
|
||||
2
.github/workflows/image_builds.yml
vendored
2
.github/workflows/image_builds.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
- "watchdog-mailcow"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- name: Setup Docker
|
||||
run: |
|
||||
curl -sSL https://get.docker.com/ | CHANNEL=stable sudo sh
|
||||
|
||||
4
.github/workflows/pr_to_nightly.yml
vendored
4
.github/workflows/pr_to_nightly.yml
vendored
@@ -8,11 +8,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Run the Action
|
||||
uses: devops-infra/action-pull-request@v0.6.1
|
||||
uses: devops-infra/action-pull-request@v1.0.2
|
||||
with:
|
||||
github_token: ${{ secrets.PRTONIGHTLY_ACTION_PAT }}
|
||||
title: Automatic PR to nightly from ${{ github.event.repository.updated_at}}
|
||||
|
||||
2
.github/workflows/rebuild_backup_image.yml
vendored
2
.github/workflows/rebuild_backup_image.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
||||
packages: write
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
@@ -15,7 +15,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Generate postscreen_access.cidr
|
||||
run: |
|
||||
|
||||
@@ -23,9 +23,6 @@ A big thank you to everyone supporting us on GitHub Sponsors—your contribution
|
||||
<a href="https://www.maehdros.com/" target=_blank><img
|
||||
src="https://avatars.githubusercontent.com/u/173894712" height="58"
|
||||
/></a>
|
||||
<a href="https://macarne.com/" target=_blank><img
|
||||
src="https://avatars.githubusercontent.com/u/149550368?s=200&v=4" height="58"
|
||||
/></a>
|
||||
|
||||
### 50$/Month Sponsors
|
||||
<a href="https://github.com/vnukhr" target=_blank><img
|
||||
|
||||
@@ -17,7 +17,13 @@ caller="${BASH_SOURCE[1]##*/}"
|
||||
|
||||
get_installed_tools(){
|
||||
for bin in openssl curl docker git awk sha1sum grep cut jq; do
|
||||
if [[ -z $(command -v ${bin}) ]]; then echo "Cannot find ${bin}, exiting..."; exit 1; fi
|
||||
if [[ -z $(command -v ${bin}) ]]; then
|
||||
echo "Error: Cannot find command '${bin}'. Cannot proceed."
|
||||
echo "Solution: Please review system requirements and install requirements. Then, re-run the script."
|
||||
echo "See System Requirements: https://docs.mailcow.email/getstarted/install/"
|
||||
echo "Exiting..."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
if grep --help 2>&1 | head -n 1 | grep -q -i "busybox"; then echo -e "${LIGHT_RED}BusyBox grep detected, please install gnu grep, \"apk add --no-cache --upgrade grep\"${NC}"; exit 1; fi
|
||||
@@ -185,7 +191,7 @@ detect_major_update() {
|
||||
MAJOR_VERSIONS=(
|
||||
"2025-02"
|
||||
"2025-03"
|
||||
"2025-08"
|
||||
"2025-09"
|
||||
)
|
||||
|
||||
current_version=""
|
||||
@@ -221,4 +227,4 @@ detect_major_update() {
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,14 +5,65 @@
|
||||
|
||||
# 1) Check if the host supports IPv6
|
||||
get_ipv6_support() {
|
||||
if grep -qs '^1' /proc/sys/net/ipv6/conf/all/disable_ipv6 2>/dev/null \
|
||||
|| ! ip -6 route show default &>/dev/null; then
|
||||
# ---- helper: probe external IPv6 connectivity without DNS ----
|
||||
_probe_ipv6_connectivity() {
|
||||
# Use literal, always-on IPv6 echo responders (no DNS required)
|
||||
local PROBE_IPS=("2001:4860:4860::8888" "2606:4700:4700::1111")
|
||||
local ip rc=1
|
||||
|
||||
for ip in "${PROBE_IPS[@]}"; do
|
||||
if command -v ping6 &>/dev/null; then
|
||||
ping6 -c1 -W2 "$ip" &>/dev/null || ping6 -c1 -w2 "$ip" &>/dev/null
|
||||
rc=$?
|
||||
elif command -v ping &>/dev/null; then
|
||||
ping -6 -c1 -W2 "$ip" &>/dev/null || ping -6 -c1 -w2 "$ip" &>/dev/null
|
||||
rc=$?
|
||||
else
|
||||
rc=1
|
||||
fi
|
||||
[[ $rc -eq 0 ]] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
if [[ ! -f /proc/net/if_inet6 ]] || grep -qs '^1' /proc/sys/net/ipv6/conf/all/disable_ipv6 2>/dev/null; then
|
||||
DETECTED_IPV6=false
|
||||
echo -e "${YELLOW}IPv6 not detected on host – ${LIGHT_RED}disabling IPv6 support${YELLOW}.${NC}"
|
||||
else
|
||||
DETECTED_IPV6=true
|
||||
echo -e "IPv6 detected on host – ${LIGHT_GREEN}leaving IPv6 support enabled${YELLOW}.${NC}"
|
||||
echo -e "${YELLOW}IPv6 not detected on host – ${LIGHT_RED}IPv6 is administratively disabled${YELLOW}.${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
if ip -6 route show default 2>/dev/null | grep -qE '^default'; then
|
||||
echo -e "${YELLOW}Default IPv6 route found – testing external IPv6 connectivity...${NC}"
|
||||
if _probe_ipv6_connectivity; then
|
||||
DETECTED_IPV6=true
|
||||
echo -e "IPv6 detected on host – ${LIGHT_GREEN}leaving IPv6 support enabled${YELLOW}.${NC}"
|
||||
else
|
||||
DETECTED_IPV6=false
|
||||
echo -e "${YELLOW}Default IPv6 route present but external IPv6 connectivity failed – ${LIGHT_RED}disabling IPv6 support${YELLOW}.${NC}"
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
if ip -6 addr show scope global 2>/dev/null | grep -q 'inet6'; then
|
||||
DETECTED_IPV6=false
|
||||
echo -e "${YELLOW}Global IPv6 address present but no default route – ${LIGHT_RED}disabling IPv6 support${YELLOW}.${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
if ip -6 addr show scope link 2>/dev/null | grep -q 'inet6'; then
|
||||
echo -e "${YELLOW}Only link-local IPv6 addresses found – testing external IPv6 connectivity...${NC}"
|
||||
if _probe_ipv6_connectivity; then
|
||||
DETECTED_IPV6=true
|
||||
echo -e "External IPv6 connectivity available – ${LIGHT_GREEN}leaving IPv6 support enabled${YELLOW}.${NC}"
|
||||
else
|
||||
DETECTED_IPV6=false
|
||||
echo -e "${YELLOW}Only link-local IPv6 present and no external connectivity – ${LIGHT_RED}disabling IPv6 support${YELLOW}.${NC}"
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
DETECTED_IPV6=false
|
||||
echo -e "${YELLOW}IPv6 not detected on host – ${LIGHT_RED}disabling IPv6 support${YELLOW}.${NC}"
|
||||
}
|
||||
|
||||
# 2) Ensure Docker daemon.json has (or create) the required IPv6 settings
|
||||
@@ -21,7 +72,7 @@ docker_daemon_edit(){
|
||||
DOCKER_MAJOR=$(docker version --format '{{.Server.Version}}' 2>/dev/null | cut -d. -f1)
|
||||
MISSING=()
|
||||
|
||||
_has_kv() { grep -Eq "\"$1\"\s*:\s*$2" "$DOCKER_DAEMON_CONFIG" 2>/dev/null; }
|
||||
_has_kv() { grep -Eq "\"$1\"[[:space:]]*:[[:space:]]*$2" "$DOCKER_DAEMON_CONFIG" 2>/dev/null; }
|
||||
|
||||
if [[ -f "$DOCKER_DAEMON_CONFIG" ]]; then
|
||||
|
||||
@@ -38,12 +89,18 @@ docker_daemon_edit(){
|
||||
fi
|
||||
|
||||
# Gather missing keys
|
||||
! _has_kv ipv6 true && MISSING+=("ipv6: true")
|
||||
! grep -Eq '"fixed-cidr-v6"\s*:\s*".+"' "$DOCKER_DAEMON_CONFIG" \
|
||||
&& MISSING+=('fixed-cidr-v6: "fd00:dead:beef:c0::/80"')
|
||||
if [[ -n "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -le 27 ]]; then
|
||||
! _has_kv ipv6 true && MISSING+=("ipv6: true")
|
||||
|
||||
# For Docker < 28, keep requiring fixed-cidr-v6 (default bridge needs it on old engines)
|
||||
if [[ -n "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -lt 28 ]]; then
|
||||
! grep -Eq '"fixed-cidr-v6"[[:space:]]*:[[:space:]]*".+"' "$DOCKER_DAEMON_CONFIG" \
|
||||
&& MISSING+=('fixed-cidr-v6: "fd00:dead:beef:c0::/80"')
|
||||
fi
|
||||
|
||||
# For Docker < 27, ip6tables needed and was tied to experimental in older releases
|
||||
if [[ -n "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -lt 27 ]]; then
|
||||
_has_kv ipv6 true && ! _has_kv ip6tables true && MISSING+=("ip6tables: true")
|
||||
! _has_kv experimental true && MISSING+=("experimental: true")
|
||||
! _has_kv experimental true && MISSING+=("experimental: true")
|
||||
fi
|
||||
|
||||
# Fix if needed
|
||||
@@ -60,9 +117,19 @@ docker_daemon_edit(){
|
||||
cp "$DOCKER_DAEMON_CONFIG" "${DOCKER_DAEMON_CONFIG}.bak"
|
||||
if command -v jq &>/dev/null; then
|
||||
TMP=$(mktemp)
|
||||
JQ_FILTER='.ipv6 = true | .["fixed-cidr-v6"] = "fd00:dead:beef:c0::/80"'
|
||||
[[ "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -lt 27 ]] \
|
||||
&& JQ_FILTER+=' | .ip6tables = true | .experimental = true'
|
||||
# Base filter: ensure ipv6 = true
|
||||
JQ_FILTER='.ipv6 = true'
|
||||
|
||||
# Add fixed-cidr-v6 only for Docker < 28
|
||||
if [[ -n "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -lt 28 ]]; then
|
||||
JQ_FILTER+=' | .["fixed-cidr-v6"] = (.["fixed-cidr-v6"] // "fd00:dead:beef:c0::/80")'
|
||||
fi
|
||||
|
||||
# Add ip6tables/experimental only for Docker < 27
|
||||
if [[ -n "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -lt 27 ]]; then
|
||||
JQ_FILTER+=' | .ip6tables = true | .experimental = true'
|
||||
fi
|
||||
|
||||
jq "$JQ_FILTER" "$DOCKER_DAEMON_CONFIG" >"$TMP" && mv "$TMP" "$DOCKER_DAEMON_CONFIG"
|
||||
echo -e "${LIGHT_GREEN}daemon.json updated. Restarting Docker...${NC}"
|
||||
(command -v systemctl &>/dev/null && systemctl restart docker) || service docker restart
|
||||
@@ -88,6 +155,7 @@ docker_daemon_edit(){
|
||||
fi
|
||||
|
||||
if [[ $ans =~ ^[Yy]$ ]]; then
|
||||
mkdir -p "$(dirname "$DOCKER_DAEMON_CONFIG")"
|
||||
if [[ -n "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -lt 27 ]]; then
|
||||
cat > "$DOCKER_DAEMON_CONFIG" <<EOF
|
||||
{
|
||||
@@ -97,12 +165,19 @@ docker_daemon_edit(){
|
||||
"experimental": true
|
||||
}
|
||||
EOF
|
||||
else
|
||||
elif [[ -n "$DOCKER_MAJOR" && "$DOCKER_MAJOR" -lt 28 ]]; then
|
||||
cat > "$DOCKER_DAEMON_CONFIG" <<EOF
|
||||
{
|
||||
"ipv6": true,
|
||||
"fixed-cidr-v6": "fd00:dead:beef:c0::/80"
|
||||
}
|
||||
EOF
|
||||
else
|
||||
# Docker 28+: ipv6 works without fixed-cidr-v6
|
||||
cat > "$DOCKER_DAEMON_CONFIG" <<EOF
|
||||
{
|
||||
"ipv6": true
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
echo -e "${GREEN}Created $DOCKER_DAEMON_CONFIG with IPv6 settings.${NC}"
|
||||
@@ -122,7 +197,7 @@ configure_ipv6() {
|
||||
# detect manual override if mailcow.conf is present
|
||||
if [[ -n "$MAILCOW_CONF" && -f "$MAILCOW_CONF" ]] && grep -q '^ENABLE_IPV6=' "$MAILCOW_CONF"; then
|
||||
MANUAL_SETTING=$(grep '^ENABLE_IPV6=' "$MAILCOW_CONF" | cut -d= -f2)
|
||||
elif [[ -z "$MAILCOW_CONF" ]] && [[ ! -z "${ENABLE_IPV6:-}" ]]; then
|
||||
elif [[ -z "$MAILCOW_CONF" ]] && [[ -n "${ENABLE_IPV6:-}" ]]; then
|
||||
MANUAL_SETTING="$ENABLE_IPV6"
|
||||
else
|
||||
MANUAL_SETTING=""
|
||||
@@ -131,38 +206,34 @@ configure_ipv6() {
|
||||
get_ipv6_support
|
||||
|
||||
# if user manually set it, check for mismatch
|
||||
if [[ -n "$MANUAL_SETTING" ]]; then
|
||||
if [[ "$MANUAL_SETTING" == "false" && "$DETECTED_IPV6" == "true" ]]; then
|
||||
echo -e "${RED}ERROR: You have ENABLE_IPV6=false but your host and Docker support IPv6.${NC}"
|
||||
echo -e "${RED}This can create an open relay. Please set ENABLE_IPV6=true in your mailcow.conf and re-run.${NC}"
|
||||
exit 1
|
||||
elif [[ "$MANUAL_SETTING" == "true" && "$DETECTED_IPV6" == "false" ]]; then
|
||||
echo -e "${RED}ERROR: You have ENABLE_IPV6=true but your host does not support IPv6.${NC}"
|
||||
echo -e "${RED}Please disable or fix your host/Docker IPv6 support, or set ENABLE_IPV6=false.${NC}"
|
||||
exit 1
|
||||
if [[ "$DETECTED_IPV6" != "true" ]]; then
|
||||
if [[ -n "$MAILCOW_CONF" && -f "$MAILCOW_CONF" ]]; then
|
||||
if grep -q '^ENABLE_IPV6=' "$MAILCOW_CONF"; then
|
||||
sed -i 's/^ENABLE_IPV6=.*/ENABLE_IPV6=false/' "$MAILCOW_CONF"
|
||||
else
|
||||
echo "ENABLE_IPV6=false" >> "$MAILCOW_CONF"
|
||||
fi
|
||||
else
|
||||
return
|
||||
export IPV6_BOOL=false
|
||||
fi
|
||||
fi
|
||||
|
||||
# no manual override: proceed to set or export
|
||||
if [[ "$DETECTED_IPV6" == "true" ]]; then
|
||||
docker_daemon_edit
|
||||
else
|
||||
echo "Skipping Docker IPv6 configuration because host does not support IPv6."
|
||||
echo "Make sure to check if your docker daemon.json does not include \"enable_ipv6\": true if you do not want IPv6."
|
||||
echo "IPv6 configuration complete: ENABLE_IPV6=false"
|
||||
sleep 2
|
||||
return
|
||||
fi
|
||||
|
||||
# now write into mailcow.conf or export
|
||||
docker_daemon_edit
|
||||
|
||||
if [[ -n "$MAILCOW_CONF" && -f "$MAILCOW_CONF" ]]; then
|
||||
LINE="ENABLE_IPV6=$DETECTED_IPV6"
|
||||
if grep -q '^ENABLE_IPV6=' "$MAILCOW_CONF"; then
|
||||
sed -i "s/^ENABLE_IPV6=.*/$LINE/" "$MAILCOW_CONF"
|
||||
sed -i 's/^ENABLE_IPV6=.*/ENABLE_IPV6=true/' "$MAILCOW_CONF"
|
||||
else
|
||||
echo "$LINE" >> "$MAILCOW_CONF"
|
||||
echo "ENABLE_IPV6=true" >> "$MAILCOW_CONF"
|
||||
fi
|
||||
else
|
||||
export IPV6_BOOL="$DETECTED_IPV6"
|
||||
export IPV6_BOOL=true
|
||||
fi
|
||||
|
||||
echo "IPv6 configuration complete: ENABLE_IPV6=$DETECTED_IPV6"
|
||||
echo "IPv6 configuration complete: ENABLE_IPV6=true"
|
||||
}
|
||||
@@ -43,6 +43,7 @@ adapt_new_options() {
|
||||
"ALLOW_ADMIN_EMAIL_LOGIN"
|
||||
"SKIP_HTTP_VERIFICATION"
|
||||
"SOGO_EXPIRE_SESSION"
|
||||
"SOGO_URL_ENCRYPTION_KEY"
|
||||
"REDIS_PORT"
|
||||
"REDISPASS"
|
||||
"DOVECOT_MASTER_USER"
|
||||
@@ -94,7 +95,6 @@ adapt_new_options() {
|
||||
echo '# Max log lines per service to keep in Redis logs' >> mailcow.conf
|
||||
echo "LOG_LINES=9999" >> mailcow.conf
|
||||
;;
|
||||
|
||||
IPV4_NETWORK)
|
||||
echo '# Internal IPv4 /24 subnet, format n.n.n. (expands to n.n.n.0/24)' >> mailcow.conf
|
||||
echo "IPV4_NETWORK=172.22.1" >> mailcow.conf
|
||||
@@ -276,21 +276,22 @@ adapt_new_options() {
|
||||
echo '# A COMPLETE DOCKER STACK REBUILD (compose down && compose up -d) IS NEEDED TO APPLY THIS.' >> mailcow.conf
|
||||
echo ENABLE_IPV6=${IPV6_BOOL} >> mailcow.conf
|
||||
;;
|
||||
|
||||
SKIP_CLAMD)
|
||||
echo '# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n' >> mailcow.conf
|
||||
echo 'SKIP_CLAMD=n' >> mailcow.conf
|
||||
;;
|
||||
|
||||
SKIP_OLEFY)
|
||||
echo '# Skip Olefy (olefy-mailcow) anti-virus for Office documents (Rspamd will auto-detect a missing Olefy container) - y/n' >> mailcow.conf
|
||||
echo 'SKIP_OLEFY=n' >> mailcow.conf
|
||||
;;
|
||||
|
||||
REDISPASS)
|
||||
echo "REDISPASS=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c 28)" >> mailcow.conf
|
||||
;;
|
||||
|
||||
SOGO_URL_ENCRYPTION_KEY)
|
||||
echo '# SOGo URL encryption key (exactly 16 characters, limited to A–Z, a–z, 0–9)' >> mailcow.conf
|
||||
echo '# This key is used to encrypt email addresses within SOGo URLs' >> mailcow.conf
|
||||
echo "SOGO_URL_ENCRYPTION_KEY=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c 16)" >> mailcow.conf
|
||||
;;
|
||||
*)
|
||||
echo "${option}=" >> mailcow.conf
|
||||
;;
|
||||
|
||||
@@ -8,7 +8,7 @@ fi
|
||||
|
||||
# Cleaning up garbage
|
||||
echo "Cleaning up tmp files..."
|
||||
rm -rf /var/lib/clamav/clamav-*.tmp
|
||||
rm -rf /var/lib/clamav/tmp.*
|
||||
|
||||
# Prepare whitelist
|
||||
|
||||
|
||||
@@ -132,8 +132,8 @@ while ($row = $sth->fetchrow_arrayref()) {
|
||||
"--tmpdir", "/tmp",
|
||||
"--nofoldersizes",
|
||||
"--addheader",
|
||||
($timeout1 gt "0" ? () : ('--timeout1', $timeout1)),
|
||||
($timeout2 gt "0" ? () : ('--timeout2', $timeout2)),
|
||||
($timeout1 le "0" ? () : ('--timeout1', $timeout1)),
|
||||
($timeout2 le "0" ? () : ('--timeout2', $timeout2)),
|
||||
($exclude eq "" ? () : ("--exclude", $exclude)),
|
||||
($subfolder2 eq "" ? () : ('--subfolder2', $subfolder2)),
|
||||
($maxage eq "0" ? () : ('--maxage', $maxage)),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
backend=iptables
|
||||
backend=nftables
|
||||
|
||||
nft list table ip filter &>/dev/null
|
||||
nftables_found=$?
|
||||
|
||||
@@ -449,6 +449,11 @@ if __name__ == '__main__':
|
||||
tables = NFTables(chain_name, logger)
|
||||
else:
|
||||
logger.logInfo('Using IPTables backend')
|
||||
logger.logWarn(
|
||||
"DEPRECATION: iptables-legacy is deprecated and will be removed in future releases. "
|
||||
"Please switch to nftables on your host to ensure complete compatibility."
|
||||
)
|
||||
time.sleep(5)
|
||||
tables = IPTables(chain_name, logger)
|
||||
|
||||
clear()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import time
|
||||
import json
|
||||
import datetime
|
||||
|
||||
class Logger:
|
||||
def __init__(self):
|
||||
@@ -8,17 +9,28 @@ class Logger:
|
||||
def set_redis(self, redis):
|
||||
self.r = redis
|
||||
|
||||
def _format_timestamp(self):
|
||||
# Local time with milliseconds
|
||||
return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
def log(self, priority, message):
|
||||
tolog = {}
|
||||
tolog['time'] = int(round(time.time()))
|
||||
tolog['priority'] = priority
|
||||
tolog['message'] = message
|
||||
print(message)
|
||||
# build redis-friendly dict
|
||||
tolog = {
|
||||
'time': int(round(time.time())), # keep raw timestamp for Redis
|
||||
'priority': priority,
|
||||
'message': message
|
||||
}
|
||||
|
||||
# print human-readable message with timestamp
|
||||
ts = self._format_timestamp()
|
||||
print(f"{ts} {priority.upper()}: {message}", flush=True)
|
||||
|
||||
# also push JSON to Redis if connected
|
||||
if self.r is not None:
|
||||
try:
|
||||
self.r.lpush('NETFILTER_LOG', json.dumps(tolog, ensure_ascii=False))
|
||||
except Exception as ex:
|
||||
print('Failed logging to redis: %s' % (ex))
|
||||
print(f'{ts} WARN: Failed logging to redis: {ex}', flush=True)
|
||||
|
||||
def logWarn(self, message):
|
||||
self.log('warn', message)
|
||||
@@ -27,4 +39,4 @@ class Logger:
|
||||
self.log('crit', message)
|
||||
|
||||
def logInfo(self, message):
|
||||
self.log('info', message)
|
||||
self.log('info', message)
|
||||
@@ -10,7 +10,7 @@ def includes_conf(env, template_vars):
|
||||
server_name_config = f"server_name {template_vars['MAILCOW_HOSTNAME']} autodiscover.* autoconfig.* {' '.join(template_vars['ADDITIONAL_SERVER_NAMES'])};"
|
||||
listen_plain_config = f"listen {template_vars['HTTP_PORT']};"
|
||||
listen_ssl_config = f"listen {template_vars['HTTPS_PORT']};"
|
||||
if not template_vars['ENABLE_IPV6']:
|
||||
if template_vars['ENABLE_IPV6']:
|
||||
listen_plain_config += f"\nlisten [::]:{template_vars['HTTP_PORT']};"
|
||||
listen_ssl_config += f"\nlisten [::]:{template_vars['HTTPS_PORT']} ssl;"
|
||||
listen_ssl_config += "\nhttp2 on;"
|
||||
|
||||
@@ -1,21 +1,25 @@
|
||||
FROM php:8.2-fpm-alpine3.21
|
||||
FROM php:8.4-fpm-alpine3.22
|
||||
|
||||
LABEL maintainer = "The Infrastructure Company GmbH <info@servercow.de>"
|
||||
LABEL maintainer="The Infrastructure Company GmbH <info@servercow.de>"
|
||||
|
||||
# renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
||||
ARG APCU_PECL_VERSION=5.1.26
|
||||
ARG APCU_PECL_VERSION=5.1.27
|
||||
# renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced extractVersion=(?<version>.*)$
|
||||
ARG IMAGICK_PECL_VERSION=3.8.0
|
||||
# renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
||||
ARG MAILPARSE_PECL_VERSION=3.1.8
|
||||
ARG MAILPARSE_PECL_VERSION=3.1.9
|
||||
# renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
||||
ARG MEMCACHED_PECL_VERSION=3.3.0
|
||||
# renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=(?<version>.*)$
|
||||
ARG REDIS_PECL_VERSION=6.2.0
|
||||
# renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced extractVersion=(?<version>.*)$
|
||||
ARG COMPOSER_VERSION=2.8.6
|
||||
# renovate: datasource=github-tags depName=php/pecl-text-pspell versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
||||
ARG PSPELL_PECL_VERSION=1.0.1
|
||||
# renovate: datasource=github-tags depName=php/pecl-mail-imap versioning=semver-coerced extractVersion=^v(?<version>.*)$
|
||||
ARG IMAP_PECL_VERSION=1.0.3
|
||||
|
||||
RUN apk add -U --no-cache autoconf \
|
||||
RUN apk update && apk add -U --no-cache autoconf \
|
||||
aspell-dev \
|
||||
aspell-libs \
|
||||
bash \
|
||||
@@ -68,18 +72,18 @@ RUN apk add -U --no-cache autoconf \
|
||||
&& pecl install mailparse-${MAILPARSE_PECL_VERSION} \
|
||||
&& pecl install memcached-${MEMCACHED_PECL_VERSION} \
|
||||
&& pecl install redis-${REDIS_PECL_VERSION} \
|
||||
&& docker-php-ext-enable apcu imagick memcached mailparse redis \
|
||||
&& pecl install pspell-${PSPELL_PECL_VERSION} \
|
||||
&& pecl install --configureoptions='with-kerberos="no" with-imap="yes" with-imap-ssl="yes"' imap-${IMAP_PECL_VERSION} \
|
||||
&& docker-php-ext-enable apcu imagick memcached mailparse redis pspell imap \
|
||||
&& pecl clear-cache \
|
||||
&& docker-php-ext-configure intl \
|
||||
&& docker-php-ext-configure exif \
|
||||
&& docker-php-ext-configure gd --with-freetype=/usr/include/ \
|
||||
&& docker-php-ext-configure gd --with-freetype=/usr/include/ \
|
||||
--with-jpeg=/usr/include/ \
|
||||
--with-webp \
|
||||
--with-xpm \
|
||||
--with-avif \
|
||||
&& docker-php-ext-install -j 4 exif gd gettext intl ldap opcache pcntl pdo pdo_mysql pspell soap sockets zip bcmath gmp \
|
||||
&& docker-php-ext-configure imap --with-imap --with-imap-ssl \
|
||||
&& docker-php-ext-install -j 4 imap \
|
||||
&& docker-php-ext-install -j 4 exif gd gettext intl ldap opcache pcntl pdo pdo_mysql soap sockets zip bcmath gmp \
|
||||
&& curl --silent --show-error https://getcomposer.org/installer | php -- --version=${COMPOSER_VERSION} \
|
||||
&& mv composer.phar /usr/local/bin/composer \
|
||||
&& chmod +x /usr/local/bin/composer \
|
||||
|
||||
@@ -3,6 +3,7 @@ WORKDIR /src
|
||||
|
||||
ENV CGO_ENABLED=0 \
|
||||
GO111MODULE=on \
|
||||
NOOPT=1 \
|
||||
VERSION=1.8.14
|
||||
|
||||
RUN git clone --branch v${VERSION} https://github.com/Zuplu/postfix-tlspol && \
|
||||
|
||||
@@ -2,7 +2,7 @@ FROM debian:bookworm-slim
|
||||
LABEL maintainer="The Infrastructure Company GmbH <info@servercow.de>"
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ARG RSPAMD_VER=rspamd_3.12.1-1~6dbfca2fa
|
||||
ARG RSPAMD_VER=rspamd_3.13.2-1~8bf602278
|
||||
ARG CODENAME=bookworm
|
||||
ENV LC_ALL=C
|
||||
|
||||
@@ -14,8 +14,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
dnsutils \
|
||||
netcat-traditional \
|
||||
wget \
|
||||
redis-tools \
|
||||
procps \
|
||||
redis-tools \
|
||||
procps \
|
||||
nano \
|
||||
lua-cjson \
|
||||
&& arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) \
|
||||
|
||||
@@ -86,7 +86,8 @@ if [[ "${SKIP_OLEFY}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
|
||||
rm /etc/rspamd/local.d/external_services.conf
|
||||
fi
|
||||
else
|
||||
cat <<EOF > /etc/rspamd/local.d/external_services.conf
|
||||
if [[ ! -f /etc/rspamd/local.d/external_services.conf ]]; then
|
||||
cat <<EOF > /etc/rspamd/local.d/external_services.conf
|
||||
oletools {
|
||||
# default olefy settings
|
||||
servers = "olefy:10055";
|
||||
@@ -100,6 +101,7 @@ oletools {
|
||||
retransmits = 1;
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
# Provide additional lua modules
|
||||
|
||||
@@ -24,6 +24,10 @@ while [[ "${DBV_NOW}" != "${DBV_NEW}" ]]; do
|
||||
done
|
||||
echo "DB schema is ${DBV_NOW}"
|
||||
|
||||
if [[ "${MASTER}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
|
||||
mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "DROP TRIGGER IF EXISTS sogo_update_password"
|
||||
fi
|
||||
|
||||
# cat /dev/urandom seems to hang here occasionally and is not recommended anyway, better use openssl
|
||||
RAND_PASS=$(openssl rand -base64 16 | tr -dc _A-Z-a-z-0-9)
|
||||
|
||||
@@ -46,6 +50,10 @@ cat <<EOF > /var/lib/sogo/GNUstep/Defaults/sogod.plist
|
||||
<string>YES</string>
|
||||
<key>SOGoEncryptionKey</key>
|
||||
<string>${RAND_PASS}</string>
|
||||
<key>SOGoURLEncryptionEnabled</key>
|
||||
<string>YES</string>
|
||||
<key>SOGoURLEncryptionPassphrase</key>
|
||||
<string>${SOGO_URL_ENCRYPTION_KEY}</string>
|
||||
<key>OCSAdminURL</key>
|
||||
<string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_admin</string>
|
||||
<key>OCSCacheFolderURL</key>
|
||||
|
||||
@@ -16,7 +16,6 @@ RUN apk add --update \
|
||||
fcgi \
|
||||
openssl \
|
||||
nagios-plugins-mysql \
|
||||
nagios-plugins-dns \
|
||||
nagios-plugins-disk \
|
||||
bind-tools \
|
||||
redis \
|
||||
@@ -32,9 +31,11 @@ RUN apk add --update \
|
||||
tzdata \
|
||||
whois \
|
||||
&& curl https://raw.githubusercontent.com/mludvig/smtp-cli/v3.10/smtp-cli -o /smtp-cli \
|
||||
&& chmod +x smtp-cli
|
||||
&& chmod +x smtp-cli \
|
||||
&& mkdir /usr/lib/mailcow
|
||||
|
||||
COPY watchdog.sh /watchdog.sh
|
||||
COPY check_mysql_slavestatus.sh /usr/lib/nagios/plugins/check_mysql_slavestatus.sh
|
||||
COPY check_dns.sh /usr/lib/mailcow/check_dns.sh
|
||||
|
||||
CMD ["/watchdog.sh"]
|
||||
|
||||
39
data/Dockerfiles/watchdog/check_dns.sh
Executable file
39
data/Dockerfiles/watchdog/check_dns.sh
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
|
||||
while getopts "H:s:" opt; do
|
||||
case "$opt" in
|
||||
H) HOST="$OPTARG" ;;
|
||||
s) SERVER="$OPTARG" ;;
|
||||
*) echo "Usage: $0 -H host -s server"; exit 3 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$SERVER" ]; then
|
||||
echo "No DNS Server provided"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
if [ -z "$HOST" ]; then
|
||||
echo "No host to test provided"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
# run dig and measure the time it takes to run
|
||||
START_TIME=$(date +%s%3N)
|
||||
dig_output=$(dig +short +timeout=2 +tries=1 "$HOST" @"$SERVER" 2>/dev/null)
|
||||
dig_rc=$?
|
||||
dig_output_ips=$(echo "$dig_output" | grep -E '^[0-9.]+$' | sort | paste -sd ',' -)
|
||||
END_TIME=$(date +%s%3N)
|
||||
ELAPSED_TIME=$((END_TIME - START_TIME))
|
||||
|
||||
# validate and perform nagios like output and exit codes
|
||||
if [ $dig_rc -ne 0 ] || [ -z "$dig_output" ]; then
|
||||
echo "Domain $HOST was not found by the server"
|
||||
exit 2
|
||||
elif [ $dig_rc -eq 0 ]; then
|
||||
echo "DNS OK: $ELAPSED_TIME ms response time. $HOST returns $dig_output_ips"
|
||||
exit 0
|
||||
else
|
||||
echo "Unknown error"
|
||||
exit 3
|
||||
fi
|
||||
@@ -1,5 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "${DEV_MODE}" != "n" ]; then
|
||||
echo -e "\e[31mEnabled Debug Mode\e[0m"
|
||||
set -x
|
||||
fi
|
||||
|
||||
trap "exit" INT TERM
|
||||
trap "kill 0" EXIT
|
||||
|
||||
@@ -297,7 +302,7 @@ unbound_checks() {
|
||||
touch /tmp/unbound-mailcow; echo "$(tail -50 /tmp/unbound-mailcow)" > /tmp/unbound-mailcow
|
||||
host_ip=$(get_container_ip unbound-mailcow)
|
||||
err_c_cur=${err_count}
|
||||
/usr/lib/nagios/plugins/check_dns -s ${host_ip} -H stackoverflow.com 2>> /tmp/unbound-mailcow 1>&2; err_count=$(( ${err_count} + $? ))
|
||||
/usr/lib/mailcow/check_dns.sh -s ${host_ip} -H stackoverflow.com 2>> /tmp/unbound-mailcow 1>&2; err_count=$(( ${err_count} + $? ))
|
||||
DNSSEC=$(dig com +dnssec | egrep 'flags:.+ad')
|
||||
if [[ -z ${DNSSEC} ]]; then
|
||||
echo "DNSSEC failure" 2>> /tmp/unbound-mailcow 1>&2
|
||||
@@ -445,6 +450,31 @@ postfix_checks() {
|
||||
return 1
|
||||
}
|
||||
|
||||
postfix-tlspol_checks() {
|
||||
err_count=0
|
||||
diff_c=0
|
||||
THRESHOLD=${POSTFIX_TLSPOL_THRESHOLD}
|
||||
# Reduce error count by 2 after restarting an unhealthy container
|
||||
trap "[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))" USR1
|
||||
while [ ${err_count} -lt ${THRESHOLD} ]; do
|
||||
touch /tmp/postfix-tlspol-mailcow; echo "$(tail -50 /tmp/postfix-tlspol-mailcow)" > /tmp/postfix-tlspol-mailcow
|
||||
host_ip=$(get_container_ip postfix-tlspol-mailcow)
|
||||
err_c_cur=${err_count}
|
||||
/usr/lib/nagios/plugins/check_tcp -4 -H ${host_ip} -p 8642 2>> /tmp/postfix-tlspol-mailcow 1>&2; err_count=$(( ${err_count} + $? ))
|
||||
[ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1
|
||||
[ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))
|
||||
progress "Postfix TLS Policy companion" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}
|
||||
if [[ $? == 10 ]]; then
|
||||
diff_c=0
|
||||
sleep 1
|
||||
else
|
||||
diff_c=0
|
||||
sleep $(( ( RANDOM % 60 ) + 20 ))
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
clamd_checks() {
|
||||
err_count=0
|
||||
diff_c=0
|
||||
@@ -922,6 +952,18 @@ PID=$!
|
||||
echo "Spawned mailq_checks with PID ${PID}"
|
||||
BACKGROUND_TASKS+=(${PID})
|
||||
|
||||
(
|
||||
while true; do
|
||||
if ! postfix-tlspol_checks; then
|
||||
log_msg "Postfix TLS Policy hit error limit"
|
||||
echo postfix-tlspol-mailcow > /tmp/com_pipe
|
||||
fi
|
||||
done
|
||||
) &
|
||||
PID=$!
|
||||
echo "Spawned postfix-tlspol_checks with PID ${PID}"
|
||||
BACKGROUND_TASKS+=(${PID})
|
||||
|
||||
(
|
||||
while true; do
|
||||
if ! dovecot_checks; then
|
||||
|
||||
@@ -86,7 +86,7 @@ if ($result === false){
|
||||
'remote_addr' => $post['real_rip']
|
||||
));
|
||||
if ($result) {
|
||||
error_log('MAILCOWAUTH: App auth for user ' . $post['username']);
|
||||
error_log('MAILCOWAUTH: App auth for user ' . $post['username'] . " with service " . $post['service'] . " from IP " . $post['real_rip']);
|
||||
set_sasl_log($post['username'], $post['real_rip'], $post['service']);
|
||||
}
|
||||
}
|
||||
@@ -94,9 +94,9 @@ if ($result === false){
|
||||
// Init Identity Provider
|
||||
$iam_provider = identity_provider('init');
|
||||
$iam_settings = identity_provider('get');
|
||||
$result = user_login($post['username'], $post['password'], array('is_internal' => true));
|
||||
$result = user_login($post['username'], $post['password'], array('is_internal' => true, 'service' => $post['service']));
|
||||
if ($result) {
|
||||
error_log('MAILCOWAUTH: User auth for user ' . $post['username']);
|
||||
error_log('MAILCOWAUTH: User auth for user ' . $post['username'] . " with service " . $post['service'] . " from IP " . $post['real_rip']);
|
||||
set_sasl_log($post['username'], $post['real_rip'], $post['service']);
|
||||
}
|
||||
}
|
||||
@@ -105,7 +105,7 @@ if ($result) {
|
||||
http_response_code(200); // OK
|
||||
$return['success'] = true;
|
||||
} else {
|
||||
error_log("MAILCOWAUTH: Login failed for user " . $post['username']);
|
||||
error_log("MAILCOWAUTH: Login failed for user " . $post['username'] . " with service " . $post['service'] . " from IP " . $post['real_rip']);
|
||||
http_response_code(401); // Unauthorized
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ http {
|
||||
{%endif%}
|
||||
listen {{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;
|
||||
|
||||
{% if not DISABLE_IPv6 %}
|
||||
{% if ENABLE_IPV6 %}
|
||||
{% if not HTTP_REDIRECT %}
|
||||
listen [::]:{{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};
|
||||
{%endif%}
|
||||
@@ -105,7 +105,7 @@ http {
|
||||
{%endif%}
|
||||
listen {{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;
|
||||
|
||||
{% if not DISABLE_IPv6 %}
|
||||
{% if ENABLE_IPV6 %}
|
||||
{% if not HTTP_REDIRECT %}
|
||||
listen [::]:{{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};
|
||||
{%endif%}
|
||||
@@ -126,7 +126,7 @@ http {
|
||||
# rspamd dynmaps:
|
||||
server {
|
||||
listen 8081;
|
||||
{% if not DISABLE_IPv6 %}
|
||||
{% if ENABLE_IPV6 %}
|
||||
listen [::]:8081;
|
||||
{%endif%}
|
||||
index index.php index.html;
|
||||
@@ -199,7 +199,7 @@ http {
|
||||
{%endif%}
|
||||
listen {{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;
|
||||
|
||||
{% if not DISABLE_IPv6 %}
|
||||
{% if ENABLE_IPV6 %}
|
||||
{% if not HTTP_REDIRECT %}
|
||||
listen [::]:{{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};
|
||||
{%endif%}
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
; NOTE: Restart phpfpm on ANY manual changes to PHP files!
|
||||
|
||||
; opcache
|
||||
opcache.enable=1
|
||||
opcache.enable_cli=1
|
||||
opcache.interned_strings_buffer=16
|
||||
opcache.max_accelerated_files=10000
|
||||
opcache.memory_consumption=128
|
||||
opcache.save_comments=1
|
||||
opcache.revalidate_freq=1
|
||||
opcache.revalidate_freq=120
|
||||
opcache.validate_timestamps=0
|
||||
|
||||
; JIT
|
||||
opcache.jit=1255
|
||||
opcache.jit_buffer_size=8M
|
||||
|
||||
@@ -1,13 +1,26 @@
|
||||
# Whitelist generated by Postwhite v3.4 on Fri Aug 1 00:24:14 UTC 2025
|
||||
# Whitelist generated by Postwhite v3.4 on Wed Oct 1 00:21:33 UTC 2025
|
||||
# https://github.com/stevejenkins/postwhite/
|
||||
# 2166 total rules
|
||||
# 2216 total rules
|
||||
2a00:1450:4000::/36 permit
|
||||
2a01:111:f400::/48 permit
|
||||
2a01:111:f403:8000::/50 permit
|
||||
2a01:111:f403:2800::/53 permit
|
||||
2a01:111:f403:8000::/51 permit
|
||||
2a01:111:f403::/49 permit
|
||||
2a01:111:f403:c000::/51 permit
|
||||
2a01:111:f403:d000::/53 permit
|
||||
2a01:111:f403:f000::/52 permit
|
||||
2a01:238:20a:202:5370::1 permit
|
||||
2a01:238:20a:202:5372::1 permit
|
||||
2a01:238:20a:202:5373::1 permit
|
||||
2a01:238:400:101:53::1 permit
|
||||
2a01:238:400:102:53::1 permit
|
||||
2a01:238:400:103:53::1 permit
|
||||
2a01:238:400:301:53::1 permit
|
||||
2a01:238:400:302:53::1 permit
|
||||
2a01:238:400:303:53::1 permit
|
||||
2a01:238:400:470:53::1 permit
|
||||
2a01:238:400:471:53::1 permit
|
||||
2a01:238:400:472:53::1 permit
|
||||
2a01:b747:3000:200::/56 permit
|
||||
2a01:b747:3001:200::/56 permit
|
||||
2a01:b747:3002:200::/56 permit
|
||||
@@ -17,16 +30,17 @@
|
||||
2a01:b747:3006:200::/56 permit
|
||||
2a02:a60:0:5::/64 permit
|
||||
2c0f:fb50:4000::/36 permit
|
||||
2.207.151.53 permit
|
||||
2.207.217.30 permit
|
||||
3.64.237.68 permit
|
||||
3.65.3.180 permit
|
||||
3.70.123.177 permit
|
||||
3.72.182.33 permit
|
||||
3.74.81.189 permit
|
||||
3.74.125.228 permit
|
||||
3.75.33.185 permit
|
||||
3.93.157.0/24 permit
|
||||
3.94.40.108 permit
|
||||
3.121.107.214 permit
|
||||
3.129.120.190 permit
|
||||
3.210.190.0/24 permit
|
||||
3.211.80.218 permit
|
||||
@@ -42,7 +56,8 @@
|
||||
8.40.222.0/23 permit
|
||||
8.40.222.250/31 permit
|
||||
12.130.86.238 permit
|
||||
13.107.253.40 permit
|
||||
13.107.213.41 permit
|
||||
13.107.246.41 permit
|
||||
13.110.208.0/21 permit
|
||||
13.110.209.0/24 permit
|
||||
13.110.216.0/22 permit
|
||||
@@ -64,6 +79,8 @@
|
||||
18.97.2.64/26 permit
|
||||
18.156.89.250 permit
|
||||
18.156.205.64 permit
|
||||
18.157.70.148 permit
|
||||
18.157.114.255 permit
|
||||
18.157.243.190 permit
|
||||
18.158.153.154 permit
|
||||
18.194.95.56 permit
|
||||
@@ -75,9 +92,7 @@
|
||||
18.216.232.154 permit
|
||||
18.235.27.253 permit
|
||||
18.236.40.242 permit
|
||||
18.236.56.161 permit
|
||||
20.51.6.32/30 permit
|
||||
20.51.98.61 permit
|
||||
20.52.52.2 permit
|
||||
20.52.128.133 permit
|
||||
20.59.80.4/30 permit
|
||||
@@ -153,7 +168,6 @@
|
||||
34.212.163.75 permit
|
||||
34.215.104.144 permit
|
||||
34.218.115.239 permit
|
||||
34.218.116.3 permit
|
||||
34.225.212.172 permit
|
||||
34.241.242.183 permit
|
||||
35.83.148.184 permit
|
||||
@@ -162,6 +176,7 @@
|
||||
35.161.32.253 permit
|
||||
35.162.73.231 permit
|
||||
35.167.93.243 permit
|
||||
35.174.145.124 permit
|
||||
35.176.132.251 permit
|
||||
35.205.92.9 permit
|
||||
35.228.216.85 permit
|
||||
@@ -178,6 +193,7 @@
|
||||
40.233.64.216 permit
|
||||
40.233.83.78 permit
|
||||
40.233.88.28 permit
|
||||
43.239.212.33 permit
|
||||
44.206.138.57 permit
|
||||
44.210.169.44 permit
|
||||
44.217.45.156 permit
|
||||
@@ -188,7 +204,10 @@
|
||||
44.246.68.102 permit
|
||||
44.246.77.92 permit
|
||||
45.14.148.0/22 permit
|
||||
46.19.170.16 permit
|
||||
45.143.132.0/24 permit
|
||||
45.143.133.0/24 permit
|
||||
45.143.134.0/24 permit
|
||||
45.143.135.0/24 permit
|
||||
46.226.48.0/21 permit
|
||||
46.228.36.37 permit
|
||||
46.228.36.38/31 permit
|
||||
@@ -324,6 +343,7 @@
|
||||
54.255.61.23 permit
|
||||
56.124.6.228 permit
|
||||
57.103.64.0/18 permit
|
||||
57.129.93.249 permit
|
||||
62.13.128.0/24 permit
|
||||
62.13.129.128/25 permit
|
||||
62.13.136.0/21 permit
|
||||
@@ -643,6 +663,11 @@
|
||||
77.238.189.142 permit
|
||||
77.238.189.146/31 permit
|
||||
77.238.189.148/30 permit
|
||||
79.135.106.0/24 permit
|
||||
79.135.107.0/24 permit
|
||||
81.169.146.243 permit
|
||||
81.169.146.245 permit
|
||||
81.169.146.246 permit
|
||||
81.223.46.0/27 permit
|
||||
82.165.159.2 permit
|
||||
82.165.159.3 permit
|
||||
@@ -658,7 +683,17 @@
|
||||
82.165.159.45 permit
|
||||
82.165.159.130 permit
|
||||
82.165.159.131 permit
|
||||
85.9.206.169 permit
|
||||
85.9.210.45 permit
|
||||
85.158.136.0/21 permit
|
||||
85.215.255.39 permit
|
||||
85.215.255.40 permit
|
||||
85.215.255.41 permit
|
||||
85.215.255.45 permit
|
||||
85.215.255.46 permit
|
||||
85.215.255.47 permit
|
||||
85.215.255.48 permit
|
||||
85.215.255.49 permit
|
||||
86.61.88.25 permit
|
||||
87.238.80.0/21 permit
|
||||
87.248.103.12 permit
|
||||
@@ -1198,16 +1233,14 @@
|
||||
99.83.190.102 permit
|
||||
103.9.96.0/22 permit
|
||||
103.28.42.0/24 permit
|
||||
103.122.78.238 permit
|
||||
103.84.217.238 permit
|
||||
103.89.75.238 permit
|
||||
103.151.192.0/23 permit
|
||||
103.168.172.128/27 permit
|
||||
103.237.104.0/22 permit
|
||||
104.43.243.237 permit
|
||||
104.44.112.128/25 permit
|
||||
104.47.0.0/17 permit
|
||||
104.47.20.0/23 permit
|
||||
104.47.75.0/24 permit
|
||||
104.47.108.0/23 permit
|
||||
104.130.96.0/28 permit
|
||||
104.130.122.0/23 permit
|
||||
106.10.144.64/27 permit
|
||||
@@ -1342,9 +1375,8 @@
|
||||
108.174.6.215 permit
|
||||
108.175.18.45 permit
|
||||
108.175.30.45 permit
|
||||
108.177.8.0/22 permit
|
||||
108.177.96.0/19 permit
|
||||
108.179.144.0/20 permit
|
||||
109.224.244.0/24 permit
|
||||
109.237.142.0/24 permit
|
||||
111.221.23.128/25 permit
|
||||
111.221.26.0/27 permit
|
||||
@@ -1508,7 +1540,7 @@
|
||||
148.105.0.0/16 permit
|
||||
148.105.8.0/21 permit
|
||||
149.72.0.0/16 permit
|
||||
149.72.223.204 permit
|
||||
149.72.234.184 permit
|
||||
149.72.248.236 permit
|
||||
149.97.173.180 permit
|
||||
150.230.98.160 permit
|
||||
@@ -1564,6 +1596,7 @@
|
||||
159.183.0.0/16 permit
|
||||
159.183.68.71 permit
|
||||
159.183.79.38 permit
|
||||
159.183.129.172 permit
|
||||
160.1.62.192 permit
|
||||
161.38.192.0/20 permit
|
||||
161.38.204.0/22 permit
|
||||
@@ -1581,6 +1614,7 @@
|
||||
163.114.134.16 permit
|
||||
163.114.135.16 permit
|
||||
163.116.128.0/17 permit
|
||||
163.192.116.87 permit
|
||||
164.152.23.32 permit
|
||||
164.152.25.241 permit
|
||||
164.177.132.168/30 permit
|
||||
@@ -1620,10 +1654,10 @@
|
||||
169.148.131.0/24 permit
|
||||
169.148.138.0/24 permit
|
||||
169.148.142.10 permit
|
||||
169.148.142.33 permit
|
||||
169.148.144.0/25 permit
|
||||
169.148.144.10 permit
|
||||
169.148.146.0/23 permit
|
||||
169.148.174.33 permit
|
||||
169.148.175.3 permit
|
||||
169.148.188.0/24 permit
|
||||
169.148.188.182 permit
|
||||
@@ -1632,11 +1666,7 @@
|
||||
170.10.132.56/29 permit
|
||||
170.10.132.64/29 permit
|
||||
170.10.133.0/24 permit
|
||||
172.217.0.0/19 permit
|
||||
172.217.32.0/20 permit
|
||||
172.217.128.0/19 permit
|
||||
172.217.160.0/20 permit
|
||||
172.217.192.0/19 permit
|
||||
172.253.56.0/21 permit
|
||||
172.253.112.0/20 permit
|
||||
173.0.84.0/29 permit
|
||||
@@ -1671,6 +1701,9 @@
|
||||
185.12.80.0/22 permit
|
||||
185.28.196.0/22 permit
|
||||
185.58.84.93 permit
|
||||
185.70.40.0/24 permit
|
||||
185.70.41.0/24 permit
|
||||
185.70.43.0/24 permit
|
||||
185.80.93.204 permit
|
||||
185.80.93.227 permit
|
||||
185.80.95.31 permit
|
||||
@@ -1732,6 +1765,7 @@
|
||||
188.125.85.234/31 permit
|
||||
188.125.85.236/31 permit
|
||||
188.125.85.238 permit
|
||||
188.165.51.139 permit
|
||||
188.172.128.0/20 permit
|
||||
192.0.64.0/18 permit
|
||||
192.18.139.154 permit
|
||||
@@ -1758,6 +1792,8 @@
|
||||
193.142.157.191 permit
|
||||
193.142.157.198 permit
|
||||
194.19.134.0/25 permit
|
||||
194.25.134.16/28 permit
|
||||
194.25.134.80/28 permit
|
||||
194.64.234.129 permit
|
||||
194.97.196.0/24 permit
|
||||
194.97.196.3 permit
|
||||
@@ -1957,8 +1993,6 @@
|
||||
208.71.42.212/31 permit
|
||||
208.71.42.214 permit
|
||||
208.72.249.240/29 permit
|
||||
208.74.204.5 permit
|
||||
208.74.204.9 permit
|
||||
208.75.120.0/22 permit
|
||||
208.76.62.0/24 permit
|
||||
208.76.63.0/24 permit
|
||||
@@ -2022,6 +2056,8 @@
|
||||
212.227.15.4 permit
|
||||
212.227.15.5 permit
|
||||
212.227.15.6 permit
|
||||
212.227.15.7 permit
|
||||
212.227.15.8 permit
|
||||
212.227.15.14 permit
|
||||
212.227.15.15 permit
|
||||
212.227.15.18 permit
|
||||
@@ -2038,16 +2074,30 @@
|
||||
212.227.15.53 permit
|
||||
212.227.15.54 permit
|
||||
212.227.15.55 permit
|
||||
212.227.17.1 permit
|
||||
212.227.17.2 permit
|
||||
212.227.17.7 permit
|
||||
212.227.17.11 permit
|
||||
212.227.17.12 permit
|
||||
212.227.17.16 permit
|
||||
212.227.17.17 permit
|
||||
212.227.17.18 permit
|
||||
212.227.17.19 permit
|
||||
212.227.17.20 permit
|
||||
212.227.17.21 permit
|
||||
212.227.17.22 permit
|
||||
212.227.17.26 permit
|
||||
212.227.17.27 permit
|
||||
212.227.17.28 permit
|
||||
212.227.17.29 permit
|
||||
212.227.126.206 permit
|
||||
212.227.126.207 permit
|
||||
212.227.126.208 permit
|
||||
212.227.126.209 permit
|
||||
212.227.126.220 permit
|
||||
212.227.126.221 permit
|
||||
212.227.126.222 permit
|
||||
212.227.126.223 permit
|
||||
212.227.126.224 permit
|
||||
212.227.126.225 permit
|
||||
212.227.126.226 permit
|
||||
@@ -2167,4 +2217,5 @@
|
||||
2620:119:50c0:207::/64 permit
|
||||
2620:119:50c0:207::215 permit
|
||||
2800:3f0:4000::/36 permit
|
||||
194.25.134.0/24 permit # t-online.de
|
||||
49.12.4.251 permit # checks.mailcow.email
|
||||
2a01:4f8:c17:7906::10 permit # checks.mailcow.email
|
||||
|
||||
@@ -133,7 +133,7 @@ try {
|
||||
error_log("ALIAS EXPANDER: http pipe: goto address " . $goto . " is an alias branch for " . $goto_branch . PHP_EOL);
|
||||
$goto_branch_array = explode(',', $goto_branch);
|
||||
} else {
|
||||
$stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain AND `active` AND '1'");
|
||||
$stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain AND `active` = '1'");
|
||||
$stmt->execute(array(':domain' => $parsed_goto['domain']));
|
||||
$goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['target_domain'];
|
||||
if ($goto_branch) {
|
||||
|
||||
@@ -56,7 +56,7 @@ function normalize_email($email) {
|
||||
$email = explode('@', $email);
|
||||
$email[0] = str_replace('.', '', $email[0]);
|
||||
$email = implode('@', $email);
|
||||
}
|
||||
}
|
||||
$gm_alt = "@googlemail.com";
|
||||
if (substr_compare($email, $gm_alt, -strlen($gm_alt)) == 0) {
|
||||
$email = explode('@', $email);
|
||||
@@ -114,7 +114,7 @@ function ucl_rcpts($object, $type) {
|
||||
$rcpt[] = str_replace('/', '\/', $row['address']);
|
||||
}
|
||||
// Aliases by alias domains
|
||||
$stmt = $pdo->prepare("SELECT CONCAT(`local_part`, '@', `alias_domain`.`alias_domain`) AS `alias` FROM `mailbox`
|
||||
$stmt = $pdo->prepare("SELECT CONCAT(`local_part`, '@', `alias_domain`.`alias_domain`) AS `alias` FROM `mailbox`
|
||||
LEFT OUTER JOIN `alias_domain` ON `mailbox`.`domain` = `alias_domain`.`target_domain`
|
||||
WHERE `mailbox`.`username` = :object");
|
||||
$stmt->execute(array(
|
||||
@@ -184,7 +184,7 @@ while ($row = array_shift($rows)) {
|
||||
rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;
|
||||
<?php
|
||||
}
|
||||
$stmt = $pdo->prepare("SELECT `option`, `value` FROM `filterconf`
|
||||
$stmt = $pdo->prepare("SELECT `option`, `value` FROM `filterconf`
|
||||
WHERE (`option` = 'highspamlevel' OR `option` = 'lowspamlevel')
|
||||
AND `object`= :object");
|
||||
$stmt->execute(array(':object' => $row['object']));
|
||||
@@ -468,4 +468,36 @@ while ($row = array_shift($rows)) {
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<?php
|
||||
// Start internal aliases
|
||||
|
||||
$stmt = $pdo->query("SELECT `id`, `address`, `domain` FROM `alias` WHERE `active` = '1' AND `internal` = '1'");
|
||||
$aliases = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
while ($alias = array_shift($aliases)) {
|
||||
// build allowed_domains regex and add target domain and alias domains
|
||||
$stmt = $pdo->prepare("SELECT `alias_domain` FROM `alias_domain` WHERE `active` = '1' AND `target_domain` = :target_domain");
|
||||
$stmt->execute(array(':target_domain' => $alias['domain']));
|
||||
$allowed_domains = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
$allowed_domains = array_map(function($item) {
|
||||
return str_replace('.', '\.', $item['alias_domain']);
|
||||
}, $allowed_domains);
|
||||
$allowed_domains[] = str_replace('.', '\.', $alias['domain']);
|
||||
$allowed_domains = implode('|', $allowed_domains);
|
||||
?>
|
||||
internal_alias_<?=$alias['id'];?> {
|
||||
priority = 10;
|
||||
rcpt = "<?=$alias['address'];?>";
|
||||
from = "/^((?!.*@(<?=$allowed_domains;?>)).)*$/";
|
||||
apply "default" {
|
||||
MAILCOW_INTERNAL_ALIAS = 9999.0;
|
||||
}
|
||||
symbols [
|
||||
"MAILCOW_INTERNAL_ALIAS"
|
||||
]
|
||||
}
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
}
|
||||
|
||||
@@ -454,12 +454,18 @@ rspamd_config:register_symbol({
|
||||
local redis_params = rspamd_parse_redis_server('dyn_rl')
|
||||
local rspamd_logger = require "rspamd_logger"
|
||||
local envfrom = task:get_from(1)
|
||||
local envrcpt = task:get_recipients(1) or {}
|
||||
local uname = task:get_user()
|
||||
if not envfrom or not uname then
|
||||
return false
|
||||
end
|
||||
|
||||
local uname = uname:lower()
|
||||
|
||||
if #envrcpt == 1 and envrcpt[1].addr:lower() == uname then
|
||||
return false
|
||||
end
|
||||
|
||||
local env_from_domain = envfrom[1].domain:lower() -- get smtp from domain in lower case
|
||||
|
||||
local function redis_cb_user(err, data)
|
||||
@@ -544,13 +550,13 @@ rspamd_config:register_symbol({
|
||||
-- determine newline type
|
||||
local function newline(task)
|
||||
local t = task:get_newlines_type()
|
||||
|
||||
|
||||
if t == 'cr' then
|
||||
return '\r'
|
||||
elseif t == 'lf' then
|
||||
return '\n'
|
||||
end
|
||||
|
||||
|
||||
return '\r\n'
|
||||
end
|
||||
-- retrieve footer
|
||||
@@ -558,7 +564,7 @@ rspamd_config:register_symbol({
|
||||
if err or type(data) ~= 'string' then
|
||||
rspamd_logger.infox(rspamd_config, "domain wide footer request for user %s returned invalid or empty data (\"%s\") or error (\"%s\")", uname, data, err)
|
||||
else
|
||||
|
||||
|
||||
-- parse json string
|
||||
local footer = cjson.decode(data)
|
||||
if not footer then
|
||||
@@ -607,26 +613,30 @@ rspamd_config:register_symbol({
|
||||
if footer.plain and footer.plain ~= "" then
|
||||
footer.plain = lua_util.jinja_template(footer.plain, replacements, true)
|
||||
end
|
||||
|
||||
|
||||
-- add footer
|
||||
local out = {}
|
||||
local rewrite = lua_mime.add_text_footer(task, footer.html, footer.plain) or {}
|
||||
|
||||
|
||||
local seen_cte
|
||||
local newline_s = newline(task)
|
||||
|
||||
|
||||
local function rewrite_ct_cb(name, hdr)
|
||||
if rewrite.need_rewrite_ct then
|
||||
if name:lower() == 'content-type' then
|
||||
local nct = string.format('%s: %s/%s; charset=utf-8',
|
||||
'Content-Type', rewrite.new_ct.type, rewrite.new_ct.subtype)
|
||||
-- include boundary if present
|
||||
local boundary_part = rewrite.new_ct.boundary and
|
||||
string.format('; boundary="%s"', rewrite.new_ct.boundary) or ''
|
||||
local nct = string.format('%s: %s/%s; charset=utf-8%s',
|
||||
'Content-Type', rewrite.new_ct.type, rewrite.new_ct.subtype, boundary_part)
|
||||
out[#out + 1] = nct
|
||||
-- update Content-Type header
|
||||
-- update Content-Type header (include boundary if present)
|
||||
task:set_milter_reply({
|
||||
remove_headers = {['Content-Type'] = 0},
|
||||
})
|
||||
task:set_milter_reply({
|
||||
add_headers = {['Content-Type'] = string.format('%s/%s; charset=utf-8', rewrite.new_ct.type, rewrite.new_ct.subtype)}
|
||||
add_headers = {['Content-Type'] = string.format('%s/%s; charset=utf-8%s',
|
||||
rewrite.new_ct.type, rewrite.new_ct.subtype, boundary_part)}
|
||||
})
|
||||
return
|
||||
elseif name:lower() == 'content-transfer-encoding' then
|
||||
@@ -645,16 +655,16 @@ rspamd_config:register_symbol({
|
||||
end
|
||||
out[#out + 1] = hdr.raw:gsub('\r?\n?$', '')
|
||||
end
|
||||
|
||||
|
||||
task:headers_foreach(rewrite_ct_cb, {full = true})
|
||||
|
||||
|
||||
if not seen_cte and rewrite.need_rewrite_ct then
|
||||
out[#out + 1] = string.format('%s: %s', 'Content-Transfer-Encoding', 'quoted-printable')
|
||||
end
|
||||
|
||||
|
||||
-- End of headers
|
||||
out[#out + 1] = newline_s
|
||||
|
||||
|
||||
if rewrite.out then
|
||||
for _,o in ipairs(rewrite.out) do
|
||||
out[#out + 1] = o
|
||||
|
||||
@@ -182,7 +182,7 @@ foreach (json_decode($rcpts, true) as $rcpt) {
|
||||
error_log("RCPT RESOVLER: http pipe: goto address " . $goto . " is an alias branch for " . $goto_branch . PHP_EOL);
|
||||
$goto_branch_array = explode(',', $goto_branch);
|
||||
} else {
|
||||
$stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain AND `active` AND '1'");
|
||||
$stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain AND `active` = '1'");
|
||||
$stmt->execute(array(':domain' => $parsed_goto['domain']));
|
||||
$goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['target_domain'];
|
||||
if ($goto_branch) {
|
||||
|
||||
@@ -167,7 +167,7 @@ foreach (json_decode($rcpts, true) as $rcpt) {
|
||||
error_log("RCPT RESOVLER: http pipe: goto address " . $goto . " is an alias branch for " . $goto_branch . PHP_EOL);
|
||||
$goto_branch_array = explode(',', $goto_branch);
|
||||
} else {
|
||||
$stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain AND `active` AND '1'");
|
||||
$stmt = $pdo->prepare("SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain AND `active` = '1'");
|
||||
$stmt->execute(array(':domain' => $parsed_goto['domain']));
|
||||
$goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['target_domain'];
|
||||
if ($goto_branch) {
|
||||
|
||||
@@ -7,6 +7,8 @@ if(file_exists('inc/vars.local.inc.php')) {
|
||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.inc.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.auth.inc.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/sessions.inc.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.mailbox.inc.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.ratelimit.inc.php';
|
||||
$default_autodiscover_config = $autodiscover_config;
|
||||
$autodiscover_config = array_merge($default_autodiscover_config, $autodiscover_config);
|
||||
|
||||
|
||||
@@ -26,23 +26,25 @@ if (is_array($alertbox_log_parser)) {
|
||||
|
||||
// map tfa details for twig
|
||||
$pending_tfa_authmechs = [];
|
||||
foreach($_SESSION['pending_tfa_methods'] as $authdata){
|
||||
$pending_tfa_authmechs[$authdata['authmech']] = false;
|
||||
}
|
||||
if (isset($pending_tfa_authmechs['webauthn'])) {
|
||||
$pending_tfa_authmechs['webauthn'] = true;
|
||||
}
|
||||
if (!isset($pending_tfa_authmechs['webauthn'])
|
||||
&& isset($pending_tfa_authmechs['yubi_otp'])) {
|
||||
$pending_tfa_authmechs['yubi_otp'] = true;
|
||||
}
|
||||
if (!isset($pending_tfa_authmechs['webauthn'])
|
||||
&& !isset($pending_tfa_authmechs['yubi_otp'])
|
||||
&& isset($pending_tfa_authmechs['totp'])) {
|
||||
$pending_tfa_authmechs['totp'] = true;
|
||||
}
|
||||
if (isset($pending_tfa_authmechs['u2f'])) {
|
||||
$pending_tfa_authmechs['u2f'] = true;
|
||||
if (array_key_exists('pending_tfa_methods', $_SESSION)) {
|
||||
foreach($_SESSION['pending_tfa_methods'] as $authdata){
|
||||
$pending_tfa_authmechs[$authdata['authmech']] = false;
|
||||
}
|
||||
if (isset($pending_tfa_authmechs['webauthn'])) {
|
||||
$pending_tfa_authmechs['webauthn'] = true;
|
||||
}
|
||||
if (!isset($pending_tfa_authmechs['webauthn'])
|
||||
&& isset($pending_tfa_authmechs['yubi_otp'])) {
|
||||
$pending_tfa_authmechs['yubi_otp'] = true;
|
||||
}
|
||||
if (!isset($pending_tfa_authmechs['webauthn'])
|
||||
&& !isset($pending_tfa_authmechs['yubi_otp'])
|
||||
&& isset($pending_tfa_authmechs['totp'])) {
|
||||
$pending_tfa_authmechs['totp'] = true;
|
||||
}
|
||||
if (isset($pending_tfa_authmechs['u2f'])) {
|
||||
$pending_tfa_authmechs['u2f'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
// globals
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
function app_passwd($_action, $_data = null) {
|
||||
global $pdo;
|
||||
global $lang;
|
||||
global $pdo;
|
||||
global $lang;
|
||||
$_data_log = $_data;
|
||||
!isset($_data_log['app_passwd']) ?: $_data_log['app_passwd'] = '*';
|
||||
!isset($_data_log['app_passwd2']) ?: $_data_log['app_passwd2'] = '*';
|
||||
@@ -43,20 +43,7 @@ function app_passwd($_action, $_data = null) {
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
|
||||
$_SESSION['return'][] = array(
|
||||
'type' => 'danger',
|
||||
'log' => array(__FUNCTION__, $_action, $_data_log),
|
||||
'msg' => 'password_complexity'
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if ($password != $password2) {
|
||||
$_SESSION['return'][] = array(
|
||||
'type' => 'danger',
|
||||
'log' => array(__FUNCTION__, $_action, $_data_log),
|
||||
'msg' => 'password_mismatch'
|
||||
);
|
||||
if (password_check($password, $password2) !== true) {
|
||||
return false;
|
||||
}
|
||||
$password_hashed = hash_password($password);
|
||||
@@ -88,15 +75,15 @@ function app_passwd($_action, $_data = null) {
|
||||
'log' => array(__FUNCTION__, $_action, $_data_log),
|
||||
'msg' => 'app_passwd_added'
|
||||
);
|
||||
break;
|
||||
break;
|
||||
case 'edit':
|
||||
$ids = (array)$_data['id'];
|
||||
foreach ($ids as $id) {
|
||||
$is_now = app_passwd('details', $id);
|
||||
if (!empty($is_now)) {
|
||||
$app_name = (!empty($_data['app_name'])) ? $_data['app_name'] : $is_now['name'];
|
||||
$password = (!empty($_data['password'])) ? $_data['password'] : null;
|
||||
$password2 = (!empty($_data['password2'])) ? $_data['password2'] : null;
|
||||
$password = (!empty($_data['app_passwd'])) ? $_data['app_passwd'] : null;
|
||||
$password2 = (!empty($_data['app_passwd2'])) ? $_data['app_passwd2'] : null;
|
||||
if (isset($_data['protocols'])) {
|
||||
$protocols = (array)$_data['protocols'];
|
||||
$imap_access = (in_array('imap_access', $protocols)) ? 1 : 0;
|
||||
@@ -126,20 +113,7 @@ function app_passwd($_action, $_data = null) {
|
||||
}
|
||||
$app_name = htmlspecialchars(trim($app_name));
|
||||
if (!empty($password) && !empty($password2)) {
|
||||
if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) {
|
||||
$_SESSION['return'][] = array(
|
||||
'type' => 'danger',
|
||||
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||
'msg' => 'password_complexity'
|
||||
);
|
||||
continue;
|
||||
}
|
||||
if ($password != $password2) {
|
||||
$_SESSION['return'][] = array(
|
||||
'type' => 'danger',
|
||||
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||
'msg' => 'password_mismatch'
|
||||
);
|
||||
if (password_check($password, $password2) !== true) {
|
||||
continue;
|
||||
}
|
||||
$password_hashed = hash_password($password);
|
||||
@@ -182,7 +156,7 @@ function app_passwd($_action, $_data = null) {
|
||||
'msg' => array('object_modified', htmlspecialchars(implode(', ', $ids)))
|
||||
);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case 'delete':
|
||||
$ids = (array)$_data['id'];
|
||||
foreach ($ids as $id) {
|
||||
@@ -213,19 +187,17 @@ function app_passwd($_action, $_data = null) {
|
||||
'msg' => array('app_passwd_removed', htmlspecialchars($id))
|
||||
);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case 'get':
|
||||
$app_passwds = array();
|
||||
$stmt = $pdo->prepare("SELECT `id`, `name` FROM `app_passwd` WHERE `mailbox` = :username");
|
||||
$stmt->execute(array(':username' => $username));
|
||||
$app_passwds = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
return $app_passwds;
|
||||
break;
|
||||
break;
|
||||
case 'details':
|
||||
$app_passwd_data = array();
|
||||
$stmt = $pdo->prepare("SELECT *
|
||||
FROM `app_passwd`
|
||||
WHERE `id` = :id");
|
||||
$stmt = $pdo->prepare("SELECT * FROM `app_passwd` WHERE `id` = :id");
|
||||
$stmt->execute(array(':id' => $_data));
|
||||
$app_passwd_data = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
if (empty($app_passwd_data)) {
|
||||
@@ -237,6 +209,6 @@ function app_passwd($_action, $_data = null) {
|
||||
}
|
||||
$app_passwd_data['name'] = htmlspecialchars(trim($app_passwd_data['name']));
|
||||
return $app_passwd_data;
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,6 +193,7 @@ function user_login($user, $pass, $extra = null){
|
||||
global $iam_settings;
|
||||
|
||||
$is_internal = $extra['is_internal'];
|
||||
$service = $extra['service'];
|
||||
|
||||
if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) {
|
||||
if (!$is_internal){
|
||||
@@ -235,6 +236,14 @@ function user_login($user, $pass, $extra = null){
|
||||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if (!empty($row)) {
|
||||
// check if user has access to service (imap, smtp, pop3, sieve) if service is set
|
||||
$row['attributes'] = json_decode($row['attributes'], true);
|
||||
if (isset($service)) {
|
||||
$key = strtolower($service) . "_access";
|
||||
if (isset($row['attributes'][$key]) && $row['attributes'][$key] != '1') {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -242,7 +251,14 @@ function user_login($user, $pass, $extra = null){
|
||||
return false;
|
||||
}
|
||||
|
||||
// check if user has access to service (imap, smtp, pop3, sieve) if service is set
|
||||
$row['attributes'] = json_decode($row['attributes'], true);
|
||||
if (isset($service)) {
|
||||
$key = strtolower($service) . "_access";
|
||||
if (isset($row['attributes'][$key]) && $row['attributes'][$key] != '1') {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
switch ($row['authsource']) {
|
||||
case 'keycloak':
|
||||
// user authsource is keycloak, try using via rest flow
|
||||
|
||||
@@ -293,7 +293,7 @@ function customize($_action, $_item, $_data = null) {
|
||||
}
|
||||
|
||||
if (empty($app_links)){
|
||||
return false;
|
||||
return [];
|
||||
}
|
||||
|
||||
// convert from old style
|
||||
@@ -325,8 +325,10 @@ function customize($_action, $_item, $_data = null) {
|
||||
break;
|
||||
case 'ui_texts':
|
||||
try {
|
||||
$data['title_name'] = ($title_name = $redis->get('TITLE_NAME')) ? $title_name : 'mailcow UI';
|
||||
$data['main_name'] = ($main_name = $redis->get('MAIN_NAME')) ? $main_name : 'mailcow UI';
|
||||
$mailcow_hostname = strtolower(getenv("MAILCOW_HOSTNAME"));
|
||||
|
||||
$data['title_name'] = ($title_name = $redis->get('TITLE_NAME')) ? $title_name : "$mailcow_hostname - mail UI";
|
||||
$data['main_name'] = ($main_name = $redis->get('MAIN_NAME')) ? $main_name : "$mailcow_hostname - mail UI";
|
||||
$data['apps_name'] = ($apps_name = $redis->get('APPS_NAME')) ? $apps_name : $lang['header']['apps'];
|
||||
$data['help_text'] = ($help_text = $redis->get('HELP_TEXT')) ? $help_text : false;
|
||||
if (!empty($redis->get('UI_IMPRESS'))) {
|
||||
|
||||
@@ -1006,7 +1006,7 @@ function edit_user_account($_data) {
|
||||
update_sogo_static_view();
|
||||
}
|
||||
// edit password recovery email
|
||||
elseif (isset($pw_recovery_email)) {
|
||||
elseif (!empty($password_old) && isset($pw_recovery_email)) {
|
||||
if (!isset($_SESSION['acl']['pw_reset']) || $_SESSION['acl']['pw_reset'] != "1" ) {
|
||||
$_SESSION['return'][] = array(
|
||||
'type' => 'danger',
|
||||
@@ -1016,6 +1016,21 @@ function edit_user_account($_data) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$stmt = $pdo->prepare("SELECT `password` FROM `mailbox`
|
||||
WHERE `kind` NOT REGEXP 'location|thing|group'
|
||||
AND `username` = :user AND authsource = 'mailcow'");
|
||||
$stmt->execute(array(':user' => $username));
|
||||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if (!verify_hash($row['password'], $password_old)) {
|
||||
$_SESSION['return'][] = array(
|
||||
'type' => 'danger',
|
||||
'log' => array(__FUNCTION__, $_data_log),
|
||||
'msg' => 'access_denied'
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
$pw_recovery_email = (!filter_var($pw_recovery_email, FILTER_VALIDATE_EMAIL)) ? '' : $pw_recovery_email;
|
||||
$stmt = $pdo->prepare("UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.recovery_email', :recovery_email)
|
||||
WHERE `username` = :username AND authsource = 'mailcow'");
|
||||
@@ -1107,11 +1122,21 @@ function user_get_alias_details($username) {
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
function is_valid_domain_name($domain_name) {
|
||||
function is_valid_domain_name($domain_name, $options = array()) {
|
||||
if (empty($domain_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Convert domain name to ASCII for validation
|
||||
$domain_name = idn_to_ascii($domain_name, 0, INTL_IDNA_VARIANT_UTS46);
|
||||
|
||||
if (isset($options['allow_wildcard']) && $options['allow_wildcard'] == true) {
|
||||
// Remove '*.' if wildcard subdomains are allowed
|
||||
if (strpos($domain_name, '*.') === 0) {
|
||||
$domain_name = substr($domain_name, 2);
|
||||
}
|
||||
}
|
||||
|
||||
return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name)
|
||||
&& preg_match("/^.{1,253}$/", $domain_name)
|
||||
&& preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name));
|
||||
@@ -2211,7 +2236,7 @@ function cors($action, $data = null) {
|
||||
$cors_settings['allowed_origins'] = $allowed_origins[0];
|
||||
if (in_array('*', $allowed_origins)){
|
||||
$cors_settings['allowed_origins'] = '*';
|
||||
} else if (in_array($_SERVER['HTTP_ORIGIN'], $allowed_origins)) {
|
||||
} else if (array_key_exists('HTTP_ORIGIN', $_SERVER) && in_array($_SERVER['HTTP_ORIGIN'], $allowed_origins)) {
|
||||
$cors_settings['allowed_origins'] = $_SERVER['HTTP_ORIGIN'];
|
||||
}
|
||||
// always allow OPTIONS for preflight request
|
||||
|
||||
@@ -684,15 +684,16 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
return true;
|
||||
break;
|
||||
case 'alias':
|
||||
$addresses = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['address']));
|
||||
$gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['goto']));
|
||||
$active = intval($_data['active']);
|
||||
$sogo_visible = intval($_data['sogo_visible']);
|
||||
$goto_null = intval($_data['goto_null']);
|
||||
$goto_spam = intval($_data['goto_spam']);
|
||||
$goto_ham = intval($_data['goto_ham']);
|
||||
$addresses = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['address']));
|
||||
$gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['goto']));
|
||||
$internal = intval($_data['internal']);
|
||||
$active = intval($_data['active']);
|
||||
$sogo_visible = intval($_data['sogo_visible']);
|
||||
$goto_null = intval($_data['goto_null']);
|
||||
$goto_spam = intval($_data['goto_spam']);
|
||||
$goto_ham = intval($_data['goto_ham']);
|
||||
$private_comment = $_data['private_comment'];
|
||||
$public_comment = $_data['public_comment'];
|
||||
$public_comment = $_data['public_comment'];
|
||||
if (strlen($private_comment) > 160 | strlen($public_comment) > 160){
|
||||
$_SESSION['return'][] = array(
|
||||
'type' => 'danger',
|
||||
@@ -842,8 +843,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
);
|
||||
continue;
|
||||
}
|
||||
$stmt = $pdo->prepare("INSERT INTO `alias` (`address`, `public_comment`, `private_comment`, `goto`, `domain`, `sogo_visible`, `active`)
|
||||
VALUES (:address, :public_comment, :private_comment, :goto, :domain, :sogo_visible, :active)");
|
||||
$stmt = $pdo->prepare("INSERT INTO `alias` (`address`, `public_comment`, `private_comment`, `goto`, `domain`, `sogo_visible`, `internal`, `active`)
|
||||
VALUES (:address, :public_comment, :private_comment, :goto, :domain, :sogo_visible, :internal, :active)");
|
||||
if (!filter_var($address, FILTER_VALIDATE_EMAIL) === true) {
|
||||
$stmt->execute(array(
|
||||
':address' => '@'.$domain,
|
||||
@@ -853,6 +854,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
':goto' => $goto,
|
||||
':domain' => $domain,
|
||||
':sogo_visible' => $sogo_visible,
|
||||
':internal' => $internal,
|
||||
':active' => $active
|
||||
));
|
||||
}
|
||||
@@ -864,6 +866,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
':goto' => $goto,
|
||||
':domain' => $domain,
|
||||
':sogo_visible' => $sogo_visible,
|
||||
':internal' => $internal,
|
||||
':active' => $active
|
||||
));
|
||||
}
|
||||
@@ -1443,7 +1446,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
}
|
||||
foreach ($mx as $index => $mx_domain) {
|
||||
$mx_domain = idn_to_ascii(strtolower(trim($mx_domain)), 0, INTL_IDNA_VARIANT_UTS46);
|
||||
if (!is_valid_domain_name($mx_domain)) {
|
||||
if (!is_valid_domain_name($mx_domain, array('allow_wildcard' => true))) {
|
||||
$_SESSION['return'][] = array(
|
||||
'type' => 'danger',
|
||||
'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),
|
||||
@@ -2481,6 +2484,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
foreach ($ids as $id) {
|
||||
$is_now = mailbox('get', 'alias_details', $id);
|
||||
if (!empty($is_now)) {
|
||||
$internal = (isset($_data['internal'])) ? intval($_data['internal']) : $is_now['internal'];
|
||||
$active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];
|
||||
$sogo_visible = (isset($_data['sogo_visible'])) ? intval($_data['sogo_visible']) : $is_now['sogo_visible'];
|
||||
$goto_null = (isset($_data['goto_null'])) ? intval($_data['goto_null']) : 0;
|
||||
@@ -2666,6 +2670,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
`domain` = :domain,
|
||||
`goto` = :goto,
|
||||
`sogo_visible`= :sogo_visible,
|
||||
`internal`= :internal,
|
||||
`active`= :active
|
||||
WHERE `id` = :id");
|
||||
$stmt->execute(array(
|
||||
@@ -2675,6 +2680,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
':domain' => $domain,
|
||||
':goto' => $goto,
|
||||
':sogo_visible' => $sogo_visible,
|
||||
':internal' => $internal,
|
||||
':active' => $active,
|
||||
':id' => $is_now['id']
|
||||
));
|
||||
@@ -3891,7 +3897,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
foreach ($mx as $index => $mx_domain) {
|
||||
$mx_domain = idn_to_ascii(strtolower(trim($mx_domain)), 0, INTL_IDNA_VARIANT_UTS46);
|
||||
$invalid_mx = false;
|
||||
if (!is_valid_domain_name($mx_domain)) {
|
||||
if (!is_valid_domain_name($mx_domain, array('allow_wildcard' => true))) {
|
||||
$invalid_mx = $mx_domain;
|
||||
break;
|
||||
}
|
||||
@@ -4700,6 +4706,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
`address`,
|
||||
`public_comment`,
|
||||
`private_comment`,
|
||||
`internal`,
|
||||
`active`,
|
||||
`sogo_visible`,
|
||||
`created`,
|
||||
@@ -4730,6 +4737,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||
$aliasdata['goto'] = $row['goto'];
|
||||
$aliasdata['address'] = $row['address'];
|
||||
(!filter_var($aliasdata['address'], FILTER_VALIDATE_EMAIL)) ? $aliasdata['is_catch_all'] = 1 : $aliasdata['is_catch_all'] = 0;
|
||||
$aliasdata['internal'] = $row['internal'];
|
||||
$aliasdata['active'] = $row['active'];
|
||||
$aliasdata['active_int'] = $row['active'];
|
||||
$aliasdata['sogo_visible'] = $row['sogo_visible'];
|
||||
|
||||
@@ -62,7 +62,11 @@ if ($app_links_processed){
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Workaround to get text with <br> straight to twig.
|
||||
// Using "nl2br" doesn't work with Twig as it would escape everything by default.
|
||||
if (isset($UI_TEXTS["ui_footer"])) {
|
||||
$UI_TEXTS["ui_footer"] = nl2br($UI_TEXTS["ui_footer"]);
|
||||
}
|
||||
|
||||
$globalVariables = [
|
||||
'mailcow_hostname' => getenv('MAILCOW_HOSTNAME'),
|
||||
|
||||
@@ -4,7 +4,7 @@ function init_db_schema()
|
||||
try {
|
||||
global $pdo;
|
||||
|
||||
$db_version = "19082025_1436";
|
||||
$db_version = "07102025_1015";
|
||||
|
||||
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
|
||||
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
||||
@@ -184,6 +184,7 @@ function init_db_schema()
|
||||
"private_comment" => "TEXT",
|
||||
"public_comment" => "TEXT",
|
||||
"sogo_visible" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
||||
"internal" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
||||
"active" => "TINYINT(1) NOT NULL DEFAULT '1'"
|
||||
),
|
||||
"keys" => array(
|
||||
@@ -1336,6 +1337,14 @@ function init_db_schema()
|
||||
$pdo->query($create);
|
||||
}
|
||||
|
||||
// Clear old app_passwd log entries
|
||||
$pdo->exec("DELETE FROM logs
|
||||
WHERE role != 'unauthenticated'
|
||||
AND JSON_EXTRACT(`call`, '$[0]') = 'app_passwd'
|
||||
AND JSON_EXTRACT(`call`, '$[1]') = 'edit'
|
||||
AND (JSON_CONTAINS_PATH(`call`, 'one', '$[2].password')
|
||||
OR JSON_CONTAINS_PATH(`call`, 'one', '$[2].password2'));");
|
||||
|
||||
// Mitigate imapsync argument injection issue
|
||||
$pdo->query("UPDATE `imapsync` SET `custom_params` = ''
|
||||
WHERE `custom_params` LIKE '%pipemess%'
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
<?php
|
||||
// Start session
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) {
|
||||
session_name($SESSION_NAME);
|
||||
ini_set("session.cookie_httponly", 1);
|
||||
ini_set("session.cookie_samesite", $SESSION_SAMESITE_POLICY);
|
||||
ini_set('session.gc_maxlifetime', $SESSION_LIFETIME);
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ if (isset($_POST["verify_tfa_login"])) {
|
||||
intval($user_details['attributes']['force_pw_update']) != 1 &&
|
||||
getenv('SKIP_SOGO') != "y" &&
|
||||
!$is_dual) {
|
||||
header("Location: /SOGo/so/{$_SESSION['mailcow_cc_username']}");
|
||||
header("Location: /SOGo/so/");
|
||||
die();
|
||||
} else {
|
||||
header("Location: /user");
|
||||
@@ -146,7 +146,7 @@ if (isset($_POST["login_user"]) && isset($_POST["pass_user"])) {
|
||||
intval($user_details['attributes']['force_pw_update']) != 1 &&
|
||||
getenv('SKIP_SOGO') != "y" &&
|
||||
!$is_dual) {
|
||||
header("Location: /SOGo/so/{$login_user}");
|
||||
header("Location: /SOGo/so/");
|
||||
die();
|
||||
} else {
|
||||
header("Location: /user");
|
||||
|
||||
@@ -153,6 +153,13 @@ $LOG_PAGINATION_SIZE = 50;
|
||||
// Session lifetime in seconds
|
||||
$SESSION_LIFETIME = 10800;
|
||||
|
||||
// Session SameSite Policy
|
||||
// Use "None", "Lax" or "Strict"
|
||||
$SESSION_SAMESITE_POLICY = "Lax";
|
||||
|
||||
// Name of the session cookie
|
||||
$SESSION_NAME = "MCSESSID";
|
||||
|
||||
// Label for OTP devices
|
||||
$OTP_LABEL = "mailcow UI";
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == '
|
||||
$user_details = mailbox("get", "mailbox_details", $_SESSION['mailcow_cc_username']);
|
||||
$is_dual = (!empty($_SESSION["dual-login"]["username"])) ? true : false;
|
||||
if (intval($user_details['attributes']['sogo_access']) == 1 && !$is_dual && getenv('SKIP_SOGO') != "y") {
|
||||
header("Location: /SOGo/so/{$_SESSION['mailcow_cc_username']}");
|
||||
header("Location: /SOGo/so/");
|
||||
} else {
|
||||
header("Location: /user");
|
||||
}
|
||||
|
||||
@@ -22,8 +22,8 @@ $(document).ready(function() {
|
||||
$.notify({message: msg},{z_index: 20000, delay: auto_hide, type: type,placement: {from: "bottom",align: "right"},animate: {enter: 'animated fadeInUp',exit: 'animated fadeOutDown'}});
|
||||
}
|
||||
|
||||
$(".generate_password").click(async function( event ) {
|
||||
try {
|
||||
$(".generate_password").click(async function( event ) {
|
||||
try {
|
||||
var password_policy = await window.fetch("/api/v1/get/passwordpolicy", { method:'GET', cache:'no-cache' });
|
||||
var password_policy = await password_policy.json();
|
||||
random_passwd_length = password_policy.length;
|
||||
@@ -48,7 +48,11 @@ $(document).ready(function() {
|
||||
})
|
||||
}
|
||||
$(".rot-enc").html(function(){
|
||||
return str_rot13($(this).html())
|
||||
footer_html = $(this).html();
|
||||
footer_html = footer_html.replace(/</g, '<').replace(/>/g, '>')
|
||||
.replace(/&/g, '&').replace(/&nzc;/g, '&')
|
||||
.replace(/"/g, '"').replace(/'/g, "'");
|
||||
return str_rot13(footer_html)
|
||||
});
|
||||
// https://stackoverflow.com/questions/4399005/implementing-jquerys-shake-effect-with-animate
|
||||
function shake(div,interval,distance,times) {
|
||||
@@ -125,7 +129,7 @@ $(document).ready(function() {
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
|
||||
// responsive tabs, scroll to opened tab
|
||||
$(document).on("shown.bs.collapse shown.bs.tab", function (e) {
|
||||
var target = $(e.target);
|
||||
@@ -409,4 +413,4 @@ function copyToClipboard(id) {
|
||||
// only works with https connections
|
||||
navigator.clipboard.writeText(copyText.value);
|
||||
mailcow_alert_box(lang.copy_to_clipboard, "success");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -715,7 +715,6 @@ jQuery(function($){
|
||||
$('.app_hide').off('change');
|
||||
$('.app_hide').on('change', function (e) {
|
||||
var value = $(this).is(':checked') ? '1' : '0';
|
||||
console.log(value)
|
||||
$(this).parent().children(':first-child').val(value);
|
||||
})
|
||||
}
|
||||
|
||||
@@ -47,8 +47,6 @@ $(document).ready(function() {
|
||||
window.fetch("/api/v1/get/status/host/ip", { method:'GET', cache:'no-cache' }).then(function(response) {
|
||||
return response.json();
|
||||
}).then(function(data) {
|
||||
console.log(data);
|
||||
|
||||
// display host ips
|
||||
if (data.ipv4)
|
||||
$("#host_ipv4").text(data.ipv4);
|
||||
@@ -1007,7 +1005,7 @@ jQuery(function($){
|
||||
"data-order": cellData.sortBy,
|
||||
"data-sort": cellData.sortBy
|
||||
});
|
||||
},
|
||||
},
|
||||
render: function (data) {
|
||||
return data.value;
|
||||
}
|
||||
@@ -1032,7 +1030,7 @@ jQuery(function($){
|
||||
"data-order": cellData.sortBy,
|
||||
"data-sort": cellData.sortBy
|
||||
});
|
||||
},
|
||||
},
|
||||
render: function (data) {
|
||||
return data.value;
|
||||
}
|
||||
@@ -1348,8 +1346,6 @@ function update_stats(timeout=5){
|
||||
window.fetch("/api/v1/get/status/host", {method:'GET',cache:'no-cache'}).then(function(response) {
|
||||
return response.json();
|
||||
}).then(function(data) {
|
||||
console.log(data);
|
||||
|
||||
if (data){
|
||||
// display table data
|
||||
$("#host_date").text(data.system_time);
|
||||
@@ -1399,8 +1395,6 @@ function update_container_stats(timeout=5){
|
||||
var diskIOCtx = Chart.getChart(container + "_DiskIOChart");
|
||||
var netIOCtx = Chart.getChart(container + "_NetIOChart");
|
||||
|
||||
console.log(container);
|
||||
console.log(data);
|
||||
prev_stats = null;
|
||||
if (data.length >= 2){
|
||||
prev_stats = data[data.length -2];
|
||||
|
||||
@@ -66,7 +66,6 @@ $(document).ready(function() {
|
||||
// load tags
|
||||
if ($('#tags').length){
|
||||
var tagsEl = $('#tags').parent().find('.tag-values')[0];
|
||||
console.log($(tagsEl).val())
|
||||
var tags = JSON.parse($(tagsEl).val());
|
||||
$(tagsEl).val("");
|
||||
|
||||
|
||||
@@ -1949,11 +1949,6 @@ jQuery(function($){
|
||||
defaultContent: '',
|
||||
responsivePriority: 5,
|
||||
},
|
||||
{
|
||||
title: lang.bcc_destinations,
|
||||
data: 'bcc_dest',
|
||||
defaultContent: ''
|
||||
},
|
||||
{
|
||||
title: lang.sogo_visible,
|
||||
data: 'sogo_visible',
|
||||
@@ -1972,6 +1967,15 @@ jQuery(function($){
|
||||
data: 'private_comment',
|
||||
defaultContent: ''
|
||||
},
|
||||
{
|
||||
title: lang.internal,
|
||||
data: 'internal',
|
||||
defaultContent: '',
|
||||
responsivePriority: 6,
|
||||
render: function (data, type) {
|
||||
return 1==data?'<i class="bi bi-check-lg"><span class="sorting-value">1</span></i>':0==data&&'<i class="bi bi-x-lg"><span class="sorting-value">0</span></i>';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: lang.active,
|
||||
data: 'active',
|
||||
|
||||
@@ -97,7 +97,7 @@ jQuery(function($){
|
||||
var datetime = new Date(item.datetime.replace(/-/g, "/"));
|
||||
var local_datetime = datetime.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});
|
||||
var service = '<div class="badge bg-secondary">' + item.service.toUpperCase() + '</div>';
|
||||
var app_password = item.app_password ? ' <a href="/edit/app-passwd/' + item.app_password + '"><i class="bi bi-app-indicator"></i> ' + escapeHtml(item.app_password_name || "App") + '</a>' : '';
|
||||
var app_password = item.app_password ? ' <a href="/edit/app-passwd/' + item.app_password + '"><i class="bi bi-key-fill"></i><span class="ms-1">' + escapeHtml(item.app_password_name || "App") + '</span></a>' : '';
|
||||
var real_rip = item.real_rip.startsWith("Web") ? item.real_rip : '<a href="https://bgp.tools/prefix/' + item.real_rip + '" target="_blank">' + item.real_rip + "</a>";
|
||||
var ip_location = item.location ? ' <span class="flag-icon flag-icon-' + item.location.toLowerCase() + '"></span>' : '';
|
||||
var ip_data = real_rip + ip_location + app_password;
|
||||
@@ -105,10 +105,9 @@ jQuery(function($){
|
||||
$(".last-sasl-login").append(`
|
||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
||||
<div class="ms-2 me-auto d-flex flex-column">
|
||||
<div class="fw-bold">` + real_rip + `</div>
|
||||
<small class="fst-italic mt-2">` + service + ` ` + local_datetime + `</small>
|
||||
<div class="fw-bold">` + ip_location + real_rip + `</div>
|
||||
<small class="fst-italic mt-2">` + service + ` ` + local_datetime + `</small>` + app_password + `
|
||||
</div>
|
||||
<span>` + ip_location + `</span>
|
||||
</li>
|
||||
`);
|
||||
})
|
||||
@@ -169,7 +168,6 @@ jQuery(function($){
|
||||
type: "GET",
|
||||
url: "/api/v1/get/time_limited_aliases",
|
||||
dataSrc: function(data){
|
||||
console.log(data);
|
||||
$.each(data, function (i, item) {
|
||||
if (acl_data.spam_alias === 1) {
|
||||
item.action = '<div class="btn-group">' +
|
||||
@@ -262,7 +260,6 @@ jQuery(function($){
|
||||
type: "GET",
|
||||
url: '/api/v1/get/syncjobs/' + encodeURIComponent(mailcow_cc_username) + '/no_log',
|
||||
dataSrc: function(data){
|
||||
console.log(data);
|
||||
$.each(data, function (i, item) {
|
||||
item.user1 = escapeHtml(item.user1);
|
||||
item.log = '<a href="#syncjobLogModal" data-bs-toggle="modal" data-syncjob-id="' + item.id + '">' + lang.open_logs + '</a>'
|
||||
@@ -418,7 +415,6 @@ jQuery(function($){
|
||||
type: "GET",
|
||||
url: '/api/v1/get/app-passwd/all',
|
||||
dataSrc: function(data){
|
||||
console.log(data);
|
||||
$.each(data, function (i, item) {
|
||||
item.name = escapeHtml(item.name)
|
||||
item.protocols = []
|
||||
@@ -514,7 +510,6 @@ jQuery(function($){
|
||||
type: "GET",
|
||||
url: '/api/v1/get/policy_wl_mailbox',
|
||||
dataSrc: function(data){
|
||||
console.log(data);
|
||||
$.each(data, function (i, item) {
|
||||
if (validateEmail(item.object)) {
|
||||
item.chkbox = '<input type="checkbox" class="form-check-input" data-id="policy_wl_mailbox" name="multi_select" value="' + item.prefid + '" />';
|
||||
@@ -585,7 +580,6 @@ jQuery(function($){
|
||||
type: "GET",
|
||||
url: '/api/v1/get/policy_bl_mailbox',
|
||||
dataSrc: function(data){
|
||||
console.log(data);
|
||||
$.each(data, function (i, item) {
|
||||
if (validateEmail(item.object)) {
|
||||
item.chkbox = '<input type="checkbox" class="form-check-input" data-id="policy_bl_mailbox" name="multi_select" value="' + item.prefid + '" />';
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"sogo_access": "Správa přístupu do SOGo",
|
||||
"sogo_profile_reset": "Resetování profilu SOGo",
|
||||
"spam_alias": "Dočasné aliasy",
|
||||
"spam_policy": "Blacklist/Whitelist",
|
||||
"spam_policy": "Denylist/Allowlist",
|
||||
"spam_score": "Skóre spamu",
|
||||
"syncjobs": "Synchronizační úlohy",
|
||||
"tls_policy": "Pravidla TLS",
|
||||
@@ -109,7 +109,9 @@
|
||||
"validate": "Ověřit",
|
||||
"validation_success": "Úspěšně ověřeno",
|
||||
"tags": "Štítky",
|
||||
"dry": "Simulovat synchronizaci"
|
||||
"dry": "Simulovat synchronizaci",
|
||||
"internal": "Interní",
|
||||
"internal_info": "Interní aliasy jsou přístupné jen z vlastních domén nebo jejich aliasů."
|
||||
},
|
||||
"admin": {
|
||||
"access": "Přístupy",
|
||||
@@ -303,7 +305,7 @@
|
||||
"rspamd_global_filters": "Mapa globálních filtrů",
|
||||
"rspamd_global_filters_agree": "Budu opatrný!",
|
||||
"rspamd_global_filters_info": "Mapa globálních filtrů obsahuje jiné globální black- a whitelisty.",
|
||||
"rspamd_global_filters_regex": "Názvy jsou dostatečným vysvětlením. Musí obsahovat jen platné regulární výrazy ve formátu \"/vyraz/parametry\" (e.g. <code>/.+@domena\\.tld/i</code>).<br>\r\n Každý výraz bude podroben základní kontrole, přesto je možné Rspamd 'rozbít', nebude-li syntax zcela korektní.<br>\r\n Rspamd se pokusí načíst mapu po každé změně. V případě potíží, <a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">restartujte Rspamd</a>, aby se konfigurace načetla explicitně.",
|
||||
"rspamd_global_filters_regex": "Názvy stačí k vysvětlení. Položky musejí obsahovat jen platné regulární výrazy ve tvaru \"/vyraz/parametry\" (e.g. <code>/.+@domena\\.tld/i</code>).<br>\n Každý výraz bude podroben základní kontrole, přesto je možné Rspamd 'rozbít', nebude-li syntax zcela korektní.<br>\n Rspamd se pokusí po každé změně načíst mapu znovu. V případě potíží <a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">restartujte Rspamd</a>, aby se konfigurace načetla explicitně.",
|
||||
"rspamd_settings_map": "Nastavení Rspamd",
|
||||
"sal_level": "Úroveň 'Moo'",
|
||||
"save": "Uložit změny",
|
||||
@@ -407,7 +409,9 @@
|
||||
"iam_extra_permission": "Aby vše fungovalo, musí mít mailcow klient v Keycloaku nastavený <code>servisní účet</code> a povolení <code>view-users</code>.",
|
||||
"iam_host": "Hostitel",
|
||||
"iam_host_info": "Zadejte jeden či více hostitelů, oddělte čárkou.",
|
||||
"iam_import_users": "Importovat uživatele"
|
||||
"iam_import_users": "Importovat uživatele",
|
||||
"iam_auth_flow": "Proces autentizace",
|
||||
"needs_restart": "potřebuje restart"
|
||||
},
|
||||
"danger": {
|
||||
"access_denied": "Přístup odepřen nebo jsou neplatná data ve formuláři",
|
||||
@@ -548,7 +552,11 @@
|
||||
"img_size_exceeded": "Obrázek má větší než povolenou velikost souboru",
|
||||
"invalid_reset_token": "Neplatný resetovací token",
|
||||
"required_data_missing": "Chybí potřebný údaj %s",
|
||||
"reset_token_limit_exceeded": "Byl překročen limit na reset tokeny. Zkuste to později."
|
||||
"reset_token_limit_exceeded": "Byl překročen limit na reset tokeny. Zkuste to později.",
|
||||
"max_age_invalid": "Maximální životnost %s není platná",
|
||||
"mode_invalid": "Mód %s není platný",
|
||||
"mx_invalid": "Záznam MX %s není platný",
|
||||
"version_invalid": "Verze %s není platná"
|
||||
},
|
||||
"datatables": {
|
||||
"emptyTable": "Tabulka neobsahuje žádná data",
|
||||
@@ -759,7 +767,20 @@
|
||||
"mailbox_rename_warning": "DŮLEŽITÉ! Vytvořte si zálohu schránky, než ji přejmenujete.",
|
||||
"mailbox_rename_alias": "Automaticky vytvořit alias",
|
||||
"mailbox_rename_title": "Nový název zdejší schránky",
|
||||
"pushover": "Pushover"
|
||||
"pushover": "Pushover",
|
||||
"internal": "Interní",
|
||||
"internal_info": "Interní aliasy jsou přístupné jen z vlastních domén nebo jejich aliasů.",
|
||||
"mta_sts": "MTA-STS",
|
||||
"mta_sts_info": "<a href='https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#SMTP_MTA_Strict_Transport_Security' target='_blank'>MTA-STS</a> je standard, jenž říká poštovním serverům, aby komunikovaly pomocí TLS s platnými certifikáty. <br>Používá se, pokud není k dispozici <a target='_blank' href='https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities'>DANE</a>, např. chybí-li či není podporováno DNSSEC.<br><b>Pozn.</b>: Podporuje-li přijímající doména DANE a DNSSEC, bude <b>vždy</b> použito DANE; MTA-STS zůstane jako plán B.",
|
||||
"mta_sts_version": "Verze",
|
||||
"mta_sts_version_info": "Určuje verzi standardu MTA-STS – zatím je podporována jen <code>STSv1</code>.",
|
||||
"mta_sts_mode": "Mód",
|
||||
"mta_sts_mode_info": "K dispozici jsou tři módy:<ul><li><em>testing</em> – pravidlo se jen sleduje, porušení je bez následků.</li><li><em>enforce</em> – pravidlo je důsledně dodržováno, spojení bez platného TLS jsou odmítána.</li><li><em>none</em> – pravidlo je zveřejněno, ale neuplatňuje se.</li></ul>",
|
||||
"mta_sts_max_age": "Maximální životnost",
|
||||
"mta_sts_max_age_info": "Doba v sekundách, po niž poštovní servery mohou toho pravidlo držet v mezipaměti bez nutnosti obnovení.",
|
||||
"mta_sts_mx": "Server MX",
|
||||
"mta_sts_mx_info": "Dovoluje odesílání jen výslovně vypsaným poštovním serverům; odesílající server kontroluje, že server MX určený v DNS odpovídá pravidlu, a povolí doručení jen s platným certifikátem TLS (chrání přes útokem typu MITM).",
|
||||
"mta_sts_mx_notice": "Lze zadat více serverů MX (oddělte čárkou)."
|
||||
},
|
||||
"fido2": {
|
||||
"confirm": "Potvrdit",
|
||||
@@ -829,7 +850,8 @@
|
||||
"login_admintext": "Přihlášení správce",
|
||||
"login_user": "Přihlášení uživatele",
|
||||
"login_dadmin": "Přihlášení správce domény",
|
||||
"login_admin": "Přihlášení správce"
|
||||
"login_admin": "Přihlášení správce",
|
||||
"email": "Mailová adresa"
|
||||
},
|
||||
"mailbox": {
|
||||
"action": "Akce",
|
||||
@@ -861,7 +883,7 @@
|
||||
"bcc": "BCC",
|
||||
"bcc_destination": "Cíl kopie",
|
||||
"bcc_destinations": "Cíl kopií",
|
||||
"bcc_info": "Skrytá kopie (mapa BCC) se používá pro tiché předávání kopií všech zpráv na jinou adresu. Mapa příjemců se použije, funguje-li je místní cíl jako adresát zprávy. Totéž platí pro mapy odesílatelů.\nMístní cíl se nedozví, selže-li doručení na cíl BCC.",
|
||||
"bcc_info": "<br/>Skrytá kopie (mapa BCC) se používá pro tiché předávání kopií všech zpráv na jinou adresu. Mapa příjemců se použije, funguje-li je místní cíl jako adresát zprávy. Totéž platí pro mapy odesílatelů.<br/>\n Místní cíl se nedozví, selže-li doručení na cíl BCC.",
|
||||
"bcc_local_dest": "Týká se",
|
||||
"bcc_map": "Skrytá kopie",
|
||||
"bcc_map_type": "Typ skryté kopie",
|
||||
@@ -1005,7 +1027,8 @@
|
||||
"weekly": "Každý týden",
|
||||
"yes": "✓",
|
||||
"relay_unknown": "Předávání neexistujících schránek",
|
||||
"iam": "Poskytovatel identity"
|
||||
"iam": "Poskytovatel identity",
|
||||
"internal": "Interní"
|
||||
},
|
||||
"oauth2": {
|
||||
"access_denied": "K udělení přístupu se přihlašte jako vlastník mailové schránky.",
|
||||
@@ -1082,7 +1105,8 @@
|
||||
"hold_mail_legend": "Podrží vybrané e-maily. (Zabrání dalším pokusům o doručení)",
|
||||
"show_message": "Zobrazit zprávu",
|
||||
"unhold_mail": "Uvolnit",
|
||||
"unhold_mail_legend": "Uvolnit vybrané e-maily k doručení. (Pouze v případě předchozího podržení)"
|
||||
"unhold_mail_legend": "Uvolnit vybrané e-maily k doručení. (Pouze v případě předchozího podržení)",
|
||||
"unban": "odblokovat"
|
||||
},
|
||||
"ratelimit": {
|
||||
"disabled": "Vypnuto",
|
||||
|
||||
@@ -71,6 +71,8 @@
|
||||
"goto_spam": "Nachrichten als <span class=\"text-danger\"><b>Spam</b></span> lernen",
|
||||
"hostname": "Host",
|
||||
"inactive": "Inaktiv",
|
||||
"internal": "Intern",
|
||||
"internal_info": "Interne Aliasse sind nur von der eigenen Domäne oder Alias-Domänen erreichbar.",
|
||||
"kind": "Art",
|
||||
"mailbox_quota_def": "Standard-Quota einer Mailbox",
|
||||
"mailbox_quota_m": "Max. Speicherplatz pro Mailbox (MiB)",
|
||||
@@ -408,7 +410,8 @@
|
||||
"allowed_origins": "Access-Control-Allow-Origin",
|
||||
"logo_dark_label": "Invertiert für den Darkmode",
|
||||
"logo_normal_label": "Normal",
|
||||
"user_link": "Nutzer-Link"
|
||||
"user_link": "Nutzer-Link",
|
||||
"filter": "Filter"
|
||||
},
|
||||
"danger": {
|
||||
"access_denied": "Zugriff verweigert oder unvollständige/ungültige Daten",
|
||||
@@ -689,6 +692,8 @@
|
||||
"grant_types": "Grant-types",
|
||||
"hostname": "Servername",
|
||||
"inactive": "Inaktiv",
|
||||
"internal": "Intern",
|
||||
"internal_info": "Interne Aliasse sind nur von der eigenen Domäne oder Alias-Domänen erreichbar.",
|
||||
"kind": "Art",
|
||||
"last_modified": "Zuletzt geändert",
|
||||
"lookup_mx": "Ziel mit MX vergleichen (Regex, etwa <code>.*\\.google\\.com</code>, um alle Ziele mit MX *google.com zu routen)",
|
||||
@@ -846,7 +851,8 @@
|
||||
"password": "Passwort",
|
||||
"reset_password": "Passwort zurücksetzen",
|
||||
"request_reset_password": "Passwortänderung anfordern",
|
||||
"username": "Benutzername"
|
||||
"username": "Benutzername",
|
||||
"email": "E-Mail-Adresse"
|
||||
},
|
||||
"mailbox": {
|
||||
"action": "Aktion",
|
||||
@@ -921,6 +927,7 @@
|
||||
"in_use": "Prozentualer Gebrauch",
|
||||
"inactive": "Inaktiv",
|
||||
"insert_preset": "Beispiel \"%s\" laden",
|
||||
"internal": "Intern",
|
||||
"kind": "Art",
|
||||
"last_mail_login": "Letzter Mail-Login",
|
||||
"last_modified": "Zuletzt geändert",
|
||||
@@ -1093,7 +1100,7 @@
|
||||
"legend": "Funktionen der Mailqueue Aktionen:",
|
||||
"ays": "Soll die derzeitige Queue wirklich komplett bereinigt werden?",
|
||||
"deliver_mail": "Ausliefern",
|
||||
"deliver_mail_legend": "Versucht eine erneute Zustellung der ausgwählten Mails.",
|
||||
"deliver_mail_legend": "Versucht eine erneute Zustellung der ausgewählten Mails.",
|
||||
"hold_mail": "Zurückhalten",
|
||||
"hold_mail_legend": "Hält die ausgewählten Mails zurück. (Verhindert weitere Zustellversuche)",
|
||||
"queue_manager": "Queue Manager",
|
||||
|
||||
@@ -71,6 +71,8 @@
|
||||
"goto_spam": "Learn as <span class=\"text-danger\"><b>spam</b></span>",
|
||||
"hostname": "Host",
|
||||
"inactive": "Inactive",
|
||||
"internal": "Internal",
|
||||
"internal_info": "Internal aliases are only accessible from the own domain or alias domains.",
|
||||
"kind": "Kind",
|
||||
"mailbox_quota_def": "Default mailbox quota",
|
||||
"mailbox_quota_m": "Max. quota per mailbox (MiB)",
|
||||
@@ -690,6 +692,8 @@
|
||||
"grant_types": "Grant types",
|
||||
"hostname": "Hostname",
|
||||
"inactive": "Inactive",
|
||||
"internal": "Internal",
|
||||
"internal_info": "Internal aliases are only accessible from the own domain or alias domains.",
|
||||
"kind": "Kind",
|
||||
"last_modified": "Last modified",
|
||||
"lookup_mx": "Destination is a regular expression to match against MX name (<code>.*\\.google\\.com</code> to route all mail targeted to a MX ending in google.com over this hop)",
|
||||
@@ -711,7 +715,7 @@
|
||||
"mta_sts": "MTA-STS",
|
||||
"mta_sts_info": "<a href='https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#SMTP_MTA_Strict_Transport_Security' target='_blank'>MTA-STS</a> is a standard that enforces email delivery between mail servers to use TLS with valid certificates. <br>It is used when <a target='_blank' href='https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities'>DANE</a> is not possible due to missing or unsupported DNSSEC.<br><b>Note</b>: If the receiving domain supports DANE with DNSSEC, DANE is <b>always</b> preferred – MTA-STS only acts as a fallback.",
|
||||
"mta_sts_version": "Version",
|
||||
"mta_sts_version_info": "Defines the version of the MTA-STS standard – currently only <code>STSv1</code> is valid." ,
|
||||
"mta_sts_version_info": "Defines the version of the MTA-STS standard – currently only <code>STSv1</code> is valid.",
|
||||
"mta_sts_mode": "Mode",
|
||||
"mta_sts_mode_info": "There are three modes to choose from:<ul><li><em>testing</em> – policy is only monitored, violations have no impact.</li><li><em>enforce</em> – policy is strictly enforced, connections without valid TLS are rejected.</li><li><em>none</em> – policy is published but not applied.</li></ul>",
|
||||
"mta_sts_max_age": "Max age",
|
||||
@@ -847,7 +851,8 @@
|
||||
"password": "Password",
|
||||
"reset_password": "Reset Password",
|
||||
"request_reset_password": "Request password change",
|
||||
"username": "Username"
|
||||
"username": "Username",
|
||||
"email": "Email address"
|
||||
},
|
||||
"mailbox": {
|
||||
"action": "Action",
|
||||
@@ -927,6 +932,7 @@
|
||||
"in_use": "In use (%)",
|
||||
"inactive": "Inactive",
|
||||
"insert_preset": "Insert example preset \"%s\"",
|
||||
"internal": "Internal",
|
||||
"kind": "Kind",
|
||||
"last_mail_login": "Last mail login",
|
||||
"last_modified": "Last modified",
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
"source": "Forrás",
|
||||
"spamfilter": "Spam szűrő",
|
||||
"subject": "Tárgy",
|
||||
"sys_mails": "Rendszer-üzenetek",
|
||||
"sys_mails": "Rendszer e-mailek",
|
||||
"text": "Szöveg",
|
||||
"time": "Idő",
|
||||
"title": "Cím",
|
||||
"title_name": "\"mailcow UI\" website címe",
|
||||
"title_name": "\"mailcow UI\" weboldal címe",
|
||||
"to_top": "Vissza a tetejére",
|
||||
"transport_dest_format": "Szintaxis: pelda.hu, .pelda.hu, *, fiok@pelda.hu (több érték esetén vesszővel elválasztva)",
|
||||
"upload": "Feltöltés",
|
||||
@@ -29,14 +29,14 @@
|
||||
"logo_dark_label": "Sötét üzemmódhoz invertálva",
|
||||
"f2b_regex_info": "Figyelembe vett naplók: SOGo, Postfix, Dovecot, PHP-FPM.",
|
||||
"f2b_retry_window": "Újrapróbálkozási ablak (s) a maximális próbálkozásokhoz",
|
||||
"f2b_whitelist": "Fehérlistás hálózatok/hostok",
|
||||
"f2b_whitelist": "Engedélyezési listás hálózatok/hostok",
|
||||
"filter_table": "Szűrő táblázat",
|
||||
"forwarding_hosts": "Továbbító hostok",
|
||||
"forwarding_hosts_add_hint": "Megadhat IPv4/IPv6 címeket, hálózatokat CIDR jelölésben, állomásneveket (amelyek IP-címekre lesznek feloldva) vagy tartományneveket (amelyek IP-címekre lesznek feloldva az SPF rekordok vagy ezek hiányában az MX rekordok lekérdezésével).",
|
||||
"forwarding_hosts_add_hint": "Megadhat IPv4/IPv6 címeket, hálózatokat CIDR jelölésben, állomásneveket (amelyek IP címekre lesznek feloldva) vagy tartományneveket (amelyek IP címekre lesznek feloldva az SPF rekordok vagy ezek hiányában az MX rekordok lekérdezésével).",
|
||||
"from": "A címről",
|
||||
"copy_to_clipboard": "Szöveg másolva a vágólapra!",
|
||||
"f2b_manage_external": "A Fail2Ban külső kezelése",
|
||||
"f2b_manage_external_info": "A Fail2ban továbbra is karbantartja a tiltólistát, de nem állít be aktívan szabályokat a forgalom blokkolására. Használja az alábbi generált tiltólistát a forgalom külső blokkolásához.",
|
||||
"f2b_manage_external_info": "A Fail2ban továbbra is karbantartja a tiltólistát, de nem állít be aktívan szabályokat a forgalom blokkolásához. Használja az alábbi generált tiltólistát a forgalom külső blokkolásához.",
|
||||
"f2b_max_ban_time": "Maximális tiltási idő (s)",
|
||||
"f2b_netban_ipv4": "IPv4 alhálózat mérete, amelyre tilalmat kell alkalmazni (8-32)",
|
||||
"f2b_netban_ipv6": "IPv6 alhálózat mérete, amelyre tilalmat kell alkalmazni (8-128)",
|
||||
@@ -47,13 +47,13 @@
|
||||
"html": "HTML",
|
||||
"import": "Import",
|
||||
"ip_check": "IP ellenőrzés",
|
||||
"ip_check_disabled": "Az IP-ellenőrzés le van tiltva. Bekapcsolhatja a következő menüpont alatt<br> <strong>Rendszer > Beállítások > Opciók > Személyreszabás</strong>",
|
||||
"ip_check_disabled": "Az IP ellenőrzés le van tiltva. Bekapcsolhatja a következő menüpont alatt<br> <strong>Rendszer > Beállítások > Opciók > Személyreszabás</strong>",
|
||||
"is_mx_based": "MX alapú",
|
||||
"last_applied": "Utoljára alkalmazott",
|
||||
"link": "Link",
|
||||
"loading": "Kérjük, várj...",
|
||||
"login_time": "Bejelentkezési idő",
|
||||
"f2b_list_info": "Egy feketelistán szereplő állomás vagy hálózat mindig nagyobb súlyú, mint egy fehérlistás entitás. <b>A lista frissítései néhány másodpercig tartanak.</b>",
|
||||
"f2b_list_info": "Egy tiltólistán szereplő állomás vagy hálózat mindig nagyobb súlyú, mint egy engedélyezési listás elem. <b>A lista frissítései néhány másodpercig tartanak.</b>",
|
||||
"f2b_ban_time_increment": "A tiltási idő minden egyes tiltással növekszik",
|
||||
"additional_rows": " - további sorokat adtak hozzá",
|
||||
"admin": "Adminisztrátor",
|
||||
@@ -68,7 +68,7 @@
|
||||
"api_key": "API-kulcs",
|
||||
"api_read_only": "Csak olvasható hozzáférés",
|
||||
"api_read_write": "Olvasás-írás hozzáférés",
|
||||
"api_skip_ip_check": "IP-ellenőrzés kihagyása az API esetében",
|
||||
"api_skip_ip_check": "IP ellenőrzés kihagyása az API esetében",
|
||||
"cors_settings": "CORS beállítások",
|
||||
"guid": "GUID - egyedi példányazonosító",
|
||||
"dkim_to": "A címre",
|
||||
@@ -82,8 +82,8 @@
|
||||
"edit": "Szerkesztés",
|
||||
"empty": "Nincs eredmény",
|
||||
"excludes": "Kizárja ezeket a kedvezményezetteket",
|
||||
"f2b_ban_time": "Tilalmi idő (s)",
|
||||
"f2b_blacklist": "Feketelistás hálózatok/hostok",
|
||||
"f2b_ban_time": "Tiltás időtartam (s)",
|
||||
"f2b_blacklist": "Tiltólistás címek",
|
||||
"f2b_filter": "Regex szűrők",
|
||||
"logo_info": "A képed 40px magasságúra lesz méretezve a felső navigációs sávhoz és max. 250px szélességűre a kezdőlaphoz. A skálázható grafika használata erősen ajánlott.",
|
||||
"dkim_add_key": "ARC/DKIM kulcs hozzáadása",
|
||||
@@ -122,21 +122,187 @@
|
||||
"arrival_time": "Érkezési idő (szerveridő)",
|
||||
"authed_user": "Azonosított felhasználó",
|
||||
"ays": "Biztos, hogy folytatni akarod?",
|
||||
"ban_list_info": "A tiltott IP-címek listáját lásd alább: <b>hálózat (fennmaradó tiltási idő) - [akciók]</b>.<br />A tiltás feloldására várakozó IP-ket néhány másodpercen belül eltávolítjuk az aktív tiltási listáról.<br />A piros címkék a feketelistán szereplő aktív állandó tiltásokat jelzik.",
|
||||
"ban_list_info": "A tiltott IP címek listáját lásd alább: <b>hálózat (fennmaradó tiltási idő) - [akciók]</b>.<br />A tiltás feloldására várakozó IP-ket néhány másodpercen belül eltávolítjuk az aktív tiltási listáról.<br />A piros címkék a tiltólistán szereplő aktív állandó tiltásokat jelzik.",
|
||||
"configuration": "Konfiguráció",
|
||||
"convert_html_to_text": "HTML átalakítása egyszerű szöveggé",
|
||||
"credentials_transport_warning": "<b>Figyelmeztetés</b>: Egy új közlekedési térképbejegyzés hozzáadása frissíti a hitelesítő adatokat minden olyan bejegyzéshez, amelynek a következő ugrás oszlopa megegyezik.",
|
||||
"customize": "Testreszabás",
|
||||
"destination": "Célállomás",
|
||||
"customer_id": "Ügyfél azonosító",
|
||||
"apps_name": "\"mailcow Apps\" név"
|
||||
"apps_name": "\"mailcow Apps\" név",
|
||||
"admin_quicklink": "Gyorshivatkozás elrejtése az Adminisztrátori bejelentkezési oldalra",
|
||||
"app_hide": "Elrejtés a bejelentkezéshez",
|
||||
"domainadmin_quicklink": "Gyorshivatkozás elrejtése a Domain adminisztrátori bejelentkezési oldalra",
|
||||
"filter": "Szűrő",
|
||||
"force_sso_text": "Ha egy külső OIDC-szolgáltató van beállítva, ez az opció elrejti az alapértelmezett mailcow bejelentkezési űrlapokat, és csak az egységes bejelentkezési (Single Sign-On) gombot jeleníti meg",
|
||||
"force_sso": "A mailcow bejelentkezés letiltása és csak az egységes bejelentkezés megjelenítése",
|
||||
"hash_remove_info": "Egy arányszám-korlát hash eltávolítása (ha még létezik) teljesen visszaállítja a számlálóját.<br>\r\n Minden hash-t egyedi szín jelöl.",
|
||||
"iam": "Azonosítási szolgáltató",
|
||||
"iam_attribute_field": "Attribútum mező",
|
||||
"iam_authorize_url": "Engedélyezési végpont",
|
||||
"iam_auth_flow": "Azonosítási folyamat",
|
||||
"iam_auth_flow_info": "Az engedélyezési kód áramláson (Authorization Code Flow) kívül, amelyet az egységes bejelentkezéshez (Single-Sign On) használnak (ez a standard áramlás Keycloak-ban), a mailcow támogatja a közvetlen hitelesítő adatokkal történő hitelesítési áramlást is. A Jelszóáramlás (Mailpassword Flow) megpróbálja érvényesíteni a felhasználó hitelesítő adatait a Keycloak Admin REST API használatával. A mailcow a <code>mailcow_password</code> attribútumból olvassa be a hash-elt jelszót, amely a Keycloak-ban van leképezve.",
|
||||
"iam_basedn": "Bázis DN",
|
||||
"iam_client_id": "Kliens azonosító",
|
||||
"iam_client_secret": "Kliens titok",
|
||||
"iam_client_scopes": "Kliens hatókörök",
|
||||
"iam_default_template": "Alapértelmezett sablon",
|
||||
"iam_default_template_description": "Ha nincs sablon hozzárendelve egy felhasználóhoz, az alapértelmezett sablon lesz felhasználva a postafiók létrehozásához, de a postafiók frissítéséhez nem.",
|
||||
"iam_description": "Külső azonosítási szolgáltató konfigurálása.<br>A felhasználók postafiókjai automatikusan létrejönnek az első bejelentkezéskor, feltéve, hogy van attribútum-hozzárendelés beállítva.",
|
||||
"iam_extra_permission": "A következő beállításokhoz a Keycloak-ban lévő mailcow kliensnek szüksége van egy <code>Service account</code>-ra és a <code>view-users</code> engedélyre.",
|
||||
"iam_host": "Házigazda",
|
||||
"iam_host_info": "Adjon meg egy vagy több LDAP állomást, vesszővel elválasztva.",
|
||||
"iam_import_users": "Felhasználók importálása",
|
||||
"iam_login_provisioning": "Felhasználók automatikus létrehozása bejelentkezéskor",
|
||||
"iam_mapping": "Attribútum-hozzárendelés",
|
||||
"iam_bindpass": "Bind jelszó",
|
||||
"iam_periodic_full_sync": "Időszakos teljes szinkronizálás",
|
||||
"iam_port": "Port",
|
||||
"iam_realm": "Tartomány",
|
||||
"iam_redirect_url": "Átirányítási URL",
|
||||
"iam_rest_flow": "Mailpassword Flow",
|
||||
"iam_server_url": "Szerver URL",
|
||||
"iam_sso": "Egységes bejelentkezés",
|
||||
"iam_sync_interval": "Szinkronizálási / importálási időtartam (perc)",
|
||||
"iam_test_connection": "Kapcsolat tesztelése",
|
||||
"iam_token_url": "Token végpont",
|
||||
"iam_userinfo_url": "Felhasználói információ végpont",
|
||||
"iam_username_field": "Felhasználónév mező",
|
||||
"iam_binddn": "Bind DN",
|
||||
"iam_use_ssl": "SSL használata",
|
||||
"iam_use_ssl_info": "Ha az SSL-t engedélyezi, és a port 389-re van állítva, az automatikusan felülíródik 636-ra.",
|
||||
"iam_use_tls": "StartTLS használata",
|
||||
"iam_use_tls_info": "Ha a TLS-t engedélyezi, az LDAP szerver alapértelmezett portját kell használnia (389). Az SSL portok nem használhatók.",
|
||||
"iam_version": "Verzió",
|
||||
"ignore_ssl_error": "SSL hibák figyelmen kívül hagyása",
|
||||
"ip_check_opt_in": "Választás a harmadik féltől származó <strong>ipv4.mailcow.email</strong> és <strong>ipv6.mailcow.email</strong> szolgáltatás használatára a külső IP címek feloldásához.",
|
||||
"license_info": "A licensz nem kötelező, de segít a további fejlesztésben.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"SAL order\">Regisztrálja a GUID-ját itt</a> vagy <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Support order\">vásároljon támogatást a mailcow telepítéséhez.</a>",
|
||||
"lookup_mx": "A cél egy reguláris kifejezés, amely illeszkedik az MX névre (<code>.*\\.google\\.com</code>, hogy a google.com-ra végződő MX-en keresztül továbbítsa az összes levelet)",
|
||||
"main_name": "\"mailcow UI\" név",
|
||||
"merged_vars_hint": "A szürkével jelölt sorok a <code>vars.(local.)inc.php</code> fájlból lettek összevonva, és nem módosíthatók.",
|
||||
"message": "Üzenet",
|
||||
"message_size": "Üzenet mérete",
|
||||
"nexthop": "Következő ugrás",
|
||||
"no": "✕",
|
||||
"no_active_bans": "Nincs aktív tiltás",
|
||||
"no_new_rows": "Nincs több sor elérhető",
|
||||
"no_record": "Nincs bejegyzés",
|
||||
"oauth2_apps": "OAuth2 alkalmazások",
|
||||
"oauth2_add_client": "OAuth2 kliens hozzáadása",
|
||||
"oauth2_client_id": "Kliens azonosító",
|
||||
"oauth2_client_secret": "Kliens titok",
|
||||
"oauth2_info": "Az OAuth2 implementáció támogatja az \"Authorization Code\" engedélyezési típust és frissítési tokeneket ad ki.<br>\r\nA szerver automatikusan új frissítési tokeneket is kiad, miután egy frissítési token fel lett használva.<br><br>\r\n• Az alapértelmezett hatókör a <i>profile</i>. Csak postafiók-felhasználók hitelesíthetők az OAuth2-vel szemben. Ha a scope paraméter elmarad, az visszaesik a <i>profile</i>-ra.<br>\r\n• A <i>state</i> paramétert a kliensnek kötelező elküldenie az engedélyezési kérelem részeként.<br><br>\r\nAz OAuth2 API-hoz intézett kérések útvonalai: <br>\r\n<ul>\r\n <li>Engedélyezési végpont: <code>/oauth/authorize</code></li>\r\n <li>Token végpont: <code>/oauth/token</code></li>\r\n <li>Erőforrás oldal: <code>/oauth/profile</code></li>\r\n</ul>\r\nA kliens titok újragenerálása nem jár le a meglévő engedélyezési kódok lejáratával, de azok nem tudják megújítani a tokenjüket.<br><br>\r\nA kliens tokenek visszavonása az összes aktív munkamenet azonnali leállítását okozza. Minden kliensnek újra kell hitelesítenie magát.",
|
||||
"oauth2_redirect_uri": "Átirányítási URI",
|
||||
"oauth2_renew_secret": "Új kliens titok generálása",
|
||||
"oauth2_revoke_tokens": "Minden kliens token visszavonása",
|
||||
"optional": "opcionális",
|
||||
"options": "Opciók",
|
||||
"password": "Jelszó",
|
||||
"password_length": "Jelszó hossza",
|
||||
"password_policy": "Jelszó házirend",
|
||||
"password_policy_chars": "Legalább egy betűkaraktert kell tartalmaznia",
|
||||
"password_policy_length": "A jelszó minimális hossza %d",
|
||||
"password_policy_lowerupper": "Kis- és nagybetűket kell tartalmaznia",
|
||||
"password_policy_numbers": "Legalább egy számot kell tartalmaznia",
|
||||
"password_policy_special_chars": "Speciális karaktereket kell tartalmaznia",
|
||||
"password_repeat": "Megerősítő jelszó (ismétlés)",
|
||||
"password_reset_info": "Ha nincs megadva helyreállítási e-mail cím, ez a funkció nem használható.",
|
||||
"password_reset_settings": "Jelszó-helyreállítási beállítások",
|
||||
"password_reset_tmpl_html": "HTML sablon",
|
||||
"password_reset_tmpl_text": "Szöveges sablon",
|
||||
"password_settings": "Jelszó beállítások",
|
||||
"priority": "Prioritás",
|
||||
"private_key": "Privát kulcs",
|
||||
"quarantine": "Karantén",
|
||||
"quarantine_bcc": "Az összes értesítés másolatának elküldése (BCC) erre a címzettnek:<br><small>Hagyja üresen a letiltáshoz. <b>Aláíratlan, nem ellenőrzött levél. Csak belső kézbesítésre alkalmas.</b></small>",
|
||||
"quarantine_exclude_domains": "Tartományok és alias-tartományok kizárása",
|
||||
"quarantine_max_age": "Maximális életkor napokban<br><small>Az értéknek legalább 1 napnak kell lennie.</small>",
|
||||
"quarantine_max_score": "Az értesítés elvetése, ha egy levél spam pontszáma magasabb ennél az értéknél:<br><small>Alapértelmezett értéke 9999.0</small>",
|
||||
"quarantine_max_size": "Maximális méret MiB-ban (a nagyobb elemeket elveti):<br><small>A 0 <b>nem</b> jelent korlátlant.</small>",
|
||||
"quarantine_notification_html": "Értesítő e-mail sablon:<br><small>Hagyja üresen az alapértelmezett sablon visszaállításához.</small>",
|
||||
"quarantine_notification_sender": "Értesítő e-mail feladója",
|
||||
"quarantine_notification_subject": "Értesítő e-mail tárgya",
|
||||
"quarantine_redirect": "<b>Az összes értesítés átirányítása</b> erre a címzettnek:<br><small>Hagyja üresen a letiltáshoz. <b>Aláíratlan, nem ellenőrzött levél. Csak belső kézbesítésre alkalmas.</b></small>",
|
||||
"quarantine_release_format": "A feloldott elemek formátuma",
|
||||
"quarantine_release_format_att": "Csatolmányként",
|
||||
"quarantine_release_format_raw": "Eredeti, módosítatlan formában",
|
||||
"quarantine_retention_size": "Megőrzések postafiókonként:<br><small>A 0 <b>inaktívat</b> jelent.</small>",
|
||||
"quicklink_text": "A gyorshivatkozások megjelenítése vagy elrejtése a bejelentkezési űrlap alatt",
|
||||
"quota_notification_html": "Értesítő e-mail sablon:<br><small>Hagyja üresen az alapértelmezett sablon visszaállításához.</small>",
|
||||
"quota_notification_sender": "Kvóta értesítő e-mail feladója",
|
||||
"quota_notification_subject": "Kvóta értesítő e-mail tárgya",
|
||||
"quota_notifications": "Kvóta értesítések",
|
||||
"quota_notifications_info": "A kvóta értesítéseket a felhasználók egyszer kapják meg, amikor a 80%-os határt, majd a 95%-os határt átlépik.",
|
||||
"quota_notifications_vars": "{{percent}} a felhasználó aktuális kvótáját jelenti<br>{{username}} a postafiók neve",
|
||||
"queue_unban": "tiltás feloldása",
|
||||
"r_active": "Aktív korlátozások",
|
||||
"r_inactive": "Inaktív korlátozások",
|
||||
"r_info": "A szürkével/letiltva jelölt elemek az aktív korlátozások listáján a mailcow számára nem érvényes korlátozások, és nem mozgathatók. Az ismeretlen korlátozások a megjelenési sorrendben lesznek beállítva. <br>Új elemeket adhat hozzá a <code>inc/vars.local.inc.php</code> fájlban, hogy váltani tudja őket.",
|
||||
"rate_name": "Arányszám neve",
|
||||
"recipients": "Címzettek",
|
||||
"refresh": "Frissítés",
|
||||
"regen_api_key": "API kulcs újragenerálása",
|
||||
"regex_maps": "Regex térképek",
|
||||
"relay_from": "\"Feladó:\" cím",
|
||||
"relay_rcpt": "\"Címzett:\" cím",
|
||||
"relay_run": "Teszt futtatása",
|
||||
"relayhosts": "Feladófüggő szállítások",
|
||||
"relayhosts_hint": "Határozzon meg feladófüggő szállításokat, hogy kiválaszthassa őket egy tartomány konfigurációs párbeszédpanelén.<br>\r\n A szállítási szolgáltatás mindig \"smtp:\" és ezért megpróbálja a TLS-t, ha felajánlják. A becsomagolt TLS (SMTPS) nem támogatott. A felhasználók egyéni kimenő TLS-szabályzati beállításai figyelembe vételre kerülnek.<br>\r\n Érintik a kiválasztott tartományokat, beleértve az alias tartományokat is.",
|
||||
"remove": "Eltávolítás",
|
||||
"remove_row": "Sor eltávolítása",
|
||||
"reset_default": "Visszaállítás alapértelmezettre",
|
||||
"reset_limit": "Hash eltávolítása",
|
||||
"reset_password_vars": "<code>{{link}}</code> A generált jelszó-helyreállítási link<br><code>{{username}}</code> A jelszó-helyreállítást kérő felhasználó postafiók neve<br><code>{{username2}}</code> A helyreállítási postafiók neve<br><code>{{date}}</code> A jelszó-helyreállítási kérelem dátuma<br><code>{{token_lifetime}}</code> A token élettartama percekben<br><code>{{hostname}}</code> A mailcow hosztnév",
|
||||
"restore_template": "Hagyja üresen az alapértelmezett sablon visszaállításához.",
|
||||
"routing": "Útválasztás",
|
||||
"rsetting_add_rule": "Szabály hozzáadása",
|
||||
"rsetting_content": "Szabály tartalma",
|
||||
"rsetting_desc": "Rövid leírás",
|
||||
"rsetting_no_selection": "Kérjük, válasszon egy szabályt",
|
||||
"rsetting_none": "Nincsenek elérhető szabályok",
|
||||
"rsettings_insert_preset": "Példa előre beállított \"%s\" beillesztése",
|
||||
"rsettings_preset_1": "Minden letiltása, kivéve a DKIM és az arányszám-korlátot a hitelesített felhasználók számára",
|
||||
"rsettings_preset_2": "A Postmasterek spamet akarnak",
|
||||
"rsettings_preset_3": "Csak bizonyos feladókat engedélyezzen egy postafiók számára (pl. csak belső postafiókként használva)",
|
||||
"rsettings_preset_4": "Rspamd letiltása egy tartomány számára",
|
||||
"rspamd_com_settings": "A beállítás neve automatikusan generálódik, kérjük, nézze meg a lenti példa-előrebeállításokat. További részletekért lásd a <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd dokumentációját</a>",
|
||||
"rspamd_global_filters": "Globális szűrőtérképek",
|
||||
"rspamd_global_filters_agree": "Óvatos leszek!",
|
||||
"rspamd_global_filters_info": "A globális szűrőtérképek különböző típusú globális tiltó- és engedélyezési listákat tartalmaznak.",
|
||||
"rspamd_global_filters_regex": "A nevük elmagyarázza a céljukat. Minden tartalomnak érvényes reguláris kifejezést kell tartalmaznia \"/pattern/options\" formátumban (pl. <code>/.+@domain\\.tld/i</code>).<br>\r\n Bár alapvető ellenőrzések történnek minden regex soron, az Rspamd funkcionalitása megszakadhat, ha nem sikerül helyesen értelmeznie a szintaxist.<br>\r\n Az Rspamd megpróbálja elolvasni a térkép tartalmát, amikor az megváltozik. Ha problémákat tapasztal, <a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">indítsa újra az Rspamd-et</a>, hogy kikényszerítse a térkép újratöltését.<br>A tiltólistára került elemek ki vannak zárva a karanténból.",
|
||||
"rspamd_settings_map": "Rspamd beállítási térkép",
|
||||
"sal_level": "Moo szint",
|
||||
"service": "Szolgáltatás",
|
||||
"service_id": "Szolgáltatás azonosító",
|
||||
"task": "Feladat",
|
||||
"transport_maps": "Szállítási térképek",
|
||||
"transport_test_rcpt_info": "• Használja a null@hosted.mailcow.de címet a külföldi célra történő továbbítás teszteléséhez.",
|
||||
"transports_hint": "• Egy szállítási térkép bejegyzés <b>felülírja</b> a feladófüggő szállítási térképet</b>.<br>\r\n• Az MX-alapú szállítások előnyben részesítettek.<br>\r\n• A felhasználónkénti kimenő TLS-szabályzati beállítások figyelmen kívül hagyódnak, és csak a TLS-szabályzati térkép bejegyzései kényszeríthetik ki őket.<br>\r\n• A definiált szállításokhoz a szállítási szolgáltatás mindig \"smtp:\" és ezért megpróbálja a TLS-t, ha felajánlják. A becsomagolt TLS (SMTPS) nem támogatott.<br>\r\n• A \"/localhost$/\"-nek megfelelő címek mindig \"local:\"-on keresztül lesznek szállítva, ezért a \"*\" cél nem vonatkozik ezekre a címekre.<br>\r\n• A hitelesítő adatok meghatározásához egy példa következő ugráshoz \"[host]:25\", a Postfix <b>mindig</b> lekérdezi a \"host\"-ot, mielőtt a \"[host]:25\"-re keresne. Ez a viselkedés lehetetlenné teszi a \"host\" és a \"[host]:25\" egyidejű használatát.",
|
||||
"ui_footer": "Lábléc (HTML engedélyezett)",
|
||||
"ui_header_announcement": "Közlemények",
|
||||
"ui_header_announcement_active": "Közlemény beállítása aktívra",
|
||||
"ui_header_announcement_content": "Szöveg (HTML engedélyezett)",
|
||||
"ui_header_announcement_help": "A közlemény minden bejelentkezett felhasználó számára látható, valamint a felhasználói felület bejelentkezési képernyőjén.",
|
||||
"ui_header_announcement_select": "Válassza ki a közlemény típusát",
|
||||
"ui_header_announcement_type": "Típus",
|
||||
"ui_header_announcement_type_danger": "Nagyon fontos",
|
||||
"ui_header_announcement_type_info": "Információ",
|
||||
"ui_header_announcement_type_warning": "Fontos",
|
||||
"ui_texts": "Felhasználói felület címkéi és szövegei",
|
||||
"unban_pending": "tiltás feloldása függőben",
|
||||
"unchanged_if_empty": "Ha nem változik, hagyja üresen",
|
||||
"user_link": "Felhasználói-link",
|
||||
"user_quicklink": "Gyorshivatkozás elrejtése a Felhasználói bejelentkezési oldalra",
|
||||
"validate_license_now": "GUID érvényesítése a licenszszerverrel szemben",
|
||||
"yes": "✓",
|
||||
"success": "Siker"
|
||||
},
|
||||
"edit": {
|
||||
"active": "Aktív",
|
||||
"advanced_settings": "Haladó beállítások",
|
||||
"alias": "Alias szerkesztése",
|
||||
"allow_from_smtp": "Kizárólag ezen IP-címek használhatnak <b>SMTP</b>-t",
|
||||
"allow_from_smtp_info": "Leave empty to allow all senders.<br>IPv4/IPv6 addresses and networks.",
|
||||
"allow_from_smtp": "Kizárólag ezen IP címek használhatnak <b>SMTP</b>-t",
|
||||
"allow_from_smtp_info": "Hagyja üresen minden feladó engedélyezéséhez.<br>IPv4/IPv6 címek és hálózatok.",
|
||||
"allowed_protocols": "Engedélyezett protokollok",
|
||||
"app_name": "Applikáció neve",
|
||||
"app_passwd": "Applikáció jelszava",
|
||||
@@ -146,7 +312,127 @@
|
||||
"description": "Leírás",
|
||||
"domain_quota": "Domain kvóta",
|
||||
"domains": "Domainek",
|
||||
"edit_alias_domain": "Alias domain szerkesztése"
|
||||
"edit_alias_domain": "Alias domain szerkesztése",
|
||||
"acl": "ACL (Engedélyek)",
|
||||
"admin": "Adminisztrátor szerkesztése",
|
||||
"app_passwd_protocols": "Engedélyezett protokollok az alkalmazás jelszavához",
|
||||
"automap": "Próbálja automatikusan feltérképezni a mappákat (\"Elküldött elemek\", \"Elküldött\" => \"Elküldött\" stb.)",
|
||||
"bcc_dest_format": "A BCC-célpontnak egyetlen érvényes e-mail címnek kell lennie.<br>Ha több címre kell másolatot küldenie, hozzon létre egy aliast, és használja azt itt.",
|
||||
"comment_info": "A privát megjegyzés nem látható a felhasználó számára, míg a nyilvános megjegyzés tooltip-ként jelenik meg, amikor a felhasználó áttekintésében a megjegyzésre mutat.",
|
||||
"created_on": "Létrehozva",
|
||||
"custom_attributes": "Egyéni attribútumok",
|
||||
"delete1": "Törlés a forrásból, ha befejeződött",
|
||||
"delete2": "Üzenetek törlése a célállomáson, amelyek nincsenek a forráson",
|
||||
"delete2duplicates": "Duplikáltak törlése a célállomáson",
|
||||
"delete_ays": "Erősítse meg a törlési folyamatot.",
|
||||
"disable_login": "Bejelentkezés letiltása (a bejövő leveleket továbbra is elfogadja)",
|
||||
"domain": "Domain szerkesztése",
|
||||
"domain_admin": "Domain adminisztrátor szerkesztése",
|
||||
"domain_footer": "Tartományszintű lábléc",
|
||||
"domain_footer_html": "HTML lábléc",
|
||||
"domain_footer_info": "A tartományszintű lábléceket a tartományon belüli címmel társított összes kimenő e-mailhez hozzáadják. <br> A következő változók használhatók a lábléchez:",
|
||||
"domain_footer_info_vars": {
|
||||
"auth_user": "{= auth_user =} - Hitelesített felhasználónév az MTA által megadott",
|
||||
"from_user": "{= from_user =} - A boríték feladójának felhasználói része, pl. a \"moo@mailcow.tld\" esetén \"moo\"-t ad vissza",
|
||||
"from_name": "{= from_name =} - A boríték feladójának neve, pl. a \"Mailcow <moo@mailcow.tld>\" esetén \"Mailcow\"-t ad vissza",
|
||||
"from_addr": "{= from_addr =} - A boríték feladójának címe",
|
||||
"from_domain": "{= from_domain =} - A boríték feladójának tartománya",
|
||||
"custom": "{= foo =} - Ha a postafiók rendelkezik a \"foo\" egyéni attribútummal, amelynek értéke \"bar\", akkor \"bar\"-t ad vissza"
|
||||
},
|
||||
"domain_footer_plain": "Egyszerű szöveges lábléc",
|
||||
"domain_footer_skip_replies": "Lábléc figyelmen kívül hagyása válasz e-maileknél",
|
||||
"dont_check_sender_acl": "Küldő ellenőrzés letiltása a(z) %s tartományhoz (+ alias tartományok)",
|
||||
"encryption": "Titkosítás",
|
||||
"exclude": "Objektumok kizárása (regex)",
|
||||
"extended_sender_acl": "Külső feladói címek",
|
||||
"extended_sender_acl_info": "Importálni kell egy DKIM tartomány kulcsot, ha elérhető.<br>\r\n Ne felejtse el hozzáadni ezt a szervert a megfelelő SPF TXT rekordhoz.<br>\r\n Amikor egy tartományt vagy alias tartományt ad hozzá ehhez a szerverhez, amely átfedésben van egy külső címmel, a külső cím eltávolításra kerül.<br>\r\n Használja a @domain.tld címet, hogy engedélyezze a küldést *@domain.tld néven.",
|
||||
"force_pw_update": "Jelszófrissítés kényszerítése a következő bejelentkezéskor",
|
||||
"force_pw_update_info": "Ez a felhasználó csak a(z) %s címre tud bejelentkezni. Az alkalmazás jelszavak használhatóak maradnak.",
|
||||
"footer_exclude": "Kizárás a láblécből",
|
||||
"full_name": "Teljes név",
|
||||
"gal": "Globális címlista",
|
||||
"gal_info": "A GAL tartalmazza a tartomány összes objektumát, és egyetlen felhasználó sem szerkesztheti. A Szabad/Foglalt információ a SOGo-ban hiányzik, ha le van tiltva! <b>Indítsa újra a SOGo-t a változások alkalmazásához.</b>",
|
||||
"generate": "generál",
|
||||
"grant_types": "Engedélyezési típusok",
|
||||
"hostname": "Hosztnév",
|
||||
"inactive": "Inaktív",
|
||||
"kind": "Típus",
|
||||
"last_modified": "Utoljára módosítva",
|
||||
"lookup_mx": "A cél egy reguláris kifejezés, amely illeszkedik az MX névre (<code>.*\\.google\\.com</code>, hogy a google.com-ra végződő MX-en keresztül továbbítsa az összes levelet)",
|
||||
"mailbox": "Postafiók szerkesztése",
|
||||
"mailbox_quota_def": "Alapértelmezett postafiók kvóta",
|
||||
"mailbox_relayhost_info": "A postafiókra és csak a közvetlen aliasokra vonatkozik, felülírja a tartományi továbbító hostot.",
|
||||
"mailbox_rename": "Postafiók átnevezése",
|
||||
"mailbox_rename_agree": "Készítettem biztonsági másolatot.",
|
||||
"mailbox_rename_warning": "FONTOS! Hozzon létre biztonsági másolatot a postafiók átnevezése előtt.",
|
||||
"mailbox_rename_alias": "Alias automatikus létrehozása",
|
||||
"mailbox_rename_title": "Új helyi postafiók neve",
|
||||
"max_aliases": "Max. aliasok",
|
||||
"max_mailboxes": "Max. lehetséges postafiókok",
|
||||
"max_quota": "Max. kvóta postafiókonként (MiB)",
|
||||
"maxage": "Üzenetek maximális életkora napokban, amelyek lekérdezésre kerülnek a távolról<br><small>(0 = figyelmen kívül hagyás)</small>",
|
||||
"maxbytespersecond": "Max. bájt/másodperc <br><small>(0 = korlátlan)</small>",
|
||||
"mbox_rl_info": "Ez a sebességkorlátozás a SASL bejelentkezési névre vonatkozik, és illeszkedik minden, a bejelentkezett felhasználó által használt \"from\" címre. Egy postafiók sebességkorlátozása felülírja a tartományszintű sebességkorlátozást.",
|
||||
"mins_interval": "Időköz (perc)",
|
||||
"multiple_bookings": "Több foglalás",
|
||||
"none_inherit": "Nincs / Örökölt",
|
||||
"nexthop": "Következő ugrás",
|
||||
"password": "Jelszó",
|
||||
"password_recovery_email": "Jelszó-helyreállítási e-mail",
|
||||
"password_repeat": "Megerősítő jelszó (ismétlés)",
|
||||
"previous": "Előző oldal",
|
||||
"private_comment": "Privát megjegyzés",
|
||||
"public_comment": "Nyilvános megjegyzés",
|
||||
"pushover": "Pushover",
|
||||
"pushover_evaluate_x_prio": "Magas prioritású levelek továbbítása [<code>X-Priority: 1</code>]",
|
||||
"pushover_info": "A push értesítési beállítások az összes tiszta (nem-spam) levélre vonatkoznak, amelyeket a <b>%s</b> címre kézbesítettek, beleértve az aliasokat is (megosztott, nem megosztott, címkézett).",
|
||||
"pushover_only_x_prio": "Csak a magas prioritású leveleket vegye figyelembe [<code>X-Priority: 1</code>]",
|
||||
"pushover_sender_array": "Csak a következő feladói e-mail címeket vegye figyelembe <small>(vesszővel elválasztva)</small>",
|
||||
"pushover_sender_regex": "Feladók egyeztetése a következő regex-szel",
|
||||
"pushover_text": "Értesítési szöveg",
|
||||
"pushover_title": "Értesítési cím",
|
||||
"pushover_sound": "Hang",
|
||||
"pushover_vars": "Ha nincs feladói szűrő meghatározva, minden e-mail figyelembe vételre kerül.<br>A Regex szűrők, valamint a pontos feladói ellenőrzések egyénileg definiálhatók, és sorban lesznek figyelembe véve. Nem függenek egymástól.<br>Használható változók a szöveghez és a címhez (kérjük, vegye figyelembe az adatvédelmi szabályzatokat)",
|
||||
"pushover_verify": "Hitelesítő adatok ellenőrzése",
|
||||
"quota_mb": "Kvóta (MiB)",
|
||||
"quota_warning_bcc": "Kvóta figyelmeztetés BCC",
|
||||
"quota_warning_bcc_info": "A figyelmeztetések külön másolatként lesznek elküldve a következő címzetteknek. A tárgyat a megfelelő felhasználónévvel egészítik ki zárójelben, például: <code>Quota warning (user@example.com)</code>.",
|
||||
"ratelimit": "Arányszám-korlát",
|
||||
"redirect_uri": "Átirányítási/Visszahívási URL",
|
||||
"relay_all": "Az összes címzett továbbítása",
|
||||
"relay_all_info": "↪ Ha úgy döntesz, hogy <b>nem</b> továbbítod az összes címzettet, akkor minden egyes címzett számára, akit továbbítani kell, létre kell hoznod egy (\"vak\") postafiókot.",
|
||||
"relay_domain": "Továbbítsa ezt a tartományt",
|
||||
"relay_transport_info": "<div class=\"badge fs-6 bg-info\">Információ</div> Definiálhatsz szállítási térképeket ehhez a tartományhoz egyedi célállomásra. Ha nincs beállítva, egy MX lekérdezés történik.",
|
||||
"relay_unknown_only": "Csak a nem létező postafiókok továbbítása. A létező postafiókok helyben lesznek kézbesítve.",
|
||||
"relayhost": "Feladófüggő szállítások",
|
||||
"remove": "Eltávolítás",
|
||||
"resource": "Erőforrás",
|
||||
"save": "Módosítások mentése",
|
||||
"scope": "Hatókör",
|
||||
"sender_acl": "Engedélyezés küldésre mint",
|
||||
"sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">A küldő ellenőrzése le van tiltva</span>",
|
||||
"sender_acl_info": "Ha az A postafiók felhasználója küldhet a B postafiók felhasználójaként, a feladói cím nem jelenik meg automatikusan választható \"from\" mezőként a SOGo-ban.<br>\r\n A B postafiók felhasználójának delegálást kell létrehoznia a SOGo-ban, hogy az A postafiók felhasználója kiválaszthassa a címét feladóként. A SOGo-ban egy postafiók delegálásához használja a menüt (három pont) a postafiók neve jobb oldalán a bal felső sarokban, a levélnézetben. Ez a viselkedés nem vonatkozik az alias címekre.",
|
||||
"sieve_desc": "Rövid leírás",
|
||||
"sieve_type": "Szűrő típusa",
|
||||
"skipcrossduplicates": "Átugrani a duplikált üzeneteket a mappák között (aki előbb jön, előbb kapja)",
|
||||
"sogo_access": "Közvetlen továbbítás a SOGo-ra",
|
||||
"sogo_access_info": "A bejelentkezés után a felhasználó automatikusan átirányításra kerül a SOGo-ra.",
|
||||
"sogo_visible": "Alias látható a SOGo-ban",
|
||||
"sogo_visible_info": "Ez az opció csak azokra az objektumokra vonatkozik, amelyek megjeleníthetők a SOGo-ban (megosztott vagy nem megosztott alias címek, amelyek legalább egy helyi postafiókra mutatnak). Ha el van rejtve, egy alias nem jelenik meg választható feladóként a SOGo-ban.",
|
||||
"spam_alias": "Időkorlátos alias címek létrehozása vagy módosítása",
|
||||
"spam_filter": "Spam szűrő",
|
||||
"spam_policy": "Elemek hozzáadása vagy eltávolítása a tiltó- vagy engedélyezési listán",
|
||||
"spam_score": "Egyéni spam pontszám beállítása",
|
||||
"subfolder2": "Szinkronizálás a célállomáson egy almappába<br><small>(üres = ne használjon almappát)</small>",
|
||||
"syncjob": "Szinkronizálási feladat szerkesztése",
|
||||
"target_address": "Célcím(ek) <small>(vesszővel elválasztva)</small>",
|
||||
"target_domain": "Cél domain",
|
||||
"timeout1": "Időtúllépés a távoli állomáshoz való csatlakozáskor",
|
||||
"timeout2": "Időtúllépés a helyi állomáshoz való csatlakozáskor",
|
||||
"title": "Objektum szerkesztése",
|
||||
"unchanged_if_empty": "Ha nem változik, hagyja üresen",
|
||||
"username": "Felhasználónév",
|
||||
"validate_save": "Érvényesítés és mentés"
|
||||
},
|
||||
"footer": {
|
||||
"cancel": "Mégse",
|
||||
@@ -159,7 +445,9 @@
|
||||
"restart_container": "Konténer újraindítása",
|
||||
"restart_container_info": "<b>Fontos:</b> A teljes újraindulás eltarthat egy ideig, kérjük várjon, amíg befejeződik!",
|
||||
"restart_now": "Újraindítás most",
|
||||
"restarting_container": "Konténer újraindítása. Ez eltarthat egy darabig."
|
||||
"restarting_container": "Konténer újraindítása. Ez eltarthat egy darabig.",
|
||||
"hibp_check": "Ellenőrzés a haveibeenpwned.com-on",
|
||||
"nothing_selected": "Nincs semmi kiválasztva"
|
||||
},
|
||||
"header": {
|
||||
"administration": "Beállítások és részletek",
|
||||
@@ -170,7 +458,8 @@
|
||||
"quarantine": "Karantén",
|
||||
"restart_netfilter": "Netfilter újraindítása",
|
||||
"restart_sogo": "SOGo újraindítása",
|
||||
"user_settings": "Felhasználó beállításai"
|
||||
"user_settings": "Felhasználó beállításai",
|
||||
"mailcow_system": "Rendszer"
|
||||
},
|
||||
"info": {
|
||||
"awaiting_tfa_confirmation": "TFA megerősítésre várakozás",
|
||||
@@ -182,7 +471,23 @@
|
||||
"login": "Bejelentkezés",
|
||||
"mobileconfig_info": "A kért Apple kapcsolat profil letöltéséhez jelentkezzen be, mint postafiók-felhasználó.",
|
||||
"password": "Jelszó",
|
||||
"username": "Felhasználónév"
|
||||
"username": "Felhasználónév",
|
||||
"back_to_mailcow": "Vissza a mailcow-hoz",
|
||||
"fido2_webauthn": "FIDO2/WebAuthn bejelentkezés",
|
||||
"forgot_password": "> Elfelejtett jelszó?",
|
||||
"invalid_pass_reset_token": "A jelszó-helyreállítási token érvénytelen vagy lejárt.<br>Kérjen új jelszó-helyreállítási linket.",
|
||||
"login_linkstext": "Nem a megfelelő bejelentkezés?",
|
||||
"login_usertext": "Bejelentkezés felhasználóként",
|
||||
"login_domainadmintext": "Bejelentkezés domain adminisztrátorként",
|
||||
"login_admintext": "Bejelentkezés adminisztrátorként",
|
||||
"login_user": "Felhasználói bejelentkezés",
|
||||
"login_dadmin": "Domain-adminisztrátori bejelentkezés",
|
||||
"login_admin": "Adminisztrátori bejelentkezés",
|
||||
"new_password": "Új jelszó",
|
||||
"new_password_confirm": "Új jelszó megerősítése",
|
||||
"other_logins": "vagy bejelentkezés",
|
||||
"reset_password": "Jelszó visszaállítása",
|
||||
"request_reset_password": "Jelszó módosítás kérése"
|
||||
},
|
||||
"mailbox": {
|
||||
"action": "Művelet",
|
||||
@@ -200,10 +505,10 @@
|
||||
"add_resource": "Erőforrás hozzáadása",
|
||||
"add_tls_policy_map": "TLS irányelv-térkép hozzáadása",
|
||||
"address_rewriting": "Címátírás",
|
||||
"alias": "Alias",
|
||||
"alias": "Álnév",
|
||||
"alias_domain_backupmx": "Alias domain inaktív a továbbító domain részére",
|
||||
"aliases": "Alias-ok",
|
||||
"allow_from_smtp": "Kizárólag ezek az IP-címek használhatják az <b>SMTP</b>-t",
|
||||
"aliases": "Álnevek",
|
||||
"allow_from_smtp": "Kizárólag ezek az IP címek használhatják az <b>SMTP</b>-t",
|
||||
"allow_from_smtp_info": "Hagyja üresen minden feladó engedélyezéséhez.<br>IPv4/IPv6 címek és hálózatok.",
|
||||
"allowed_protocols": "Engedélyezett protokollok",
|
||||
"backup_mx": "Továbbító domain",
|
||||
@@ -221,7 +526,7 @@
|
||||
"domain_admins": "Domain adminisztrátorok",
|
||||
"domain_aliases": "Domain alias-ok",
|
||||
"domain_quota": "Kvóta",
|
||||
"domains": "Domain-ek",
|
||||
"domains": "Domainek",
|
||||
"edit": "Szerkesztés",
|
||||
"empty": "Nincs találat",
|
||||
"enable_x": "Engedélyezés",
|
||||
@@ -277,7 +582,87 @@
|
||||
"toggle_all": "Összes átváltása",
|
||||
"username": "Felhasználónév",
|
||||
"waiting": "Várakozás",
|
||||
"weekly": "Hetente"
|
||||
"weekly": "Hetente",
|
||||
"add_alias_expand": "Alias kiterjesztése alias tartományokra",
|
||||
"alias_domain_alias_hint": "Az aliasok <b>nem</b> vonatkoznak automatikusan a domain aliasokra. Egy <code>my-alias@domain</code> alias cím <b>nem</b> fedezi a <code>my-alias@alias-domain</code> címet (ahol az \"alias-domain\" a \"domain\" képzeletbeli alias tartománya).<br>Kérjük, használjon sieve szűrőt a levél külső postafiókba történő átirányításához (lásd a \"Szűrők\" fület vagy a SOGo -> Továbbító). Használja az \"Alias kiterjesztése alias tartományokra\" opciót a hiányzó aliasok automatikus hozzáadásához.",
|
||||
"all_domains": "Minden tartomány",
|
||||
"bcc_info": "A BCC térképek arra szolgálnak, hogy csendesen továbbítsák az összes üzenet másolatát egy másik címre. A címzett térkép típust akkor használják, ha a helyi célpont egy levél címzettjeként működik. A feladói térképek ugyanazon elv szerint működnek.<br/>\r\n A helyi célpontot nem értesítik a sikertelen kézbesítésről.",
|
||||
"bcc_map_type": "BCC típus",
|
||||
"bcc_maps": "BCC térképek",
|
||||
"bcc_rcpt_map": "Címzett térkép",
|
||||
"bcc_sender_map": "Feladó térkép",
|
||||
"bcc_to_rcpt": "Váltás címzett térkép típusra",
|
||||
"bcc_to_sender": "Váltás feladó térkép típusra",
|
||||
"bcc_type": "BCC típus",
|
||||
"booking_null": "Mindig szabadként mutat",
|
||||
"booking_0_short": "Mindig szabad",
|
||||
"booking_custom": "Kemény korlát a foglalások egyéni számára",
|
||||
"booking_custom_short": "Kemény korlát",
|
||||
"booking_ltnull": "Korlátlan, de foglaltnak mutatja magát, ha le van foglalva",
|
||||
"booking_lt0_short": "Lágy korlát",
|
||||
"catch_all": "Catch-All",
|
||||
"created_on": "Létrehozva",
|
||||
"dkim_domains_selector": "Válogató",
|
||||
"dkim_key_length": "DKIM kulcs hossza (bit)",
|
||||
"domain_templates": "Domain sablonok",
|
||||
"domain_quota_total": "Teljes domain kvóta",
|
||||
"gal": "Globális címlista",
|
||||
"goto_ham": "Tanulás <b>ham</b>-ként",
|
||||
"goto_spam": "Tanulás <b>spam</b>-ként",
|
||||
"iam": "Azonosítási szolgáltató",
|
||||
"last_modified": "Utoljára módosítva",
|
||||
"last_pw_change": "Utolsó jelszócsere",
|
||||
"mailbox_defaults": "Alapértelmezett beállítások",
|
||||
"mailbox_defaults_info": "Alapértelmezett beállítások meghatározása az új postafiókokhoz.",
|
||||
"mailbox_templates": "Postafiók sablonok",
|
||||
"max_aliases": "Max. aliasok",
|
||||
"max_mailboxes": "Max. lehetséges postafiókok",
|
||||
"max_quota": "Max. kvóta postafiókonként",
|
||||
"no": "✕",
|
||||
"open_logs": "Naplók megnyitása",
|
||||
"q_add_header": "amikor a levélszemét mappába kerül",
|
||||
"q_all": " amikor a levélszemét mappába kerül és elutasításkor",
|
||||
"q_reject": "elutasításkor",
|
||||
"quarantine_category": "Karantén értesítési kategória",
|
||||
"recipient": "Címzett",
|
||||
"recipient_map_info": "A címzett térképeket arra használják, hogy egy üzenet célcímét kicseréljék, mielőtt azt kézbesítenék.",
|
||||
"recipient_map_new_info": "A címzett térkép célja érvényes e-mail címnek vagy tartománynévnek kell lennie.",
|
||||
"recipient_map_old_info": "Egy címzett térkép eredeti céljának érvényes e-mail címnek vagy tartománynévnek kell lennie.",
|
||||
"relay_all": "Az összes címzett továbbítása",
|
||||
"relay_unknown": "Ismeretlen postafiókok továbbítása",
|
||||
"sender": "Feladó",
|
||||
"set_postfilter": "Megjelölés poszt-szűrőként",
|
||||
"set_prefilter": "Megjelölés pre-szűrőként",
|
||||
"sieve_info": "Több szűrőt is tárolhatsz felhasználónként, de egyszerre csak egy pre-szűrő és egy poszt-szűrő lehet aktív.<br>\r\nMinden szűrő a leírt sorrendben lesz feldolgozva. Sem a sikertelen szkript, sem a kiadott \"keep;\" parancs nem állítja le a további szkriptek feldolgozását. A globális sieve szkriptek változásai a Dovecot újraindítását váltják ki.<br><br>Globális sieve pre-szűrő • Pre-szűrő • Felhasználói szkriptek • Poszt-szűrő • Globális sieve poszt-szűrő",
|
||||
"sieve_preset_1": "Levél eldobása valószínűleg veszélyes fájltípusokkal",
|
||||
"sieve_preset_2": "Egy adott feladó e-mailjét mindig olvasottként jelölje meg",
|
||||
"sieve_preset_3": "Csendesen elvetni, leállítani minden további sieve feldolgozást",
|
||||
"sieve_preset_4": "Fájl az INBOX-ba, kihagyni a további feldolgozást a sieve szűrőkkel",
|
||||
"sieve_preset_5": "Auto válaszadó (szabadság)",
|
||||
"sieve_preset_6": "Levél elutasítása válasszal",
|
||||
"sieve_preset_7": "Átirányítás és megtartás/eldobás",
|
||||
"sieve_preset_8": "E-mail átirányítása egy adott feladótól, olvasottként jelölés és almappába rendezés",
|
||||
"sieve_preset_header": "Kérjük, nézze meg az alábbi példa-előrebeállításokat. További részletekért lásd a <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipedia</a>-t.",
|
||||
"sogo_visible": "Alias látható a SOGo-ban",
|
||||
"sogo_visible_n": "Alias elrejtése a SOGo-ban",
|
||||
"sogo_visible_y": "Alias megjelenítése a SOGo-ban",
|
||||
"syncjob_check_log": "Napló ellenőrzése",
|
||||
"syncjob_last_run_result": "Utolsó futás eredménye",
|
||||
"syncjob_EX_OK": "Siker",
|
||||
"syncjob_EXIT_CONNECTION_FAILURE": "Kapcsolati probléma",
|
||||
"syncjob_EXIT_TLS_FAILURE": "Probléma a titkosított kapcsolattal",
|
||||
"syncjob_EXIT_AUTHENTICATION_FAILURE": "Hitelesítési probléma",
|
||||
"syncjob_EXIT_OVERQUOTA": "A cél postafiók túllépte a kvótát",
|
||||
"syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Nem lehet csatlakozni a távoli szerverhez",
|
||||
"syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Hibás felhasználónév vagy jelszó",
|
||||
"templates": "Sablonok",
|
||||
"template": "Sablon",
|
||||
"tls_map_policy": "Irányelv",
|
||||
"tls_policy_maps": "TLS irányelv térképek",
|
||||
"tls_policy_maps_enforced_tls": "Ezek az irányelvek felülírják a kimenő TLS szállítási szabályokat függetlenül a felhasználó TLS irányelvi beállításaitól. Ha nincs alább egyetlen irányelv sem, ezek a felhasználók az alapértelmezett értékeket alkalmazzák, amelyeket a <code>smtp_tls_mandatory_protocols</code> és a <code>smtp_tls_mandatory_ciphers</code> határoz meg.",
|
||||
"tls_policy_maps_info": "Ez az irányelv térkép felülírja a kimenő TLS szállítási szabályokat függetlenül a felhasználó TLS irányelvi beállításaitól.<br>\r\n Kérjük, ellenőrizze a <a href=\"http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps\" target=\"_blank\">\"smtp_tls_policy_maps\" dokumentációját</a> további információkért.",
|
||||
"tls_policy_maps_long": "Kimenő TLS irányelv térkép felülírások",
|
||||
"yes": "✓"
|
||||
},
|
||||
"oauth2": {
|
||||
"access_denied": "Kérjük jelentkezzen be postafiók felhasználójával az OAuth2 használatához.",
|
||||
@@ -301,7 +686,7 @@
|
||||
"medium_danger": "Közepes veszély",
|
||||
"neutral_danger": "Semleges",
|
||||
"notified": "Értesítve",
|
||||
"qinfo": "A karantén-rendszer elmenti a visszautasított leveleket az adatbázisba, miközben a feladónak nem lesz az a benyomása, hogy a levelet kézbesítették.\r\n <br>\"Spamnek jelölés és törlés\" spam-ként jegyzi meg az üzenetet a Bayes-tétel segítségével, illetve fuzzy hash-eket számít, hogy hasonló üzenetek is spam-be kerüljenek a jövőben.\r\n <br>Több üzenet spamként való megjegyzése időigényes lehet.<br>Feketelistára vett levelek nem kerülnek karanténba.",
|
||||
"qinfo": "A karantén-rendszer elmenti a visszautasított leveleket az adatbázisba, miközben a feladónak nem lesz az a benyomása, hogy a levelet kézbesítették.\r\n <br>\"Spamnek jelölés és törlés\" spam-ként jegyzi meg az üzenetet a Bayes-tétel segítségével, illetve fuzzy hash-eket számít, hogy hasonló üzenetek is spam-be kerüljenek a jövőben.\r\n <br>Több üzenet spamként való megjegyzése időigényes lehet.<br>Tiltólistára vett levelek nem kerülnek karanténba.",
|
||||
"qitem": "Tétel",
|
||||
"quarantine": "Karantén",
|
||||
"quick_actions": "Műveletek",
|
||||
@@ -324,10 +709,38 @@
|
||||
"table_size_show_n": "%s tétel mutatása",
|
||||
"text_from_html_content": "Tartalom (konvertált html)",
|
||||
"text_plain_content": "Tartalom (sima szöveg)",
|
||||
"toggle_all": "Összes átkapcsolása"
|
||||
"toggle_all": "Összes átkapcsolása",
|
||||
"check_hash": "Fájl hash keresése @ VT",
|
||||
"confirm": "Megerősítés",
|
||||
"deliver_inbox": "Kézbesítés a beérkező mappába",
|
||||
"disabled_by_config": "A jelenlegi rendszerkonfiguráció letiltja a karantén funkcionalitást. Kérjük, állítsa be a \"megőrzéseket postafiókonként\" és a \"maximális méretet\" a karantén elemek számára.",
|
||||
"info": "Információ",
|
||||
"junk_folder": "Levélszemét mappa",
|
||||
"qhandler_success": "A kérés sikeresen elküldve a rendszernek. Most már bezárhatja az ablakot.",
|
||||
"qid": "Rspamd QID",
|
||||
"rejected": "Elutasítva",
|
||||
"release_body": "A levelét eml fájlként csatoltuk ehhez az üzenethez.",
|
||||
"rewrite_subject": "Tárgy átírása",
|
||||
"settings_info": "A karanténba helyezhető elemek maximális száma: %s<br>Maximális e-mail méret: %s MiB",
|
||||
"spam": "Spam",
|
||||
"quick_info_link": "Információs link megnyitása",
|
||||
"type": "Típus"
|
||||
},
|
||||
"queue": {
|
||||
"queue_manager": "Queue Manager"
|
||||
"queue_manager": "Queue Manager",
|
||||
"delete": "Összes törlése",
|
||||
"flush": "Üzenetsor ürítése",
|
||||
"info": "A levelezési üzenetsor tartalmazza az összes kézbesítésre váró e-mailt. Ha egy e-mail hosszú ideig ragad az üzenetsorban, a rendszer automatikusan törli.<br>A megfelelő levél hibaüzenete tájékoztatást ad arról, miért nem lehetett a levelet kézbesíteni.",
|
||||
"legend": "A levelezési üzenetsor műveleti funkciói:",
|
||||
"ays": "Kérjük, erősítse meg, hogy törölni szeretné az összes elemet az aktuális üzenetsorból.",
|
||||
"deliver_mail": "Kézbesítés",
|
||||
"deliver_mail_legend": "Megpróbálja újra kézbesíteni a kiválasztott leveleket.",
|
||||
"hold_mail": "Visszatartás",
|
||||
"hold_mail_legend": "Visszatartja a kiválasztott leveleket. (Megakadályozza a további kézbesítési kísérleteket)",
|
||||
"show_message": "Üzenet megjelenítése",
|
||||
"unban": "üzenetsor tiltás feloldása",
|
||||
"unhold_mail": "Visszatartás feloldása",
|
||||
"unhold_mail_legend": "Kiadja a kiválasztott leveleket a kézbesítéshez. (Előzetes visszatartás szükséges)"
|
||||
},
|
||||
"start": {
|
||||
"help": "Súgó panel megjelenítése/elrejtése",
|
||||
@@ -380,7 +793,49 @@
|
||||
"resource_modified": "Postafiók %s módosításai mentve",
|
||||
"resource_removed": "Erőforrás %s eltávolítva",
|
||||
"saved_settings": "Beállítások mentve",
|
||||
"upload_success": "File sikeresen feltöltve"
|
||||
"upload_success": "File sikeresen feltöltve",
|
||||
"acl_saved": "Az ACL a(z) %s objektumhoz mentve",
|
||||
"bcc_deleted": "BCC térkép bejegyzések törölve: %s",
|
||||
"bcc_edited": "BCC térkép bejegyzés %s szerkesztve",
|
||||
"bcc_saved": "BCC térkép bejegyzés mentve",
|
||||
"cors_headers_edited": "A CORS beállítások mentve",
|
||||
"custom_login_modified": "A bejelentkezési testreszabás sikeresen mentve",
|
||||
"domain_add_dkim_available": "Egy DKIM kulcs már létezett",
|
||||
"dkim_duplicated": "A DKIM kulcs a(z) %s tartományhoz sikeresen átmásolva a(z) %s tartományba",
|
||||
"domain_footer_modified": "A(z) %s tartományi lábléc módosításai mentve",
|
||||
"f2b_banlist_refreshed": "A tiltólista azonosítója sikeresen frissítve.",
|
||||
"f2b_modified": "A Fail2ban paraméterek módosításai mentve",
|
||||
"forwarding_host_added": "A továbbító állomás %s hozzáadva",
|
||||
"forwarding_host_removed": "A továbbító állomás %s eltávolítva",
|
||||
"iam_test_connection": "Kapcsolat sikeres",
|
||||
"ip_check_opt_in_modified": "Az IP ellenőrzés sikeresen mentve",
|
||||
"nginx_reloaded": "Az Nginx újra lett töltve",
|
||||
"password_policy_saved": "A jelszó házirend sikeresen mentve",
|
||||
"password_changed_success": "A jelszó sikeresen megváltoztatva",
|
||||
"pushover_settings_edited": "A Pushover beállítások sikeresen elmentve, kérjük, ellenőrizze a hitelesítő adatokat.",
|
||||
"queue_command_success": "A sor parancs sikeresen befejeződött",
|
||||
"recipient_map_entry_deleted": "A címzett térkép ID %s törölve",
|
||||
"recipient_map_entry_saved": "A címzett térkép bejegyzés \"%s\" mentve",
|
||||
"recovery_email_sent": "Helyreállítási e-mail elküldve a(z) %s címre",
|
||||
"relayhost_added": "A térkép bejegyzés %s hozzáadva",
|
||||
"relayhost_removed": "A térkép bejegyzés %s eltávolítva",
|
||||
"reset_main_logo": "Visszaállítás alapértelmezett logóra",
|
||||
"rl_saved": "Arányszám-korlát a(z) %s objektumhoz mentve",
|
||||
"rspamd_ui_pw_set": "Rspamd UI jelszó sikeresen beállítva",
|
||||
"settings_map_added": "Hozzáadott beállítási térkép bejegyzés",
|
||||
"settings_map_removed": "Eltávolított beállítási térkép ID %s",
|
||||
"sogo_profile_reset": "A SOGo profil a(z) %s felhasználóhoz visszaállítva",
|
||||
"template_added": "Hozzáadott sablon %s",
|
||||
"template_modified": "A(z) %s sablon módosításai mentve",
|
||||
"template_removed": "A sablon ID %s törölve",
|
||||
"tls_policy_map_entry_deleted": "TLS irányelv térkép ID %s törölve",
|
||||
"tls_policy_map_entry_saved": "TLS irányelv térkép bejegyzés \"%s\" mentve",
|
||||
"ui_texts": "A felhasználói felület szövegeinek módosításai mentve",
|
||||
"verified_fido2_login": "FIDO2 bejelentkezés ellenőrizve",
|
||||
"verified_totp_login": "TOTP bejelentkezés ellenőrizve",
|
||||
"verified_webauthn_login": "WebAuthn bejelentkezés ellenőrizve",
|
||||
"verified_yotp_login": "Yubico OTP bejelentkezés ellenőrizve",
|
||||
"mailbox_renamed": "A postafiók átnevezve %s-ről %s-re"
|
||||
},
|
||||
"user": {
|
||||
"action": "Művelet",
|
||||
@@ -449,15 +904,14 @@
|
||||
"spam_score_reset": "Szerver szerinti alapértelmezésre visszaállítás",
|
||||
"spamfilter": "Spam szűrő",
|
||||
"spamfilter_behavior": "Osztályozás",
|
||||
"spamfilter_bl": "Feketelista",
|
||||
"spamfilter_bl_desc": "A feketelistán szereplő email címek mindig spam-ként lesznek kezelve és vissza lesznek utasítva. Joker karakter használható. A szűrő csak közvetlen aliasokra vonatkozik (alias egyetlen cél-postafiókkal), magára a postafiókra, illetve mindent elkapó aliasokra nem.",
|
||||
"spamfilter_bl": "Tiltólista",
|
||||
"spamfilter_bl_desc": "A tiltólistán szereplő email címek mindig spam-ként lesznek kezelve és vissza lesznek utasítva. Joker karakter használható. A szűrő csak közvetlen aliasokra vonatkozik (alias egyetlen cél-postafiókkal), magára a postafiókra, illetve mindent elkapó aliasokra nem.",
|
||||
"spamfilter_default_score": "Alapértelmezett értékek",
|
||||
"spamfilter_green": "Zöld: ez az üzenet nem spam",
|
||||
"spamfilter_hint": "Az első érték az alacsony spam pontszámot, a második a magas spam pontszámot jelöli.",
|
||||
"spamfilter_red": "Vörös: Ez az üzenet spam, a szerver el fogja vetni.",
|
||||
"spamfilter_table_action": "Művelet",
|
||||
"spamfilter_table_add": "Tétel hozzáadása",
|
||||
"spamfilter_table_empty": "Nincs megjeleníthető adat",
|
||||
"spamfilter_table_remove": "eltávolítás",
|
||||
"spamfilter_table_rule": "Szabály",
|
||||
"spamfilter_wl": "Engedélyezőlista",
|
||||
@@ -482,15 +936,88 @@
|
||||
"waiting": "Várakozás",
|
||||
"week": "hét",
|
||||
"weekly": "heti",
|
||||
"weeks": "hét"
|
||||
"weeks": "hét",
|
||||
"aliases_also_send_as": "Küldhet még mint felhasználó",
|
||||
"aliases_send_as_all": "Ne ellenőrizze a küldő hozzáférését a következő tartomány(ok) és annak alias tartományai számára",
|
||||
"app_hint": "Az alkalmazás jelszavak alternatív jelszavak az IMAP, SMTP, CalDAV, CardDAV és EAS bejelentkezéshez. A felhasználónév változatlan marad. A SOGo webmail nem érhető el az alkalmazás jelszavakon keresztül.",
|
||||
"allowed_protocols": "Engedélyezett protokollok",
|
||||
"apple_connection_profile_complete": "Ez a kapcsolati profil tartalmazza az IMAP és SMTP paramétereket, valamint a CalDAV (naptárak) és CardDAV (névjegyek) útvonalakat egy Apple eszközhöz.",
|
||||
"apple_connection_profile_mailonly": "Ez a kapcsolati profil csak IMAP és SMTP konfigurációs paramétereket tartalmaz egy Apple eszközhöz.",
|
||||
"apple_connection_profile_with_app_password": "Új alkalmazás jelszó generálódik és hozzáadódik a profilhoz, így nem kell jelszót megadni az eszköz beállításakor. Kérjük, ne ossza meg a fájlt, mivel teljes hozzáférést biztosít a postafiókjához.",
|
||||
"attribute": "Attribútum",
|
||||
"authentication": "Hitelesítés",
|
||||
"change_password_hint_app_passwords": "Fiókodnak %d alkalmazás jelszava van, amelyek nem lesznek megváltoztatva. Ezek kezeléséhez menj az Alkalmazás jelszavak fülre.",
|
||||
"clear_recent_successful_connections": "Sikeres kapcsolatok törlése",
|
||||
"created_on": "Létrehozva",
|
||||
"direct_aliases_desc": "A közvetlen alias címeket érintik a spam szűrő és a TLS irányelv beállításai.",
|
||||
"direct_protocol_access": "Ennek a postafiók felhasználónak <b>közvetlen, külső hozzáférése</b> van a következő protokollokhoz és alkalmazásokhoz. Ezt a beállítást az adminisztrátor vezérli. Az alkalmazás jelszavak létrehozhatók, hogy hozzáférést biztosítsanak az egyedi protokollokhoz és alkalmazásokhoz.<br>A \"Webmail\" gomb egységes bejelentkezést biztosít a SOGo-ra, és mindig elérhető.",
|
||||
"eas_reset_help": "Sok esetben a eszköz gyorsítótárának visszaállítása segít egy sérült ActiveSync profil helyreállításában.<br><b>Figyelem:</b> Minden elem újra letöltődik!",
|
||||
"empty": "Nincs eredmény",
|
||||
"from": "feladó",
|
||||
"is_catch_all": "Catch-all a tartomány(ok)hoz",
|
||||
"last_pw_change": "Utolsó jelszócsere",
|
||||
"last_ui_login": "Utolsó UI bejelentkezés",
|
||||
"login_history": "Bejelentkezési előzmények",
|
||||
"mailbox": "Postafiók",
|
||||
"mailbox_general": "Általános",
|
||||
"mailbox_settings": "Beállítások",
|
||||
"month": "hónap",
|
||||
"months": "hónap",
|
||||
"open_logs": "Naplók megnyitása",
|
||||
"open_webmail_sso": "Webmail",
|
||||
"overview": "Áttekintés",
|
||||
"password_reset_info": "Ha nincs megadva e-mail a jelszó-helyreállításhoz, ez a funkció nem használható.",
|
||||
"protocols": "Protokollok",
|
||||
"pushover_evaluate_x_prio": "Magas prioritású levelek továbbítása [<code>X-Priority: 1</code>]",
|
||||
"pushover_info": "A push értesítési beállítások az összes tiszta (nem-spam) levélre vonatkoznak, amelyeket a <b>%s</b> címre kézbesítettek, beleértve az aliasokat is (megosztott, nem megosztott, címkézett).",
|
||||
"pushover_only_x_prio": "Csak a magas prioritású leveleket vegye figyelembe [<code>X-Priority: 1</code>]",
|
||||
"pushover_sender_array": "A következő feladói e-mail címek figyelembe vétele <small>(vesszővel elválasztva)</small>",
|
||||
"pushover_sender_regex": "Feladók egyeztetése a következő regex-szel",
|
||||
"pushover_text": "Értesítési szöveg",
|
||||
"pushover_title": "Értesítési cím",
|
||||
"pushover_sound": "Hang",
|
||||
"pushover_vars": "Ha nincs feladói szűrő meghatározva, minden e-mail figyelembe vételre kerül.<br>A Regex szűrők, valamint a pontos feladói ellenőrzések egyénileg definiálhatók, és sorban lesznek figyelembe véve. Nem függenek egymástól.<br>Használható változók a szöveghez és a címhez (kérjük, vegye figyelembe az adatvédelmi szabályzatokat)",
|
||||
"pushover_verify": "Hitelesítő adatok ellenőrzése",
|
||||
"pw_recovery_email": "Jelszó-helyreállítási e-mail",
|
||||
"q_add_header": "Levélszemét mappa",
|
||||
"q_all": "Összes kategória",
|
||||
"q_reject": "Elutasítva",
|
||||
"quarantine_category": "Karantén értesítési kategória",
|
||||
"quarantine_category_info": "Az \"Elutasítva\" értesítési kategória magában foglalja azokat a leveleket, amelyeket elutasítottak, míg a \"Levélszemét mappa\" értesíti a felhasználót a levélszemét mappába helyezett levelekről.",
|
||||
"recent_successful_connections": "Látott sikeres kapcsolatok",
|
||||
"shared_aliases_desc": "A megosztott aliasokat nem érintik a felhasználóspecifikus beállítások, mint a spam szűrő vagy a titkosítási szabályzat. A megfelelő spam szűrőket csak egy adminisztrátor hozhatja létre tartományszintű szabályzatként.",
|
||||
"sogo_profile_reset": "SOGo profil visszaállítása",
|
||||
"sogo_profile_reset_help": "Ez tönkreteszi a felhasználó SOGo profilját, és <b>visszavonhatatlanul törli az összes névjegy- és naptáradatot</b>.",
|
||||
"sogo_profile_reset_now": "Profil visszaállítása most",
|
||||
"spamfilter_table_domain_policy": "n/a (tartományi szabályzat)",
|
||||
"syncjob_check_log": "Napló ellenőrzése",
|
||||
"syncjob_last_run_result": "Utolsó futás eredménye",
|
||||
"syncjob_EX_OK": "Siker",
|
||||
"syncjob_EXIT_CONNECTION_FAILURE": "Kapcsolati probléma",
|
||||
"syncjob_EXIT_TLS_FAILURE": "Probléma a titkosított kapcsolattal",
|
||||
"syncjob_EXIT_AUTHENTICATION_FAILURE": "Hitelesítési probléma",
|
||||
"syncjob_EXIT_OVERQUOTA": "A cél postafiók túllépte a kvótát",
|
||||
"syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Nem lehet csatlakozni a távoli szerverhez",
|
||||
"syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Hibás felhasználónév vagy jelszó",
|
||||
"tfa_info": "A kétlépcsős hitelesítés segít megvédeni a fiókodat. Ha engedélyezed, alkalmazás jelszavakra lesz szükséged, hogy bejelentkezz olyan alkalmazásokba vagy szolgáltatásokba, amelyek nem támogatják a kétlépcsős hitelesítést (pl. levelező kliensek).",
|
||||
"tls_policy_warning": "<strong>Figyelem:</strong> Ha titkosított levélátvitelt kényszerítesz ki, elveszíthetsz e-maileket.<br>Azok az üzenetek, amelyek nem felelnek meg a szabályzatnak, kemény hibával visszapattannak a levelezőrendszerből.<br>Ez az opció a fő e-mail címedre (bejelentkezési név), az alias tartományokból származó összes címre, valamint az alias címekre vonatkozik, amelyeknek <b>csak ez az egy postafiók</b> a célja.",
|
||||
"value": "Érték",
|
||||
"with_app_password": "alkalmazás jelszóval",
|
||||
"year": "év",
|
||||
"years": "év"
|
||||
},
|
||||
"warning": {
|
||||
"cannot_delete_self": "Bejelentkezett felhasználó nem törölhető.",
|
||||
"ip_invalid": "Érvénytelen IP-cím átugorva: %s",
|
||||
"ip_invalid": "Érvénytelen IP cím átugorva: %s",
|
||||
"no_active_admin": "Utolsó aktív admin felhasználó nem deaktiválható.",
|
||||
"quota_exceeded_scope": "Domain kvóta átlépve: csak korlátok nélküli postafiókok hozhatók létre ebben a domain-ben.",
|
||||
"session_token": "Űrlap-token érvénytelen: Tokenek nem egyeznek",
|
||||
"session_ua": "Űrlap-token érvénytelen: User-Agent hitelesítési probléma"
|
||||
"session_token": "Űrlaptoken érvénytelen: Tokenek nem egyeznek",
|
||||
"session_ua": "Űrlaptoken érvénytelen: User-Agent hitelesítési probléma",
|
||||
"domain_added_sogo_failed": "A tartomány hozzáadva, de a SOGo újraindítása sikertelen, kérjük, ellenőrizze a szerver naplókat.",
|
||||
"dovecot_restart_failed": "A Dovecot újraindítása sikertelen, kérjük, ellenőrizze a naplókat",
|
||||
"fuzzy_learn_error": "Fuzzy hash tanulási hiba: %s",
|
||||
"hash_not_found": "A hash nem található vagy már törölve lett",
|
||||
"is_not_primary_alias": "Nem elsődleges alias %s kihagyva"
|
||||
},
|
||||
"acl": {
|
||||
"delimiter_action": "Elhatárolás",
|
||||
@@ -516,15 +1043,24 @@
|
||||
"smtp_ip_access": "Az SMTP engedélyezett állomásainak módosítása",
|
||||
"sogo_profile_reset": "SOGo profil visszaállítása",
|
||||
"spam_alias": "Ideiglenes álnevek",
|
||||
"spam_policy": "Fekete/Fehér lista",
|
||||
"spam_policy": "Tiltó/engedélyezési lista",
|
||||
"spam_score": "Spam pontszám",
|
||||
"syncjobs": "Szinkronizálási feladatok",
|
||||
"tls_policy": "TLS szabályzat",
|
||||
"unlimited_quota": "Korlátlan kvóta a postafiókok számára",
|
||||
"sogo_access": "A SOGo-hozzáférés kezelésének lehetővé tétele"
|
||||
"sogo_access": "A SOGo-hozzáférés kezelésének lehetővé tétele",
|
||||
"pw_reset": "Lehetővé teszi a mailcow felhasználói jelszavak visszaállítását"
|
||||
},
|
||||
"diagnostics": {
|
||||
"dns_records": "DNS bejegyzések"
|
||||
"dns_records": "DNS bejegyzések",
|
||||
"cname_from_a": "Az A/AAAA rekordból származó érték. Ez addig támogatott, amíg a rekord a megfelelő erőforrásra mutat.",
|
||||
"dns_records_24hours": "Kérjük, vegye figyelembe, hogy a DNS-ben végrehajtott változtatások akár 24 órát is igénybe vehetnek, amíg a jelenlegi állapotuk helyesen megjelenik ezen az oldalon. Ez a célja, hogy könnyen láthassa, hogyan kell konfigurálnia a DNS rekordokat, és ellenőrizze, hogy az összes rekordja helyesen van-e tárolva a DNS-ben.",
|
||||
"dns_records_data": "Helyes adatok",
|
||||
"dns_records_docs": "Kérjük, konzultáljon a <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">dokumentációval</a> is.",
|
||||
"dns_records_name": "Név",
|
||||
"dns_records_status": "Jelenlegi állapot",
|
||||
"dns_records_type": "Típus",
|
||||
"optional": "Ez a rekord opcionális."
|
||||
},
|
||||
"add": {
|
||||
"username": "Felhasználónév",
|
||||
@@ -588,6 +1124,22 @@
|
||||
"alias_domain": "Alias domain",
|
||||
"alias_domain_info": "<small>Csak érvényes tartománynevek (vesszővel elválasztva).</small>",
|
||||
"app_name": "Alkalmazás neve",
|
||||
"app_passwd_protocols": "Engedélyezett protokollok az alkalmazás jelszavához"
|
||||
"app_passwd_protocols": "Engedélyezett protokollok az alkalmazás jelszavához",
|
||||
"automap": "Próbálja automatikusan feltérképezni a mappákat (\"Elküldött elemek\", \"Elküldött\" => \"Elküldött\" stb.)",
|
||||
"multiple_bookings": "Több foglalás",
|
||||
"quota_mb": "Kvóta (MiB)",
|
||||
"relay_all": "Az összes címzett továbbítása",
|
||||
"relay_all_info": "↪ Ha úgy döntesz, hogy <b>nem</b> továbbítod az összes címzettet, akkor minden egyes címzett számára, akit továbbítani kell, létre kell hoznod egy (\"vak\") postafiókot.",
|
||||
"relay_domain": "Továbbítsa ezt a tartományt",
|
||||
"relay_transport_info": "<div class=\"badge fs-6 bg-info\">Információ</div> Definiálhatsz szállítási térképeket ehhez a tartományhoz egyedi célállomásra. Ha nincs beállítva, egy MX lekérdezés történik.",
|
||||
"relay_unknown_only": "Csak a nem létező postafiókok továbbítása. A létező postafiókok helyben lesznek kézbesítve.",
|
||||
"relayhost_wrapped_tls_info": "Kérjük, <b>ne</b> használjon TLS-be csomagolt portokat (többnyire a 465-ös porton használatosak).<br>\r\nHasználjon bármilyen nem csomagolt portot és adjon ki STARTTLS-t. A TLS kikényszerítésére egy TLS irányelv hozható létre a \"TLS irányelv térképek\" alatt.",
|
||||
"select": "Kérjük, válasszon...",
|
||||
"select_domain": "Kérjük, először válasszon egy domaint",
|
||||
"sieve_desc": "Rövid leírás",
|
||||
"sieve_type": "Szűrő típusa",
|
||||
"skipcrossduplicates": "Duplikált üzenetek átugrása mappák között (érkezési sorrendben)",
|
||||
"subscribeall": "Feliratkozás minden mappára",
|
||||
"syncjob": "Szinkronizálási feladat hozzáadása"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,16 +39,16 @@
|
||||
"alias_domain_info": "<small>Tikai derīgi domēna vārdi (komatu atdalīti).</small>",
|
||||
"automap": "Mēģiniet automatizēt mapes (\"Nosūtītie vienumi\", \"Nosūtītie\" => \"Nosūtītie\" etc.)",
|
||||
"backup_mx_options": "Dublējuma MX iespējas",
|
||||
"delete1": "Dzēst no avota, kad tas ir pabeigts",
|
||||
"delete1": "Izdzēst no avota pēc pabeigšanas",
|
||||
"delete2": "Dzēsiet ziņojumus galamērķī, kas nav avotā",
|
||||
"delete2duplicates": "Dzēst dublikātus galamērķī",
|
||||
"delete2duplicates": "Izdzēst atkārtojošos vienumus galamērķī",
|
||||
"description": "Apraksts",
|
||||
"domain": "Domēns",
|
||||
"domain_quota_m": "Kopējā domēna kvota (MiB)",
|
||||
"enc_method": "Šifrēšanas metode",
|
||||
"exclude": "Izslēgt objektus (regex)",
|
||||
"full_name": "Pilns vārds",
|
||||
"goto_null": "Klusām dzēst pastu",
|
||||
"goto_null": "Klusām atmest pastu",
|
||||
"hostname": "Saimniekdators",
|
||||
"kind": "Veids",
|
||||
"mailbox_quota_m": "Maks. kvota pastkastei (MiB)",
|
||||
@@ -77,12 +77,13 @@
|
||||
"target_domain": "Mērķa domēns",
|
||||
"username": "Lietotājvārds",
|
||||
"validate": "Apstiprināt",
|
||||
"validation_success": "Apstiprināts veiksmīgi",
|
||||
"validation_success": "Sekmīgi apstiprināts",
|
||||
"bcc_dest_format": "BCC galamērķim ir jābūt vienai derīgai e-pasta adresei.<br>Ja ir nepieciešams nosūtīt kopiju vairākām adresēm, jāizveido aizstājvārds un jāizmanto tas šeit.",
|
||||
"domain_matches_hostname": "Domēns %s atbilst saimniekdatora nosaukumam",
|
||||
"disable_login": "Neļaut pieteikšanos (ienākošais pasts joprojām tiks pieņemts)",
|
||||
"app_password": "Pievienot lietotnes paroli",
|
||||
"app_passwd_protocols": "Atļautie lietotnes paroles protokoli"
|
||||
"app_passwd_protocols": "Atļautie lietotnes paroles protokoli",
|
||||
"goto_spam": "Apgūt kā <span class=\"text-danger\"><b>mēstuli</b></span>"
|
||||
},
|
||||
"admin": {
|
||||
"access": "Pieeja",
|
||||
@@ -115,14 +116,14 @@
|
||||
"domain": "Domēns",
|
||||
"domain_admins": "Domēna administratori",
|
||||
"edit": "Labot",
|
||||
"empty": "Nav rezultātu",
|
||||
"empty": "Nav iznākuma",
|
||||
"f2b_ban_time": "Aizlieguma laiks (s)",
|
||||
"f2b_max_attempts": "Maks. piegājieni",
|
||||
"f2b_netban_ipv4": "IPv4 apakštīkla izmērs, lai piemērotu aizliegumu uz (8-32)",
|
||||
"f2b_netban_ipv6": "IPv6 apakštīkla izmērs, lai piemērotu aizliegumu uz (8-128)",
|
||||
"f2b_parameters": "Fail2ban parametri",
|
||||
"f2b_retry_window": "Atkārtošanas logs (s) priekš maks. piegājiena",
|
||||
"f2b_whitelist": "Baltā saraksta tīkls/hosts",
|
||||
"f2b_whitelist": "Atļautie tīkli/resursdatori",
|
||||
"filter_table": "Filtru tabula",
|
||||
"forwarding_hosts": "Hostu pārsūtīšana",
|
||||
"forwarding_hosts_add_hint": "Var norādīt vai nu IPv4/IPv6 adreses, tīklu ar CIDR apzīmējumu, saimniekdatoru nosaukumus (kas tiks atrisināti IP adresēs) vai arī domēna vārdus (kas tiks atrisināti IP adresēs, vaicājot SPF ierakstus, vai, ja tādu nav, MX ierakstus).",
|
||||
@@ -181,7 +182,10 @@
|
||||
"rspamd_com_settings": "Iestatījuma nosaukums tiks izveidots automātiski. Lūgums zemāk skatīt priekšiestatījumu piemērus. Vairāk informācijas ir <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd dokumentācijā</a>",
|
||||
"reset_password_vars": "<code>{{link}}</code> Izveidotā paroles atiestatīšanas saite<br><code>{{username}}</code> Lietotāja, kurš pieprasīja paroles atiestatīšanu, pastkastes nosaukums<br><code>{{username2}}</code> Atkopšanas pastkastes nosaukums<br><code>{{date}}</code> Paroles atiestatīšanas pieprasījuma veikšanas datums<br><code>{{token_lifetime}}</code> Pilnvaras derīgums minūtēs<br><code>{{hostname}}</code> mailcow saimniekdatora nosaukums",
|
||||
"ui_header_announcement_help": "Paziņojums ir redzams visiem lietotājiem, kuri ir pieteikušies, un pieteikšanās ekrānā saskarnē.",
|
||||
"login_time": "Pieteikšanās laiks"
|
||||
"login_time": "Pieteikšanās laiks",
|
||||
"iam_version": "Versija",
|
||||
"quarantine_max_age": "Lielākais pieļaujamais vecums dienās<br><small>Vērtībai jābūt vienādai ar vai lielākai par 1 dienu.</small>",
|
||||
"quarantine_max_score": "Atmest paziņojumu, ja e-pasta ziņojuma mēstuļu novērtējums ir augstāks par šo vērtību:<br><small>Noklusējums ir 9999.0</small>"
|
||||
},
|
||||
"danger": {
|
||||
"access_denied": "Piekļuve liegta, vai nepareizi dati",
|
||||
@@ -201,8 +205,8 @@
|
||||
"goto_empty": "Aizstājādresei jāsatur vismaz viena derīga mērķa adrese",
|
||||
"goto_invalid": "Goto adrese nepareiza",
|
||||
"imagick_exception": "Kļūda: Imagick izņēmums, lasot attēlu",
|
||||
"img_invalid": "Nevar apstiprināt attēla failu",
|
||||
"img_tmp_missing": "Nevar apstiprināt attēla failu: pagaidu failu nav atrasts",
|
||||
"img_invalid": "Nevar apstiprināt attēla datni",
|
||||
"img_tmp_missing": "Nevar apstiprināt attēla datni: pagaidu datne nav atrasta",
|
||||
"invalid_mime_type": "Nederīgs mime tips",
|
||||
"is_alias": "%s jau ir zināma kā aizstājadrese",
|
||||
"is_alias_or_mailbox": "%s jau ir zināms kā aizstājvārds, pastkaste vai aizstājadrese, kas ir izvērsta no aizstājdomēna.",
|
||||
@@ -234,7 +238,10 @@
|
||||
"username_invalid": "Lietotājvārds nevar tikt izmantots",
|
||||
"validity_missing": "Lūdzu piešķiriet derīguma termiņu",
|
||||
"domain_cannot_match_hostname": "Domēns nevar atbilst saimniekdatora nosaukumam",
|
||||
"app_passwd_id_invalid": "Lietotnes paroles Id %s ir nederīgs"
|
||||
"app_passwd_id_invalid": "Lietotnes paroles Id %s ir nederīgs",
|
||||
"img_dimensions_exceeded": "Attēls pārsniedz lielāko pieļaujamo attēla lielumu",
|
||||
"img_size_exceeded": "Attēls pārsniedz lielāko pieļaujamo datnes lielumu",
|
||||
"version_invalid": "Versija %s ir nederīga"
|
||||
},
|
||||
"diagnostics": {
|
||||
"cname_from_a": "Vērtība, kas iegūta no A/AAAA ieraksta. Tas tiek atbalstīts tik ilgi, kamēr ieraksts norāda uz pareizo resursu.",
|
||||
@@ -251,9 +258,9 @@
|
||||
"alias": "Labot aizstājvārdu",
|
||||
"automap": "Mēģiniet automatizēt mapes (\"Nosūtītie vienumi\", \"Nosūtītie\" => \"Nosūtītie\" utt.)",
|
||||
"backup_mx_options": "Dublēt MX iespējas",
|
||||
"delete1": "Dzēst no avota, kad pabeigts",
|
||||
"delete1": "Izdzēst no avota pēc pabeigšanas",
|
||||
"delete2": "Dzēsiet ziņojumus galamērķī, kas nav avotā",
|
||||
"delete2duplicates": "Dzēst dublikātus galamērķī",
|
||||
"delete2duplicates": "Izdzēst atkārtojošos vienumus galamērķī",
|
||||
"description": "Apraksts",
|
||||
"domain": "Labot domēnu",
|
||||
"domain_admin": "Labot domēna administratoru",
|
||||
@@ -273,7 +280,7 @@
|
||||
"max_aliases": "Lielākais aizstājvārdu skaits",
|
||||
"max_mailboxes": "Maks. iespējamās pastkastes",
|
||||
"max_quota": "Maks. kvota uz pastkasti (MiB)",
|
||||
"maxage": "Lielākais ziņojumu, kuri tiks vaicāti attālajā serverī, vecums dienās<br><small>(0 = neņemt vērā vecumu)</small>",
|
||||
"maxage": "Lielākais pieļaujamais ziņojumu, kuri tiks vaicāti attālajā serverī, vecums dienās<br><small>(0 = neņemt vērā vecumu)</small>",
|
||||
"maxbytespersecond": "Maks. baiti sekundē (0 ir vienāds ar neierobežotu skaitu)",
|
||||
"mins_interval": "Intervāls (min)",
|
||||
"multiple_bookings": "Vairāki rezervējumi",
|
||||
@@ -292,8 +299,8 @@
|
||||
"sieve_type": "Filtra tips",
|
||||
"skipcrossduplicates": "Izlaist dublētus ziņojumus pa mapēm (pirmais nāk, pirmais kalpo)",
|
||||
"spam_alias": "Izveidot vai mainīt laika ierobežotas aizstājadreses",
|
||||
"spam_policy": "Pievienot vai noņemt vienumus baltajā-/melnajā sarakstā",
|
||||
"spam_score": "Iestatīt pielāgotu surogātpasta vērtējumu",
|
||||
"spam_policy": "Pievienot vai noņemt vienumus atļautajā/liegumu sarakstā",
|
||||
"spam_score": "Iestatīt pielāgotu mēstules vērtējumu",
|
||||
"subfolder2": "Sinhronizēt galamērķa apakšmapē<br><small>(tukšs = neizmantot apakšmapi)</small>",
|
||||
"syncjob": "Labot sinhronizācijas darbu",
|
||||
"target_address": "Mērķa adrese/s <small>(atdalītas ar komatu)</small>",
|
||||
@@ -316,17 +323,21 @@
|
||||
"disable_login": "Neļaut pieteikšanos (ienākošais pasts joprojām tiks pieņemts)",
|
||||
"app_passwd_protocols": "Atļautie lietotnes paroles protokoli",
|
||||
"allowed_protocols": "Atļautie protokoli tiešai lietotāja piekļuvei (neietekmē lietotnes paroles protokolus)",
|
||||
"app_passwd": "Lietotnes parole"
|
||||
"app_passwd": "Lietotnes parole",
|
||||
"mta_sts_version": "Versija",
|
||||
"mta_sts_version_info": "Norāda MTA-STS standarta versiju – pašreiz ir derīga tikai <code>STSv1</code>.",
|
||||
"sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">Sūtītāja pārbaude ir atspējota</span>"
|
||||
},
|
||||
"footer": {
|
||||
"cancel": "Atcelt",
|
||||
"confirm_delete": "Apstiprināt dzēšanu",
|
||||
"delete_now": "Dzēst tagad",
|
||||
"confirm_delete": "Apstiprināt izdzēšanu",
|
||||
"delete_now": "Izdzēst tagad",
|
||||
"delete_these_items": "Lūgums apstiprināt izmaiņas šim objekta Id",
|
||||
"loading": "Lūgums uzgaidīt...",
|
||||
"restart_container": "Restartēt konteineri",
|
||||
"restart_container_info": "<b>Svarīgi:</b> nesteidzīga pārsāknēšana var aizņemt ilgāku laiku. Lūgums uzgaidīt, līdz tā tiek pabeigta.",
|
||||
"restart_now": "Pārsāknēt tagad"
|
||||
"restart_now": "Pārsāknēt tagad",
|
||||
"hibp_nok": "Sakrīt. Šī, iespējams, ir bīstama parole."
|
||||
},
|
||||
"header": {
|
||||
"administration": "Konfigurācija un informācija",
|
||||
@@ -389,7 +400,7 @@
|
||||
"domain_quota_total": "Kopējais domēna ierobežojums",
|
||||
"domains": "Domēns",
|
||||
"edit": "Labot",
|
||||
"empty": "Nav rezultātu",
|
||||
"empty": "Nav iznākuma",
|
||||
"excludes": "Izslēdzot",
|
||||
"filter_table": "Filtra tabula",
|
||||
"filters": "Filtri",
|
||||
@@ -448,13 +459,15 @@
|
||||
"add_alias_expand": "Izvērst aizstājvārdu pār aizstājdomēniem",
|
||||
"alias_domain_alias_hint": "Aizstājvārdi <b>netiek</b> automātiski piemēroti domēnu aizstājvārdiem. Aizstājadrese <code>my-alias@domain</code> <b>nenosedz</b> adresi <code>my-alias@alias-domain</code> (kur \"alias-domain\" ir iedomāts \"domain\" aizstājdomēns).<br>Lūgums izmantot sieta atlasi, lai pārvirzītu pastu uz ārēju pastkasti (skatīt cilti \"Atlasīšana\" vai izmantot SOGo -> Pārsūtītājs). \"Izvērst aizstājvārdu pār aizstājdomēniem\" ir izmantojams, lai automātiski pievienotu trūkstošos aiztājvārdus.",
|
||||
"alias_domain_backupmx": "Aizstājdomēns ir neaktīvs retranslācijas domēnam",
|
||||
"disable_login": "Neļaut pieteikšanos (ienākošais pasts joprojām tiks pieņemts)"
|
||||
"disable_login": "Neļaut pieteikšanos (ienākošais pasts joprojām tiks pieņemts)",
|
||||
"sieve_preset_1": "Atmest e-pasta vēstules ar iespējami bīstamiem datņu veidiem",
|
||||
"syncjob_last_run_result": "Pēdējās izpildes iznākums"
|
||||
},
|
||||
"quarantine": {
|
||||
"action": "Darbības",
|
||||
"atts": "Pielikumi",
|
||||
"check_hash": "Meklēt faila hašu @ VT",
|
||||
"empty": "Nav rezultātu",
|
||||
"check_hash": "Meklēt datnes jaucējvērtību @ VT",
|
||||
"empty": "Nav iznākuma",
|
||||
"qid": "Rspamd QID",
|
||||
"qitem": "Karantīnas vienumi",
|
||||
"quarantine": "Karantīna",
|
||||
@@ -463,7 +476,7 @@
|
||||
"received": "Saņemtie",
|
||||
"recipients": "Adresāts",
|
||||
"release": "Atbrīvot",
|
||||
"release_body": "Šim ziņojumam mēs esam pievienojuši jūsu ziņojumu kā eml failu.",
|
||||
"release_body": "Mēs pievienojām Tavu ziņojumu kā .eml datni šim ziņojumam.",
|
||||
"release_subject": "Potenciāli kaitīgs karantīnas vienums %s",
|
||||
"remove": "Noņemt",
|
||||
"sender": "Sūtītājs (SMTP)",
|
||||
@@ -473,8 +486,14 @@
|
||||
"text_plain_content": "Saturs (teksts/vienkāršs)",
|
||||
"toggle_all": "Pārslēgt visu",
|
||||
"disabled_by_config": "Pašreizējā sistēmas konfigurācija atspējo karantīnu. Lūgums iestatīt \"saglabāšanu katrai pastkastītei\" un \"lielākais pieļaujamais lielums\" karantīnas vienumiem.",
|
||||
"qhandler_success": "Pieprasījums veiksmīgi nosūtīts sistēmai. Tagad var aizvērt logu.",
|
||||
"qinfo": "Karantīnas sistēma datubāzē saglabās noraidīto pastu (sūtītājam <em>netiks</em> radīts iespaids par piegādātu pastu), kā arī pastu, kas tiek piegādāts kā kopija pastkastes mēstuļu mapē.\n <br>\"Apgūt kā surogātpastu un izdzēst\" apgūs ziņojumu kā surogātpastu ar Bajesa teorēmu un aprēķinās arī nestriktas jaucējvērtības, lai nākotnē noraidītu līdzīgus ziņojumus.\n <br>Lūgums apzināties, ka vairāku ziņojumu apgūšana var būt laikietilpīga atkarībā no sistēmas.<br>Melnā saraksta vienumi karantīnā netiek iekļauti."
|
||||
"qhandler_success": "Pieprasījums sekmīgi nosūtīts sistēmai. Logu tagad var aizvērt.",
|
||||
"qinfo": "Karantīnas sistēma datubāzē saglabās noraidīto pastu (sūtītājam <em>netiks</em> radīts iespaids par piegādātu pastu), kā arī pastu, kas tiek piegādāts kā kopija pastkastes mēstuļu mapē.\n <br>\"Apgūt kā surogātpastu un izdzēst\" apgūs ziņojumu kā surogātpastu ar Bajesa teorēmu un aprēķinās arī nestriktas jaucējvērtības, lai nākotnē noraidītu līdzīgus ziņojumus.\n <br>Lūgums apzināties, ka vairāku ziņojumu apgūšana var būt laikietilpīga atkarībā no sistēmas.<br>Lieguma saraksta vienumi karantīnā netiek iekļauti.",
|
||||
"danger": "Bīstamība",
|
||||
"notified": "Paziņots",
|
||||
"refresh": "Atsvaidzināt",
|
||||
"rspamd_result": "Rspamd iznākums",
|
||||
"settings_info": "Lielākais pieļaujamais karantējamo vienumu daudzums: %s<br>Lielākais pieļaujamais e-pasta lielums: %s MiB",
|
||||
"spam_score": "Novērtējums"
|
||||
},
|
||||
"queue": {
|
||||
"queue_manager": "Rindas pārvaldnieks",
|
||||
@@ -505,8 +524,8 @@
|
||||
"f2b_modified": "Fail2ban parametru izmaiņas tika saglabātas",
|
||||
"forwarding_host_added": "Pāradresācijas hosts %s pievienotsd",
|
||||
"forwarding_host_removed": "Pāradresācijas hosts %s noņemts",
|
||||
"item_deleted": "Vērtība %s veiksmīgi dzēsta",
|
||||
"items_deleted": "Vērtība %s veiksmīgi dzēsta",
|
||||
"item_deleted": "Vienums %s izdzēsts sekmīgi",
|
||||
"items_deleted": "Vienums %s izdzēsts sekmīgi",
|
||||
"items_released": "Atlasītie vienumi tika izlaisti",
|
||||
"mailbox_added": "Pastkaste %s ir pievienota",
|
||||
"mailbox_modified": "Izmaiņas pastkastei %s ir saglabātas",
|
||||
@@ -519,20 +538,21 @@
|
||||
"resource_modified": "Izmaiņas %s ir saglabātas",
|
||||
"resource_removed": "Resurs %s tika noņemts",
|
||||
"ui_texts": "Saglabāt UI izmaiņas tekstiem",
|
||||
"upload_success": "Faila augšupielāde veiksmīga",
|
||||
"upload_success": "Datne sekmīgi augšupielādēta",
|
||||
"verified_fido2_login": "Apliecināta FIDO2 pieteikšanās",
|
||||
"verified_webauthn_login": "Apliecināta WebAuthn pieteikšanās",
|
||||
"verified_totp_login": "Apliecināta TOTP pieteikšanās",
|
||||
"verified_yotp_login": "Apliecināta Yubico OTP pieteikšanās",
|
||||
"app_passwd_removed": "Noņemta lietotnes parole ar Id %s",
|
||||
"app_passwd_added": "Pievienota jauna lietotnes parole"
|
||||
"app_passwd_added": "Pievienota jauna lietotnes parole",
|
||||
"f2b_banlist_refreshed": "Liegumu saraksta Id tika sekmīgi atsvaidzināts."
|
||||
},
|
||||
"tfa": {
|
||||
"api_register": "%s izmanto Yubico Cloud API. Lūdzu iegūstiet API atslēgu priekš Jūsu atslēgas<a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">here</a>",
|
||||
"confirm": "Apstiprināt",
|
||||
"confirm_totp_token": "Lūdzu apstipriniet Jūsu izmaiņas ievadot uzģenerēto tekstu",
|
||||
"confirm_totp_token": "Lūgums apstiprināt savas izmaiņas ar izveidotās tekstvienības ievadīšanu",
|
||||
"delete_tfa": "Atspējot TFA",
|
||||
"disable_tfa": "Atspējot TFA līdz nākamajai veiksmīgajai pieteikšanās reizei",
|
||||
"disable_tfa": "Atspējot TFA līdz nākamajai sekmīgajai pieteikšanās reizei",
|
||||
"enter_qr_code": "TOTP kods, ja Tava ierīce nevar nolasīt kvadrātkodus",
|
||||
"key_id": "Jūsu YubiKey identifikators",
|
||||
"key_id_totp": "Identifikators Jūsu atslēgai",
|
||||
@@ -544,7 +564,7 @@
|
||||
"totp": "Uz laiku bāzēta vienreizēja parole (Google Autentifikātors utt.)",
|
||||
"webauthn": "WebAuthn autentifikācija",
|
||||
"waiting_usb_auth": "<i>Gaida USB ierīci...</i><br><br>Lūdzu, tagad nospiežiet pogu uz Jūsu WebAuthn USB ierīces.",
|
||||
"waiting_usb_register": "<i>Gaida USB ierīci...</i><br><br>Lūdzu augšā ievadiet Jūsu paroli un apstipriniet WebAuthn reģistrāciju nospiežot pogu uz Jūsu WebAuthn USB ierīces.",
|
||||
"waiting_usb_register": "<i>Gaida USB ierīci...</i><br><br>Lūgums augstāk ievadīt savu paroli un apstiprināt reģistrēšanos ar USB ierīces pogas nospiešanu.",
|
||||
"yubi_otp": "Yubico OTP autentifikators",
|
||||
"authenticators": "Autentificētāji"
|
||||
},
|
||||
@@ -589,7 +609,7 @@
|
||||
"new_password_repeat": "Paroles apstiprinājums (atkārtoti)",
|
||||
"no_active_filter": "Nav pieejami aktīvi filtri",
|
||||
"no_record": "Nav ieraksta",
|
||||
"password_now": "Pašreizējā parole (Apstiprināt izmaiņas)",
|
||||
"password_now": "Pašreizējā parole (apstiprināt izmaiņas)",
|
||||
"remove": "Noņemt",
|
||||
"running": "Darbojas",
|
||||
"save_changes": "Saglabāt izmaiņas",
|
||||
@@ -599,11 +619,11 @@
|
||||
"spam_aliases": "Pagaidu e-pasta aizstājvārdi",
|
||||
"spamfilter": "Mēstuļu filtrs",
|
||||
"spamfilter_behavior": "Reitings",
|
||||
"spamfilter_bl": "Melnais saraksts",
|
||||
"spamfilter_bl_desc": "No melnajā sarakstā iekļautajām e-pasta adresēm saņemtās vēstules <b>vienmēr</b> tiks atzīmētas kā mēstules un noraidītas. Noraidītais pasts <b>netiks</b> ievietots karantīnā. Var izmantot aizstājzīmes. Atlasīšana tiek pielietota tikai tiešiem aizstājvārdiem (aizstājvārdiem ar vienu mērķa pastkasti), izņemot visu tverošos aizstājvārdus un pašu pastkasti.",
|
||||
"spamfilter_bl": "Liegumu saraksts",
|
||||
"spamfilter_bl_desc": "No lieguma sarakstā iekļautajām e-pasta adresēm saņemtās vēstules <b>vienmēr</b> tiks atzīmētas kā mēstules un noraidītas. Noraidītais pasts <b>netiks</b> ievietots karantīnā. Var izmantot aizstājzīmes. Atlasīšana tiek pielietota tikai tiešiem aizstājvārdiem (aizstājvārdiem ar vienu mērķa pastkasti), izņemot visu tverošos aizstājvārdus un pašu pastkasti.",
|
||||
"spamfilter_default_score": "Noklusējuma vērtības",
|
||||
"spamfilter_green": "Zaļš: šī nav mēstule",
|
||||
"spamfilter_hint": "Pirmā vērtība norāda uz zemu \"Spam vērtējumu\" vērtējumu, otra vērtība par \"Augstu spam vērtējumu\".",
|
||||
"spamfilter_hint": "Pirmā vērtība norāda uz zemu \"mēstules novērtējumu\", otrā atspoguļo \"augstu mēstules novērtējumu\".",
|
||||
"spamfilter_red": "Sarkans: Šī vēstule noteikti ir spams un tiek nekavējoties noraidīta",
|
||||
"spamfilter_table_action": "Darbība",
|
||||
"spamfilter_table_add": "Pievienot vienību",
|
||||
@@ -611,8 +631,8 @@
|
||||
"spamfilter_table_empty": "Nav datu ko parādīt",
|
||||
"spamfilter_table_remove": "noņemt",
|
||||
"spamfilter_table_rule": "Noteikums",
|
||||
"spamfilter_wl": "Baltais saraksts",
|
||||
"spamfilter_wl_desc": "No baltā saraksta e-pasta adresēm saņemtās vēstules <b>nekad</b> netiks atzīmētas kā mēstules. Var tikt izmantotas aizstājzīmes. Atlase tiek piemērota tikai tiešiem aizstājvārdiem (aizstājvārdiem ar vienu mērķa pastkasti), izņemot visu tverošos aizstājvārdus un pašu pastkasti.",
|
||||
"spamfilter_wl": "Atļautais saraksts",
|
||||
"spamfilter_wl_desc": "No atļautā saraksta e-pasta adresēm saņemtās vēstules <b>nekad</b> netiks atzīmētas kā mēstules. Var tikt izmantotas aizstājzīmes. Atlase tiek piemērota tikai tiešiem aizstājvārdiem (aizstājvārdiem ar vienu mērķa pastkasti), izņemot visu tverošos aizstājvārdus un pašu pastkasti.",
|
||||
"spamfilter_yellow": "Dzeltens: šī vēstule visticamāk ir spams un tiks pārvietota uz Junk mapi",
|
||||
"status": "Status",
|
||||
"sync_jobs": "Sinhronizācijas uzdevumi",
|
||||
@@ -644,15 +664,21 @@
|
||||
"change_password_hint_app_passwords": "Kontā ir %d lietotņu paroles, kas netiks mainītas. Lai pārvaldītu tās, jādodas uz cilni \"Lietotņu paroles\".",
|
||||
"with_app_password": "ar lietotnes paroli",
|
||||
"apple_connection_profile_with_app_password": "Jauna lietotnes parole ir izveidota un pievienota profilam, lai ierīces iestatīšanas laikā nebūtu nepieciešams ievadīt paroli. Lūgums nekopīgot datni, jo tā nodrošina pilnu piekļuvi pastkastei.",
|
||||
"tfa_info": "Divpakāpju autentificēšanās palīdz aizsargāt kontu.Ja tā ir iespējota, var būt nepieciešamas lietotņu paroles, lai pieteiktos lietotnēs vai pakalpojumos, kas nenodrošina divpakāpju autentificēšanos (piem., e-pasta klienti).",
|
||||
"tfa_info": "Divpakāpju autentificēšanās palīdz aizsargāt kontu.Ja tā ir iespējota, ir nepieciešamas lietotņu paroles, lai pieteiktos lietotnēs vai pakalpojumos, kas nenodrošina divpakāpju autentificēšanos (piem., e-pasta klienti).",
|
||||
"app_passwds": "Lietotņu paroles",
|
||||
"create_app_passwd": "Izveidot lietotnes paroli"
|
||||
"create_app_passwd": "Izveidot lietotnes paroli",
|
||||
"empty": "Nav iznākuma",
|
||||
"quarantine_notification_info": "Tiklīdz paziņojums ir nosūtīts, vienumi tiks atzīmēti kā \"paziņoti\", un par šo vienumu vairs netiks sūtīti paziņojumi.",
|
||||
"sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">Sūtītāja pārbaude ir atspējota</span>",
|
||||
"syncjob_last_run_result": "Pēdējās izpildes iznākums"
|
||||
},
|
||||
"datatables": {
|
||||
"paginate": {
|
||||
"first": "Pirmā",
|
||||
"last": "Pēdējā"
|
||||
}
|
||||
},
|
||||
"emptyTable": "Tabulā nav datu",
|
||||
"search": "Meklēt:"
|
||||
},
|
||||
"debug": {
|
||||
"last_modified": "Pēdējoreiz mainīts",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"acl": {
|
||||
"alias_domains": "Adicionar domínios alias",
|
||||
"app_passwds": "Gerenciar senhas de aplicativos",
|
||||
"alias_domains": "Adicionar alias de domínios",
|
||||
"app_passwds": "Gerenciar senhas de app",
|
||||
"bcc_maps": "Mapas BCC",
|
||||
"delimiter_action": "Ação delimitadora",
|
||||
"domain_desc": "Alterar descrição do domínio",
|
||||
@@ -9,7 +9,7 @@
|
||||
"eas_reset": "Redefinir dispositivos EAS",
|
||||
"extend_sender_acl": "Permitir estender a ACL do remetente por endereços externos",
|
||||
"filters": "Filtros",
|
||||
"login_as": "Faça login como usuário da mailbox",
|
||||
"login_as": "Fazer login como usuário da mailbox",
|
||||
"mailbox_relayhost": "Alterar relayhost para uma mailbox",
|
||||
"prohibited": "Proibido pela ACL",
|
||||
"protocol_access": "Alterar o acesso ao protocolo",
|
||||
@@ -109,7 +109,9 @@
|
||||
"username": "Nome de usuário",
|
||||
"validate": "Validar",
|
||||
"validation_success": "Validado com sucesso",
|
||||
"dry": "Simular sincronização"
|
||||
"dry": "Simular sincronização",
|
||||
"internal": "Interno",
|
||||
"internal_info": "Aliases internos são acessíveis apenas a partir do próprio domínio ou alias de domínio."
|
||||
},
|
||||
"admin": {
|
||||
"access": "Acesso",
|
||||
@@ -364,7 +366,52 @@
|
||||
"iam_client_secret": "Senha de cliente",
|
||||
"iam_auth_flow": "Fluxo de autenticação",
|
||||
"iam_client_scopes": "Escopo do cliente",
|
||||
"iam_default_template": "Template Padrão"
|
||||
"iam_default_template": "Template Padrão",
|
||||
"admin_quicklink": "Ocultar link rápido para página de login do administrador",
|
||||
"app_hide": "Ocultar para login",
|
||||
"login_page": "Página de login",
|
||||
"domainadmin_quicklink": "Ocultar link rápido para página de login do administrador de domínio",
|
||||
"filter": "Filtro",
|
||||
"force_sso_text": "Se um provedor OIDC externo for configurado, esta opção oculta os formulários de login padrão do mailcow e mostra apenas o botão de single sign-on",
|
||||
"force_sso": "Desabilitar login do mailcow e mostrar apenas single sign-on",
|
||||
"iam": "Provedor de identidade",
|
||||
"iam_attribute_field": "Campo de atributo",
|
||||
"iam_authorize_url": "Endpoint de autorização",
|
||||
"iam_auth_flow_info": "Além do fluxo de código de autorização (fluxo padrão no Keycloak), que é usado para login de single sign-on, o mailcow também suporta fluxo de autenticação com credenciais diretas. O fluxo Mailpassword tenta validar as credenciais do usuário usando a API REST do administrador do Keycloak. O mailcow recupera a senha hash do atributo <code>mailcow_password</code>, que é mapeado no Keycloak.",
|
||||
"iam_basedn": "DN base",
|
||||
"iam_default_template_description": "Se nenhum template for atribuído a um usuário, o template padrão será usado para criar a caixa de correio, mas não para atualizar a caixa de correio.",
|
||||
"iam_description": "Configure um provedor externo para autenticação<br>As caixas de correio dos usuários serão criadas automaticamente no primeiro login, desde que um mapeamento de atributos tenha sido definido.",
|
||||
"iam_extra_permission": "Para que as configurações a seguir funcionem, o cliente mailcow no Keycloak precisa de uma <code>conta de serviço</code> e a permissão para <code>visualizar usuários</code>.",
|
||||
"iam_host": "Host",
|
||||
"iam_host_info": "Digite um ou mais hosts LDAP, separados por vírgulas.",
|
||||
"iam_import_users": "Importar usuários",
|
||||
"iam_login_provisioning": "Criar usuários automaticamente no login",
|
||||
"iam_mapping": "Mapeamento de atributos",
|
||||
"iam_bindpass": "Senha de vinculação",
|
||||
"iam_periodic_full_sync": "Sincronização completa periódica",
|
||||
"iam_port": "Porta",
|
||||
"iam_realm": "Realm",
|
||||
"iam_redirect_url": "URL de redirecionamento",
|
||||
"iam_rest_flow": "Fluxo Mailpassword",
|
||||
"iam_server_url": "URL do servidor",
|
||||
"iam_sso": "Single sign-on",
|
||||
"iam_sync_interval": "Intervalo de sincronização/importação (min)",
|
||||
"iam_test_connection": "Testar conexão",
|
||||
"iam_token_url": "Endpoint de token",
|
||||
"iam_userinfo_url": "Endpoint de informações do usuário",
|
||||
"iam_username_field": "Campo de nome de usuário",
|
||||
"iam_binddn": "DN de vinculação",
|
||||
"iam_use_ssl": "Usar SSL",
|
||||
"iam_use_ssl_info": "Se habilitar SSL e a porta estiver definida como 389, ela será automaticamente substituída para usar 636.",
|
||||
"iam_use_tls": "Usar StartTLS",
|
||||
"iam_use_tls_info": "Se habilitar TLS, você deve usar a porta padrão para seu servidor LDAP (389). Portas SSL não podem ser usadas.",
|
||||
"iam_version": "Versão",
|
||||
"ignore_ssl_error": "Ignorar erros SSL",
|
||||
"needs_restart": "precisa reiniciar",
|
||||
"quicklink_text": "Mostrar ou ocultar links rápidos para outras páginas de login abaixo do formulário de login",
|
||||
"task": "Tarefa",
|
||||
"user_link": "Link do usuário",
|
||||
"user_quicklink": "Ocultar link rápido para página de login do usuário"
|
||||
},
|
||||
"danger": {
|
||||
"access_denied": "Acesso negado ou dados de formulário inválidos",
|
||||
@@ -501,7 +548,15 @@
|
||||
"username_invalid": "O nome de usuário %s não pode ser usado",
|
||||
"validity_missing": "Por favor, atribua um período de validade",
|
||||
"value_missing": "Forneça todos os valores",
|
||||
"yotp_verification_failed": "Falha na verificação do Yubico OTP: %s"
|
||||
"yotp_verification_failed": "Falha na verificação do Yubico OTP: %s",
|
||||
"authsource_in_use": "O provedor de identidade não pode ser alterado ou excluído pois está sendo usado por um ou mais usuários.",
|
||||
"generic_server_error": "Ocorreu um erro inesperado no servidor. Entre em contato com seu administrador.",
|
||||
"iam_test_connection": "Falha na conexão",
|
||||
"max_age_invalid": "Idade máxima %s é inválida",
|
||||
"mode_invalid": "Modo %s é inválido",
|
||||
"mx_invalid": "Registro MX %s é inválido",
|
||||
"required_data_missing": "Dados obrigatórios %s estão ausentes",
|
||||
"version_invalid": "Versão %s é inválida"
|
||||
},
|
||||
"datatables": {
|
||||
"collapse_all": "Recolher tudo",
|
||||
@@ -708,7 +763,25 @@
|
||||
"title": "Editar objeto",
|
||||
"unchanged_if_empty": "Se inalterado, deixe em branco",
|
||||
"username": "Nome de usuário",
|
||||
"validate_save": "Valide e salve"
|
||||
"validate_save": "Validar e salvar",
|
||||
"internal": "Interno",
|
||||
"internal_info": "Aliases internos são acessíveis apenas a partir do próprio domínio ou domínios alias.",
|
||||
"mailbox_rename": "Renomear caixa de correio",
|
||||
"mailbox_rename_agree": "Eu criei um backup.",
|
||||
"mailbox_rename_warning": "IMPORTANTE! Crie um backup antes de renomear a caixa de correio.",
|
||||
"mailbox_rename_alias": "Criar alias automaticamente",
|
||||
"mailbox_rename_title": "Novo nome da caixa de correio local",
|
||||
"mta_sts": "MTA-STS",
|
||||
"mta_sts_info": "<a href='https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#SMTP_MTA_Strict_Transport_Security' target='_blank'>MTA-STS</a> é um padrão que força a entrega de email entre servidores de email para usar TLS com certificados válidos. <br>É usado quando <a target='_blank' href='https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities'>DANE</a> não é possível devido ao DNSSEC ausente ou não suportado.<br><b>Nota</b>: Se o domínio de recepção suporta DANE com DNSSEC, DANE é <b>sempre</b> preferido – MTA-STS atua apenas como fallback.",
|
||||
"mta_sts_version": "Versão",
|
||||
"mta_sts_version_info": "Define a versão do padrão MTA-STS – atualmente apenas <code>STSv1</code> é válido.",
|
||||
"mta_sts_mode": "Modo",
|
||||
"mta_sts_mode_info": "Há três modos para escolher:<ul><li><em>testing</em> – política é apenas monitorada, violações não têm impacto.</li><li><em>enforce</em> – política é rigorosamente aplicada, conexões sem TLS válido são rejeitadas.</li><li><em>none</em> – política é publicada mas não aplicada.</li></ul>",
|
||||
"mta_sts_max_age": "Idade máxima",
|
||||
"mta_sts_max_age_info": "Tempo em segundos que servidores de email de recepção podem armazenar esta política em cache até buscar novamente.",
|
||||
"mta_sts_mx": "Servidor MX",
|
||||
"mta_sts_mx_info": "Permite envio apenas para nomes de host de servidor de email explicitamente listados; o MTA de envio verifica se o nome do host DNS MX corresponde à lista de políticas e permite entrega apenas com certificado TLS válido (protege contra MITM).",
|
||||
"mta_sts_mx_notice": "Múltiplos servidores MX podem ser especificados (separados por vírgulas)."
|
||||
},
|
||||
"fido2": {
|
||||
"confirm": "Confirme",
|
||||
@@ -771,7 +844,15 @@
|
||||
"password": "Senha",
|
||||
"reset_password": "Recuperar a senha",
|
||||
"request_reset_password": "Solicitar troca de senha",
|
||||
"username": "Nome de usuário"
|
||||
"username": "Nome de usuário",
|
||||
"login_linkstext": "Login incorreto?",
|
||||
"login_usertext": "Entrar como usuário",
|
||||
"login_domainadmintext": "Entrar como administrador de domínio",
|
||||
"login_admintext": "Entrar como administrador",
|
||||
"login_user": "Login de usuário",
|
||||
"login_dadmin": "Login como administrador de domínio",
|
||||
"login_admin": "Login como administrador",
|
||||
"email": "Endereço de email"
|
||||
},
|
||||
"mailbox": {
|
||||
"action": "Ação",
|
||||
@@ -946,7 +1027,9 @@
|
||||
"username": "Nome de usuário",
|
||||
"waiting": "Esperando",
|
||||
"weekly": "Semanalmente",
|
||||
"yes": "✓"
|
||||
"yes": "✓",
|
||||
"iam": "Provedor de Identidade",
|
||||
"internal": "Interno"
|
||||
},
|
||||
"oauth2": {
|
||||
"access_denied": "Faça login como proprietário da mailbox para conceder acesso via OAuth2.",
|
||||
@@ -961,8 +1044,8 @@
|
||||
"action": "Ação",
|
||||
"atts": "Anexos",
|
||||
"check_hash": "Arquivo de pesquisa hash @ VT",
|
||||
"confirm": "Confirme",
|
||||
"confirm_delete": "Confirme a exclusão desse elemento.",
|
||||
"confirm": "Confirmar",
|
||||
"confirm_delete": "Confirmar exclusão desse elemento.",
|
||||
"danger": "Perigo",
|
||||
"deliver_inbox": "Entregar na caixa de entrada",
|
||||
"disabled_by_config": "A configuração atual do sistema desativa a funcionalidade de quarentena. Defina “retenções por mailbox” e um “tamanho máximo” para os elementos de quarentena.",
|
||||
@@ -1123,12 +1206,15 @@
|
||||
"verified_fido2_login": "Login FIDO2 verificado",
|
||||
"verified_totp_login": "Login TOTP verificado",
|
||||
"verified_webauthn_login": "Login verificado do WebAuthn",
|
||||
"verified_yotp_login": "Login OTP verificado do Yubico"
|
||||
"verified_yotp_login": "Login OTP verificado do Yubico",
|
||||
"custom_login_modified": "Personalização de login foi salva com sucesso",
|
||||
"iam_test_connection": "Conexão bem-sucedida",
|
||||
"mailbox_renamed": "Caixa de correio foi renomeada de %s para %s"
|
||||
},
|
||||
"tfa": {
|
||||
"authenticators": "Autenticadores",
|
||||
"api_register": "%s usa a API Yubico Cloud. Obtenha uma chave de API para sua chave <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">aqui</a>",
|
||||
"confirm": "Confirme",
|
||||
"confirm": "Confirmar",
|
||||
"confirm_totp_token": "Confirme suas alterações inserindo o token gerado",
|
||||
"delete_tfa": "Desativar o TFA",
|
||||
"disable_tfa": "Desative o TFA até o próximo login bem-sucedido",
|
||||
@@ -1141,7 +1227,7 @@
|
||||
"reload_retry": "- (recarregue o navegador se o erro persistir)",
|
||||
"scan_qr_code": "Escaneie o código a seguir com seu aplicativo autenticador ou insira o código manualmente.",
|
||||
"select": "Por favor, selecione",
|
||||
"set_tfa": "Defina o método de autenticação de dois fatores",
|
||||
"set_tfa": "Método de autenticação de dois fatores",
|
||||
"start_webauthn_validation": "Iniciar validação",
|
||||
"tfa": "Autenticação de dois fatores",
|
||||
"tfa_token_invalid": "Token TFA inválido",
|
||||
@@ -1318,7 +1404,11 @@
|
||||
"weeks": "semanas",
|
||||
"with_app_password": "com senha do aplicativo",
|
||||
"year": "ano",
|
||||
"years": "anos"
|
||||
"years": "anos",
|
||||
"authentication": "Autenticação",
|
||||
"overview": "Visão geral",
|
||||
"protocols": "Protocolos",
|
||||
"tfa_info": "A autenticação de dois fatores ajuda a proteger sua conta. Se você habilitá-la, precisará de senhas de aplicativo para fazer login em aplicativos ou serviços que não suportam autenticação de dois fatores (por exemplo, clientes de email)."
|
||||
},
|
||||
"warning": {
|
||||
"cannot_delete_self": "Não é possível excluir o usuário conectado",
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
"app_name": "Ime aplikacije",
|
||||
"app_password": "Dodaj geslo aplikacije",
|
||||
"app_passwd_protocols": "Dovoljeni protokoli za geslo aplikacije",
|
||||
"automap": "Poskusi samodejno preslikati mape (\"Sent items\", \"Sent\" => \"Poslano\" ipd.)",
|
||||
"automap": "Poskusi samodejno preslikati mape (\"Poslani elementi\", \"Poslano\" => \"Poslano\" ipd.)",
|
||||
"backup_mx_options": "Možnosti posredovanja (relay)",
|
||||
"comment_info": "Zasebni komentarji niso vidni uporabnikom, javni komentarji pa so prikazani kot opis, ko se z miško postavimo nad uporabnika v pregledu",
|
||||
"custom_params": "Parametri po meri",
|
||||
@@ -109,7 +109,9 @@
|
||||
"relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> Definirate lahko preslikave transportov za cilj po meri za to domeno. Če ni nastavljena, se ustvari MX poizvedba.",
|
||||
"syncjob_hint": "Pozor! Gesla se morajo shraniti v golo besedilo!",
|
||||
"timeout2": "Časovna omejitev za povezavo do lokalnega gostitelja",
|
||||
"dry": "Simuliraj sinhronizacijo"
|
||||
"dry": "Simuliraj sinhronizacijo",
|
||||
"internal": "Notranje",
|
||||
"internal_info": "Notranji vzdevki so dostopni samo iz lastne domene ali vzdevkov domen."
|
||||
},
|
||||
"admin": {
|
||||
"access": "Dostop",
|
||||
@@ -150,7 +152,7 @@
|
||||
"customize": "Prilagodi",
|
||||
"destination": "Cilj",
|
||||
"dkim_add_key": "Dodaj ARC/DKIM ključ",
|
||||
"dkim_domains_selector": "Izbira",
|
||||
"dkim_domains_selector": "Izbirnik",
|
||||
"dkim_domains_wo_keys": "Izberi domene z manjkajočimi ključi",
|
||||
"dkim_from": "Od",
|
||||
"dkim_from_title": "Izvorna domena od katere prekopiram podatke",
|
||||
@@ -176,8 +178,8 @@
|
||||
"f2b_filter": "Regex filtri",
|
||||
"f2b_max_attempts": "Največ poskusov",
|
||||
"f2b_max_ban_time": "Maksimalno trajanje blokade (s)",
|
||||
"f2b_netban_ipv4": "velikost subneta IPv4 za blokiranje (8-32)",
|
||||
"f2b_netban_ipv6": "Velikost subneta IPv6 za blokiranje (8-128)",
|
||||
"f2b_netban_ipv4": "velikost podomrežja IPv4 za blokiranje (8-32)",
|
||||
"f2b_netban_ipv6": "Velikost podomrežja IPv6 za blokiranje (8-128)",
|
||||
"f2b_parameters": "Fail2ban parametri",
|
||||
"f2b_regex_info": "Upoštevajo se dnevniki SOGo, Postfix, Dovecot, PHP-FPM.",
|
||||
"f2b_retry_window": "Upoštevan čas (s) za največ poskusov",
|
||||
@@ -187,41 +189,41 @@
|
||||
"generate": "ustvari",
|
||||
"guid": "GUID - enolični ID instance",
|
||||
"guid_and_license": "GUID & licenca",
|
||||
"hash_remove_info": "Odstranitev hasha za omejitev (če obstaja) bo povsem ponastavilo njen števec.<br>\n Vsak hash je prikazan z individualno barvo.",
|
||||
"help_text": "Zamenjaj tekst za pomoč pod masko za prijavo (HTML je dovoljen)",
|
||||
"hash_remove_info": "Odstranitev zgoščene vrednosti za omejitev (če obstaja) bo povsem ponastavilo njen števec.<br>\n Vsaka zgoščena vrednost je prikazana z individualno barvo.",
|
||||
"help_text": "Preglasi besedilo za pomoč pod masko za prijavo (HTML je dovoljen)",
|
||||
"host": "Gostitelj",
|
||||
"html": "HTML",
|
||||
"import": "Uvozi",
|
||||
"import_private_key": "Uvozi zasebni ključ",
|
||||
"in_use_by": "V uporabi",
|
||||
"in_use_by": "V uporabi od",
|
||||
"inactive": "Neaktivno",
|
||||
"include_exclude": "Vključi/Izključi",
|
||||
"include_exclude_info": "Privzeto - če ni izbire - so vključeni <b>vsi poštni predali</b>",
|
||||
"includes": "Vključi te prejemnike",
|
||||
"ip_check": "Kontrola IP",
|
||||
"ip_check_disabled": "Kontrola IP je onemogočena. Lahko jo omogočite pod <br/> <strong>Sistem > Konfiguracija > Možnosti > Prilagodi</strong>",
|
||||
"ip_check_opt_in": "Opt-in za uporabo zunanje storitve <strong>ipv4.mailcow.email</strong> in <strong>ipv6.mailcow.email</strong> za razreševanje zunanjih IP.",
|
||||
"is_mx_based": "Glede na MX",
|
||||
"last_applied": "Nazadnje aplicirano",
|
||||
"ip_check": "Preverjanje IP-ja",
|
||||
"ip_check_disabled": "Preverjanje IP-ja je onemogočeno. Lahko ga omogočite pod <br/> <strong>Sistem > Konfiguracija > Možnosti > Prilagodi</strong>",
|
||||
"ip_check_opt_in": "Prijavite se za uporabo storitev tretjih oseb <strong>ipv4.mailcow.email</strong> in <strong>ipv6.mailcow.email</strong> za razreševanje zunanjih IP naslovov.",
|
||||
"is_mx_based": "Glede na MX zapis",
|
||||
"last_applied": "Nazadnje uporabljeno",
|
||||
"link": "Povezava",
|
||||
"loading": "Prosim počakajte...",
|
||||
"login_time": "Čas prijave",
|
||||
"logo_info": "Vaša slika bo pomanjšana na velikost 40px za zgornjo navigacijo in največjo velikost 250px za začetno stran. Zelo priporočena je uporaba grafike brez izgube kakovosti ob spremembi velikosti.",
|
||||
"logo_info": "Vaša slika bo pomanjšana na višino 40 slikovnih pik za zgornjo navigacijsko vrstico in na največjo širino 250 slikovnih pik za začetno stran. Zelo priporočljiva je skalabilna grafika.",
|
||||
"message": "Sporočilo",
|
||||
"message_size": "Velikost sporočila",
|
||||
"nexthop": "Naslednji skok",
|
||||
"no": "✕",
|
||||
"no_active_bans": "Ni aktivnih blokad",
|
||||
"no_new_rows": "Ni dodatnih vrstic",
|
||||
"no_new_rows": "Nadaljnjih vrstic ni na voljo",
|
||||
"no_record": "Ni zapisa",
|
||||
"oauth2_apps": "OAuth2 aplikacije",
|
||||
"oauth2_add_client": "Dodaj OAuth2 klienta",
|
||||
"oauth2_client_id": "ID klienta",
|
||||
"oauth2_client_secret": "Skrivnost (secret)",
|
||||
"oauth2_client_id": "ID odjemalca",
|
||||
"oauth2_client_secret": "Skrivnost odjemalca",
|
||||
"oauth2_redirect_uri": "URI za preusmeritev",
|
||||
"oauth2_renew_secret": "Generiraj nov client secret",
|
||||
"oauth2_revoke_tokens": "Zavrni vse tokene klientov",
|
||||
"optional": "opcijsko",
|
||||
"oauth2_renew_secret": "Generiraj novo skrivnost odjemalca",
|
||||
"oauth2_revoke_tokens": "Prekliči vse žetone odjemalca",
|
||||
"optional": "neobvezno",
|
||||
"options": "Možnosti",
|
||||
"password": "Geslo",
|
||||
"password_length": "Dolžina gesla",
|
||||
@@ -236,21 +238,21 @@
|
||||
"private_key": "Zasebni ključ",
|
||||
"quarantine": "Karantena",
|
||||
"quarantine_bcc": "Pošlji kopijo vseh obvestil (BCC) temu prejemniku:<br><small>Pustite prazno za izklop te funkcije. <b>Nepodpisana, nepreverjena pošta. Uporabljalo naj bi se samo za interno dostavo.</b></small>",
|
||||
"quarantine_exclude_domains": "Izključi domene in alias-domene",
|
||||
"quarantine_max_age": "Maksimalna starost v dnevnih<br><small>Vrednost mora biti večja ali enaka 1 dnevu</small>",
|
||||
"quarantine_max_score": "Opusti obvestilo, če je ocena spama večja od te vrednosti:<br><small>Privzeto 9999.0</small>",
|
||||
"quarantine_max_size": "Največja velikost v MiB (Večji elementi so zavrženi):<br><small>0 <b>ne</b> pomeni neomejeno.</small>",
|
||||
"quarantine_notification_html": "Predloga sporočila za obvestilo:<br><small>Pustite prazno za obnovitev privzete predloge.</small>",
|
||||
"quarantine_notification_sender": "Pošiljatelj obvestila",
|
||||
"quarantine_notification_subject": "Naslov obvestila",
|
||||
"quarantine_release_format": "Oblika sproščenih elementov",
|
||||
"quarantine_exclude_domains": "Izključi domene in vzdevke domen",
|
||||
"quarantine_max_age": "Najvišja starost v dneh<br><small>Vrednost mora biti enaka ali večja od 1 dneva.</small>",
|
||||
"quarantine_max_score": "Zavrzi obvestilo, če je ocena neželene pošte višja od te vrednosti:<br><small>Privzeto 9999,0</small>",
|
||||
"quarantine_max_size": "Največja velikost v MiB (večji elementi so zavrženi):<br><small>0 <b>ne</b> pomeni neomejeno.</small>",
|
||||
"quarantine_notification_html": "Predloga za obvestilo po e-pošti:<br><small>Pustite prazno, če želite obnoviti privzeto predlogo.</small>",
|
||||
"quarantine_notification_sender": "Pošiljatelj obvestil po e-pošti",
|
||||
"quarantine_notification_subject": "Zadeva e-poštnega obvestila",
|
||||
"quarantine_release_format": "Oblika izdanih elementov",
|
||||
"quarantine_release_format_att": "Kot priponka",
|
||||
"quarantine_release_format_raw": "Nespremenjen original",
|
||||
"quarantine_retention_size": "Število zadržanj na poštni predal: <br><small>0 pomeni <b>neaktivno</b>,</small>",
|
||||
"quarantine_release_format_raw": "Nespremenjen izvirnik",
|
||||
"quarantine_retention_size": "Hrambe na poštni predal:<br><small>0 pomeni <b>neaktivno</b>.</small>",
|
||||
"quota_notification_sender": "Pošiljatelj obvestila",
|
||||
"quota_notification_subject": "Predmet obvestila",
|
||||
"quota_notifications": "Obvestila o omejitvi",
|
||||
"quota_notifications_info": "Obvestila o omejitvi so poslana uporabnikom enkrat, ko presežejo 80% in enkrat ko presežejo 95% zasedenosti.",
|
||||
"quota_notifications": "Obvestila o kvotah",
|
||||
"quota_notifications_info": "Obvestila o kvoti se uporabnikom pošljejo enkrat, ko presežejo 80 % in enkrat, ko presežejo 95 % porabe.",
|
||||
"queue_unban": "odblokiraj",
|
||||
"r_active": "Aktivne omejitve",
|
||||
"r_inactive": "Neaktivne omejitve",
|
||||
@@ -266,8 +268,8 @@
|
||||
"remove": "Odstrani",
|
||||
"remove_row": "Odstrani vrstico",
|
||||
"reset_default": "Ponastavi na privzeto",
|
||||
"reset_limit": "Odstrani hash",
|
||||
"routing": "Routing",
|
||||
"reset_limit": "Odstrani zgoščeno vrednost",
|
||||
"routing": "Usmerjanje",
|
||||
"rsetting_add_rule": "Dodaj pravilo",
|
||||
"rsetting_content": "Vsebina pravila",
|
||||
"rsetting_desc": "Kratek opis",
|
||||
@@ -275,10 +277,10 @@
|
||||
"rsetting_none": "Ni pravil na voljo",
|
||||
"rsettings_insert_preset": "Vstavi prednastavljen primer \"%s\"",
|
||||
"rsettings_preset_1": "Onemogoči vse razen DKIM in omejitve za prijavljene uporabnike",
|
||||
"rsettings_preset_2": "Postmasterji želijo spam",
|
||||
"rsettings_preset_3": "Dovoli samo specifične pošiljatelje za poštni predal (npr. uporaba samo kot interni poštni predal)",
|
||||
"rsettings_preset_2": "Poštni upravitelji želijo neželeno pošto",
|
||||
"rsettings_preset_3": "Dovoli samo določene pošiljatelje za poštni predal (tj. uporabo samo kot notranji poštni predal)",
|
||||
"rsettings_preset_4": "Onemogoči Rspamd za domeno",
|
||||
"rspamd_com_settings": "Ime nastavitve bo samodejno generirano. Prosim oglejte si primere nastavitev spodaj. Za več informacij si oglejte <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">dokumentacijo Rspamd</a>",
|
||||
"rspamd_com_settings": "Ime nastavitve bo samodejno ustvarjeno, oglejte si spodnje primere prednastavitev. Za več podrobnosti glejte <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">dokumentacijo Rspamd</a>",
|
||||
"rspamd_global_filters": "Globalne preslikave filtrov",
|
||||
"rspamd_global_filters_agree": "Previden bom!",
|
||||
"rspamd_global_filters_info": "Globalni filtri vsebujejo različne vrste globalnih seznamov zavrnjenih in dovoljenih vsebin.",
|
||||
@@ -293,30 +295,30 @@
|
||||
"f2b_list_info": "Gostitelj ali omrežje na seznamu zavrnjenih bo vedno imelo prednost pred entiteto na seznamu dovoljenih. <b>Posodobitve seznama bodo trajale nekaj sekund, da se uporabijo.</b>",
|
||||
"forwarding_hosts": "Gostitelji za posredovanje",
|
||||
"forwarding_hosts_add_hint": "Lahko vpišete IPv4/IPv6 naslove, mreže v CIDR obliki, imena gostiteljev (kateri se prevedejo v IP naslove) ali imena domen (katera se prevedejo v IP naslove glede na poizvedbo po SPF zapisih, v primeru manjkajočih zapisov pa MX zapisih).",
|
||||
"forwarding_hosts_hint": "Dohodna sporočila so brezpogojno sprejeta od katerih koli gostiteljev v tem seznamu. Ti gostitelji se ne bodo preverjali po DNSBL seznamih in ne bodo dodani v greyliste. Prejeti spam s teh gostiteljev ni nikoli zavrnjen, opcijsko pa se lahko premakne v mapo neželene pošte. Najpogostejša uporaba za to je navedba poštnih strežnikov, iz katerih ste nastavili pravilo za posredovanje pošte na vaš mailcow strežnik.",
|
||||
"license_info": "Licenca ni zahtevana, a pomaga pri nadaljnjem razvoju. <br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"Naročilo SAL\">Registrirajte svoj GUID tukaj</a> ali <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Naročilo podpora\">Kupite podporo za svojo namestitev Mailcow.</a>",
|
||||
"lookup_mx": "Cilj je regular expression za ujemanje MX zapisov (<code>.*\\.google\\.com</code> za usmeritev vse pošte na MX, ki se konča z google.com, preko tega skoka)",
|
||||
"forwarding_hosts_hint": "Dohodna sporočila so brezpogojno sprejeta od katerih koli gostiteljev v tem seznamu. Ti gostitelji se ne bodo preverjali po DNSBL seznamih in ne bodo dodani v listo sivih. Prejeta neželena pošta s teh gostiteljev ni nikoli zavrnjena, opcijsko pa se lahko premakne v mapo neželene pošte. Najpogostejša uporaba za to je navedba poštnih strežnikov, iz katerih ste nastavili pravilo za posredovanje pošte na vaš mailcow strežnik.",
|
||||
"license_info": "Licenca ni zahtevana, a pomaga pri nadaljnjem razvoju. <br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"Naročilo SAL\">Registrirajte svoj GUID tukaj</a> ali <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Naročilo podpore\">Kupite podporo za svojo namestitev Mailcow.</a>",
|
||||
"lookup_mx": "Cilj je regularni izraz, ki se ujema z imenom MX (<code>.*\\.google\\.com</code> za usmerjanje vse pošte, usmerjene na MX, ki se konča na google.com, prek tega skoka).",
|
||||
"main_name": "Naziv \"mailcow UI\"",
|
||||
"merged_vars_hint": "Sive vrstice so združene iz <code>vars.(local.)inc.php</code> in jih ni mogoče spremeniti.",
|
||||
"oauth2_info": "OAuth2 implementacija omogoča grant vrste \"Authorization code\" in izdaja refresh tokene.<br>\nStrežnik prav tako izda nove refresh tokene, ko je bil refresh token uporabljen<br><br>\n• Privzeti obseg je <i>profile</i>. Samo uporabniki poštnih predalov se lahko prijavijo s pomočjo OAuth2. Če parameter obsega ni vnesen, se nastavi na <i>profile</i>.<br>\n• Parameter <i>state</i> mora biti poslan s strani klienta kot del zahtevka za avtorizacijo .<br><br>\nPoti za OAuth2 API: <br>\n<ul>\n <li>Endpoint za avtorizacijo: <code>/oauth/authorize</code></li>\n <li>Endpoint za tokene: <code>/oauth/token</code></li>\n <li>Stran vira: <code>/oauth/profile</code></li>\n</ul>\nPonovno generiranje client secret ne bo razveljavilo obstoječih avtorizacijskih kod, ne bodo pa mogle obnoviti svoje tokene.<br><br>\nZavrnitev client tokenov bo povzročilo tekojčno prekinitev aktivnih sej. Vsi klienti se bodo morali ponovno prijaviti.",
|
||||
"quarantine_redirect": "<b>Preusmeri vsa obvestila</b> k temu prejemniku:<br><small>Pustite prazno, da onemogočite. <b>Nepodpisana, nepreverjena pošta. Uporabljalo bi se naj samo za interno dostavo.</b></small>",
|
||||
"oauth2_info": "Implementacija OAuth2 podpira vrsto odobritve »Avtorizacijska koda« in izda osvežilne žetone.<br>\nStrežnik samodejno izda tudi nove osvežilne žetone, ko je žeton za osvežitev uporabljen.<br><br>\n• Privzeti obseg je <i>profile</i>. Prek OAuth2 je mogoče overiti samo uporabnike poštnega predala. Če parameter obsega izpustite, se vrne na <i>profile</i>.<br>\n• Parameter <i>state</i> mora odjemalec poslati kot del zahteve za avtorizacijo.<br><br>\nPoti za zahteve do API-ja OAuth2: <br>\n<ul>\n<li>Končna točka avtorizacije: <code>/oauth/authorize</code></li>\n<li>Končna točka žetona: <code>/oauth/token</code></li>\n<li>Stran z viri: <code>/oauth/profile</code></li>\n</ul>\nPonovno ustvarjanje skrivnosti odjemalca ne bo poteklo obstoječih kod za avtorizacijo, vendar ne bo obnovilo žetona.<br><br>\nPreklic žetonov odjemalca bo povzročil takojšnjo prekinitev vseh aktivnih sej. Vse stranke se morajo ponovno overiti.",
|
||||
"quarantine_redirect": "<b>Preusmerite vsa obvestila</b> temu prejemniku:<br><small>Pustite prazno, če želite onemogočiti. <b>Nepodpisana, nepreverjena pošta. Dostavljeno samo interno.</b></small>",
|
||||
"quota_notification_html": "Predloga sporočila za obvestilo:<br><small>Pustite prazno za obnovitev privzete predloge.</small>",
|
||||
"quota_notifications_vars": "{{percent}} pomeni trenutna omejitev uporabnika<br>{{username}} je ime poštnega predala",
|
||||
"r_info": "Sivi/onemogočeni elementi v seznamu aktivnih omejitev niso znane kot veljavne omejitve za mailcow in ne morejo biti premaknjene. Neznane omejitve bodo kljub temu nastavljene po vrstnem redu pojavitve. <br>Nove elemente lahko dodate v <code>inc/vars.local.inc.php</code> da jih lahko vklopite ali izklopite.",
|
||||
"relayhosts_hint": "Določite transporte glede na pošiljatelja, da jih lahko izberete v konfiguraciji domene.<br>\nTransportni servis je vedno \"smtp:\" in bo poskušal s TLS ko bo na voljo. Wrapped TLS (SMTPS) ni podprto. Upošteva se uporabnikova politika odhodnega TLS.<br>\nVpliva na izbrane domene vključno z alias domenami.",
|
||||
"transport_dest_format": "Regex ali sintaksa: example.org, .example.org, *, box@example.org (več vrednosti ločite z vejico)",
|
||||
"transport_test_rcpt_info": "• Uporabite null@hosted.mailcow.de za testiranje relaya na drugo destinacijo.",
|
||||
"rspamd_global_filters_regex": "Njihovi nazivi pojasnijo njihov namen. Vsa vsebina mora imeti veljaven regular expression v obliki \"/pattern/options\" (npr. <code>/.+@domain\\.tld/i</code>).<br>\nČeprav se v vsaki vrstici regexa izvedejo osnovni pregledi, je lahko funkcionalnost programa Rspamd motena, če sintaksa ni pravilna.<br>\nRspamd bo poskušal prebrati vsebino preslikave, ko bo spremenjena. Če imate težave, <a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">ponovno zaženite Rspamd</a>, da prisilite ponovno nalaganje preslikav.<br> Elementi na seznamu zavrnjenih so izključeni iz karantene.",
|
||||
"quota_notifications_vars": "{{percent}} je enako trenutni kvoti uporabnika<br>{{username}} je ime poštnega predala",
|
||||
"r_info": "Sivi/onemogočeni elementi v seznamu aktivnih omejitev niso znane kot veljavne omejitve za mailcow in ne morejo biti premaknjene. Neznane omejitve bodo kljub temu nastavljene po vrstnem redu pojavljanja. <br>Nove elemente lahko dodate v <code>inc/vars.local.inc.php</code> da jih lahko vklopite ali izklopite.",
|
||||
"relayhosts_hint": "Določite transporte, odvisne od pošiljatelja, da jih boste lahko izbrali v pogovornem oknu za konfiguracijo domen.<br>\n Transportna storitev je vedno »smtp:« in bo zato poskusila s TLS, ko bo ponujena. Zaviti TLS (SMTPS) ni podprt. Upošteva se individualna nastavitev pravilnika za odhodni TLS uporabnika.<br>\n Vpliva na izbrane domene, vključno z vzdevki domen.",
|
||||
"transport_dest_format": "Regex ali sintaksa: example.org, .example.org, *, box@example.org (več vrednosti je lahko ločenih z vejicami)",
|
||||
"transport_test_rcpt_info": "• Za preizkus posredovanja v tujino uporabite null@hosted.mailcow.de.",
|
||||
"rspamd_global_filters_regex": "Njihova imena pojasnjujejo njihov namen. Vsa vsebina mora vsebovati veljaven regularni izraz v obliki »/vzorec/možnosti« (npr. <code>/.+@domena\\.tld/i</code>).<br>\n Čeprav se v vsaki vrstici regularnega izraza izvajajo osnovna preverjanja, je lahko funkcionalnost Rspamdsa pokvarjena, če sintakse ne prebere pravilno.<br>\n Rspamd bo poskušal prebrati vsebino zemljevida, ko se bo spremenila. Če pride do težav, <a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">znova zaženite Rspamd</a>, da uveljavite ponovno nalaganje zemljevida.<br>Elementi na seznamu zavrnjenih so izključeni iz karantene.",
|
||||
"rspamd_settings_map": "Preslikava nastavitev Rspamd",
|
||||
"sal_level": "Moo stopnja",
|
||||
"save": "Shrani spremembe",
|
||||
"search_domain_da": "Išči domene",
|
||||
"send": "Pošlji",
|
||||
"sender": "Pošiljatelj",
|
||||
"service": "Servis",
|
||||
"service_id": "ID servisa",
|
||||
"service": "Storitev",
|
||||
"service_id": "ID storitve",
|
||||
"source": "Vir",
|
||||
"spamfilter": "Spam filter",
|
||||
"spamfilter": "Filter neželene pošte",
|
||||
"subject": "Predmet",
|
||||
"success": "Uspešno",
|
||||
"sys_mails": "Sistemska pošta",
|
||||
@@ -326,7 +328,7 @@
|
||||
"title_name": "Naziv spletnega mesta \"mailcow UI\"",
|
||||
"to_top": "Nazaj na vrh",
|
||||
"transport_maps": "Preslikave transportov",
|
||||
"transports_hint": "• Vpis preslikave transporta <b>nadredi</b> preslikavo transporta odvisno od pošiljatelja.<br>\n• Preferenčno se uporabljajo transporti glede na MX zapise.<br>\n• Izhodne TLS politike na uporabnika so ignorirane in se lahko vsilijo samo s preslikavami TLS politik.<br>\n• Transportni servis za definirane transporte je vedno \"smtp:\" in bo posledično poskušal TLS ko bo ponujeno. Wrapped TLS (SMTPS) ni podprto.<br>\n• Naslovi, ki se ujemajo z \"/localhost$/\" bodo vedno preneseni preko \"local:\", in zato destinacija \"*\" ne bo vplivala na te naslove.<br>\n• Za določitev poverilnic za naslednji skok (npr. \"[host]:25\"), Postfix <b>vedno</b> preveri \"host\" preden išče \"[host]:25\". Zaradi takšnega obnašanja je nemogoče hkrati uporabiti \"host\" in \"[host]:25\".",
|
||||
"transports_hint": "• Vnos preslikave transporta <b>preglasi</b> preslikavo transporta, ki je odvisen od pošiljatelja.<br>\n• Po možnosti se uporabljajo transporti, ki temeljijo na MX.<br>\n• Nastavitve pravilnika TLS za odhodne uporabnike se prezrejo in jih je mogoče uveljaviti le z vnosi v zemljevidu pravilnika TLS.<br>\n• Storitev transporta za definirane transporte je vedno »smtp:« in bo zato poskusila s TLS, ko bo ponujena. Zaviti TLS (SMTPS) ni podprt.<br>\n• Naslovi, ki se ujemajo z \"/localhost$/\" bodo vedno preneseni preko \"local:\", in zato cilj \"*\" ne bo veljal za te naslove.<br>\n• Za določitev poverilnic za zgledni naslednji skok \"[host]:25\", Postfix <b>vedno</b> poišče \"host\" preden poišče \"[host]:25\". Zaradi tega vedenja je nemogoče hkrati uporabljati \"host\" in \"[host]:25\".",
|
||||
"ui_footer": "Noga (HTML dovoljen)",
|
||||
"ui_header_announcement": "Obvestila",
|
||||
"ui_header_announcement_active": "Nastavi obvestilo kot aktivno",
|
||||
@@ -338,7 +340,7 @@
|
||||
"ui_header_announcement_type_info": "Info",
|
||||
"ui_header_announcement_type_warning": "Pomembno",
|
||||
"ui_texts": "Oznake in besedila UI",
|
||||
"unban_pending": "unban v postopku",
|
||||
"unban_pending": "odblokada v teku",
|
||||
"unchanged_if_empty": "Če je nespremenjeno, pustite prazno",
|
||||
"upload": "Naloži",
|
||||
"username": "Uporabniško ime",
|
||||
@@ -393,7 +395,7 @@
|
||||
"iam_token_url": "Končna točka žetona",
|
||||
"iam_userinfo_url": "Končna točka z uporabniškimi podatki",
|
||||
"iam_username_field": "Polje z uporabniškim imenom",
|
||||
"iam_binddn": "Povezava DN",
|
||||
"iam_binddn": "Vezava DN",
|
||||
"iam_use_ssl": "Uporabi SSL",
|
||||
"iam_use_tls": "Uporabi StartTLS",
|
||||
"iam_version": "Različica",
|
||||
@@ -412,9 +414,9 @@
|
||||
"needs_restart": "potreben je ponovni zagon"
|
||||
},
|
||||
"danger": {
|
||||
"alias_goto_identical": "Alias in goto naslov morata biti identična",
|
||||
"aliasd_targetd_identical": "Alias domena ne sme biti enaka ciljni domeni: %s",
|
||||
"bcc_exists": "BCC preslikava obstaja za vrsto %s",
|
||||
"alias_goto_identical": "Vzdevek in ciljni naslov se ne smeta ujemati.",
|
||||
"aliasd_targetd_identical": "Vzdevek domene ne sme biti enak ciljni domeni: %s",
|
||||
"bcc_exists": "Za tip %s obstaja BCC preslikava %s",
|
||||
"dkim_domain_or_sel_exists": "DKIM ključ za \"%s\" obstaja in ne bo prepisan",
|
||||
"domain_quota_m_in_use": "Kvota domene mora biti večja ali enaka %s MiB",
|
||||
"extra_acl_invalid_domain": "Zunanji pošiljatelj \"%s\" uporablja neveljavno domeno",
|
||||
@@ -423,71 +425,71 @@
|
||||
"invalid_nexthop": "Oblika naslednjega skoka ni veljavna",
|
||||
"invalid_nexthop_authenticated": "Naslednji skok obstaja z drugačnimi poverilnicami. Prosim najprej posodobite obstoječe poverilnice za ta naslednji skok.",
|
||||
"demo_mode_enabled": "Demo način je omogočen",
|
||||
"access_denied": "Dostop zavrnjen ali pa so podatki obrazca napačni",
|
||||
"alias_domain_invalid": "Alias domena %s ni veljavna",
|
||||
"alias_empty": "Alias naslov ne sme biti prazen",
|
||||
"alias_invalid": "Alias naslov %s ni veljaven",
|
||||
"aliases_in_use": "Max. aliasov mora biti večje ali enako %d",
|
||||
"app_name_empty": "Naziv aplikacije ne more biti prazno",
|
||||
"app_passwd_id_invalid": "ID gesla aplikacije %s je neveljaven",
|
||||
"bcc_empty": "BCC cilj ne more biti prazen",
|
||||
"bcc_must_be_email": "BCC cilj %s ni veljaven e-poštni naslov",
|
||||
"access_denied": "Dostop zavrnjen ali neveljavni podatki obrazca",
|
||||
"alias_domain_invalid": "Vzdevek domene %s ni veljaven",
|
||||
"alias_empty": "Naslov vzdevka ne sme biti prazen",
|
||||
"alias_invalid": "Naslov vzdevka %s ni veljaven",
|
||||
"aliases_in_use": "Največje število vzdevkov mora biti večje ali enako %d",
|
||||
"app_name_empty": "Ime aplikacije ne sme biti prazno",
|
||||
"app_passwd_id_invalid": "ID gesla za aplikacijo %s neveljaven",
|
||||
"bcc_empty": "Polje za prejemnika BCC ne sme biti prazno",
|
||||
"bcc_must_be_email": "Cilj BCC %s ni veljaven e-poštni naslov",
|
||||
"comment_too_long": "Komentar je predolg, dovoljeno je največ 160 znakov",
|
||||
"defquota_empty": "Privzeta kvota na poštni predal ne more biti 0.",
|
||||
"description_invalid": "Opis resursa za %s ni veljaven",
|
||||
"description_invalid": "Opis vira za %s je neveljaven",
|
||||
"dkim_domain_or_sel_invalid": "Domena ali izbirnik DKIM ni veljaven: %s",
|
||||
"domain_cannot_match_hostname": "Domena se ne more ujemati z imenom gostitelja",
|
||||
"domain_exists": "Domena %s že obstaja",
|
||||
"domain_invalid": "Manjka ali napačno ime domene",
|
||||
"domain_not_empty": "Ne morem odstraniti ne-prazno domeno %s",
|
||||
"domain_invalid": "Ime domene je prazno ali neveljavno",
|
||||
"domain_not_empty": "Neprazne domene %s ni mogoče odstraniti",
|
||||
"domain_not_found": "Domene %s ni bilo mogoče najti",
|
||||
"extended_sender_acl_denied": "manjka ACL za določitev naslovov zunanjih pošiljateljev",
|
||||
"extra_acl_invalid": "Naslov zunanjega pošiljatelja \"%s\" ni veljaven",
|
||||
"fido2_verification_failed": "Preverjanje FIDO2 ni uspelo: %s",
|
||||
"file_open_error": "Datoteka ne more biti odprta za urejanje",
|
||||
"file_open_error": "Datoteke ni mogoče odpreti za pisanje",
|
||||
"filter_type": "Napačna vrsta filtra",
|
||||
"from_invalid": "Pošiljatelj ne sme biti prazno",
|
||||
"from_invalid": "Polje za pošiljatelja ne sme biti prazno",
|
||||
"global_filter_write_error": "Ni mogoče zapisati datoteke filtra: %s",
|
||||
"global_map_invalid": "ID globalne preslikave %s ni veljaven",
|
||||
"goto_empty": "Alias naslov mora vsebovati vsaj en veljaven goto naslov",
|
||||
"goto_invalid": "Goto naslov %s ni veljaven",
|
||||
"goto_empty": "Naslov vzdevka mora vsebovati vsaj en veljaven ciljni naslov",
|
||||
"goto_invalid": "Ciljni naslov %s ni veljaven",
|
||||
"ham_learn_error": "Napaka pri učenju Ham: %s",
|
||||
"imagick_exception": "Napaka: Imagick napaka pri branju slike",
|
||||
"imagick_exception": "Napaka: Izjema Imagick med branjem slike",
|
||||
"img_invalid": "Ni možno preveriti slikovne datoteke",
|
||||
"invalid_bcc_map_type": "Neveljavna vrsta preslikave BCC",
|
||||
"invalid_destination": "Ciljna oblika \"%s\" ni veljavna",
|
||||
"invalid_filter_type": "Neveljavna vrsta filtra",
|
||||
"invalid_host": "Naveden je neveljaven gostitelj (host): %s",
|
||||
"invalid_mime_type": "Neveljaven mime type",
|
||||
"invalid_mime_type": "Neveljavna vrsta MIME",
|
||||
"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č",
|
||||
"pushover_credentials_missing": "Manjka žeton in/ali ključ Pushover",
|
||||
"release_send_failed": "Sporočila ni bilo mogoče sprostiti: %s",
|
||||
"tls_policy_map_dest_invalid": "Cilj politike ni veljaven",
|
||||
"tls_policy_map_dest_invalid": "Cilj pravilnika je neveljaven",
|
||||
"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",
|
||||
"validity_missing": "Prosim določite 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)",
|
||||
"ip_list_empty": "Seznam dovoljenih IP-jev ne sme biti prazen",
|
||||
"is_alias": "%s je že znan kot naslov vzdevka",
|
||||
"is_alias_or_mailbox": "%s je že znan kot vzdevek, poštni predal ali naslov vzdevka, razširjen iz vzdevka domene.",
|
||||
"is_spam_alias": "%s je že znan kot začasni vzdevek (neželeni vzdevek)",
|
||||
"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_exceeded": "Kvota presega omejitev domene (največ %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_alias_exceeded": "Preseženo največje število vzdevkov",
|
||||
"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",
|
||||
"network_host_invalid": "Nepravilno omrežje ali gostitelj: %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",
|
||||
@@ -500,30 +502,30 @@
|
||||
"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",
|
||||
"pushover_token": "Pushover žeton ni v pravilni obliki",
|
||||
"quota_not_0_not_numeric": "Kvota mora biti numerična in >= 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",
|
||||
"resource_invalid": "Ime vira %s je neveljavno",
|
||||
"rl_timeframe": "Časovni okvir omejitve je nepravilen",
|
||||
"rspamd_ui_pw_length": "Rspamd UI geslo mora biti dolgo vsaj 6 znakov",
|
||||
"script_empty": "Script ne more biti prazen",
|
||||
"script_empty": "Skripta ne sme biti prazna",
|
||||
"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",
|
||||
"sieve_error": "Napaka Sieve razčlenjevalnika: %s",
|
||||
"spam_learn_error": "Napaka pri učenju neželene pošte: %s",
|
||||
"subject_empty": "Zadeva ne sme biti prazna",
|
||||
"targetd_not_found": "Ciljna domena %s ni bila najdena",
|
||||
"targetd_relay_domain": "Ciljna domena %s je relay domena",
|
||||
"targetd_relay_domain": "Ciljna domena %s je posredovalna 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",
|
||||
"tfa_token_invalid": "Neveljaven TFA žeton",
|
||||
"tls_policy_map_entry_exists": "Vnos pravilnika preslikave TLS \"%s\" obstaja",
|
||||
"tls_policy_map_parameter_invalid": "Parameter pravilnika je neveljaven",
|
||||
"totp_verification_failed": "Neuspešno preverjanje TOTP",
|
||||
"transport_dest_exists": "Cilj transporta \"%s\" že obstaja",
|
||||
"webauthn_verification_failed": "Preverjanje WebAuthn ni uspelo: %s",
|
||||
@@ -550,10 +552,14 @@
|
||||
"recovery_email_failed": "E-poštnega sporočila za obnovitev ni bilo mogoče poslati. Obrnite se na skrbnika.",
|
||||
"required_data_missing": "Manjkajo zahtevani podatki %s",
|
||||
"reset_token_limit_exceeded": "Omejitev žetonov za ponastavitev je bila presežena. Poskusite znova pozneje.",
|
||||
"to_invalid": "Polje za prejemnika ne sme biti prazno"
|
||||
"to_invalid": "Polje za prejemnika ne sme biti prazno",
|
||||
"max_age_invalid": "Najvišja starost %s je neveljavna",
|
||||
"mode_invalid": "Način %s ni veljaven",
|
||||
"mx_invalid": "Zapis MX %s je neveljaven",
|
||||
"version_invalid": "Različica %s je neveljavna"
|
||||
},
|
||||
"debug": {
|
||||
"containers_info": "Informacije o vsebniku (containerju)",
|
||||
"containers_info": "Informacije o zabojniku",
|
||||
"architecture": "Arhitektura",
|
||||
"chart_this_server": "Diagram (ta strežnik)",
|
||||
"container_running": "Aktiven",
|
||||
@@ -567,23 +573,23 @@
|
||||
"external_logs": "Zunanji dnevniki",
|
||||
"last_modified": "Nazadnje spremenjeno",
|
||||
"history_all_servers": "Zgodovina (vsi strežniki)",
|
||||
"in_memory_logs": "In-memory dnevniki",
|
||||
"service": "Servis",
|
||||
"in_memory_logs": "Dnevniki v pomnilniku",
|
||||
"service": "Storitev",
|
||||
"show_ip": "Prikaži javni IP",
|
||||
"size": "Velikost",
|
||||
"started_at": "Zagnano ob",
|
||||
"started_on": "Zagnano na",
|
||||
"static_logs": "Statični dnevniki",
|
||||
"success": "Uspešno",
|
||||
"system_containers": "Sistem in Containerji",
|
||||
"system_containers": "Sistem in zabojniki",
|
||||
"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",
|
||||
"log_info": "<p>mailcow <b>in-memory dnevniki</b> se zbirajo v Redis seznamih in se vsako minuto omejijo na LOG_LINES (%d) da se zmanjša obremenitev.\n <br>In-memory dnevniki niso namenjeni trajnemu shranjevanju. Vse aplikacije, ki beležijo dnevnike in-memory, tudi beležijo v Docker daemon in posledično v privzeti gonilnik za dnevnik.\n <br>In-memory dnevniki se naj uporabljajo za odpravljanje manjših napak s containerji.</p>\n <p><b>Eksterni dnevniki</b> se zbirajo preko API-ja posamezne aplikacije.</p>\n <p><b>Statični dnevniki</b> so večinoma dnevniki aktivnosti, ki se ne beležijo v Dockerd, a jih je vseeno treba hraniti (razen API dnevnikov).</p>",
|
||||
"wip": "Trenutno delo v teku",
|
||||
"log_info": "<p>Dnevniki v pomnilniku mailcow se zbirajo na seznamih Redis in vsako minuto skrajšajo na LOG_LINES (%d), da se zmanjša preobremenitev.\n <br>Dnevniki v pomnilniku niso namenjeni trajnemu beleženju. Vse aplikacije, ki se beležijo v pomnilnik, se beležijo tudi v Dockerjev demon in s tem v privzeti gonilnik beleženja.</p>\n </p>Vrsta dnevnika v pomnilniku se mora uporabljati za odpravljanje manjših težav s kontejnerji.</p>\n <p><b>Zunanji dnevniki</b> se zbirajo prek API-ja dane aplikacije.</p>\n <p><b>Statični dnevniki</b> so večinoma dnevniki dejavnosti, ki se ne beležijo v Dockerd, vendar morajo biti še vedno trajni (razen dnevnikov API-ja).</p>",
|
||||
"login_time": "Čas",
|
||||
"logs": "Dnevniki",
|
||||
"memory": "Spomin",
|
||||
@@ -594,7 +600,7 @@
|
||||
"infoFiltered": "(filtrirano od _MAX_ skupaj zapisov)",
|
||||
"collapse_all": "Strni vse",
|
||||
"decimal": ",",
|
||||
"emptyTable": "Ni podatkov",
|
||||
"emptyTable": "V tabeli ni na voljo podatkov",
|
||||
"expand_all": "Razširi vse",
|
||||
"info": "Prikazano _START_ do _END_ od _TOTAL_ zapisov",
|
||||
"infoEmpty": "Prikazano 0 do 0 od 0 zapisov",
|
||||
@@ -616,9 +622,9 @@
|
||||
}
|
||||
},
|
||||
"diagnostics": {
|
||||
"cname_from_a": "Vrednost pridobljena iz A/AAAA zapisa. To je podprto, če zapis kaže na pravilen resurs.",
|
||||
"cname_from_a": "Vrednost, izpeljana iz zapisa A/AAAA. To je podprto, če zapis kaže na pravilen vir.",
|
||||
"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_24hours": "Upoštevajte, da se lahko spremembe DNS-a pravilno odražajo na tej strani v 24 urah. Namenjena je temu, da si preprosto ogledate, kako konfigurirati zapise DNS, in preverite, ali so vsi vaši zapisi pravilno shranjeni v DNS-u.",
|
||||
"dns_records_data": "Pravilni podatki",
|
||||
"dns_records_docs": "Prosim preverite tudi <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">dokumentacijo</a>.",
|
||||
"dns_records_name": "Ime",
|
||||
@@ -629,60 +635,60 @@
|
||||
"edit": {
|
||||
"acl": "ACL (Dovoljenje)",
|
||||
"active": "Aktivno",
|
||||
"allow_from_smtp": "Dovoli samo tem IP naslovom da uporabijo <b>SMTP</b>",
|
||||
"bcc_dest_format": "Cilj BCC mora biti en veljaven email naslov.<br>Če morate poslati kopijo na več naslovov, ustvarite alias in ga uporabite tukaj.",
|
||||
"automap": "Poskušaj samodejno preslikati mape (\"Sent items\", \"Sent\" => \"Poslano\" ipd.)",
|
||||
"allow_from_smtp": "Dovoli samo tem IP naslovom uporabo <b>SMTP</b>",
|
||||
"bcc_dest_format": "Ciljna stran za polje SKP (BCC) mora biti en veljaven e-poštni naslov.<br>Če morate kopijo poslati na več naslovov, ustvarite vzdevek in ga uporabite tukaj.",
|
||||
"automap": "Poskusite samodejno preslikati mape (\"Poslani predmeti\", \"Poslano\" => \"Poslano\" itd.)",
|
||||
"admin": "Uredi skrbnika",
|
||||
"domain_footer_info_vars": {
|
||||
"custom": "{= foo =} - Če ima poštni predal atribut po meri \"foo\" z vrednostjo \"bar\", spremenljivka vrne \"bar\"",
|
||||
"auth_user": "{= auth_user =} - Prijavljeno uporabniško ime, ki ga določi MTA",
|
||||
"from_user": "{= from_user =} - leva stran email naslova uporabnika, npr. za \"moo@mailcow.tld\" vrne \"moo\"",
|
||||
"from_name": "{= from_name =} - Prikazno ime, npr. za \"Mailcow <moo@mailcow.tld>\" vrne \"Mailcow\"",
|
||||
"from_addr": "{= from_addr =} - e-poštni naslov \"Od\"",
|
||||
"from_domain": "{= from_domain =} - domena e-poštnega naslova \"Od\""
|
||||
"custom": "{= foo =} - Če ima poštni predal atribut po meri \"foo\" z vrednostjo \"bar\", vrne \"bar\"",
|
||||
"auth_user": "{= auth_user =} - Preverjeno uporabniško ime, ki ga določi MTA",
|
||||
"from_user": "{= from_user =} - Iz uporabniškega dela ovojnice, npr. za \"moo@mailcow.tld\" vrne \"moo\"",
|
||||
"from_name": "{= from_name =} - Iz imena ovojnice, npr. za \"Mailcow <moo@mailcow.tld>\" vrne \"Mailcow\"",
|
||||
"from_addr": "{= from_addr =} - Del ovojnice z naslovom od",
|
||||
"from_domain": "{= from_domain =} - Iz domenskega dela ovojnice"
|
||||
},
|
||||
"dont_check_sender_acl": "Onemogoči kontrolo pošiljatelja za domeno %s (+ alias domene)",
|
||||
"dont_check_sender_acl": "Onemogoči preverjanje pošiljatelja za domeno %s (+ vzdevki domen)",
|
||||
"pushover_title": "Naslov obvestila",
|
||||
"domains": "Domene",
|
||||
"extended_sender_acl_info": "Če je DKIM domenski ključ na voljo, ga uvozite.<br>\n Ne pozabite dodati ta strežnik k ustreznemu SPF TXT zapisu.<br>\n Kadar koli je domena ali alias domena dodana k tem strežniku, ki se prekriva z zunanjim naslovom, je zunanji naslov odstranjen.<br>\n uporabite @domain.tld da dovolite pošiljanje kot *@domain.tld.",
|
||||
"lookup_mx": "Cilj je regular expression za ujemanje MX zapisov (<code>.*\\.google\\.com</code> za usmeritev vse pošte na MX, ki se konča z google.com, preko tega skoka)",
|
||||
"maxbytespersecond": "Največ bytov na sekundo <br><small>(0 = neomejeno)</small>",
|
||||
"extended_sender_acl_info": "Uvoziti je treba ključ domene DKIM, če je na voljo.<br>\n Ne pozabite dodati tega strežnika v ustrezni zapis SPF TXT.<br>\n Kadar koli je temu strežniku dodana domena ali vzdevek domene, ki se prekriva z zunanjim naslovom, se zunanji naslov odstrani.<br>\n Uporabite @domain.tld, da omogočite pošiljanje kot *@domain.tld.",
|
||||
"lookup_mx": "Cilj je regularni izraz, ki se ujema z imenom MX (<code>.*\\.google\\.com</code> za usmerjanje vse pošte, usmerjene na MX, ki se konča na google.com, prek tega skoka).",
|
||||
"maxbytespersecond": "Največ bajtov na sekundo <br><small>(0 = neomejeno)</small>",
|
||||
"pushover_sender_array": "Upoštevaj samo sledeče e-poštne naslove pošiljateljev <small>(ločeni z vejico)</small>",
|
||||
"mbox_rl_info": "Ta omejitev velja za SASL uporabniško ime, preverja se ujemanje s katerim koli \"from\" naslovom, ki ga uporablja prijavljeni uporabnik. Omejitev pošiljanja za poštni predal preglasi pravilo omejitve za domeno.",
|
||||
"mbox_rl_info": "Ta omejitev se uporabi za prijavno ime SASL in se ujema z naslovom \"od\", ki ga uporablja prijavljeni uporabnik. Omejitev poštnega nabiralnika preglasi omejitev za celotno domeno.",
|
||||
"kind": "Tip",
|
||||
"client_secret": "Skrivnost odjemalca",
|
||||
"comment_info": "Zasebni komentar ni viden uporabniku, javni komentar pa se prikaže kot opis orodja, ko nanj v pregledu uporabnika zadržite miško",
|
||||
"created_on": "Ustvarjeno",
|
||||
"custom_attributes": "Atributi po meri",
|
||||
"delete1": "Izbriši na viru, ko je končano",
|
||||
"delete2": "Izbriši sporočila na cilju, ki ne obstajajo na viru",
|
||||
"delete1": "Izbriši iz vira, ko je končano",
|
||||
"delete2": "Izbriši sporočila na cilju, ki niso na izvoru",
|
||||
"delete2duplicates": "Izbriši dvojnike na cilju",
|
||||
"delete_ays": "Prosim potrdite proces izbrisa.",
|
||||
"description": "Opis",
|
||||
"disable_login": "Onemogoči prijavo (dohodna pošta je še vedno sprejeta)",
|
||||
"domain": "Uredi domeno",
|
||||
"domain_admin": "Uredi domenskega skrbnika",
|
||||
"domain_admin": "Uredi skrbnika domene",
|
||||
"domain_footer": "Noga za celo domeno",
|
||||
"domain_footer_html": "HTML noga",
|
||||
"pushover_vars": "Če ni definiran noben filter pošiljatelja, bodo upoštevana vsa sporočila.<br>Regex filtre in natančna preverjanja pošiljateljev je mogoče definirati posamezno in bodo obravnavani v nadaljevanju. Niso odvisni drug od drugega.<br>Uporabne spremenljivke za besedilo in naslov (prosimo, upoštevajte politike varstva podatkov)",
|
||||
"pushover_vars": "Če filter pošiljatelja ni definiran, bodo upoštevana vsa e-poštna sporočila.<br>Filtre regularnih izrazov in natančna preverjanja pošiljateljev je mogoče definirati posamično in bodo obravnavana zaporedno. Niso odvisna drug od drugega.<br>Uporabne spremenljivke za besedilo in naslov (upoštevajte pravilnike o varstvu podatkov)",
|
||||
"pushover_verify": "Preveri poverilnice",
|
||||
"quota_mb": "Omejitev (MiB)",
|
||||
"quota_warning_bcc": "BCC za sporočilo z opozorilom omejitve",
|
||||
"quota_warning_bcc": "Opozorilo o kvoti BCC",
|
||||
"quota_warning_bcc_info": "Opozorila bodo poslana kot ločene kopije naslednjim prejemnikom. Zadevi bo v oklepaju dodano ustrezno uporabniško ime, na primer: <code>Opozorilo o kvoti (uporabnik@example.com)</code>.",
|
||||
"ratelimit": "Omejitev pošiljanja",
|
||||
"advanced_settings": "Napredne nastavitve",
|
||||
"allow_from_smtp_info": "Pustite prazno da dovolite vse pošiljatelje.<br>IPv4/IPv6 naslovi in omrežja.",
|
||||
"allow_from_smtp_info": "Pustite prazno, da dovolite vse pošiljatelje.<br>Naslovi in omrežja IPv4/IPv6.",
|
||||
"allowed_protocols": "Dovoljeni protokoli za neposreden dostop uporabnikov (ne vpliva na protokole za gesla aplikacij)",
|
||||
"app_name": "Ime aplikacije",
|
||||
"app_passwd": "Geslo aplikacije",
|
||||
"app_passwd_protocols": "Dovoljeni protokoli za geslo aplikacije",
|
||||
"backup_mx_options": "Možnosti posredovanja (relay)",
|
||||
"client_id": "Client ID",
|
||||
"domain_footer_info": "Noge za celo domeno so dodane k vsem izhodnim e-poštnim sporočilom v tej domeni.<br> V nogi se lahko uporabijo sledeče spremenljivke:",
|
||||
"domain_footer_plain": "PLAIN noga",
|
||||
"domain_footer_skip_replies": "Ne dodajaj noge v odgovorih na e-poštna sporočila",
|
||||
"domain_quota": "Omejitev (kvota) domene",
|
||||
"edit_alias_domain": "Uredi alias domeno",
|
||||
"backup_mx_options": "Možnosti posredovanja",
|
||||
"client_id": "ID odjemalca",
|
||||
"domain_footer_info": "Noge za celotno domeno so dodane vsem odhodnim e-poštnim sporočilom, povezanim z naslovom znotraj te domene. <br> Za nogo se lahko uporabijo naslednje spremenljivke:",
|
||||
"domain_footer_plain": "NAVADNA noga",
|
||||
"domain_footer_skip_replies": "Prezri nogo v odgovorih na e-poštna sporočila",
|
||||
"domain_quota": "Kvota domene",
|
||||
"edit_alias_domain": "Uredi vzdevek domene",
|
||||
"exclude": "Izključi objekte (regex)",
|
||||
"extended_sender_acl": "Naslovi zunanjih pošiljateljev",
|
||||
"force_pw_update": "Obvezna zamenjava gesla ob naslednji prijavi",
|
||||
@@ -691,18 +697,18 @@
|
||||
"full_name": "Polno ime",
|
||||
"gal": "Globalni seznam naslovov (GAL)",
|
||||
"gal_info": "GAL vsebuje vse objekte v domeni in jih uporabniki ne morejo urejati. Če je onemogočeno, ni podatkov o o zasedenosti objekta! <b>Ponovno zaženite SOGo za uveljavitev sprememb.</b>",
|
||||
"generate": "generiraj",
|
||||
"generate": "ustvari",
|
||||
"grant_types": "Vrste dovoljenj",
|
||||
"hostname": "Ime gostitelja",
|
||||
"inactive": "Neaktivno",
|
||||
"last_modified": "Nazadnje spremenjeno",
|
||||
"mailbox": "Uredi poštni predal",
|
||||
"mailbox_quota_def": "Privzeta omejitev/kvota za poštni predal",
|
||||
"mailbox_relayhost_info": "Velja samo za poštni predal in neposredne aliase. Ne prepiše domenskega relay gostitelja.",
|
||||
"max_aliases": "Največ aliasov",
|
||||
"max_mailboxes": "Največ možnih poštnih predalov",
|
||||
"max_quota": "Največja omejitev/kvota na poštni predal (MiB)",
|
||||
"maxage": "Največja starost sporočil (v dnevih), po katerih bo poizvedeno iz oddaljenega vira <br><small>(0 = ne omejuj)</small>",
|
||||
"mailbox_quota_def": "Privzeta kvota nabiralnika",
|
||||
"mailbox_relayhost_info": "Uporablja se samo za poštni nabiralnik in neposredne vzdevke, preglasi gostitelja posredovalne domene.",
|
||||
"max_aliases": "Največje število vzdevkov",
|
||||
"max_mailboxes": "Največje možno število poštnih predalov",
|
||||
"max_quota": "Največja kvota na poštni predal (MiB)",
|
||||
"maxage": "Najvišja starost sporočil v dnevih, ki bodo prebrana z oddaljenega strežnika<br><small>(0 = prezri starost)</small>",
|
||||
"mins_interval": "Interval (min)",
|
||||
"multiple_bookings": "Več rezervacij",
|
||||
"none_inherit": "Brez / podeduj",
|
||||
@@ -720,7 +726,7 @@
|
||||
"pushover_text": "Besedilo obvestila",
|
||||
"pushover_sound": "Zvok",
|
||||
"encryption": "Šifriranje",
|
||||
"alias": "Uredi alias",
|
||||
"alias": "Uredi vzdevek",
|
||||
"relayhost": "Prenosi, odvisni od pošiljatelja",
|
||||
"mailbox_rename_alias": "Samodejno ustvari vzdevek",
|
||||
"sender_acl_info": "Če lahko uporabnik poštnega predala A pošilja kot uporabnik poštnega predala B, se naslov pošiljatelja v SOGo ne prikaže samodejno kot izbirno polje \"od\".<br>\n Uporabnik poštnega predala B mora v SOGo ustvariti pooblastilo, da lahko uporabnik poštnega predala A izbere svoj naslov kot pošiljatelja. Če želite pooblastiti poštni predal v SOGo, uporabite meni (tri pike) desno od imena vašega poštnega predala v zgornjem levem kotu v pogledu pošte. To vedenje ne velja za vzdevke.",
|
||||
@@ -743,7 +749,7 @@
|
||||
"sogo_access": "Neposredno posredovanje na SOGo",
|
||||
"sogo_access_info": "Po prijavi je uporabnik samodejno preusmerjen na SOGo.",
|
||||
"sogo_visible": "Vzdevek je viden v SOGo",
|
||||
"sogo_visible_info": "Ta možnost vpliva samo na objekte, ki jih je mogoče prikazati v SOGo (naslovi aliasov v skupni rabi ali brez nje, ki kažejo na vsaj en lokalni poštni predal). Če je skrita, vzdevek ne bo prikazan kot izbirni pošiljatelj v SOGo.",
|
||||
"sogo_visible_info": "Ta možnost vpliva samo na objekte, ki jih je mogoče prikazati v SOGo (naslovi vzdevkov v skupni rabi ali brez nje, ki kažejo na vsaj en lokalni poštni predal). Če je skrita, vzdevek ne bo prikazan kot izbirni pošiljatelj v SOGo.",
|
||||
"spam_alias": "Ustvarjanje ali spreminjanje časovno omejenih vzdevkovnih naslovov",
|
||||
"spam_filter": "Filter neželene pošte",
|
||||
"spam_policy": "Dodajanje ali odstranjevanje elementov na seznam dovoljenih/zavrnjenih",
|
||||
@@ -761,10 +767,23 @@
|
||||
"mailbox_rename": "Preimenuj poštni predal",
|
||||
"mailbox_rename_agree": "Ustvaril/a sem varnostno kopijo.",
|
||||
"mailbox_rename_warning": "POMEMBNO! Pred preimenovanjem nabiralnika ustvarite varnostno kopijo.",
|
||||
"sieve_desc": "Kratek opis"
|
||||
"sieve_desc": "Kratek opis",
|
||||
"mta_sts": "MTA-STS",
|
||||
"mta_sts_info": "<a href='https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#SMTP_MTA_Strict_Transport_Security' target='_blank'>MTA-STS</a> je standard, ki vsiljuje dostavo e-pošte med poštnimi strežniki z uporabo TLS z veljavnimi potrdili. <br>Uporablja se, kadar <a target='_blank' href='https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities'>DANE</a> ni mogoč zaradi manjkajočega ali nepodprtega DNSSEC.<br><b>Opomba</b>: Če prejemna domena podpira DANE z DNSSEC, je DANE <b>vedno</b> prednost – MTA-STS deluje le kot rezervna možnost.",
|
||||
"mta_sts_version": "Različica",
|
||||
"mta_sts_version_info": "Določa različico standarda MTA-STS – trenutno je veljavna samo različica <code>STSv1</code>.",
|
||||
"mta_sts_mode": "Način",
|
||||
"mta_sts_mode_info": "Na voljo so trije načini:<ul><li><em>testiranje</em> – pravilnik se samo spremlja, kršitve nimajo vpliva.</li><li><em>uveljavljanje</em> – pravilnik se strogo uveljavlja, povezave brez veljavnega TLS so zavrnjene.</li><li><em>brez</em> – pravilnik je objavljen, vendar se ne uporablja.</li></ul>",
|
||||
"mta_sts_max_age": "Najvišja starost",
|
||||
"mta_sts_max_age_info": "Čas v sekundah, ki ga lahko prejemni poštni strežniki shranijo v predpomnilnik, dokler se ne naloži ponovno.",
|
||||
"mta_sts_mx": "MX strežnik",
|
||||
"mta_sts_mx_info": "Omogoča pošiljanje samo na izrecno navedena imena gostiteljskih strežnikov poštnih strežnikov; pošiljajoči MTA preveri, ali se ime gostitelja DNS MX ujema s seznamom pravilnikov, in dovoljuje dostavo le z veljavnim potrdilom TLS (zaščita pred MITM).",
|
||||
"mta_sts_mx_notice": "Določiti je mogoče več strežnikov MX (ločenih z vejicami).",
|
||||
"internal": "Notranje",
|
||||
"internal_info": "Notranji vzdevki so dostopni samo iz lastne domene ali vzdevkov domen."
|
||||
},
|
||||
"footer": {
|
||||
"restart_container_info": "<b>Pomembno:</b> Ugoden ponovni zagon lahko traja nekaj časa, zato počakajte, da se konča.",
|
||||
"restart_container_info": "<b>Pomembno:</b> Eleganten ponovni zagon lahko traja nekaj časa, zato počakajte, da se konča.",
|
||||
"delete_these_items": "Prosimo, potrdite spremembe naslednjega ID-ja objekta",
|
||||
"confirm_delete": "Potrdi brisanje",
|
||||
"delete_now": "Izbriši zdaj",
|
||||
@@ -799,7 +818,8 @@
|
||||
"other_logins": "ali se prijavite s/z",
|
||||
"reset_password": "Ponastavi geslo",
|
||||
"request_reset_password": "Zahteva za spremembo gesla",
|
||||
"username": "Uporabniško ime"
|
||||
"username": "Uporabniško ime",
|
||||
"email": "E-poštni naslov"
|
||||
},
|
||||
"mailbox": {
|
||||
"last_mail_login": "Zadnja prijava v e-pošto",
|
||||
@@ -975,7 +995,8 @@
|
||||
"yes": "✓",
|
||||
"weekly": "Tedensko",
|
||||
"sieve_info": "Na uporabnika lahko shranite več filtrov, vendar je lahko hkrati aktiven le en predfilter in en postfilter.<br>\nVsak filter bo obdelan v opisanem vrstnem redu. Niti neuspešen skript niti izdan ukaz »keep;« ne bosta ustavila obdelave nadaljnjih skript. Spremembe globalnih skriptov sita bodo sprožile ponovni zagon Dovecota.<br><br>Globalni predfilter sita • Predfilter • Uporabniški skripti • Postfilter • Globalni postfilter sita",
|
||||
"tls_policy_maps_info": "Ta preslikava pravilnikov preglasi pravila odhodnega prenosa TLS neodvisno od uporabnikovih nastavitev pravilnikov TLS.<br>\n Za več informacij preverite <a href=\"http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps\" target=\"_blank\">dokumentacijo »smtp_tls_policy_maps«</a>."
|
||||
"tls_policy_maps_info": "Ta preslikava pravilnikov preglasi pravila odhodnega prenosa TLS neodvisno od uporabnikovih nastavitev pravilnikov TLS.<br>\n Za več informacij preverite <a href=\"http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps\" target=\"_blank\">dokumentacijo »smtp_tls_policy_maps«</a>.",
|
||||
"internal": "Notranje"
|
||||
},
|
||||
"fido2": {
|
||||
"known_ids": "Znani ID-ji",
|
||||
@@ -1346,7 +1367,7 @@
|
||||
"spamfilter_default_score": "Privzete vrednosti",
|
||||
"spamfilter_green": "Zelena: to sporočilo ni neželena pošta",
|
||||
"spamfilter_hint": "Prva vrednost opisuje »nizko oceno neželene pošte«, druga pa »visoko oceno neželene pošte«.",
|
||||
"spamfilter_red": "Rdeča: To sporočilo je neželena pošta in ga bo strežnik zavrnil.",
|
||||
"spamfilter_red": "Rdeča: To sporočilo je neželena pošta in ga bo strežnik zavrnil",
|
||||
"spamfilter_table_action": "Dejanje",
|
||||
"spamfilter_table_add": "Dodaj element",
|
||||
"spamfilter_table_domain_policy": "ni na voljo (pravilnik domene)",
|
||||
@@ -1391,7 +1412,7 @@
|
||||
"warning": {
|
||||
"cannot_delete_self": "Prijavljenega uporabnika ni mogoče izbrisati",
|
||||
"domain_added_sogo_failed": "Domena je bila dodana, vendar ponovni zagon SOGo ni uspel. Preverite dnevnike strežnika.",
|
||||
"dovecot_restart_failed": "Dovecota ni uspelo znova zagnati, preverite dnevnike.",
|
||||
"dovecot_restart_failed": "Dovecota ni uspelo znova zagnati, preverite dnevnike",
|
||||
"fuzzy_learn_error": "Napaka učenja mehkega zgoščevanja: %s",
|
||||
"hash_not_found": "Zgoščena vrednost ni bila najdena ali je bila že izbrisana",
|
||||
"ip_invalid": "Preskočen neveljaven IP: %s",
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"sogo_access": "允许管理 SOGo 访问权限",
|
||||
"sogo_profile_reset": "重置 SOGo 个人资料",
|
||||
"spam_alias": "临时别名",
|
||||
"spam_policy": "黑名单/白名单",
|
||||
"spam_policy": "阻止名单/允许名单",
|
||||
"spam_score": "垃圾邮件分数",
|
||||
"syncjobs": "同步任务",
|
||||
"tls_policy": "TLS 策略",
|
||||
@@ -109,7 +109,9 @@
|
||||
"username": "用户名",
|
||||
"validate": "验证",
|
||||
"validation_success": "验证成功",
|
||||
"dry": "模拟同步(Dry run)"
|
||||
"dry": "模拟同步(Dry run)",
|
||||
"internal_info": "内部的别名只能在域内部或者别名域内部访问。",
|
||||
"internal": "内部的"
|
||||
},
|
||||
"admin": {
|
||||
"access": "权限管理",
|
||||
@@ -147,7 +149,7 @@
|
||||
"arrival_time": "到达时间 (服务器时间)",
|
||||
"authed_user": "已认证用户",
|
||||
"ays": "确定继续操作?",
|
||||
"ban_list_info": "以下为被封禁的 IP 列表: <b>网络 (剩余封禁时间) - [操作]</b>。<br />被取消封禁的 IP 将会在几秒之内从封禁列表中移除<br />红色标签表示因黑名单而导致的永久封禁。",
|
||||
"ban_list_info": "以下为被封禁的 IP 列表: <b>网络 (剩余封禁时间) - [操作]</b>。<br />被取消封禁的 IP 将会在几秒之内从封禁列表中移除<br />红色标签表示因阻止名单而导致的永久封禁。",
|
||||
"change_logo": "更改 Logo",
|
||||
"configuration": "配置",
|
||||
"convert_html_to_text": "将 HTML 转换为纯文本内容",
|
||||
@@ -179,16 +181,16 @@
|
||||
"empty": "结果为空",
|
||||
"excludes": "除了",
|
||||
"f2b_ban_time": "封禁时间 (秒)",
|
||||
"f2b_blacklist": "网络/主机黑名单",
|
||||
"f2b_blacklist": "网络/主机阻止名单",
|
||||
"f2b_filter": "正则表达式过滤器",
|
||||
"f2b_list_info": "黑名单的优先级总是高于白名单。 <b>列表更新将会在几秒之后完成。</b>",
|
||||
"f2b_list_info": "阻止名单的优先级总是高于允许名单。 <b>列表更新将会在几秒之后完成。</b>",
|
||||
"f2b_max_attempts": "最多尝试次数",
|
||||
"f2b_netban_ipv4": "应用封禁的 IPv4 子网大小 (8-32)",
|
||||
"f2b_netban_ipv6": "应用封禁的 IPv6 子网大小 (8-128)",
|
||||
"f2b_parameters": "Fail2ban 参数",
|
||||
"f2b_regex_info": "将会过滤这些应用的日志: SOGo,Postfix,Dovecot 和 PHP-FPM。",
|
||||
"f2b_retry_window": "最多尝试次数重试窗口 (秒)",
|
||||
"f2b_whitelist": "网络/主机白名单",
|
||||
"f2b_whitelist": "网络/主机允许名单",
|
||||
"filter_table": "筛选表格",
|
||||
"forwarding_hosts": "转发主机",
|
||||
"forwarding_hosts_add_hint": "你可以指定 IPv4/IPv6 地址、CIDR 表示的网络、主机名 (解析为 IP 地址),或者邮箱域名 (查询 SPF 记录或 MX 记录并解析为 IP 地址)。",
|
||||
@@ -296,8 +298,8 @@
|
||||
"rspamd_com_settings": "设置名称将会自动生成,请看参考下方的示例预设。查看<a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd 文档</a>以了解更多的细节",
|
||||
"rspamd_global_filters": "全局过滤规则",
|
||||
"rspamd_global_filters_agree": "我会小心谨慎的!",
|
||||
"rspamd_global_filters_info": "全局过滤规则包含了不同类型的全局黑名单和白名单。",
|
||||
"rspamd_global_filters_regex": "它们的名字解释了它们的用途。所有内容必须包含 \"/pattern/options\" 格式的合法表达式 (例如 <code>/.+@domain\\.tld/i</code>)。<br>\r\n 因为仅对正则表达式执行了基本的检查,Rspamd 的功能仍可能因正则表达式语法问题出现错误。<br>\r\n Rspamd 会在规则更改后读取其内容。 如果你遇到了问题,<a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">重启 Rspamd</a> 以强制重载规则。<br>黑名单中的项目会被系统排除。",
|
||||
"rspamd_global_filters_info": "全局过滤规则包含了不同类型的全局阻止名单和允许名单。",
|
||||
"rspamd_global_filters_regex": "它们的名字解释了它们的用途。所有内容必须包含 \"/pattern/options\" 格式的合法表达式 (例如 <code>/.+@domain\\.tld/i</code>)。<br>\n 因为仅对正则表达式执行了基本的检查,Rspamd 的功能仍可能因正则表达式语法问题出现错误。<br>\n Rspamd 会在规则更改后读取其内容。 如果你遇到了问题,<a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">重启 Rspamd</a> 以强制重载规则。<br>阻止名单中的项目会被系统排除。",
|
||||
"rspamd_settings_map": "Rspamd 设置",
|
||||
"sal_level": "Moo 等级",
|
||||
"save": "保存更改",
|
||||
@@ -405,7 +407,10 @@
|
||||
"user_quicklink": "隐藏指向用户登陆页面的快捷链接",
|
||||
"admin_quicklink": "隐藏指向管理员登陆页面的快捷链接",
|
||||
"force_sso": "强制要求单点登录(SSO)",
|
||||
"user_link": "自定义链接"
|
||||
"user_link": "自定义链接",
|
||||
"app_hide": "在登入界面隐藏",
|
||||
"needs_restart": "需要重启",
|
||||
"iam_use_tls_info": "如果使用了 TLS,必须使用 LDAP 服务器的默认端口(389)。SSL 的端口不能使用。"
|
||||
},
|
||||
"danger": {
|
||||
"access_denied": "访问被拒绝或者表单数据无效",
|
||||
@@ -546,7 +551,11 @@
|
||||
"generic_server_error": "服务器错误。请联系您的管理员。",
|
||||
"authsource_in_use": "由于当前有一个或多个用户正在使用该身份提供者(IDP),因此无法更改或删除。",
|
||||
"iam_test_connection": "连接失败",
|
||||
"required_data_missing": "缺少需要的 %s 数据"
|
||||
"required_data_missing": "缺少需要的 %s 数据",
|
||||
"max_age_invalid": "最大有效时间 %s 无效",
|
||||
"mode_invalid": "模式 %s 无效",
|
||||
"mx_invalid": "MX 记录 %s 无效",
|
||||
"version_invalid": "版本 %s 无效"
|
||||
},
|
||||
"debug": {
|
||||
"chart_this_server": "图表 (此服务器)",
|
||||
@@ -732,7 +741,20 @@
|
||||
"domain_footer_skip_replies": "在回信中忽略 footer",
|
||||
"footer_exclude": "从 footer 中排除",
|
||||
"last_modified": "上次修改时间",
|
||||
"pushover_sound": "声音"
|
||||
"pushover_sound": "声音",
|
||||
"internal": "内部的",
|
||||
"internal_info": "内部的别名只能在域内部或者别名域内部访问。",
|
||||
"mta_sts": "邮件传输代理严格传输安全协议(MTA-STS)",
|
||||
"mta_sts_version": "版本",
|
||||
"mta_sts_info": "<a href='https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#SMTP_MTA_Strict_Transport_Security' target='_blank'>MTA-STS</a> 是一项 MTA 标准,它强制要求 MTA 间传输必须使用 TLS 和有效的证书。<br>当因没有 DNSSEC 而无法使用 <a target='_blank' href='https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities'>DANE</a> 时,该标准将被启用。<br><b>注意</b>:若收件域支持基于 DNSSEC 的 DANE 协议,则系统将<b>始终</b>优先采用 DANE —— MTA-STS 仅作为备用机制存在。",
|
||||
"mta_sts_version_info": "定义 MTA-STS 标准的版本——当前仅 <code>STSv1</code> 为有效版本。",
|
||||
"mta_sts_mode": "模式",
|
||||
"mta_sts_mode_info": "提供三种可选模式:<ul><li><em>测试模式</em>——仅监控策略执行情况,违反策略不会产生实际影响。</li><li><em>强制模式</em>——严格执行策略,拒绝所有未使用有效 TLS 加密的连接。</li><li><em>禁用模式</em>——发布策略但不生效。</li></ul>",
|
||||
"mta_sts_max_age": "最长有效期",
|
||||
"mta_sts_max_age_info": "接收方邮件服务器可缓存该策略的时长(秒),超出后需重新获取策略。",
|
||||
"mta_sts_mx": "MX 服务器",
|
||||
"mta_sts_mx_info": "仅允许向明确列出的邮件服务器发送邮件;发送方 MTA 会验证 DNS MX 记录的主机名是否与策略列表匹配,并仅允许携带有效 TLS 证书的投递(可防范中间人攻击)。",
|
||||
"mta_sts_mx_notice": "可配置多个 MX 服务器(以逗号分隔)。"
|
||||
},
|
||||
"fido2": {
|
||||
"confirm": "确认",
|
||||
@@ -802,7 +824,8 @@
|
||||
"login_linkstext": "不是正确的登陆页面?",
|
||||
"login_usertext": "以用户身份登陆",
|
||||
"login_domainadmintext": "以域管理员身份登陆",
|
||||
"login_admintext": "以管理员身份登陆"
|
||||
"login_admintext": "以管理员身份登陆",
|
||||
"email": "邮箱地址"
|
||||
},
|
||||
"mailbox": {
|
||||
"action": "操作",
|
||||
@@ -908,7 +931,7 @@
|
||||
"recipient_map_new": "新收件人",
|
||||
"recipient_map_new_info": "收件人映射的目标必须为合法的邮件地址或域名。",
|
||||
"recipient_map_old": "原收件人",
|
||||
"recipient_map_old_info": "原收件人必须为合法的邮箱地址。",
|
||||
"recipient_map_old_info": "原收件人必须为合法的邮箱地址或域名。",
|
||||
"recipient_maps": "收件人映射",
|
||||
"relay_all": "中继所有收件人",
|
||||
"remove": "删除",
|
||||
@@ -978,7 +1001,8 @@
|
||||
"relay_unknown": "转发未知信箱",
|
||||
"templates": "模板",
|
||||
"template": "模板",
|
||||
"iam": "身份提供者(IDP)"
|
||||
"iam": "身份提供者(IDP)",
|
||||
"internal": "内部的"
|
||||
},
|
||||
"oauth2": {
|
||||
"access_denied": "请作为邮箱所有者登录以使用 OAuth2 授权。",
|
||||
@@ -1010,7 +1034,7 @@
|
||||
"notified": "已发送通知",
|
||||
"qhandler_success": "已成功向系统发送请求,现在你可以关闭这个窗口了。",
|
||||
"qid": "Rspamd 队列ID(QID)",
|
||||
"qinfo": "隔离系统会把已被拒绝接收的邮件以及作为拷贝发送到垃圾箱的邮件保存到数据库中 (发件人<em>不</em>会知道)。\r\n <br>\"学习为垃圾并删除\" 会根据贝叶斯定理将消息作为垃圾学习并计算其模糊特征以拒绝未来收到相似消息。\r\n <br>请注意,这取决于你的系统资源,学习多个消息可能会花费较长时间。<br>黑名单中项目会被隔离系统排除。",
|
||||
"qinfo": "隔离系统会把已被拒绝接收的邮件以及作为拷贝发送到垃圾箱的邮件保存到数据库中 (发件人<em>不</em>会知道)。\n <br>\"学习为垃圾并删除\" 会根据贝叶斯定理将消息作为垃圾学习并计算其模糊特征以拒绝未来收到相似消息。\n <br>请注意,这取决于你的系统资源,学习多个消息可能会花费较长时间。<br>阻止名单中项目会被隔离系统排除。",
|
||||
"qitem": "隔离项目",
|
||||
"quarantine": "隔离",
|
||||
"quick_actions": "操作",
|
||||
@@ -1301,8 +1325,8 @@
|
||||
"spam_score_reset": "重置为服务器默认值",
|
||||
"spamfilter": "垃圾邮件过滤器",
|
||||
"spamfilter_behavior": "分数",
|
||||
"spamfilter_bl": "黑名单",
|
||||
"spamfilter_bl_desc": "黑名单中地址<b>总是会</b>被标记为垃圾邮件。被拒绝的邮件<b>不会</b>进入隔离区。此处可以使用通配符 \"*\"。此过滤器也会应用到直接别名 (只指向一个目标邮箱),但不会应用到\"接收所有\"别名和邮箱地址本身。",
|
||||
"spamfilter_bl": "阻止名单",
|
||||
"spamfilter_bl_desc": "阻止名单中地址<b>总是会</b>被标记为垃圾邮件。被拒绝的邮件<b>不会</b>进入隔离区。此处可以使用通配符 \"*\"。此过滤器也会应用到直接别名 (只指向一个目标邮箱),但不会应用到\"接收所有\"别名和邮箱地址本身。",
|
||||
"spamfilter_default_score": "默认值",
|
||||
"spamfilter_green": "绿色: 此消息不是垃圾邮件",
|
||||
"spamfilter_hint": "第一个值表示\"低垃圾邮件分数\",第二个值表示\"高垃圾邮件分数\"。",
|
||||
@@ -1313,8 +1337,8 @@
|
||||
"spamfilter_table_empty": "数据为空",
|
||||
"spamfilter_table_remove": "删除",
|
||||
"spamfilter_table_rule": "规则",
|
||||
"spamfilter_wl": "白名单",
|
||||
"spamfilter_wl_desc": "白名单中地址<b>永远不会</b>被标记为垃圾邮件。此处可以使用通配符 \"*\"。此过滤器也会应用到直接别名 (只指向一个目标邮箱),但不会应用到\"接收所有\"别名和邮箱地址本身。",
|
||||
"spamfilter_wl": "允许名单",
|
||||
"spamfilter_wl_desc": "允许名单中地址<b>永远不会</b>被标记为垃圾邮件。此处可以使用通配符 \"*\"。此过滤器也会应用到直接别名 (只指向一个目标邮箱),但不会应用到\"接收所有\"别名和邮箱地址本身。",
|
||||
"spamfilter_yellow": "黄色: 此为垃圾邮件,会被标记为垃圾邮件并且移入垃圾邮件文件夹",
|
||||
"status": "状态",
|
||||
"sync_jobs": "同步任务",
|
||||
|
||||
@@ -6,7 +6,8 @@ if (!isset($_SERVER['HTTP_HOST']) || strpos($_SERVER['HTTP_HOST'], 'mta-sts.') !
|
||||
exit;
|
||||
}
|
||||
|
||||
$domain = str_replace('mta-sts.', '', $_SERVER['HTTP_HOST']);
|
||||
$host = preg_replace('/:[0-9]+$/', '', $_SERVER['HTTP_HOST']);
|
||||
$domain = str_replace('mta-sts.', '', $host);
|
||||
$mta_sts = mailbox('get', 'mta_sts', $domain);
|
||||
|
||||
if (count($mta_sts) == 0 ||
|
||||
|
||||
@@ -64,7 +64,7 @@ elseif (isset($_GET['login'])) {
|
||||
':remote_addr' => ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'])
|
||||
));
|
||||
// redirect to sogo (sogo will get the correct credentials via nginx auth_request
|
||||
header("Location: /SOGo/so/{$login}");
|
||||
header("Location: /SOGo/so/");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
@@ -81,10 +81,7 @@ elseif (isset($_SERVER['HTTP_X_ORIGINAL_URI']) && strcasecmp(substr($_SERVER['HT
|
||||
}
|
||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/sessions.inc.php';
|
||||
|
||||
// extract email address from "/SOGo/so/user@domain/xy"
|
||||
$url_parts = explode("/", $_SERVER['HTTP_X_ORIGINAL_URI']);
|
||||
$email_list = array(
|
||||
$url_parts[3], // Requested mailbox
|
||||
($_SESSION['mailcow_cc_username'] ?? ''), // Current user
|
||||
($_SESSION["dual-login"]["username"] ?? ''), // Dual login user
|
||||
);
|
||||
|
||||
@@ -166,6 +166,7 @@
|
||||
var lang_danger = {{ lang_danger|raw }};
|
||||
var docker_timeout = {{ docker_timeout|raw }} * 1000;
|
||||
var mailcow_cc_role = '{{ mailcow_cc_role }}';
|
||||
{% if mailcow_cc_username %}
|
||||
var mailcow_info = {
|
||||
version_tag: '{{ mailcow_info.version_tag }}',
|
||||
last_version_tag: '{{ mailcow_info.last_version_tag }}',
|
||||
@@ -175,6 +176,17 @@
|
||||
project_repo: '{{ mailcow_info.git_repo }}',
|
||||
branch: '{{ mailcow_info.mailcow_branch }}'
|
||||
};
|
||||
{% else %}
|
||||
var mailcow_info = {
|
||||
version_tag: '',
|
||||
last_version_tag: '',
|
||||
updatedAt: '',
|
||||
project_url: '',
|
||||
project_owner: '',
|
||||
project_repo: '',
|
||||
branch: ''
|
||||
};
|
||||
{% endif %}
|
||||
|
||||
$(window).scroll(function() {
|
||||
sessionStorage.scrollTop = $(this).scrollTop();
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<br>
|
||||
<form class="form-horizontal" data-id="editalias" role="form" method="post">
|
||||
<input type="hidden" value="0" name="active">
|
||||
<input type="hidden" value="0" name="internal">
|
||||
{% if not skip_sogo %}
|
||||
<input type="hidden" value="0" name="sogo_visible">
|
||||
{% endif %}
|
||||
@@ -33,8 +34,12 @@
|
||||
<div class="form-check">
|
||||
<label><input type="checkbox" class="form-check-input" value="1" name="sogo_visible"{% if result.sogo_visible == '1' %} checked{% endif %}> {{ lang.edit.sogo_visible }}</label>
|
||||
</div>
|
||||
<p class="text-muted">{{ lang.edit.sogo_visible_info }}</p>
|
||||
<small class="text-muted d-block mb-2">{{ lang.edit.sogo_visible_info }}</small>
|
||||
{% endif %}
|
||||
<div class="form-check">
|
||||
<label><input type="checkbox" class="form-check-input" value="1" name="internal"{% if result.internal == '1' %} checked{% endif %}> {{ lang.edit.internal }}</label>
|
||||
</div>
|
||||
<small class="text-muted d-block">{{ lang.edit.internal_info }}</small>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
@@ -13,15 +13,15 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2" for="password">{{ lang.edit.password }} (<a href="#" class="generate_password">{{ lang.edit.generate }}</a>)</label>
|
||||
<label class="control-label col-sm-2" for="app_passwd">{{ lang.edit.password }} (<a href="#" class="generate_password">{{ lang.edit.generate }}</a>)</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="password" placeholder="" autocomplete="new-password">
|
||||
<input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="app_passwd" placeholder="" autocomplete="new-password">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-2" for="password2">{{ lang.edit.password_repeat }}</label>
|
||||
<label class="control-label col-sm-2" for="app_passwd2">{{ lang.edit.password_repeat }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="password" data-pwgen-field="true" class="form-control" name="password2" autocomplete="new-password">
|
||||
<input type="password" data-pwgen-field="true" class="form-control" name="app_passwd2" autocomplete="new-password">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
<div class="row mb-2" data-acl="{{ acl.domain_desc }}">
|
||||
<label class="control-label col-sm-2" for="description">{{ lang.edit.description }}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" class="form-control" name="description" value="{{ result.description }}">
|
||||
<input type="text" class="form-control" name="description" value="{{ result.description }}"{% if acl.domain_desc == '0' %} readonly{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-4">
|
||||
@@ -58,6 +58,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% if acl.domain_relayhost == '1' %}
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2" for="relayhost">{{ lang.edit.relayhost }}</label>
|
||||
<div class="col-sm-10">
|
||||
@@ -76,6 +77,7 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if mailcow_cc_role == 'admin' %}
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2" for="aliases">{{ lang.edit.max_aliases }}</label>
|
||||
@@ -147,7 +149,7 @@
|
||||
<div class="row">
|
||||
<div class="offset-sm-2 col-sm-10">
|
||||
<small class="fst-italic d-block">{{ lang.edit.created_on }}: {{ result.created }}</small>
|
||||
<small class="fst-italic d-block">{{ lang.edit.last_modified }}: {{ result.modified }}</small>
|
||||
<small class="fst-italic d-block">{{ lang.edit.last_modified }}: {{ result.modified|default(lang.user.never) }}</small>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -293,7 +295,7 @@
|
||||
<input type="hidden" value="0" name="active">
|
||||
<input type="hidden" value="{{ domain }}" name="domain">
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2" for="version">
|
||||
<label class="control-label col-sm-2" for="version">
|
||||
<i style="font-size: 16px; cursor: pointer;" class="bi bi-patch-question-fill m-2 ms-0" data-bs-toggle="tooltip" data-bs-html="true" data-bs-placement="bottom" title="{{ lang.edit.mta_sts_version_info|raw }}"></i>
|
||||
{{ lang.edit.mta_sts_version }}
|
||||
</label>
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
<small class="text-muted d-block">{{ lang.edit.sender_acl_info|raw }}</small>
|
||||
</div>
|
||||
</div>
|
||||
{% if acl.mailbox_relayhost == '1' %}
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2" for="relayhost">{{ lang.edit.relayhost }}</label>
|
||||
<div class="col-sm-10">
|
||||
@@ -134,6 +135,7 @@
|
||||
<small class="text-muted d-block mb-4">{{ lang.edit.mailbox_relayhost_info }}</small>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2">{{ lang.user.tag_handling }}</label>
|
||||
<div class="col-sm-10">
|
||||
@@ -325,7 +327,7 @@
|
||||
<div class="row">
|
||||
<div class="offset-sm-2 col-sm-10">
|
||||
<small class="fst-italic d-block">{{ lang.edit.created_on }}: {{ result.created }}</small>
|
||||
<small class="fst-italic d-block">{{ lang.edit.last_modified }}: {{ result.modified }}</small>
|
||||
<small class="fst-italic d-block">{{ lang.edit.last_modified }}: {{ result.modified|default(lang.user.never) }}</small>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -777,6 +777,7 @@
|
||||
<div class="modal-body">
|
||||
<form class="form-horizontal" data-cached-form="true" role="form" data-id="add_alias">
|
||||
<input type="hidden" value="0" name="active">
|
||||
<input type="hidden" value="0" name="internal">
|
||||
<div class="row mb-2">
|
||||
<label class="control-label col-sm-2 text-sm-end" for="address">{{ lang.add.alias_address }}</label>
|
||||
<div class="col-sm-10">
|
||||
@@ -803,11 +804,15 @@
|
||||
<div class="form-check">
|
||||
<label><input type="checkbox" class="form-check-input" value="1" name="sogo_visible" checked> {{ lang.edit.sogo_visible }}</label>
|
||||
</div>
|
||||
<p class="text-muted">{{ lang.edit.sogo_visible_info }}</p>
|
||||
<small class="text-muted d-block mb-2">{{ lang.edit.sogo_visible_info }}</small>
|
||||
{% endif %}
|
||||
<div class="form-check">
|
||||
<label><input type="checkbox" class="form-check-input" value="1" name="internal"> {{ lang.add.internal }}</label>
|
||||
</div>
|
||||
<small class="text-muted d-block">{{ lang.edit.internal_info }}</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<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="active" checked> {{ lang.add.active }}</label>
|
||||
|
||||
@@ -326,6 +326,12 @@
|
||||
<small class="text-muted">{{ lang.user.password_reset_info }}</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-4">
|
||||
<label class="control-label col-sm-3" for="user_old_pass">{{ lang.user.password_now }}</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="password" class="form-control" name="user_old_pass" autocomplete="off" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<button class="btn btn-xs-lg d-block d-sm-inline btn-success" data-action="edit_selected" data-id="pw_recovery_change" data-item="null" data-api-url='edit/self' data-api-attr='{}' href="#">{{ lang.user.save }}</button>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
<label class="visually-hidden" for="login_user">{{ lang.login.username }}</label>
|
||||
<div class="input-group">
|
||||
<div class="input-group-text"><i class="bi bi-person-fill"></i></div>
|
||||
<input name="login_user" autocorrect="off" autocapitalize="none" type="{% if is_mobileconfig %}email{% else %}text{% endif %}" id="login_user" class="form-control" placeholder="{{ lang.login.username }}" required="" autofocus="" autocomplete="username">
|
||||
<input name="login_user" autocorrect="off" autocapitalize="none" type="{% if is_mobileconfig %}email{% else %}text{% endif %}" id="login_user" class="form-control" placeholder="{{ lang.login.email }}" required="" autofocus="" autocomplete="username">
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex mt-3">
|
||||
|
||||
@@ -42,7 +42,7 @@ services:
|
||||
- mysql
|
||||
|
||||
redis-mailcow:
|
||||
image: redis:7.4.2-alpine
|
||||
image: redis:7.4.6-alpine
|
||||
entrypoint: ["/bin/sh","/redis-conf.sh"]
|
||||
volumes:
|
||||
- redis-vol-1:/data/
|
||||
@@ -65,7 +65,7 @@ services:
|
||||
- redis
|
||||
|
||||
clamd-mailcow:
|
||||
image: ghcr.io/mailcow/clamd:1.70
|
||||
image: ghcr.io/mailcow/clamd:1.71
|
||||
restart: always
|
||||
depends_on:
|
||||
unbound-mailcow:
|
||||
@@ -84,7 +84,7 @@ services:
|
||||
- clamd
|
||||
|
||||
rspamd-mailcow:
|
||||
image: ghcr.io/mailcow/rspamd:2.3
|
||||
image: ghcr.io/mailcow/rspamd:2.4
|
||||
stop_grace_period: 30s
|
||||
depends_on:
|
||||
- dovecot-mailcow
|
||||
@@ -117,7 +117,7 @@ services:
|
||||
- rspamd
|
||||
|
||||
php-fpm-mailcow:
|
||||
image: ghcr.io/mailcow/phpfpm:1.93
|
||||
image: ghcr.io/mailcow/phpfpm:8.4
|
||||
command: "php-fpm -d date.timezone=${TZ} -d expose_php=0"
|
||||
depends_on:
|
||||
- redis-mailcow
|
||||
@@ -200,7 +200,7 @@ services:
|
||||
- phpfpm
|
||||
|
||||
sogo-mailcow:
|
||||
image: ghcr.io/mailcow/sogo:1.134
|
||||
image: ghcr.io/mailcow/sogo:1.136
|
||||
environment:
|
||||
- DBNAME=${DBNAME}
|
||||
- DBUSER=${DBUSER}
|
||||
@@ -213,6 +213,7 @@ services:
|
||||
- ALLOW_ADMIN_EMAIL_LOGIN=${ALLOW_ADMIN_EMAIL_LOGIN:-n}
|
||||
- IPV4_NETWORK=${IPV4_NETWORK:-172.22.1}
|
||||
- SOGO_EXPIRE_SESSION=${SOGO_EXPIRE_SESSION:-480}
|
||||
- SOGO_URL_ENCRYPTION_KEY=${SOGO_URL_ENCRYPTION_KEY:-SOGoSuperSecret0}
|
||||
- SKIP_SOGO=${SKIP_SOGO:-n}
|
||||
- MASTER=${MASTER:-y}
|
||||
- REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
|
||||
@@ -418,7 +419,7 @@ services:
|
||||
- php-fpm-mailcow
|
||||
- sogo-mailcow
|
||||
- rspamd-mailcow
|
||||
image: ghcr.io/mailcow/nginx:1.04
|
||||
image: ghcr.io/mailcow/nginx:1.05
|
||||
dns:
|
||||
- ${IPV4_NETWORK:-172.22.1}.254
|
||||
environment:
|
||||
@@ -501,7 +502,7 @@ services:
|
||||
- acme
|
||||
|
||||
netfilter-mailcow:
|
||||
image: ghcr.io/mailcow/netfilter:1.62
|
||||
image: ghcr.io/mailcow/netfilter:1.63
|
||||
stop_grace_period: 30s
|
||||
restart: always
|
||||
privileged: true
|
||||
@@ -521,7 +522,7 @@ services:
|
||||
- /lib/modules:/lib/modules:ro
|
||||
|
||||
watchdog-mailcow:
|
||||
image: ghcr.io/mailcow/watchdog:2.08
|
||||
image: ghcr.io/mailcow/watchdog:2.09
|
||||
dns:
|
||||
- ${IPV4_NETWORK:-172.22.1}.254
|
||||
tmpfs:
|
||||
@@ -577,6 +578,7 @@ services:
|
||||
- MYSQL_REPLICATION_THRESHOLD=${MYSQL_REPLICATION_THRESHOLD:-1}
|
||||
- SOGO_THRESHOLD=${SOGO_THRESHOLD:-3}
|
||||
- POSTFIX_THRESHOLD=${POSTFIX_THRESHOLD:-8}
|
||||
- POSTFIX_TLSPOL_THRESHOLD=${POSTFIX_TLSPOL_THRESHOLD:-8}
|
||||
- CLAMD_THRESHOLD=${CLAMD_THRESHOLD:-15}
|
||||
- DOVECOT_THRESHOLD=${DOVECOT_THRESHOLD:-12}
|
||||
- DOVECOT_REPL_THRESHOLD=${DOVECOT_REPL_THRESHOLD:-20}
|
||||
@@ -588,6 +590,7 @@ services:
|
||||
- OLEFY_THRESHOLD=${OLEFY_THRESHOLD:-5}
|
||||
- MAILQ_THRESHOLD=${MAILQ_THRESHOLD:-20}
|
||||
- MAILQ_CRIT=${MAILQ_CRIT:-30}
|
||||
- DEV_MODE=${DEV_MODE:-n}
|
||||
networks:
|
||||
mailcow-network:
|
||||
aliases:
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Ensure the script is run from the directory that contains a link of .env
|
||||
# Resolve the directory this script lives in for consistent behavior when invoked from elsewhere
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" >/dev/null 2>&1 && pwd)"
|
||||
|
||||
# Ensure script is executed in the mailcow installation directory by checking for a .env symlink that points to mailcow.conf
|
||||
if [ ! -L "${PWD}/.env" ]; then
|
||||
echo -e "\e[33mPlease run this script from the mailcow installation directory.\e[0m"
|
||||
echo -e " \e[36mcd /path/to/mailcow && ./generate_config.sh\e[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verify the .env symlink points to a mailcow.conf file
|
||||
env_target="$(readlink -f "${PWD}/.env" 2>/dev/null || true)"
|
||||
if [ -z "$env_target" ] || [ "$(basename "$env_target")" != "mailcow.conf" ]; then
|
||||
echo -e "\e[31mThe found .env symlink does not point to a mailcow.conf file.\e[0m"
|
||||
echo -e "\e[33mPlease create a symbolic link .env -> mailcow.conf inside the mailcow directory and run this script there.\e[0m"
|
||||
echo -e "\e[33mNote: 'ln -s mailcow.conf .env' will create the symlink even if mailcow.conf does not yet exist.\e[0m"
|
||||
echo -e " \e[36mcd /path/to/mailcow && ln -s mailcow.conf .env && ./generate_config.sh\e[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Load mailcow Generic Scripts
|
||||
source _modules/scripts/core.sh
|
||||
source _modules/scripts/ipv6_controller.sh
|
||||
@@ -151,7 +172,6 @@ cat << EOF > mailcow.conf
|
||||
# example.org is _not_ a valid hostname, use a fqdn here.
|
||||
# Default admin user is "admin"
|
||||
# Default password is "moohoo"
|
||||
|
||||
MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
|
||||
|
||||
# Password hash algorithm
|
||||
@@ -162,19 +182,16 @@ MAILCOW_PASS_SCHEME=BLF-CRYPT
|
||||
# ------------------------------
|
||||
# SQL database configuration
|
||||
# ------------------------------
|
||||
|
||||
DBNAME=mailcow
|
||||
DBUSER=mailcow
|
||||
|
||||
# Please use long, random alphanumeric strings (A-Za-z0-9)
|
||||
|
||||
DBPASS=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2> /dev/null | head -c 28)
|
||||
DBROOT=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2> /dev/null | head -c 28)
|
||||
|
||||
# ------------------------------
|
||||
# REDIS configuration
|
||||
# ------------------------------
|
||||
|
||||
REDISPASS=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2> /dev/null | head -c 28)
|
||||
|
||||
# ------------------------------
|
||||
@@ -189,7 +206,6 @@ REDISPASS=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2> /dev/null | head -c 28)
|
||||
# Example: HTTP_BIND=1.2.3.4
|
||||
# For IPv4 leave it as it is: HTTP_BIND= & HTTPS_PORT=
|
||||
# For IPv6 see https://docs.mailcow.email/post_installation/firststeps-ip_bindings/
|
||||
|
||||
HTTP_PORT=80
|
||||
HTTP_BIND=
|
||||
|
||||
@@ -197,14 +213,13 @@ HTTPS_PORT=443
|
||||
HTTPS_BIND=
|
||||
|
||||
# Redirect HTTP connections to HTTPS - y/n
|
||||
HTTP_REDIRECT=n
|
||||
HTTP_REDIRECT=y
|
||||
|
||||
# ------------------------------
|
||||
# Other bindings
|
||||
# ------------------------------
|
||||
# You should leave that alone
|
||||
# Format: 11.22.33.44:25 or 12.34.56.78:465 etc.
|
||||
|
||||
SMTP_PORT=25
|
||||
SMTPS_PORT=465
|
||||
SUBMISSION_PORT=587
|
||||
@@ -220,25 +235,22 @@ REDIS_PORT=127.0.0.1:7654
|
||||
# Your timezone
|
||||
# See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for a list of timezones
|
||||
# Use the column named 'TZ identifier' + pay attention for the column named 'Notes'
|
||||
|
||||
TZ=${MAILCOW_TZ}
|
||||
|
||||
# Fixed project name
|
||||
# Please use lowercase letters only
|
||||
|
||||
COMPOSE_PROJECT_NAME=mailcowdockerized
|
||||
|
||||
# Used Docker Compose version
|
||||
# Switch here between native (compose plugin) and standalone
|
||||
# For more informations take a look at the mailcow docs regarding the configuration options.
|
||||
# For more information take a look at the mailcow docs regarding the configuration options.
|
||||
# Normally this should be untouched but if you decided to use either of those you can switch it manually here.
|
||||
# Please be aware that at least one of those variants should be installed on your machine or mailcow will fail.
|
||||
|
||||
DOCKER_COMPOSE_VERSION=${COMPOSE_VERSION}
|
||||
|
||||
# Set this to "allow" to enable the anyone pseudo user. Disabled by default.
|
||||
# When enabled, ACL can be created, that apply to "All authenticated users"
|
||||
# This should probably only be activated on mail hosts, that are used exclusivly by one organisation.
|
||||
# This should probably only be activated on mail hosts, that are used exclusively by one organisation.
|
||||
# Otherwise a user might share data with too many other users.
|
||||
ACL_ANYONE=disallow
|
||||
|
||||
@@ -246,7 +258,6 @@ ACL_ANYONE=disallow
|
||||
# Deleted domains and mailboxes are moved to /var/vmail/_garbage/timestamp_sanitizedstring
|
||||
# How long should objects remain in the garbage until they are being deleted? (value in minutes)
|
||||
# Check interval is hourly
|
||||
|
||||
MAILDIR_GC_TIME=7200
|
||||
|
||||
# Additional SAN for the certificate
|
||||
@@ -261,8 +272,6 @@ MAILDIR_GC_TIME=7200
|
||||
#ADDITIONAL_SAN=srv1.example.net
|
||||
# ...or combine wildcard and static names:
|
||||
#ADDITIONAL_SAN=imap.*,srv1.example.com
|
||||
#
|
||||
|
||||
ADDITIONAL_SAN=
|
||||
|
||||
# Obtain certificates for autodiscover.* and autoconfig.* domains.
|
||||
@@ -279,65 +288,52 @@ AUTODISCOVER_SAN=y
|
||||
# If the server name does not match a known site, Nginx decides by best-guess and may redirect users to the wrong web root.
|
||||
# You can understand this as server_name directive in Nginx.
|
||||
# Comma separated list without spaces! Example: ADDITIONAL_SERVER_NAMES=a.b.c,d.e.f
|
||||
|
||||
ADDITIONAL_SERVER_NAMES=
|
||||
|
||||
# Skip running ACME (acme-mailcow, Let's Encrypt certs) - y/n
|
||||
|
||||
SKIP_LETS_ENCRYPT=n
|
||||
|
||||
# Create seperate certificates for all domains - y/n
|
||||
# Create separate certificates for all domains - y/n
|
||||
# this will allow adding more than 100 domains, but some email clients will not be able to connect with alternative hostnames
|
||||
# see https://doc.dovecot.org/admin_manual/ssl/sni_support
|
||||
ENABLE_SSL_SNI=n
|
||||
|
||||
# Skip IPv4 check in ACME container - y/n
|
||||
|
||||
SKIP_IP_CHECK=n
|
||||
|
||||
# Skip HTTP verification in ACME container - y/n
|
||||
|
||||
SKIP_HTTP_VERIFICATION=n
|
||||
|
||||
# Skip Unbound (DNS Resolver) Healthchecks (NOT Recommended!) - y/n
|
||||
|
||||
SKIP_UNBOUND_HEALTHCHECK=n
|
||||
|
||||
# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n
|
||||
|
||||
SKIP_CLAMD=${SKIP_CLAMD}
|
||||
|
||||
# Skip Olefy (olefy-mailcow) anti-virus for Office documents (Rspamd will auto-detect a missing Olefy container) - y/n
|
||||
|
||||
SKIP_OLEFY=n
|
||||
|
||||
# Skip SOGo: Will disable SOGo integration and therefore webmail, DAV protocols and ActiveSync support (experimental, unsupported, not fully implemented) - y/n
|
||||
|
||||
SKIP_SOGO=n
|
||||
|
||||
# Skip FTS (Fulltext Search) for Dovecot on low-memory, low-threaded systems or if you simply want to disable it.
|
||||
# Dovecot inside mailcow use Flatcurve as FTS Backend.
|
||||
|
||||
SKIP_FTS=n
|
||||
|
||||
# Dovecot Indexing (FTS) Process maximum heap size in MB, there is no recommendation, please see Dovecot docs.
|
||||
# Flatcurve (Xapian backend) is used as the FTS Indexer. It is supposed to be efficient in CPU and RAM consumption.
|
||||
# However: Please always monitor your Resource consumption!
|
||||
|
||||
FTS_HEAP=128
|
||||
|
||||
# Controls how many processes the Dovecot indexing process can spawn at max.
|
||||
# Too many indexing processes can use a lot of CPU and Disk I/O.
|
||||
# Please visit: https://doc.dovecot.org/configuration_manual/service_configuration/#indexer-worker for more informations
|
||||
|
||||
# Please visit: https://doc.dovecot.org/configuration_manual/service_configuration/#indexer-worker for more information
|
||||
FTS_PROCS=1
|
||||
|
||||
# Allow admins to log into SOGo as email user (without any password)
|
||||
|
||||
ALLOW_ADMIN_EMAIL_LOGIN=n
|
||||
|
||||
# Enable watchdog (watchdog-mailcow) to restart unhealthy containers
|
||||
|
||||
USE_WATCHDOG=y
|
||||
|
||||
# Send watchdog notifications by mail (sent from watchdog@MAILCOW_HOSTNAME)
|
||||
@@ -346,7 +342,6 @@ USE_WATCHDOG=y
|
||||
# 2. Mails are sent unsigned (no DKIM)
|
||||
# 3. If you use DMARC, create a separate DMARC policy ("v=DMARC1; p=none;" in _dmarc.MAILCOW_HOSTNAME)
|
||||
# Multiple rcpts allowed, NO quotation marks, NO spaces
|
||||
|
||||
#WATCHDOG_NOTIFY_EMAIL=a@example.com,b@example.com,c@example.com
|
||||
#WATCHDOG_NOTIFY_EMAIL=
|
||||
|
||||
@@ -377,25 +372,20 @@ WATCHDOG_EXTERNAL_CHECKS=n
|
||||
WATCHDOG_VERBOSE=n
|
||||
|
||||
# Max log lines per service to keep in Redis logs
|
||||
|
||||
LOG_LINES=9999
|
||||
|
||||
# Internal IPv4 /24 subnet, format n.n.n (expands to n.n.n.0/24)
|
||||
# Use private IPv4 addresses only, see https://en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses
|
||||
|
||||
IPV4_NETWORK=172.22.1
|
||||
|
||||
# Internal IPv6 subnet in fc00::/7
|
||||
# Use private IPv6 addresses only, see https://en.wikipedia.org/wiki/Private_network#Private_IPv6_addresses
|
||||
|
||||
IPV6_NETWORK=fd4d:6169:6c63:6f77::/64
|
||||
|
||||
# Use this IPv4 for outgoing connections (SNAT)
|
||||
|
||||
#SNAT_TO_SOURCE=
|
||||
|
||||
# Use this IPv6 for outgoing connections (SNAT)
|
||||
|
||||
#SNAT6_TO_SOURCE=
|
||||
|
||||
# Create or override an API key for the web UI
|
||||
@@ -415,6 +405,10 @@ MAILDIR_SUB=Maildir
|
||||
# SOGo session timeout in minutes
|
||||
SOGO_EXPIRE_SESSION=480
|
||||
|
||||
# SOGo URL encryption key (exactly 16 characters, limited to A–Z, a–z, 0–9)
|
||||
# This key is used to encrypt email addresses within SOGo URLs
|
||||
SOGO_URL_ENCRYPTION_KEY=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c 16)
|
||||
|
||||
# DOVECOT_MASTER_USER and DOVECOT_MASTER_PASS must both be provided. No special chars.
|
||||
# Empty by default to auto-generate master user and password on start.
|
||||
# User expands to DOVECOT_MASTER_USER@mailcow.local
|
||||
@@ -520,4 +514,4 @@ else
|
||||
echo ' $MAILCOW_UPDATEDAT='$(date +%s)';' >> data/web/inc/app_info.inc.php
|
||||
echo '?>' >> data/web/inc/app_info.inc.php
|
||||
echo -e "\e[33mCannot determine current git repository version...\e[0m"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -117,7 +117,7 @@ fi
|
||||
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
source "${SCRIPT_DIR}/../mailcow.conf"
|
||||
COMPOSE_FILE="${SCRIPT_DIR}/../docker-compose.yml"
|
||||
CMPS_PRJ=$(echo ${COMPOSE_PROJECT_NAME} | tr -cd 'A-Za-z-_')
|
||||
CMPS_PRJ=$(echo ${COMPOSE_PROJECT_NAME} | tr -cd '0-9A-Za-z-_')
|
||||
SQLIMAGE=$(grep -iEo '(mysql|mariadb)\:.+' "${COMPOSE_FILE}")
|
||||
|
||||
preflight_local_checks
|
||||
@@ -169,7 +169,7 @@ if ! ssh -o StrictHostKeyChecking=no \
|
||||
-i "${REMOTE_SSH_KEY}" \
|
||||
${REMOTE_SSH_HOST} \
|
||||
-p ${REMOTE_SSH_PORT} \
|
||||
${COMPOSE_COMMAND} -f "${SCRIPT_DIR}/../docker-compose.yml" create 2>&1 ; then
|
||||
"cd \"${SCRIPT_DIR}/../\" && ${COMPOSE_COMMAND} create 2>&1" ; then
|
||||
>&2 echo -e "\e[31m[ERR]\e[0m - Could not create networks, volumes and containers on remote"
|
||||
fi
|
||||
|
||||
@@ -284,7 +284,7 @@ echo "OK"
|
||||
-i "${REMOTE_SSH_KEY}" \
|
||||
${REMOTE_SSH_HOST} \
|
||||
-p ${REMOTE_SSH_PORT} \
|
||||
${COMPOSE_COMMAND} -f "${SCRIPT_DIR}/../docker-compose.yml" pull --quiet 2>&1 ; then
|
||||
"cd \"${SCRIPT_DIR}/../\" && ${COMPOSE_COMMAND} pull --quiet 2>&1" ; then
|
||||
>&2 echo -e "\e[31m[ERR]\e[0m - Could not pull images on remote"
|
||||
fi
|
||||
|
||||
@@ -293,7 +293,7 @@ if ! ssh -o StrictHostKeyChecking=no \
|
||||
-i "${REMOTE_SSH_KEY}" \
|
||||
${REMOTE_SSH_HOST} \
|
||||
-p ${REMOTE_SSH_PORT} \
|
||||
${SCRIPT_DIR}/../update.sh -f --gc ; then
|
||||
"cd \"${SCRIPT_DIR}/../\" && ./update.sh -f --gc" ; then
|
||||
>&2 echo -e "\e[31m[ERR]\e[0m - Could not cleanup old images on remote"
|
||||
fi
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
services:
|
||||
prometheus-exporter-mailcow:
|
||||
image: ghcr.io/mailcow/prometheus-exporter:2
|
||||
ports:
|
||||
- "9099:9099"
|
||||
restart: always
|
||||
environment:
|
||||
MAILCOW_EXPORTER_HOST: "<your-mail-domain>" # Replace with your Mailcow hostname
|
||||
MAILCOW_EXPORTER_API_KEY: "<your-API-Key>" # Replace with your API key
|
||||
MAILCOW_EXPORTER_SECURITY_TOKEN: "<your-secure-token>" # Replace with your secure key
|
||||
# MAILCOW_EXPORTER_SECURITY_DISABLE_ACCESS_PROTECTION: "true" # Uncomment only if it is safe to disable token authentication (e.g., internal network only)
|
||||
dns:
|
||||
- ${IPV4_NETWORK:-172.22.1}.254
|
||||
networks:
|
||||
mailcow-network:
|
||||
ipv4_address: ${IPV4_NETWORK:-172.22.1}.209
|
||||
aliases:
|
||||
- prometheus-exporter
|
||||
@@ -6,9 +6,10 @@ SPFTOOLS_DIR=${WORKING_DIR}/spf-tools
|
||||
POSTWHITE_DIR=${WORKING_DIR}/postwhite
|
||||
POSTWHITE_CONF=${POSTWHITE_DIR}/postwhite.conf
|
||||
|
||||
CUSTOM_HOSTS='"web.de gmx.net mail.de freenet.de arcor.de unity-mail.de"'
|
||||
CUSTOM_HOSTS='"web.de gmx.net mail.de freenet.de arcor.de unity-mail.de protonmail.ch ionos.com strato.com t-online.de"'
|
||||
STATIC_HOSTS=(
|
||||
"194.25.134.0/24 permit # t-online.de"
|
||||
"49.12.4.251 permit # checks.mailcow.email"
|
||||
"2a01:4f8:c17:7906::10 permit # checks.mailcow.email"
|
||||
)
|
||||
|
||||
mkdir ${SCRIPT_DIR}/postwhite_tmp
|
||||
|
||||
16
update.sh
16
update.sh
@@ -3,6 +3,20 @@
|
||||
############## Begin Function Section ##############
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
MAILCOW_CONF="${SCRIPT_DIR}/mailcow.conf"
|
||||
|
||||
# Ensure the script is run from the directory that contains mailcow.conf
|
||||
if [ ! -f "${PWD}/mailcow.conf" ]; then
|
||||
if [ -f "${SCRIPT_DIR}/mailcow.conf" ]; then
|
||||
echo -e "\e[33mPlease run this script directly from the mailcow installation directory:\e[0m"
|
||||
echo -e " \e[36mcd ${SCRIPT_DIR} && ./update.sh\e[0m"
|
||||
exit 1
|
||||
else
|
||||
echo -e "\e[31mmailcow.conf not found in current directory or script directory (\e[36m${SCRIPT_DIR}\e[31m).\e[0m"
|
||||
echo -e "\e[33mRun this script directly from your mailcow installation directory.\e[0m"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
BRANCH="$(cd "${SCRIPT_DIR}" && git rev-parse --abbrev-ref HEAD)"
|
||||
|
||||
MODULE_DIR="${SCRIPT_DIR}/_modules"
|
||||
@@ -27,8 +41,6 @@ if [ "$(id -u)" -ne "0" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
# Run pre-update-hook
|
||||
if [ -f "${SCRIPT_DIR}/pre_update_hook.sh" ]; then
|
||||
bash "${SCRIPT_DIR}/pre_update_hook.sh"
|
||||
|
||||
Reference in New Issue
Block a user