updated and merge conflicts fixed for mailu master

This commit is contained in:
OutBackDingo
2025-05-23 08:45:00 +07:00
50 changed files with 1330 additions and 682 deletions

View File

@@ -0,0 +1,26 @@
name: 'Lock closed issues'
# Workflow that automatically locks already closed issues,
# pull requests and discussions.
on:
schedule:
- cron: '30 6 * * *'
workflow_dispatch:
permissions:
issues: write
pull-requests: write
discussions: write
concurrency:
group: lock-threads
jobs:
action:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v5
with:
issue-inactive-days: 21
pr-inactive-days: 28
discussion-inactive-days: 28

View File

@@ -9,10 +9,11 @@ module.exports = {
mode: 'production',
entry: {
app: {
import: ['./assets/app.css', './assets/mailu.png', './assets/app.js'],
import: ['./assets/app.css', './assets/app.js'],
dependOn: 'vendor',
},
vendor: './assets/vendor.js',
logo: './assets/mailu.png',
},
output: {
path: path.resolve(__dirname, 'static/'),

View File

@@ -1,3 +1,2 @@
[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_
[jinja2: **/templates/**.html]

View File

@@ -242,8 +242,7 @@ class User(Resource):
if 'forward_enabled' in data:
user_found.forward_enabled = data['forward_enabled']
if 'forward_destination' in data and len(data['forward_destination']) > 0:
if len(data['forward_destination']) == 0:
user_found.forward_destination = data['forward_destination']
user_found.forward_destination = data['forward_destination']
if 'forward_keep' in data:
user_found.forward_keep = data['forward_keep']
if 'reply_enabled' in data:

View File

@@ -25,6 +25,7 @@ DEFAULT_CONFIG = {
'DB_PW': None,
'DB_HOST': 'database',
'DB_NAME': 'mailu',
'DB_APPENDIX': '',
'SQLITE_DATABASE_FILE': 'data/main.db',
'SQLALCHEMY_DATABASE_URI': 'sqlite:////data/main.db',
'SQLALCHEMY_DATABASE_URI_ROUNDCUBE': 'sqlite:////data/roundcube.db',
@@ -95,7 +96,7 @@ DEFAULT_CONFIG = {
'SESSION_TIMEOUT': 3600,
'PERMANENT_SESSION_LIFETIME': 30*24*3600,
'SESSION_COOKIE_SECURE': None,
'CREDENTIAL_ROUNDS': 12,
'CREDENTIAL_ROUNDS': 13,
'TLS_PERMISSIVE': True,
'TZ': 'Etc/UTC',
'DEFAULT_SPAM_THRESHOLD': 80,
@@ -114,8 +115,8 @@ class ConfigManager:
DB_TEMPLATES = {
'sqlite': 'sqlite:////{SQLITE_DATABASE_FILE}',
'postgresql': 'postgresql://{DB_USER}:{DB_PW}@{DB_HOST}/{DB_NAME}',
'mysql': 'mysql+mysqlconnector://{DB_USER}:{DB_PW}@{DB_HOST}/{DB_NAME}',
'postgresql': 'postgresql://{DB_USER}:{DB_PW}@{DB_HOST}/{DB_NAME}{DB_APPENDIX}',
'mysql': 'mysql+mysqlconnector://{DB_USER}:{DB_PW}@{DB_HOST}/{DB_NAME}{DB_APPENDIX}',
}
def __init__(self):

View File

@@ -106,6 +106,7 @@ def handle_authentication(headers):
ip = urllib.parse.unquote(headers["Client-Ip"])
except:
app.logger.warning(f'Received undecodable user/password from front: {headers.get("Auth-User", "")!r}')
# app.logger.warn(f'Received undecodable user/password from front: {headers.get("Auth-User", "")!r}')
else:
try:
user = models.User.query.get(user_email) if '@' in user_email else None

View File

@@ -31,7 +31,7 @@ def autoconfig_mozilla():
<username>%EMAILADDRESS%</username>
<authentication>password-cleartext</authentication>
<addThisServer>true</addThisServer>
<useGlobalPreferredServer>true</useGlobalPreferredServer>
<useGlobalPreferredServer>false</useGlobalPreferredServer>
</outgoingServer>
<documentation url="https://{hostname}/admin/client">

View File

@@ -2,6 +2,7 @@ from mailu import models
from mailu.internal import internal
import flask
import idna
def vault_error(*messages, status=404):
return flask.make_response(flask.jsonify({'errors':messages}), status)
@@ -19,7 +20,16 @@ def rspamd_dkim_key(domain_name):
if key := domain.dkim_key:
selectors.append(
{
'domain' : domain.name,
'domain' : idna.encode(domain.name.lower()).decode('ascii'),
'key' : key.decode('utf8'),
'selector': flask.current_app.config.get('DKIM_SELECTOR', 'dkim'),
}
)
elif domain := models.Alternative.query.get(domain_name):
if key := domain.domain.dkim_key:
selectors.append(
{
'domain' : idna.encode(domain.name.lower()).decode('ascii'),
'key' : key.decode('utf8'),
'selector': flask.current_app.config.get('DKIM_SELECTOR', 'dkim'),
}

View File

@@ -358,6 +358,54 @@ class Alternative(Base):
domain = db.relationship(Domain,
backref=db.backref('alternatives', cascade='all, delete-orphan'))
@property
def dns_dkim(self):
""" return DKIM record for domain """
if self.domain.dkim_key:
selector = app.config['DKIM_SELECTOR']
return f'{selector}._domainkey.{self.name}. 600 IN TXT "v=DKIM1; k=rsa; p={self.domain.dkim_publickey}"'
@cached_property
def dns_dmarc(self):
""" return DMARC record for domain """
if self.domain.dkim_key:
domain = app.config['DOMAIN']
rua = app.config['DMARC_RUA']
rua = f' rua=mailto:{rua}@{domain};' if rua else ''
ruf = app.config['DMARC_RUF']
ruf = f' ruf=mailto:{ruf}@{domain};' if ruf else ''
return f'_dmarc.{self.name}. 600 IN TXT "v=DMARC1; p=reject;{rua}{ruf} adkim=s; aspf=s"'
@cached_property
def dns_dmarc_report(self):
""" return DMARC report record for mailu server """
if self.domain.dkim_key:
domain = app.config['DOMAIN']
return f'{self.name}._report._dmarc.{domain}. 600 IN TXT "v=DMARC1;"'
@cached_property
def dns_mx(self):
""" return MX record for domain """
hostname = app.config['HOSTNAME']
return f'{self.name}. 600 IN MX 10 {hostname}.'
@cached_property
def dns_spf(self):
""" return SPF record for domain """
hostname = app.config['HOSTNAME']
return f'{self.name}. 600 IN TXT "v=spf1 mx a:{hostname} ~all"'
def check_mx(self):
""" checks if MX record for domain points to mailu host """
try:
hostnames = set(app.config['HOSTNAMES'].split(','))
return any(
rset.exchange.to_text().rstrip('.') in hostnames
for rset in dns.resolver.resolve(self.name, 'MX')
)
except dns.exception.DNSException:
return False
class Relay(Base):
""" Relayed mail domain.

View File

@@ -1148,7 +1148,7 @@ class TokenSchema(BaseSchema):
sibling = True
password = PasswordField(required=True, metadata={'model': models.User})
hash_password = fields.Boolean(load_only=True, missing=False)
hash_password = fields.Boolean(load_only=True, load_default=False)
@mapped
@@ -1193,7 +1193,7 @@ class UserSchema(BaseSchema):
fetches = fields.Nested(FetchSchema, many=True)
password = PasswordField(required=True, metadata={'model': models.User})
hash_password = fields.Boolean(load_only=True, missing=False)
hash_password = fields.Boolean(load_only=True, load_default=False)
@mapped

View File

@@ -5,11 +5,11 @@
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: translate@s474n.com\n"
"POT-Creation-Date: 2022-05-22 18:47+0200\n"
"PO-Revision-Date: 2023-02-21 16:14+0100\n"
"Last-Translator: S474N <translate@s474n.com>\n"
"Project-Id-Version: Mailu 2024.06\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-06-20 12:30+0000\n"
"PO-Revision-Date: 2024-09-10 17:16+0200\n"
"Last-Translator: kunago <miris@kunago.com>\n"
"Language-Team: Czech\n"
"Language: cs_CZ\n"
"MIME-Version: 1.0\n"
@@ -17,23 +17,39 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);\n"
"Generated-By: Babel 2.3.4\n"
"X-Generator: Poedit 3.2.2\n"
"X-Generator: Poedit 3.5\n"
#: mailu/sso/forms.py:8 mailu/ui/forms.py:79
#: mailu/sso/forms.py:8 mailu/ui/forms.py:91
msgid "E-mail"
msgstr "E-mail"
#: mailu/sso/forms.py:9 mailu/ui/forms.py:80 mailu/ui/forms.py:93
#: mailu/ui/forms.py:112 mailu/ui/forms.py:166
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:57
#: mailu/sso/forms.py:9 mailu/ui/forms.py:92 mailu/ui/forms.py:108
#: mailu/ui/forms.py:128 mailu/ui/forms.py:135 mailu/ui/forms.py:197
#: mailu/ui/templates/client.html:31 mailu/ui/templates/client.html:56
msgid "Password"
msgstr "Heslo"
#: mailu/sso/forms.py:10 mailu/sso/forms.py:11 mailu/sso/templates/login.html:4
#: mailu/ui/templates/sidebar.html:142
#: mailu/sso/forms.py:11 mailu/sso/forms.py:12 mailu/sso/templates/login.html:4
#: mailu/sso/templates/sidebar_sso.html:42 mailu/ui/templates/sidebar.html:144
msgid "Sign in"
msgstr "Přihlásit se"
#: mailu/sso/forms.py:15 mailu/ui/forms.py:134
msgid "Current password"
msgstr "Současné heslo"
#: mailu/sso/forms.py:16
msgid "New password"
msgstr "Nové heslo"
#: mailu/sso/forms.py:17
msgid "New password (again)"
msgstr "Nové heslo (znovu)"
#: mailu/sso/forms.py:19
msgid "Change password"
msgstr "Změnit heslo"
#: mailu/sso/templates/base_sso.html:8 mailu/ui/templates/base.html:8
msgid "Admin page for"
msgstr "Admin stránka pro"
@@ -46,255 +62,301 @@ msgstr "přepnout postranní panel"
msgid "change language"
msgstr "změnit jazyk"
#: mailu/sso/templates/sidebar_sso.html:4 mailu/ui/templates/sidebar.html:94
#: mailu/sso/templates/sidebar_sso.html:4 mailu/ui/templates/sidebar.html:96
msgid "Go to"
msgstr "Jít"
msgstr "Přejít"
#: mailu/sso/templates/sidebar_sso.html:9 mailu/ui/templates/client.html:4
#: mailu/ui/templates/sidebar.html:50 mailu/ui/templates/sidebar.html:107
#: mailu/ui/templates/sidebar.html:52 mailu/ui/templates/sidebar.html:109
msgid "Client setup"
msgstr "Nastavení klienta"
#: mailu/sso/templates/sidebar_sso.html:16 mailu/ui/templates/sidebar.html:114
#: mailu/sso/templates/sidebar_sso.html:16 mailu/ui/templates/sidebar.html:116
msgid "Website"
msgstr "Webová stránka"
#: mailu/sso/templates/sidebar_sso.html:22 mailu/ui/templates/sidebar.html:120
#: mailu/sso/templates/sidebar_sso.html:22 mailu/ui/templates/sidebar.html:122
msgid "Help"
msgstr "Pomoc"
#: mailu/sso/templates/sidebar_sso.html:35
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:127
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:129
msgid "Register a domain"
msgstr "Registrovat doménu"
#: mailu/sso/templates/sidebar_sso.html:49 mailu/ui/forms.py:95
#: mailu/ui/templates/sidebar.html:149 mailu/ui/templates/user/signup.html:4
#: mailu/sso/templates/sidebar_sso.html:55 mailu/ui/forms.py:111
#: mailu/ui/templates/sidebar.html:151 mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr "Registrovat se"
#: mailu/ui/forms.py:33 mailu/ui/forms.py:36
msgid "Invalid email address."
msgstr "Špatná mailová adresa."
#: mailu/sso/views/base.py:48
msgid "Too many attempts from your IP (rate-limit)"
msgstr "Příliš mnoho pokusů z vaší IP adresy (omezení rychlosti)"
#: mailu/ui/forms.py:45
#: mailu/sso/views/base.py:51
msgid "Too many attempts for this user (rate-limit)"
msgstr "Příliš mnoho pokusů tohoto uživatele (omezení rychlosti)"
#: mailu/sso/views/base.py:69
msgid "Wrong e-mail or password"
msgstr "Chybný e-mail nebo heslo"
#: mailu/sso/views/base.py:85
msgid "The new password can't be the same as the old password"
msgstr "Nové heslo nemůže být shodné s původním"
#: mailu/sso/views/base.py:88
msgid "The new passwords don't match"
msgstr "Nová hesla se neshodují"
#: mailu/sso/views/base.py:100
msgid "The current password is incorrect!"
msgstr "Současné heslo není správné!"
#: mailu/ui/forms.py:34 mailu/ui/forms.py:37
msgid "Invalid email address."
msgstr "Neplatná e-mailová adresa."
#: mailu/ui/forms.py:47
msgid "Invalid list of folders."
msgstr "Neplatný seznam složek."
#: mailu/ui/forms.py:56
msgid "Confirm"
msgstr "Potvrdit"
#: mailu/ui/forms.py:48 mailu/ui/forms.py:58
#: mailu/ui/forms.py:59 mailu/ui/forms.py:69
#: mailu/ui/templates/domain/details.html:26
#: mailu/ui/templates/domain/list.html:19 mailu/ui/templates/relay/list.html:18
msgid "Domain name"
msgstr "Název domény"
#: mailu/ui/forms.py:49
#: mailu/ui/forms.py:60
msgid "Maximum user count"
msgstr "Maximální počet uživatelů"
#: mailu/ui/forms.py:50
#: mailu/ui/forms.py:61
msgid "Maximum alias count"
msgstr "Maximální počet aliasů"
#: mailu/ui/forms.py:51
#: mailu/ui/forms.py:62
msgid "Maximum user quota"
msgstr "Maximální uživatelská kvóta"
msgstr "Maximální kvóta uživatele"
#: mailu/ui/forms.py:52
#: mailu/ui/forms.py:63 mailu/ui/templates/domain/list.html:24
msgid "Enable sign-up"
msgstr "Povolit registraci"
#: mailu/ui/forms.py:53 mailu/ui/forms.py:74 mailu/ui/forms.py:86
#: mailu/ui/forms.py:132 mailu/ui/forms.py:144
#: mailu/ui/templates/alias/list.html:22 mailu/ui/templates/domain/list.html:22
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:20
#: mailu/ui/forms.py:64 mailu/ui/forms.py:86 mailu/ui/forms.py:100
#: mailu/ui/forms.py:155 mailu/ui/forms.py:175
#: mailu/ui/templates/alias/list.html:22 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Comment"
msgstr "Komentář"
#: mailu/ui/forms.py:54 mailu/ui/forms.py:68 mailu/ui/forms.py:75
#: mailu/ui/forms.py:88 mailu/ui/forms.py:136 mailu/ui/forms.py:145
#: mailu/ui/forms.py:65 mailu/ui/forms.py:80 mailu/ui/forms.py:87
#: mailu/ui/forms.py:103 mailu/ui/forms.py:159 mailu/ui/forms.py:176
msgid "Save"
msgstr "Uložit"
#: mailu/ui/forms.py:59
#: mailu/ui/forms.py:70
msgid "Initial admin"
msgstr "Hlavní admin"
msgstr "Výchozí admin"
#: mailu/ui/forms.py:60
#: mailu/ui/forms.py:71
msgid "Admin password"
msgstr "Heslo admina"
#: mailu/ui/forms.py:61 mailu/ui/forms.py:81 mailu/ui/forms.py:94
#: mailu/ui/forms.py:72 mailu/ui/forms.py:93 mailu/ui/forms.py:109
msgid "Confirm password"
msgstr "Potvrdit heslo"
#: mailu/ui/forms.py:63
#: mailu/ui/forms.py:75
msgid "Create"
msgstr "Vytvořit"
#: mailu/ui/forms.py:67
#: mailu/ui/forms.py:79
msgid "Alternative name"
msgstr "Alternativní jméno"
#: mailu/ui/forms.py:72
#: mailu/ui/forms.py:84
msgid "Relayed domain name"
msgstr "Seznam předávaných domén"
#: mailu/ui/forms.py:73 mailu/ui/templates/relay/list.html:19
#: mailu/ui/forms.py:85 mailu/ui/templates/relay/list.html:19
msgid "Remote host"
msgstr "Vzdálený hostitel"
#: mailu/ui/forms.py:82 mailu/ui/templates/user/list.html:23
#: mailu/ui/templates/user/signup_domain.html:16
#: mailu/ui/forms.py:95 mailu/ui/templates/domain/list.html:22
#: mailu/ui/templates/user/list.html:23
#: mailu/ui/templates/user/signup_domain.html:17
msgid "Quota"
msgstr "Kvóta"
#: mailu/ui/forms.py:83
#: mailu/ui/forms.py:96
msgid "Allow IMAP access"
msgstr "Povolit přístup IMAP"
#: mailu/ui/forms.py:84
#: mailu/ui/forms.py:97
msgid "Allow POP3 access"
msgstr "Povolit přístup POP3"
#: mailu/ui/forms.py:85 mailu/ui/forms.py:101
#: mailu/ui/forms.py:98
msgid "Allow the user to spoof the sender (send email as anyone)"
msgstr "Povolit uživateli napodobit odesílatele (odeslat e-mail jako kdokoli)"
#: mailu/ui/forms.py:99 mailu/ui/forms.py:117
#: mailu/ui/templates/user/settings.html:15
msgid "Displayed name"
msgstr "Zobrazené jméno"
#: mailu/ui/forms.py:87
#: mailu/ui/forms.py:101
msgid "Enabled"
msgstr "Povoleno"
#: mailu/ui/forms.py:92
msgid "Email address"
msgstr "Emailová adresa"
#: mailu/ui/forms.py:102
msgid "Force password change at next login"
msgstr "Vynutit změnu hesla při příštím přihlášení"
#: mailu/ui/forms.py:107
msgid "Email address"
msgstr "E-mailová adresa"
#: mailu/ui/forms.py:118
msgid "Enable spam filter"
msgstr "Povolit filtr spamu"
#: mailu/ui/forms.py:103
#: mailu/ui/forms.py:119
msgid "Enable marking spam mails as read"
msgstr "Povolit označování spamových e-mailů jako přečtených"
#: mailu/ui/forms.py:104
#: mailu/ui/forms.py:120
msgid "Spam filter tolerance"
msgstr "Tolerance spamového filtru"
#: mailu/ui/forms.py:105
#: mailu/ui/forms.py:121
msgid "Enable forwarding"
msgstr "Povolit přeposílání"
#: mailu/ui/forms.py:106
#: mailu/ui/forms.py:122
msgid "Keep a copy of the emails"
msgstr "Zachovat kopii e-mailů"
#: mailu/ui/forms.py:107 mailu/ui/forms.py:143
#: mailu/ui/forms.py:123 mailu/ui/forms.py:174
#: mailu/ui/templates/alias/list.html:21
msgid "Destination"
msgstr "Cíl"
#: mailu/ui/forms.py:108
#: mailu/ui/forms.py:124
msgid "Save settings"
msgstr "Uložit nastavení"
#: mailu/ui/forms.py:113
#: mailu/ui/forms.py:129 mailu/ui/forms.py:136
msgid "Password check"
msgstr "Kontrola hesla"
#: mailu/ui/forms.py:114 mailu/ui/templates/sidebar.html:25
#: mailu/ui/forms.py:131 mailu/ui/forms.py:138
#: mailu/ui/templates/sidebar.html:25
msgid "Update password"
msgstr "Aktualizovat heslo"
#: mailu/ui/forms.py:118
#: mailu/ui/forms.py:141
msgid "Enable automatic reply"
msgstr "Povolit automatickou odpověď"
#: mailu/ui/forms.py:119
#: mailu/ui/forms.py:142
msgid "Reply subject"
msgstr "Předmět odpovědi"
#: mailu/ui/forms.py:120
#: mailu/ui/forms.py:143
msgid "Reply body"
msgstr "Tělo odpovědi"
#: mailu/ui/forms.py:122
#: mailu/ui/forms.py:145
msgid "Start of vacation"
msgstr "Začátek dovolené"
#: mailu/ui/forms.py:123
#: mailu/ui/forms.py:146
msgid "End of vacation"
msgstr "Konec dovolené"
#: mailu/ui/forms.py:124
#: mailu/ui/forms.py:147
msgid "Update"
msgstr "Aktualizovat"
#: mailu/ui/forms.py:129
#: mailu/ui/forms.py:152
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "Váš token (zapište si ho, protože se již nikdy nezobrazí)"
#: mailu/ui/forms.py:134 mailu/ui/templates/token/list.html:21
#: mailu/ui/forms.py:157 mailu/ui/templates/token/list.html:22
msgid "Authorized IP"
msgstr "Autorizovaná IP"
#: mailu/ui/forms.py:140
#: mailu/ui/forms.py:171
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:142
#: mailu/ui/forms.py:173
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Použít syntaxi jako SQL (např. pro doménové koše)"
msgstr "Použít syntaxi SQL LIKE (např. pro doménové koše)"
#: mailu/ui/forms.py:149
#: mailu/ui/forms.py:180
msgid "Admin email"
msgstr "Email admina"
msgstr "E-mail admina"
#: mailu/ui/forms.py:150 mailu/ui/forms.py:155 mailu/ui/forms.py:168
#: mailu/ui/forms.py:181 mailu/ui/forms.py:186 mailu/ui/forms.py:201
msgid "Submit"
msgstr "Poslat"
msgstr "Odeslat"
#: mailu/ui/forms.py:154
#: mailu/ui/forms.py:185
msgid "Manager email"
msgstr "E-mail manažera"
#: mailu/ui/forms.py:159
#: mailu/ui/forms.py:190
msgid "Protocol"
msgstr "Protokol"
#: mailu/ui/forms.py:162
#: mailu/ui/forms.py:193
msgid "Hostname or IP"
msgstr "Hostitel nebo IP"
#: mailu/ui/forms.py:163 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:45
#: mailu/ui/forms.py:194 mailu/ui/templates/client.html:19
#: mailu/ui/templates/client.html:44
msgid "TCP port"
msgstr "TCP port"
#: mailu/ui/forms.py:164
#: mailu/ui/forms.py:195
msgid "Enable TLS"
msgstr "Povolit TLS"
#: mailu/ui/forms.py:165 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:53 mailu/ui/templates/fetch/list.html:21
#: mailu/ui/forms.py:196 mailu/ui/templates/client.html:27
#: mailu/ui/templates/client.html:52 mailu/ui/templates/fetch/list.html:21
msgid "Username"
msgstr "Uživatelské jméno"
#: mailu/ui/forms.py:167
#: mailu/ui/forms.py:198
msgid "Keep emails on the server"
msgstr "Zachovat e-maily na serveru"
msgstr "Ponechat e-maily na serveru"
#: mailu/ui/forms.py:172
#: mailu/ui/forms.py:199
msgid "Rescan emails locally"
msgstr "Přeskenovat e-maily lokálně"
#: mailu/ui/forms.py:200
msgid "Folders to fetch on the server"
msgstr "Složky na serveru určené ke stažení"
#: mailu/ui/forms.py:205
msgid "Announcement subject"
msgstr "Předmět oznámení"
#: mailu/ui/forms.py:174
#: mailu/ui/forms.py:207
msgid "Announcement body"
msgstr "Tělo oznámení"
#: mailu/ui/forms.py:176
#: mailu/ui/forms.py:209
msgid "Send"
msgstr "Poslat"
@@ -302,7 +364,7 @@ msgstr "Poslat"
msgid "Public announcement"
msgstr "Veřejné oznámení"
#: mailu/ui/templates/antispam.html:4 mailu/ui/templates/sidebar.html:80
#: mailu/ui/templates/antispam.html:4 mailu/ui/templates/sidebar.html:82
#: mailu/ui/templates/user/settings.html:19
msgid "Antispam"
msgstr "Antispam"
@@ -315,22 +377,30 @@ msgstr "Stavová stránka RSPAMD"
msgid "configure your email client"
msgstr "nakonfigurovat e-mailového klienta"
#: mailu/ui/templates/client.html:13
#: mailu/ui/templates/client.html:12
msgid "Incoming mail"
msgstr "Příchozí mail"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:41
#: mailu/ui/templates/client.html:15 mailu/ui/templates/client.html:40
msgid "Mail protocol"
msgstr "Poštovní protokol"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:49
#: mailu/ui/templates/client.html:23 mailu/ui/templates/client.html:48
msgid "Server name"
msgstr "Název serveru"
#: mailu/ui/templates/client.html:38
#: mailu/ui/templates/client.html:37
msgid "Outgoing mail"
msgstr "Odchozí pošta"
#: mailu/ui/templates/client.html:62
msgid "If you use an Apple device,"
msgstr "Pokud používáte zařízení Apple,"
#: mailu/ui/templates/client.html:63
msgid "click here to auto-configure it."
msgstr "klepněte zde pro automatické nastavení."
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Potvrdit akci"
@@ -348,7 +418,7 @@ msgstr "Chyba Dockeru"
msgid "An error occurred while talking to the Docker server."
msgstr "Při komunikaci se serverem Docker došlo k chybě."
#: mailu/ui/templates/macros.html:129
#: mailu/ui/templates/macros.html:128
msgid "copy to clipboard"
msgstr "zkopírovat do schránky"
@@ -356,48 +426,48 @@ msgstr "zkopírovat do schránky"
msgid "My account"
msgstr "Můj účet"
#: mailu/ui/templates/sidebar.html:19 mailu/ui/templates/user/list.html:37
#: mailu/ui/templates/sidebar.html:19 mailu/ui/templates/user/list.html:36
msgid "Settings"
msgstr "Nastavení"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/user/list.html:38
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/user/list.html:37
msgid "Auto-reply"
msgstr "Automatická odpověď"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:37
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:38
#: mailu/ui/templates/user/list.html:39
msgid "Fetched accounts"
msgstr "Fetched účty"
msgstr "Stažené účty"
#: mailu/ui/templates/sidebar.html:43 mailu/ui/templates/token/list.html:4
#: mailu/ui/templates/sidebar.html:45 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "Autentizační tokeny"
#: mailu/ui/templates/sidebar.html:56
#: mailu/ui/templates/sidebar.html:58
msgid "Administration"
msgstr "Administrace"
#: mailu/ui/templates/sidebar.html:62
#: mailu/ui/templates/sidebar.html:64
msgid "Announcement"
msgstr "Oznámení"
#: mailu/ui/templates/sidebar.html:68
#: mailu/ui/templates/sidebar.html:70
msgid "Administrators"
msgstr "Administrátoři"
#: mailu/ui/templates/sidebar.html:74
#: mailu/ui/templates/sidebar.html:76
msgid "Relayed domains"
msgstr "Relayované domény"
#: mailu/ui/templates/sidebar.html:88
#: mailu/ui/templates/sidebar.html:90
msgid "Mail domains"
msgstr "Poštovní domény"
#: mailu/ui/templates/sidebar.html:99
#: mailu/ui/templates/sidebar.html:101
msgid "Webmail"
msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:135
#: mailu/ui/templates/sidebar.html:137
msgid "Sign out"
msgstr "Odhlásit se"
@@ -411,7 +481,7 @@ msgstr "Přidat globálního administrátora"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Globální administrátor"
msgstr "Globální administrátoři"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
@@ -429,14 +499,20 @@ msgstr "Akce"
#: mailu/ui/templates/admin/list.html:18 mailu/ui/templates/alias/list.html:20
#: mailu/ui/templates/manager/list.html:20 mailu/ui/templates/user/list.html:21
msgid "Email"
msgstr "Email"
msgstr "E-mail"
#: mailu/ui/templates/admin/list.html:25 mailu/ui/templates/alias/list.html:32
#: mailu/ui/templates/alternative/list.html:29
#: mailu/ui/templates/domain/list.html:34 mailu/ui/templates/fetch/list.html:34
#: mailu/ui/templates/admin/list.html:25 mailu/ui/templates/alias/list.html:31
#: mailu/ui/templates/domain/list.html:35 mailu/ui/templates/fetch/list.html:35
#: mailu/ui/templates/manager/list.html:27
#: mailu/ui/templates/relay/list.html:30 mailu/ui/templates/token/list.html:30
#: mailu/ui/templates/user/list.html:34
#: mailu/ui/templates/relay/list.html:29 mailu/ui/templates/user/list.html:33
msgid "Edit"
msgstr "Upravit"
#: mailu/ui/templates/admin/list.html:26 mailu/ui/templates/alias/list.html:32
#: mailu/ui/templates/alternative/list.html:29
#: mailu/ui/templates/domain/list.html:36 mailu/ui/templates/fetch/list.html:36
#: mailu/ui/templates/manager/list.html:28
#: mailu/ui/templates/relay/list.html:30 mailu/ui/templates/token/list.html:31
msgid "Delete"
msgstr "Vymazat"
@@ -458,26 +534,20 @@ msgstr "Přidat alias"
#: mailu/ui/templates/alias/list.html:23
#: mailu/ui/templates/alternative/list.html:21
#: mailu/ui/templates/domain/list.html:23 mailu/ui/templates/fetch/list.html:25
#: mailu/ui/templates/relay/list.html:21 mailu/ui/templates/token/list.html:22
#: mailu/ui/templates/domain/list.html:25 mailu/ui/templates/fetch/list.html:27
#: mailu/ui/templates/relay/list.html:21 mailu/ui/templates/token/list.html:23
#: mailu/ui/templates/user/list.html:25
msgid "Created"
msgstr "Vytvořeno"
#: mailu/ui/templates/alias/list.html:24
#: mailu/ui/templates/alternative/list.html:22
#: mailu/ui/templates/domain/list.html:24 mailu/ui/templates/fetch/list.html:26
#: mailu/ui/templates/relay/list.html:22 mailu/ui/templates/token/list.html:23
#: mailu/ui/templates/domain/list.html:26 mailu/ui/templates/fetch/list.html:28
#: mailu/ui/templates/relay/list.html:22 mailu/ui/templates/token/list.html:24
#: mailu/ui/templates/user/list.html:26
msgid "Last edit"
msgstr "Poslední úprava"
#: mailu/ui/templates/alias/list.html:31 mailu/ui/templates/domain/list.html:33
#: mailu/ui/templates/fetch/list.html:33 mailu/ui/templates/relay/list.html:29
#: mailu/ui/templates/user/list.html:33
msgid "Edit"
msgstr "Upravit"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "Vytvořit alternativní doménu"
@@ -511,6 +581,10 @@ msgstr "Obnovit klíče"
msgid "Generate keys"
msgstr "Generovat klíče"
#: mailu/ui/templates/domain/details.html:19
msgid "Download zonefile"
msgstr "Stáhnout zonefile"
#: mailu/ui/templates/domain/details.html:30
msgid "DNS MX entry"
msgstr "Záznam DNS MX"
@@ -520,24 +594,20 @@ msgid "DNS SPF entries"
msgstr "Záznamy DNS SPF"
#: mailu/ui/templates/domain/details.html:40
msgid "DKIM public key"
msgstr "Veřejný klíč DKIM"
#: mailu/ui/templates/domain/details.html:44
msgid "DNS DKIM entry"
msgstr "Záznam DNS DKIM"
#: mailu/ui/templates/domain/details.html:48
#: mailu/ui/templates/domain/details.html:44
msgid "DNS DMARC entry"
msgstr "Záznam DNS DMARC"
#: mailu/ui/templates/domain/details.html:58
#: mailu/ui/templates/domain/details.html:53
msgid "DNS TLSA entry"
msgstr "Záznam DNS TLSA"
#: mailu/ui/templates/domain/details.html:63
#: mailu/ui/templates/domain/details.html:58
msgid "DNS client auto-configuration entries"
msgstr "Položky automatické konfigurace klienta DNS"
msgstr "Položky automatického nastavení klienta DNS"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
@@ -559,25 +629,35 @@ msgstr "Počet poštovních schránek"
msgid "Alias count"
msgstr "Počet aliasů"
#: mailu/ui/templates/domain/list.html:31
#: mailu/ui/templates/domain/list.html:33
msgid "Details"
msgstr "Podrobnosti"
#: mailu/ui/templates/domain/list.html:38
msgid "Users"
msgstr "Uživatelů"
#: mailu/ui/templates/domain/list.html:39
msgid "Aliases"
msgstr "Aliasů"
#: mailu/ui/templates/domain/list.html:40
msgid "Managers"
msgstr "Manažerů"
msgid "Users"
msgstr "Uživatelé"
#: mailu/ui/templates/domain/list.html:41
msgid "Aliases"
msgstr "Aliasy"
#: mailu/ui/templates/domain/list.html:42
msgid "Managers"
msgstr "Manažeři"
#: mailu/ui/templates/domain/list.html:44
msgid "Alternatives"
msgstr "Alternativ"
msgstr "Alternativy"
#: mailu/ui/templates/domain/list.html:52 mailu/ui/templates/fetch/list.html:40
#: mailu/ui/templates/fetch/list.html:41
msgid "yes"
msgstr "ano"
#: mailu/ui/templates/domain/list.html:52 mailu/ui/templates/fetch/list.html:40
#: mailu/ui/templates/fetch/list.html:41
msgid "no"
msgstr "ne"
#: mailu/ui/templates/domain/signup.html:13
msgid ""
@@ -585,7 +665,7 @@ msgid ""
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
"Chcete-li zaregistrovat novou doménu, musíte nejprve nastavit\n"
" zónu domény tak, aby doménový <code>MX</code> záznam ukazovala na tento "
" zónu domény tak, aby doménový <code>MX</code> záznam odkazoval na tento "
"server"
#: mailu/ui/templates/domain/signup.html:18
@@ -598,19 +678,18 @@ msgid ""
" expires."
msgstr ""
"Pokud nevíte, jak nastavit <code>MX</code> záznam pro zónu DNS,\n"
" kontaktujte svého poskytovatele DNS nebo správce. Také prosím počkejte "
"a\n"
" několik minut po <code>MX</code> tak, aby vypršela v mezipaměti "
"místního\n"
" serveru."
" kontaktujte svého poskytovatele DNS nebo správce. Dále prosím počkejte\n"
" několik minut po nastavení <code>MX</code> záznamu, aby se vymazal z "
"mezipaměti\n"
" místního serveru."
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Přidejte fetched účet"
msgstr "Přidejte stanovaný účet"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Aktualizujte fetched účet"
msgstr "Aktualizujte stahovaný účet"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
@@ -622,23 +701,23 @@ msgstr "Koncový bod"
#: mailu/ui/templates/fetch/list.html:22
msgid "Keep emails"
msgstr "Zachovat emaily"
msgstr "Ponechat e-maily"
#: mailu/ui/templates/fetch/list.html:23
msgid "Rescan emails"
msgstr "Přeskenovat e-maily"
#: mailu/ui/templates/fetch/list.html:24
msgid "Folders"
msgstr "Složky"
#: mailu/ui/templates/fetch/list.html:25
msgid "Last check"
msgstr "Poslední kontrola"
#: mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/fetch/list.html:26
msgid "Status"
msgstr "Status"
#: mailu/ui/templates/fetch/list.html:38
msgid "yes"
msgstr "ano"
#: mailu/ui/templates/fetch/list.html:38
msgid "no"
msgstr "ne"
msgstr "Stav"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
@@ -676,15 +755,19 @@ msgstr "Vytvořit ověřovací token"
msgid "New token"
msgstr "Nový token"
#: mailu/ui/templates/token/list.html:20
msgid "ID"
msgstr "ID"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Nový uživatel"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "Všeobecné"
msgstr "Obecné"
#: mailu/ui/templates/user/create.html:23
#: mailu/ui/templates/user/create.html:24
msgid "Features and quotas"
msgstr "Funkce a kvóty"
@@ -724,10 +807,13 @@ msgstr "Automatické přeposlání"
msgid "pick a domain for the new account"
msgstr "vybrat doménu pro nový účet"
#: mailu/ui/templates/user/signup_domain.html:14
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Domain"
msgstr "Doména"
#: mailu/ui/templates/user/signup_domain.html:15
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Available slots"
msgstr "Dostupných slotů"
msgstr "Dostupné sloty"
#~ msgid "DKIM public key"
#~ msgstr "Veřejný klíč DKIM"

View File

@@ -3,33 +3,49 @@ msgid ""
msgstr ""
"Project-Id-Version: Mailu\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-05-22 18:47+0200\n"
"POT-Creation-Date: 2024-06-20 12:30+0000\n"
"PO-Revision-Date: 2021-03-04 18:46+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"
"Language: de\n"
"Language-Team: German "
"<https://translate.tedomum.net/projects/mailu/admin/de/>\n"
"Plural-Forms: nplurals=2; plural=n != 1\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
"Generated-By: Babel 2.15.0\n"
#: mailu/sso/forms.py:8 mailu/ui/forms.py:79
#: mailu/sso/forms.py:8 mailu/ui/forms.py:91
msgid "E-mail"
msgstr "E-Mail"
#: mailu/sso/forms.py:9 mailu/ui/forms.py:80 mailu/ui/forms.py:93
#: mailu/ui/forms.py:112 mailu/ui/forms.py:166
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:57
#: mailu/sso/forms.py:9 mailu/ui/forms.py:92 mailu/ui/forms.py:108
#: mailu/ui/forms.py:128 mailu/ui/forms.py:135 mailu/ui/forms.py:197
#: mailu/ui/templates/client.html:31 mailu/ui/templates/client.html:56
msgid "Password"
msgstr "Passwort"
#: mailu/sso/forms.py:10 mailu/sso/forms.py:11 mailu/sso/templates/login.html:4
#: mailu/ui/templates/sidebar.html:142
#: mailu/sso/forms.py:11 mailu/sso/forms.py:12 mailu/sso/templates/login.html:4
#: mailu/sso/templates/sidebar_sso.html:42 mailu/ui/templates/sidebar.html:144
msgid "Sign in"
msgstr "Anmelden"
#: mailu/sso/forms.py:15 mailu/ui/forms.py:134
msgid "Current password"
msgstr "Aktuelles Passwort"
#: mailu/sso/forms.py:16
msgid "New password"
msgstr "Neues Passwort"
#: mailu/sso/forms.py:17
msgid "New password (again)"
msgstr "Passwort wiederholen"
#: mailu/sso/forms.py:19
msgid "Change password"
msgstr "Passwort ändern"
#: mailu/sso/templates/base_sso.html:8 mailu/ui/templates/base.html:8
msgid "Admin page for"
msgstr "Administration für"
@@ -42,255 +58,301 @@ msgstr "Seitenleiste ein-/ausklapen"
msgid "change language"
msgstr "Sprachauswahl"
#: mailu/sso/templates/sidebar_sso.html:4 mailu/ui/templates/sidebar.html:94
#: mailu/sso/templates/sidebar_sso.html:4 mailu/ui/templates/sidebar.html:96
msgid "Go to"
msgstr "Wechseln zu"
#: mailu/sso/templates/sidebar_sso.html:9 mailu/ui/templates/client.html:4
#: mailu/ui/templates/sidebar.html:50 mailu/ui/templates/sidebar.html:107
#: mailu/ui/templates/sidebar.html:52 mailu/ui/templates/sidebar.html:109
msgid "Client setup"
msgstr "Client Einrichtung"
#: mailu/sso/templates/sidebar_sso.html:16 mailu/ui/templates/sidebar.html:114
#: mailu/sso/templates/sidebar_sso.html:16 mailu/ui/templates/sidebar.html:116
msgid "Website"
msgstr "Webseite"
#: mailu/sso/templates/sidebar_sso.html:22 mailu/ui/templates/sidebar.html:120
#: mailu/sso/templates/sidebar_sso.html:22 mailu/ui/templates/sidebar.html:122
msgid "Help"
msgstr "Hilfe"
#: mailu/sso/templates/sidebar_sso.html:35
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:127
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:129
msgid "Register a domain"
msgstr "Regestrieren Sie eine Domain"
#: mailu/sso/templates/sidebar_sso.html:49 mailu/ui/forms.py:95
#: mailu/ui/templates/sidebar.html:149 mailu/ui/templates/user/signup.html:4
#: mailu/sso/templates/sidebar_sso.html:55 mailu/ui/forms.py:111
#: mailu/ui/templates/sidebar.html:151 mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr "Registrieren"
#: mailu/ui/forms.py:33 mailu/ui/forms.py:36
#: mailu/sso/views/base.py:48
msgid "Too many attempts from your IP (rate-limit)"
msgstr "Zu viele Versuche von Ihrer IP (Rate-Limit)"
#: mailu/sso/views/base.py:51
msgid "Too many attempts for this user (rate-limit)"
msgstr "Zu viele Versuche für diesen Benutzer (Rate-Limit)"
#: mailu/sso/views/base.py:69
msgid "Wrong e-mail or password"
msgstr "Falsche E-Mail oder Passwort"
#: mailu/sso/views/base.py:85
msgid "The new password can't be the same as the old password"
msgstr "Das neue Passwort darf nicht mit dem alten Passwort übereinstimmen"
#: mailu/sso/views/base.py:88
msgid "The new passwords don't match"
msgstr "Die neuen Passwörter stimmen nicht überein"
#: mailu/sso/views/base.py:100
msgid "The current password is incorrect!"
msgstr "Das aktuelle Passwort ist falsch!"
#: mailu/ui/forms.py:34 mailu/ui/forms.py:37
msgid "Invalid email address."
msgstr "Ungültige E-Mail-Adresse."
#: mailu/ui/forms.py:45
#: mailu/ui/forms.py:47
msgid "Invalid list of folders."
msgstr "Ungültige Ordnerliste."
#: mailu/ui/forms.py:56
msgid "Confirm"
msgstr "Bestätigen"
#: mailu/ui/forms.py:48 mailu/ui/forms.py:58
#: mailu/ui/forms.py:59 mailu/ui/forms.py:69
#: mailu/ui/templates/domain/details.html:26
#: mailu/ui/templates/domain/list.html:19 mailu/ui/templates/relay/list.html:18
msgid "Domain name"
msgstr "Domain-Name"
#: mailu/ui/forms.py:49
#: mailu/ui/forms.py:60
msgid "Maximum user count"
msgstr "Maximale Anzahl Benutzer"
#: mailu/ui/forms.py:50
#: mailu/ui/forms.py:61
msgid "Maximum alias count"
msgstr "Maximale Anzahl Aliase"
#: mailu/ui/forms.py:51
#: mailu/ui/forms.py:62
msgid "Maximum user quota"
msgstr "Maximale Quota pro Benutzer"
#: mailu/ui/forms.py:52
#: mailu/ui/forms.py:63 mailu/ui/templates/domain/list.html:24
msgid "Enable sign-up"
msgstr "Neuanmeldung erlauben"
#: mailu/ui/forms.py:53 mailu/ui/forms.py:74 mailu/ui/forms.py:86
#: mailu/ui/forms.py:132 mailu/ui/forms.py:144
#: mailu/ui/templates/alias/list.html:22 mailu/ui/templates/domain/list.html:22
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:20
#: mailu/ui/forms.py:64 mailu/ui/forms.py:86 mailu/ui/forms.py:100
#: mailu/ui/forms.py:155 mailu/ui/forms.py:175
#: mailu/ui/templates/alias/list.html:22 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Comment"
msgstr "Kommentar"
#: mailu/ui/forms.py:54 mailu/ui/forms.py:68 mailu/ui/forms.py:75
#: mailu/ui/forms.py:88 mailu/ui/forms.py:136 mailu/ui/forms.py:145
#: mailu/ui/forms.py:65 mailu/ui/forms.py:80 mailu/ui/forms.py:87
#: mailu/ui/forms.py:103 mailu/ui/forms.py:159 mailu/ui/forms.py:176
msgid "Save"
msgstr "Speichern"
#: mailu/ui/forms.py:59
#: mailu/ui/forms.py:70
msgid "Initial admin"
msgstr "Initiale Admin-Adresse"
#: mailu/ui/forms.py:60
#: mailu/ui/forms.py:71
msgid "Admin password"
msgstr "Administrator Passwort"
#: mailu/ui/forms.py:61 mailu/ui/forms.py:81 mailu/ui/forms.py:94
#: mailu/ui/forms.py:72 mailu/ui/forms.py:93 mailu/ui/forms.py:109
msgid "Confirm password"
msgstr "Passwort bestätigen"
#: mailu/ui/forms.py:63
#: mailu/ui/forms.py:75
msgid "Create"
msgstr "Erstellen"
#: mailu/ui/forms.py:67
#: mailu/ui/forms.py:79
msgid "Alternative name"
msgstr "Alternativer Name"
#: mailu/ui/forms.py:72
#: mailu/ui/forms.py:84
msgid "Relayed domain name"
msgstr "Relay-Domain-Name"
#: mailu/ui/forms.py:73 mailu/ui/templates/relay/list.html:19
#: mailu/ui/forms.py:85 mailu/ui/templates/relay/list.html:19
msgid "Remote host"
msgstr "Entfernter Host"
#: mailu/ui/forms.py:82 mailu/ui/templates/user/list.html:23
#: mailu/ui/templates/user/signup_domain.html:16
#: mailu/ui/forms.py:95 mailu/ui/templates/domain/list.html:22
#: mailu/ui/templates/user/list.html:23
#: mailu/ui/templates/user/signup_domain.html:17
msgid "Quota"
msgstr "Kontingent"
#: mailu/ui/forms.py:83
#: mailu/ui/forms.py:96
msgid "Allow IMAP access"
msgstr "Zugriff via IMAP erlauben"
#: mailu/ui/forms.py:84
#: mailu/ui/forms.py:97
msgid "Allow POP3 access"
msgstr "Zugriff via POP3 erlauben"
#: mailu/ui/forms.py:85 mailu/ui/forms.py:101
#: mailu/ui/forms.py:98
msgid "Allow the user to spoof the sender (send email as anyone)"
msgstr "Dem Benutzer ermöglichen, den Absender zu fälschen (E-Mail als jedermann senden)"
#: mailu/ui/forms.py:99 mailu/ui/forms.py:117
#: mailu/ui/templates/user/settings.html:15
msgid "Displayed name"
msgstr "Angezeigter Name"
#: mailu/ui/forms.py:87
#: mailu/ui/forms.py:101
msgid "Enabled"
msgstr "Aktiv"
#: mailu/ui/forms.py:92
#: mailu/ui/forms.py:102
msgid "Force password change at next login"
msgstr "Kennwortänderung bei der nächsten Anmeldung erzwingen"
#: mailu/ui/forms.py:107
msgid "Email address"
msgstr "E-Mail-Adresse"
#: mailu/ui/forms.py:102
#: mailu/ui/forms.py:118
msgid "Enable spam filter"
msgstr "Spamfilter aktivieren"
#: mailu/ui/forms.py:103
#: mailu/ui/forms.py:119
msgid "Enable marking spam mails as read"
msgstr "Spam automatisch als gelesen markieren"
#: mailu/ui/forms.py:104
#: mailu/ui/forms.py:120
msgid "Spam filter tolerance"
msgstr "Spamfilter-Grenzwert"
#: mailu/ui/forms.py:105
#: mailu/ui/forms.py:121
msgid "Enable forwarding"
msgstr "Weiterleitung aktivieren"
#: mailu/ui/forms.py:106
#: mailu/ui/forms.py:122
msgid "Keep a copy of the emails"
msgstr "Kopie der E-Mails behalten"
#: mailu/ui/forms.py:107 mailu/ui/forms.py:143
#: mailu/ui/forms.py:123 mailu/ui/forms.py:174
#: mailu/ui/templates/alias/list.html:21
msgid "Destination"
msgstr "Ziel"
#: mailu/ui/forms.py:108
#: mailu/ui/forms.py:124
msgid "Save settings"
msgstr "Einstellungen speichern"
#: mailu/ui/forms.py:113
#: mailu/ui/forms.py:129 mailu/ui/forms.py:136
msgid "Password check"
msgstr "Passwort wiederholen"
#: mailu/ui/forms.py:114 mailu/ui/templates/sidebar.html:25
#: mailu/ui/forms.py:131 mailu/ui/forms.py:138
#: mailu/ui/templates/sidebar.html:25
msgid "Update password"
msgstr "Passwort aktualisieren"
#: mailu/ui/forms.py:118
#: mailu/ui/forms.py:141
msgid "Enable automatic reply"
msgstr "Automatische Antwort aktivieren"
#: mailu/ui/forms.py:119
#: mailu/ui/forms.py:142
msgid "Reply subject"
msgstr "Betreff"
#: mailu/ui/forms.py:120
#: mailu/ui/forms.py:143
msgid "Reply body"
msgstr "Text"
#: mailu/ui/forms.py:122
#: mailu/ui/forms.py:145
msgid "Start of vacation"
msgstr "Beginn der Abwesenheit"
#: mailu/ui/forms.py:123
#: mailu/ui/forms.py:146
msgid "End of vacation"
msgstr "Ende der Abwesenheit"
#: mailu/ui/forms.py:124
#: mailu/ui/forms.py:147
msgid "Update"
msgstr "Aktualisieren"
#: mailu/ui/forms.py:129
#: mailu/ui/forms.py:152
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "Token (bitte speichern, da er hier nach nicht mehr angezeigt wird)"
#: mailu/ui/forms.py:134 mailu/ui/templates/token/list.html:21
#: mailu/ui/forms.py:157 mailu/ui/templates/token/list.html:22
msgid "Authorized IP"
msgstr "Authorisierte IP-Adresse"
#: mailu/ui/forms.py:140
#: mailu/ui/forms.py:171
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:142
#: mailu/ui/forms.py:173
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "SQL LIKE Syntax nutzen (z.B. für Catch-All-Aliase)"
#: mailu/ui/forms.py:149
#: mailu/ui/forms.py:180
msgid "Admin email"
msgstr "Administrator E-Mail"
#: mailu/ui/forms.py:150 mailu/ui/forms.py:155 mailu/ui/forms.py:168
#: mailu/ui/forms.py:181 mailu/ui/forms.py:186 mailu/ui/forms.py:201
msgid "Submit"
msgstr "Absenden"
#: mailu/ui/forms.py:154
#: mailu/ui/forms.py:185
msgid "Manager email"
msgstr "Manager E-Mail"
#: mailu/ui/forms.py:159
#: mailu/ui/forms.py:190
msgid "Protocol"
msgstr "Protokoll"
#: mailu/ui/forms.py:162
#: mailu/ui/forms.py:193
msgid "Hostname or IP"
msgstr "Hostname oder IP"
#: mailu/ui/forms.py:163 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:45
#: mailu/ui/forms.py:194 mailu/ui/templates/client.html:19
#: mailu/ui/templates/client.html:44
msgid "TCP port"
msgstr "TCP Port"
#: mailu/ui/forms.py:164
#: mailu/ui/forms.py:195
msgid "Enable TLS"
msgstr "Verschlüsselung aktivieren (TLS)"
#: mailu/ui/forms.py:165 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:53 mailu/ui/templates/fetch/list.html:21
#: mailu/ui/forms.py:196 mailu/ui/templates/client.html:27
#: mailu/ui/templates/client.html:52 mailu/ui/templates/fetch/list.html:21
msgid "Username"
msgstr "Benutzername"
#: mailu/ui/forms.py:167
#: mailu/ui/forms.py:198
msgid "Keep emails on the server"
msgstr "E-Mails auf dem Server belassen"
#: mailu/ui/forms.py:172
#: mailu/ui/forms.py:199
msgid "Rescan emails locally"
msgstr "E-Mails lokal erneut scannen"
#: mailu/ui/forms.py:200
msgid "Folders to fetch on the server"
msgstr "Auf dem Server abzurufende Ordner"
#: mailu/ui/forms.py:205
msgid "Announcement subject"
msgstr "Betreff"
#: mailu/ui/forms.py:174
#: mailu/ui/forms.py:207
msgid "Announcement body"
msgstr "Text"
#: mailu/ui/forms.py:176
#: mailu/ui/forms.py:209
msgid "Send"
msgstr "Absenden"
@@ -298,7 +360,7 @@ msgstr "Absenden"
msgid "Public announcement"
msgstr "Öffentliche Bekanntmachung"
#: mailu/ui/templates/antispam.html:4 mailu/ui/templates/sidebar.html:80
#: mailu/ui/templates/antispam.html:4 mailu/ui/templates/sidebar.html:82
#: mailu/ui/templates/user/settings.html:19
msgid "Antispam"
msgstr "Antispam"
@@ -307,6 +369,26 @@ msgstr "Antispam"
msgid "RSPAMD status page"
msgstr "RSPAMD Statusseite"
#: mailu/ui/templates/client.html:8
msgid "configure your email client"
msgstr "Informationen zur Einrichtung Ihres Email-Clients"
#: mailu/ui/templates/client.html:12
msgid "Incoming mail"
msgstr "E-Mail-Empfang"
#: mailu/ui/templates/client.html:15 mailu/ui/templates/client.html:40
msgid "Mail protocol"
msgstr "E-Mail-Protokoll"
#: mailu/ui/templates/client.html:23 mailu/ui/templates/client.html:48
msgid "Server name"
msgstr "Servername"
#: mailu/ui/templates/client.html:37
msgid "Outgoing mail"
msgstr "E-Mail-Versand"
#: mailu/ui/templates/client.html:62
msgid "If you use an Apple device,"
msgstr "Falls es sich um ein Apple-Gerät handelt,"
@@ -315,26 +397,6 @@ msgstr "Falls es sich um ein Apple-Gerät handelt,"
msgid "click here to auto-configure it."
msgstr "kann dieses hier automatisch eingerichtet werden."
#: mailu/ui/templates/client.html:8
msgid "configure your email client"
msgstr "Informationen zur Einrichtung Ihres Email-Clients"
#: mailu/ui/templates/client.html:13
msgid "Incoming mail"
msgstr "E-Mail-Empfang"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:41
msgid "Mail protocol"
msgstr "E-Mail-Protokoll"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:49
msgid "Server name"
msgstr "Servername"
#: mailu/ui/templates/client.html:38
msgid "Outgoing mail"
msgstr "E-Mail-Versand"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Aktion bestätigen"
@@ -354,7 +416,7 @@ msgstr ""
"Während der Kommunikation mit dem Docker Server ist ein Fehler "
"aufgetreten."
#: mailu/ui/templates/macros.html:129
#: mailu/ui/templates/macros.html:128
msgid "copy to clipboard"
msgstr "In Zwischenablage kopieren"
@@ -362,48 +424,48 @@ msgstr "In Zwischenablage kopieren"
msgid "My account"
msgstr "Mein Konto"
#: mailu/ui/templates/sidebar.html:19 mailu/ui/templates/user/list.html:37
#: mailu/ui/templates/sidebar.html:19 mailu/ui/templates/user/list.html:36
msgid "Settings"
msgstr "Einstellungen"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/user/list.html:38
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/user/list.html:37
msgid "Auto-reply"
msgstr "Auto-Antwort"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:37
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:38
#: mailu/ui/templates/user/list.html:39
msgid "Fetched accounts"
msgstr "Abgerufene Konten"
#: mailu/ui/templates/sidebar.html:43 mailu/ui/templates/token/list.html:4
#: mailu/ui/templates/sidebar.html:45 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "Authentifizierungs-Tokens"
#: mailu/ui/templates/sidebar.html:56
#: mailu/ui/templates/sidebar.html:58
msgid "Administration"
msgstr "Administration"
#: mailu/ui/templates/sidebar.html:62
#: mailu/ui/templates/sidebar.html:64
msgid "Announcement"
msgstr "Bekanntmachung"
#: mailu/ui/templates/sidebar.html:68
#: mailu/ui/templates/sidebar.html:70
msgid "Administrators"
msgstr "Administratoren"
#: mailu/ui/templates/sidebar.html:74
#: mailu/ui/templates/sidebar.html:76
msgid "Relayed domains"
msgstr "Relay-Domains"
#: mailu/ui/templates/sidebar.html:88
#: mailu/ui/templates/sidebar.html:90
msgid "Mail domains"
msgstr "E-Mail-Domains"
#: mailu/ui/templates/sidebar.html:99
#: mailu/ui/templates/sidebar.html:101
msgid "Webmail"
msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:135
#: mailu/ui/templates/sidebar.html:137
msgid "Sign out"
msgstr "Abmelden"
@@ -437,12 +499,18 @@ msgstr "Aktionen"
msgid "Email"
msgstr "E-Mail"
#: mailu/ui/templates/admin/list.html:25 mailu/ui/templates/alias/list.html:32
#: mailu/ui/templates/alternative/list.html:29
#: mailu/ui/templates/domain/list.html:34 mailu/ui/templates/fetch/list.html:34
#: mailu/ui/templates/admin/list.html:25 mailu/ui/templates/alias/list.html:31
#: mailu/ui/templates/domain/list.html:35 mailu/ui/templates/fetch/list.html:35
#: mailu/ui/templates/manager/list.html:27
#: mailu/ui/templates/relay/list.html:30 mailu/ui/templates/token/list.html:30
#: mailu/ui/templates/user/list.html:34
#: mailu/ui/templates/relay/list.html:29 mailu/ui/templates/user/list.html:33
msgid "Edit"
msgstr "Bearbeiten"
#: mailu/ui/templates/admin/list.html:26 mailu/ui/templates/alias/list.html:32
#: mailu/ui/templates/alternative/list.html:29
#: mailu/ui/templates/domain/list.html:36 mailu/ui/templates/fetch/list.html:36
#: mailu/ui/templates/manager/list.html:28
#: mailu/ui/templates/relay/list.html:30 mailu/ui/templates/token/list.html:31
msgid "Delete"
msgstr "Löschen"
@@ -464,26 +532,20 @@ msgstr "Alias hinzufügen"
#: mailu/ui/templates/alias/list.html:23
#: mailu/ui/templates/alternative/list.html:21
#: mailu/ui/templates/domain/list.html:23 mailu/ui/templates/fetch/list.html:25
#: mailu/ui/templates/relay/list.html:21 mailu/ui/templates/token/list.html:22
#: mailu/ui/templates/domain/list.html:25 mailu/ui/templates/fetch/list.html:27
#: mailu/ui/templates/relay/list.html:21 mailu/ui/templates/token/list.html:23
#: mailu/ui/templates/user/list.html:25
msgid "Created"
msgstr "Erstellt"
#: mailu/ui/templates/alias/list.html:24
#: mailu/ui/templates/alternative/list.html:22
#: mailu/ui/templates/domain/list.html:24 mailu/ui/templates/fetch/list.html:26
#: mailu/ui/templates/relay/list.html:22 mailu/ui/templates/token/list.html:23
#: mailu/ui/templates/domain/list.html:26 mailu/ui/templates/fetch/list.html:28
#: mailu/ui/templates/relay/list.html:22 mailu/ui/templates/token/list.html:24
#: mailu/ui/templates/user/list.html:26
msgid "Last edit"
msgstr "Zuletzt bearbeitet"
#: mailu/ui/templates/alias/list.html:31 mailu/ui/templates/domain/list.html:33
#: mailu/ui/templates/fetch/list.html:33 mailu/ui/templates/relay/list.html:29
#: mailu/ui/templates/user/list.html:33
msgid "Edit"
msgstr "Bearbeiten"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "Alternative Domain erstellen"
@@ -517,6 +579,10 @@ msgstr "Schlüssel neu erzeugen"
msgid "Generate keys"
msgstr "Schlüssel erzeugen"
#: mailu/ui/templates/domain/details.html:19
msgid "Download zonefile"
msgstr "Zonefile herunterladen"
#: mailu/ui/templates/domain/details.html:30
msgid "DNS MX entry"
msgstr "DNS MX Eintrag"
@@ -526,25 +592,25 @@ msgid "DNS SPF entries"
msgstr "DNS SPF Einträge"
#: mailu/ui/templates/domain/details.html:40
msgid "DKIM public key"
msgstr "DKIM öffentlicher Schlüssel"
#: mailu/ui/templates/domain/details.html:44
msgid "DNS DKIM entry"
msgstr "DNS DKIM Eintrag"
#: mailu/ui/templates/domain/details.html:48
#: mailu/ui/templates/domain/details.html:44
msgid "DNS DMARC entry"
msgstr "DNS DMARC Eintrag"
#: mailu/ui/templates/domain/details.html:58
#: mailu/ui/templates/domain/details.html:53
msgid "DNS TLSA entry"
msgstr "DNS TLSA Eintrag"
#: mailu/ui/templates/domain/details.html:63
#: mailu/ui/templates/domain/details.html:58
msgid "DNS client auto-configuration entries"
msgstr "DNS Einträge für die automatische Client-Konfiguration"
#: mailu/ui/templates/domain/details.html:71
msgid "Alternative Domain name"
msgstr "Alternativer Domain Name"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Domain bearbeiten"
@@ -565,26 +631,36 @@ msgstr "Anzahl Mailboxen"
msgid "Alias count"
msgstr "Anzahl Aliase"
#: mailu/ui/templates/domain/list.html:31
#: mailu/ui/templates/domain/list.html:33
msgid "Details"
msgstr "Details"
#: mailu/ui/templates/domain/list.html:38
#: mailu/ui/templates/domain/list.html:40
msgid "Users"
msgstr "Benutzer"
#: mailu/ui/templates/domain/list.html:39
#: mailu/ui/templates/domain/list.html:41
msgid "Aliases"
msgstr "Aliase"
#: mailu/ui/templates/domain/list.html:40
#: mailu/ui/templates/domain/list.html:42
msgid "Managers"
msgstr "Manager"
#: mailu/ui/templates/domain/list.html:42
#: mailu/ui/templates/domain/list.html:44
msgid "Alternatives"
msgstr "Alternativen"
#: mailu/ui/templates/domain/list.html:52 mailu/ui/templates/fetch/list.html:40
#: mailu/ui/templates/fetch/list.html:41
msgid "yes"
msgstr "ja"
#: mailu/ui/templates/domain/list.html:52 mailu/ui/templates/fetch/list.html:40
#: mailu/ui/templates/fetch/list.html:41
msgid "no"
msgstr "nein"
#: mailu/ui/templates/domain/signup.html:13
msgid ""
"In order to register a new domain, you must first setup the\n"
@@ -631,21 +707,21 @@ msgid "Keep emails"
msgstr "E-Mails behalten"
#: mailu/ui/templates/fetch/list.html:23
msgid "Rescan emails"
msgstr "E-Mails erneut scannen"
#: mailu/ui/templates/fetch/list.html:24
msgid "Folders"
msgstr "Ordner"
#: mailu/ui/templates/fetch/list.html:25
msgid "Last check"
msgstr "Letzte Prüfung"
#: mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/fetch/list.html:26
msgid "Status"
msgstr "Status"
#: mailu/ui/templates/fetch/list.html:38
msgid "yes"
msgstr "ja"
#: mailu/ui/templates/fetch/list.html:38
msgid "no"
msgstr "nein"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Einen Manager hinzufügen"
@@ -682,6 +758,10 @@ msgstr "Authentifizierungs-Token erstellen"
msgid "New token"
msgstr "Neuer Token"
#: mailu/ui/templates/token/list.html:20
msgid "ID"
msgstr "ID"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Neuer Benutzer"
@@ -690,7 +770,7 @@ msgstr "Neuer Benutzer"
msgid "General"
msgstr "Allgemein"
#: mailu/ui/templates/user/create.html:23
#: mailu/ui/templates/user/create.html:24
msgid "Features and quotas"
msgstr "Funktionen und Quotas"
@@ -730,47 +810,11 @@ msgstr "Auto-Weiterleitung"
msgid "pick a domain for the new account"
msgstr "Wählen Sie eine Domain für das neue Benutzerkonto"
#: mailu/ui/templates/user/signup_domain.html:14
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Domain"
msgstr "Domain"
#: mailu/ui/templates/user/signup_domain.html:15
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Available slots"
msgstr "Verfügbare Plätze"
#~ msgid "Spam filter threshold"
#~ msgstr "Schwellenwert für Spamfilter"
#~ msgid "Your account"
#~ msgstr "Konto"
#~ msgid "to access the administration tools"
#~ msgstr "für administrativen Zugriff"
#~ msgid "Services status"
#~ msgstr "Dienst-Status"
#~ msgid "Service"
#~ msgstr "Dienst"
#~ msgid "PID"
#~ msgstr "PID"
#~ msgid "Image"
#~ msgstr "Image"
#~ msgid "Started"
#~ msgstr "Gestartet"
#~ msgid "Last update"
#~ msgstr "Letztes Update"
#~ msgid "from"
#~ msgstr "von"
#~ msgid "Forward emails"
#~ msgstr "E-Mails weiterleiten"
#~ msgid "General settings"
#~ msgstr "Allgemeine Einstellungen"

View File

@@ -7,33 +7,49 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-05-22 18:47+0200\n"
"POT-Creation-Date: 2024-06-20 12:30+0000\n"
"PO-Revision-Date: 2021-03-04 18:46+0000\n"
"Last-Translator: Jaume Barber <jaumebarber@gmail.com>\n"
"Language: en\n"
"Language-Team: English "
"<https://translate.tedomum.net/projects/mailu/admin/en/>\n"
"Plural-Forms: nplurals=2; plural=n != 1\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
"Generated-By: Babel 2.15.0\n"
#: mailu/sso/forms.py:8 mailu/ui/forms.py:79
#: mailu/sso/forms.py:8 mailu/ui/forms.py:91
msgid "E-mail"
msgstr "E-mail"
#: mailu/sso/forms.py:9 mailu/ui/forms.py:80 mailu/ui/forms.py:93
#: mailu/ui/forms.py:112 mailu/ui/forms.py:166
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:57
#: mailu/sso/forms.py:9 mailu/ui/forms.py:92 mailu/ui/forms.py:108
#: mailu/ui/forms.py:128 mailu/ui/forms.py:135 mailu/ui/forms.py:197
#: mailu/ui/templates/client.html:31 mailu/ui/templates/client.html:56
msgid "Password"
msgstr "Password"
#: mailu/sso/forms.py:10 mailu/sso/forms.py:11 mailu/sso/templates/login.html:4
#: mailu/ui/templates/sidebar.html:142
#: mailu/sso/forms.py:11 mailu/sso/forms.py:12 mailu/sso/templates/login.html:4
#: mailu/sso/templates/sidebar_sso.html:42 mailu/ui/templates/sidebar.html:144
msgid "Sign in"
msgstr ""
#: mailu/sso/forms.py:15 mailu/ui/forms.py:134
msgid "Current password"
msgstr ""
#: mailu/sso/forms.py:16
msgid "New password"
msgstr ""
#: mailu/sso/forms.py:17
msgid "New password (again)"
msgstr ""
#: mailu/sso/forms.py:19
msgid "Change password"
msgstr ""
#: mailu/sso/templates/base_sso.html:8 mailu/ui/templates/base.html:8
msgid "Admin page for"
msgstr ""
@@ -46,255 +62,301 @@ msgstr ""
msgid "change language"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:4 mailu/ui/templates/sidebar.html:94
#: mailu/sso/templates/sidebar_sso.html:4 mailu/ui/templates/sidebar.html:96
msgid "Go to"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:9 mailu/ui/templates/client.html:4
#: mailu/ui/templates/sidebar.html:50 mailu/ui/templates/sidebar.html:107
#: mailu/ui/templates/sidebar.html:52 mailu/ui/templates/sidebar.html:109
msgid "Client setup"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:16 mailu/ui/templates/sidebar.html:114
#: mailu/sso/templates/sidebar_sso.html:16 mailu/ui/templates/sidebar.html:116
msgid "Website"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:22 mailu/ui/templates/sidebar.html:120
#: mailu/sso/templates/sidebar_sso.html:22 mailu/ui/templates/sidebar.html:122
msgid "Help"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:35
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:127
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:129
msgid "Register a domain"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:49 mailu/ui/forms.py:95
#: mailu/ui/templates/sidebar.html:149 mailu/ui/templates/user/signup.html:4
#: mailu/sso/templates/sidebar_sso.html:55 mailu/ui/forms.py:111
#: mailu/ui/templates/sidebar.html:151 mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr "Sign up"
#: mailu/ui/forms.py:33 mailu/ui/forms.py:36
#: mailu/sso/views/base.py:48
msgid "Too many attempts from your IP (rate-limit)"
msgstr ""
#: mailu/sso/views/base.py:51
msgid "Too many attempts for this user (rate-limit)"
msgstr ""
#: mailu/sso/views/base.py:69
msgid "Wrong e-mail or password"
msgstr ""
#: mailu/sso/views/base.py:85
msgid "The new password can't be the same as the old password"
msgstr ""
#: mailu/sso/views/base.py:88
msgid "The new passwords don't match"
msgstr ""
#: mailu/sso/views/base.py:100
msgid "The current password is incorrect!"
msgstr ""
#: mailu/ui/forms.py:34 mailu/ui/forms.py:37
msgid "Invalid email address."
msgstr ""
#: mailu/ui/forms.py:45
#: mailu/ui/forms.py:47
msgid "Invalid list of folders."
msgstr ""
#: mailu/ui/forms.py:56
msgid "Confirm"
msgstr "Confirm"
#: mailu/ui/forms.py:48 mailu/ui/forms.py:58
#: mailu/ui/forms.py:59 mailu/ui/forms.py:69
#: mailu/ui/templates/domain/details.html:26
#: mailu/ui/templates/domain/list.html:19 mailu/ui/templates/relay/list.html:18
msgid "Domain name"
msgstr ""
#: mailu/ui/forms.py:49
#: mailu/ui/forms.py:60
msgid "Maximum user count"
msgstr "Maximum user count"
#: mailu/ui/forms.py:50
#: mailu/ui/forms.py:61
msgid "Maximum alias count"
msgstr ""
#: mailu/ui/forms.py:51
#: mailu/ui/forms.py:62
msgid "Maximum user quota"
msgstr "Maximum user quota"
#: mailu/ui/forms.py:52
#: mailu/ui/forms.py:63 mailu/ui/templates/domain/list.html:24
msgid "Enable sign-up"
msgstr "Enable sign-up"
#: mailu/ui/forms.py:53 mailu/ui/forms.py:74 mailu/ui/forms.py:86
#: mailu/ui/forms.py:132 mailu/ui/forms.py:144
#: mailu/ui/templates/alias/list.html:22 mailu/ui/templates/domain/list.html:22
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:20
#: mailu/ui/forms.py:64 mailu/ui/forms.py:86 mailu/ui/forms.py:100
#: mailu/ui/forms.py:155 mailu/ui/forms.py:175
#: mailu/ui/templates/alias/list.html:22 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Comment"
msgstr "Comment"
#: mailu/ui/forms.py:54 mailu/ui/forms.py:68 mailu/ui/forms.py:75
#: mailu/ui/forms.py:88 mailu/ui/forms.py:136 mailu/ui/forms.py:145
#: mailu/ui/forms.py:65 mailu/ui/forms.py:80 mailu/ui/forms.py:87
#: mailu/ui/forms.py:103 mailu/ui/forms.py:159 mailu/ui/forms.py:176
msgid "Save"
msgstr "Save"
#: mailu/ui/forms.py:59
#: mailu/ui/forms.py:70
msgid "Initial admin"
msgstr "Initial admin"
#: mailu/ui/forms.py:60
#: mailu/ui/forms.py:71
msgid "Admin password"
msgstr "Admin password"
#: mailu/ui/forms.py:61 mailu/ui/forms.py:81 mailu/ui/forms.py:94
#: mailu/ui/forms.py:72 mailu/ui/forms.py:93 mailu/ui/forms.py:109
msgid "Confirm password"
msgstr "Confirm password"
#: mailu/ui/forms.py:63
#: mailu/ui/forms.py:75
msgid "Create"
msgstr "Create"
#: mailu/ui/forms.py:67
#: mailu/ui/forms.py:79
msgid "Alternative name"
msgstr "Alternative name"
#: mailu/ui/forms.py:72
#: mailu/ui/forms.py:84
msgid "Relayed domain name"
msgstr ""
#: mailu/ui/forms.py:73 mailu/ui/templates/relay/list.html:19
#: mailu/ui/forms.py:85 mailu/ui/templates/relay/list.html:19
msgid "Remote host"
msgstr ""
#: mailu/ui/forms.py:82 mailu/ui/templates/user/list.html:23
#: mailu/ui/templates/user/signup_domain.html:16
#: mailu/ui/forms.py:95 mailu/ui/templates/domain/list.html:22
#: mailu/ui/templates/user/list.html:23
#: mailu/ui/templates/user/signup_domain.html:17
msgid "Quota"
msgstr "Quota"
#: mailu/ui/forms.py:83
#: mailu/ui/forms.py:96
msgid "Allow IMAP access"
msgstr "Allow IMAP access"
#: mailu/ui/forms.py:84
#: mailu/ui/forms.py:97
msgid "Allow POP3 access"
msgstr "Allow POP3 access"
#: mailu/ui/forms.py:85 mailu/ui/forms.py:101
#: mailu/ui/forms.py:98
msgid "Allow the user to spoof the sender (send email as anyone)"
msgstr ""
#: mailu/ui/forms.py:99 mailu/ui/forms.py:117
#: mailu/ui/templates/user/settings.html:15
msgid "Displayed name"
msgstr ""
#: mailu/ui/forms.py:87
#: mailu/ui/forms.py:101
msgid "Enabled"
msgstr "Enabled"
#: mailu/ui/forms.py:92
#: mailu/ui/forms.py:102
msgid "Force password change at next login"
msgstr ""
#: mailu/ui/forms.py:107
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:102
#: mailu/ui/forms.py:118
msgid "Enable spam filter"
msgstr "Enable spam filter"
#: mailu/ui/forms.py:103
#: mailu/ui/forms.py:119
msgid "Enable marking spam mails as read"
msgstr ""
#: mailu/ui/forms.py:104
#: mailu/ui/forms.py:120
msgid "Spam filter tolerance"
msgstr "Spam filter tolerance"
#: mailu/ui/forms.py:105
#: mailu/ui/forms.py:121
msgid "Enable forwarding"
msgstr "Enable forwarding"
#: mailu/ui/forms.py:106
#: mailu/ui/forms.py:122
msgid "Keep a copy of the emails"
msgstr ""
#: mailu/ui/forms.py:107 mailu/ui/forms.py:143
#: mailu/ui/forms.py:123 mailu/ui/forms.py:174
#: mailu/ui/templates/alias/list.html:21
msgid "Destination"
msgstr ""
#: mailu/ui/forms.py:108
#: mailu/ui/forms.py:124
msgid "Save settings"
msgstr "Save settings"
#: mailu/ui/forms.py:113
#: mailu/ui/forms.py:129 mailu/ui/forms.py:136
msgid "Password check"
msgstr ""
#: mailu/ui/forms.py:114 mailu/ui/templates/sidebar.html:25
#: mailu/ui/forms.py:131 mailu/ui/forms.py:138
#: mailu/ui/templates/sidebar.html:25
msgid "Update password"
msgstr ""
#: mailu/ui/forms.py:118
#: mailu/ui/forms.py:141
msgid "Enable automatic reply"
msgstr ""
#: mailu/ui/forms.py:119
#: mailu/ui/forms.py:142
msgid "Reply subject"
msgstr ""
#: mailu/ui/forms.py:120
#: mailu/ui/forms.py:143
msgid "Reply body"
msgstr ""
#: mailu/ui/forms.py:122
#: mailu/ui/forms.py:145
msgid "Start of vacation"
msgstr ""
#: mailu/ui/forms.py:123
#: mailu/ui/forms.py:146
msgid "End of vacation"
msgstr "End of vacation"
#: mailu/ui/forms.py:124
#: mailu/ui/forms.py:147
msgid "Update"
msgstr "Update"
#: mailu/ui/forms.py:129
#: mailu/ui/forms.py:152
msgid "Your token (write it down, as it will never be displayed again)"
msgstr ""
#: mailu/ui/forms.py:134 mailu/ui/templates/token/list.html:21
#: mailu/ui/forms.py:157 mailu/ui/templates/token/list.html:22
msgid "Authorized IP"
msgstr "Authorized IP"
#: mailu/ui/forms.py:140
#: mailu/ui/forms.py:171
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:142
#: mailu/ui/forms.py:173
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr ""
#: mailu/ui/forms.py:149
#: mailu/ui/forms.py:180
msgid "Admin email"
msgstr ""
#: mailu/ui/forms.py:150 mailu/ui/forms.py:155 mailu/ui/forms.py:168
#: mailu/ui/forms.py:181 mailu/ui/forms.py:186 mailu/ui/forms.py:201
msgid "Submit"
msgstr ""
#: mailu/ui/forms.py:154
#: mailu/ui/forms.py:185
msgid "Manager email"
msgstr ""
#: mailu/ui/forms.py:159
#: mailu/ui/forms.py:190
msgid "Protocol"
msgstr ""
#: mailu/ui/forms.py:162
#: mailu/ui/forms.py:193
msgid "Hostname or IP"
msgstr ""
#: mailu/ui/forms.py:163 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:45
#: mailu/ui/forms.py:194 mailu/ui/templates/client.html:19
#: mailu/ui/templates/client.html:44
msgid "TCP port"
msgstr "TCP port"
#: mailu/ui/forms.py:164
#: mailu/ui/forms.py:195
msgid "Enable TLS"
msgstr ""
#: mailu/ui/forms.py:165 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:53 mailu/ui/templates/fetch/list.html:21
#: mailu/ui/forms.py:196 mailu/ui/templates/client.html:27
#: mailu/ui/templates/client.html:52 mailu/ui/templates/fetch/list.html:21
msgid "Username"
msgstr ""
#: mailu/ui/forms.py:167
#: mailu/ui/forms.py:198
msgid "Keep emails on the server"
msgstr ""
#: mailu/ui/forms.py:172
#: mailu/ui/forms.py:199
msgid "Rescan emails locally"
msgstr ""
#: mailu/ui/forms.py:200
msgid "Folders to fetch on the server"
msgstr ""
#: mailu/ui/forms.py:205
msgid "Announcement subject"
msgstr ""
#: mailu/ui/forms.py:174
#: mailu/ui/forms.py:207
msgid "Announcement body"
msgstr ""
#: mailu/ui/forms.py:176
#: mailu/ui/forms.py:209
msgid "Send"
msgstr ""
@@ -302,7 +364,7 @@ msgstr ""
msgid "Public announcement"
msgstr ""
#: mailu/ui/templates/antispam.html:4 mailu/ui/templates/sidebar.html:80
#: mailu/ui/templates/antispam.html:4 mailu/ui/templates/sidebar.html:82
#: mailu/ui/templates/user/settings.html:19
msgid "Antispam"
msgstr "Antispam"
@@ -315,22 +377,30 @@ msgstr ""
msgid "configure your email client"
msgstr ""
#: mailu/ui/templates/client.html:13
#: mailu/ui/templates/client.html:12
msgid "Incoming mail"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:41
#: mailu/ui/templates/client.html:15 mailu/ui/templates/client.html:40
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:49
#: mailu/ui/templates/client.html:23 mailu/ui/templates/client.html:48
msgid "Server name"
msgstr ""
#: mailu/ui/templates/client.html:38
#: mailu/ui/templates/client.html:37
msgid "Outgoing mail"
msgstr ""
#: mailu/ui/templates/client.html:62
msgid "If you use an Apple device,"
msgstr ""
#: mailu/ui/templates/client.html:63
msgid "click here to auto-configure it."
msgstr ""
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr ""
@@ -348,7 +418,7 @@ msgstr "Docker error"
msgid "An error occurred while talking to the Docker server."
msgstr ""
#: mailu/ui/templates/macros.html:129
#: mailu/ui/templates/macros.html:128
msgid "copy to clipboard"
msgstr ""
@@ -356,48 +426,48 @@ msgstr ""
msgid "My account"
msgstr ""
#: mailu/ui/templates/sidebar.html:19 mailu/ui/templates/user/list.html:37
#: mailu/ui/templates/sidebar.html:19 mailu/ui/templates/user/list.html:36
msgid "Settings"
msgstr ""
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/user/list.html:38
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/user/list.html:37
msgid "Auto-reply"
msgstr ""
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:37
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:38
#: mailu/ui/templates/user/list.html:39
msgid "Fetched accounts"
msgstr ""
#: mailu/ui/templates/sidebar.html:43 mailu/ui/templates/token/list.html:4
#: mailu/ui/templates/sidebar.html:45 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr ""
#: mailu/ui/templates/sidebar.html:56
#: mailu/ui/templates/sidebar.html:58
msgid "Administration"
msgstr ""
#: mailu/ui/templates/sidebar.html:62
#: mailu/ui/templates/sidebar.html:64
msgid "Announcement"
msgstr ""
#: mailu/ui/templates/sidebar.html:68
#: mailu/ui/templates/sidebar.html:70
msgid "Administrators"
msgstr ""
#: mailu/ui/templates/sidebar.html:74
#: mailu/ui/templates/sidebar.html:76
msgid "Relayed domains"
msgstr "Relayed domains"
#: mailu/ui/templates/sidebar.html:88
#: mailu/ui/templates/sidebar.html:90
msgid "Mail domains"
msgstr ""
#: mailu/ui/templates/sidebar.html:99
#: mailu/ui/templates/sidebar.html:101
msgid "Webmail"
msgstr ""
#: mailu/ui/templates/sidebar.html:135
#: mailu/ui/templates/sidebar.html:137
msgid "Sign out"
msgstr ""
@@ -431,12 +501,18 @@ msgstr ""
msgid "Email"
msgstr ""
#: mailu/ui/templates/admin/list.html:25 mailu/ui/templates/alias/list.html:32
#: mailu/ui/templates/alternative/list.html:29
#: mailu/ui/templates/domain/list.html:34 mailu/ui/templates/fetch/list.html:34
#: mailu/ui/templates/admin/list.html:25 mailu/ui/templates/alias/list.html:31
#: mailu/ui/templates/domain/list.html:35 mailu/ui/templates/fetch/list.html:35
#: mailu/ui/templates/manager/list.html:27
#: mailu/ui/templates/relay/list.html:30 mailu/ui/templates/token/list.html:30
#: mailu/ui/templates/user/list.html:34
#: mailu/ui/templates/relay/list.html:29 mailu/ui/templates/user/list.html:33
msgid "Edit"
msgstr ""
#: mailu/ui/templates/admin/list.html:26 mailu/ui/templates/alias/list.html:32
#: mailu/ui/templates/alternative/list.html:29
#: mailu/ui/templates/domain/list.html:36 mailu/ui/templates/fetch/list.html:36
#: mailu/ui/templates/manager/list.html:28
#: mailu/ui/templates/relay/list.html:30 mailu/ui/templates/token/list.html:31
msgid "Delete"
msgstr ""
@@ -458,26 +534,20 @@ msgstr ""
#: mailu/ui/templates/alias/list.html:23
#: mailu/ui/templates/alternative/list.html:21
#: mailu/ui/templates/domain/list.html:23 mailu/ui/templates/fetch/list.html:25
#: mailu/ui/templates/relay/list.html:21 mailu/ui/templates/token/list.html:22
#: mailu/ui/templates/domain/list.html:25 mailu/ui/templates/fetch/list.html:27
#: mailu/ui/templates/relay/list.html:21 mailu/ui/templates/token/list.html:23
#: mailu/ui/templates/user/list.html:25
msgid "Created"
msgstr ""
#: mailu/ui/templates/alias/list.html:24
#: mailu/ui/templates/alternative/list.html:22
#: mailu/ui/templates/domain/list.html:24 mailu/ui/templates/fetch/list.html:26
#: mailu/ui/templates/relay/list.html:22 mailu/ui/templates/token/list.html:23
#: mailu/ui/templates/domain/list.html:26 mailu/ui/templates/fetch/list.html:28
#: mailu/ui/templates/relay/list.html:22 mailu/ui/templates/token/list.html:24
#: mailu/ui/templates/user/list.html:26
msgid "Last edit"
msgstr ""
#: mailu/ui/templates/alias/list.html:31 mailu/ui/templates/domain/list.html:33
#: mailu/ui/templates/fetch/list.html:33 mailu/ui/templates/relay/list.html:29
#: mailu/ui/templates/user/list.html:33
msgid "Edit"
msgstr ""
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr ""
@@ -524,22 +594,18 @@ msgid "DNS SPF entries"
msgstr ""
#: mailu/ui/templates/domain/details.html:40
msgid "DKIM public key"
msgstr ""
#: mailu/ui/templates/domain/details.html:44
msgid "DNS DKIM entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:48
#: mailu/ui/templates/domain/details.html:44
msgid "DNS DMARC entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:58
#: mailu/ui/templates/domain/details.html:53
msgid "DNS TLSA entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:63
#: mailu/ui/templates/domain/details.html:58
msgid "DNS client auto-configuration entries"
msgstr ""
@@ -563,26 +629,36 @@ msgstr ""
msgid "Alias count"
msgstr ""
#: mailu/ui/templates/domain/list.html:31
#: mailu/ui/templates/domain/list.html:33
msgid "Details"
msgstr ""
#: mailu/ui/templates/domain/list.html:38
#: mailu/ui/templates/domain/list.html:40
msgid "Users"
msgstr ""
#: mailu/ui/templates/domain/list.html:39
#: mailu/ui/templates/domain/list.html:41
msgid "Aliases"
msgstr ""
#: mailu/ui/templates/domain/list.html:40
#: mailu/ui/templates/domain/list.html:42
msgid "Managers"
msgstr ""
#: mailu/ui/templates/domain/list.html:42
#: mailu/ui/templates/domain/list.html:44
msgid "Alternatives"
msgstr ""
#: mailu/ui/templates/domain/list.html:52 mailu/ui/templates/fetch/list.html:40
#: mailu/ui/templates/fetch/list.html:41
msgid "yes"
msgstr ""
#: mailu/ui/templates/domain/list.html:52 mailu/ui/templates/fetch/list.html:40
#: mailu/ui/templates/fetch/list.html:41
msgid "no"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid ""
"In order to register a new domain, you must first setup the\n"
@@ -621,21 +697,21 @@ msgid "Keep emails"
msgstr ""
#: mailu/ui/templates/fetch/list.html:23
msgid "Last check"
msgid "Rescan emails"
msgstr ""
#: mailu/ui/templates/fetch/list.html:24
msgid "Folders"
msgstr ""
#: mailu/ui/templates/fetch/list.html:25
msgid "Last check"
msgstr ""
#: mailu/ui/templates/fetch/list.html:26
msgid "Status"
msgstr ""
#: mailu/ui/templates/fetch/list.html:38
msgid "yes"
msgstr ""
#: mailu/ui/templates/fetch/list.html:38
msgid "no"
msgstr ""
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr ""
@@ -672,6 +748,10 @@ msgstr ""
msgid "New token"
msgstr ""
#: mailu/ui/templates/token/list.html:20
msgid "ID"
msgstr ""
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr ""
@@ -680,7 +760,7 @@ msgstr ""
msgid "General"
msgstr ""
#: mailu/ui/templates/user/create.html:23
#: mailu/ui/templates/user/create.html:24
msgid "Features and quotas"
msgstr ""
@@ -720,29 +800,11 @@ msgstr ""
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Domain"
msgstr "Domain"
#: mailu/ui/templates/user/signup_domain.html:15
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Available slots"
msgstr ""
#~ msgid "Your account"
#~ msgstr ""
#~ msgid "Spam filter threshold"
#~ msgstr ""
#~ msgid "from"
#~ msgstr ""
#~ msgid "General settings"
#~ msgstr ""
#~ msgid "to access the administration tools"
#~ msgstr ""
#~ msgid "Forward emails"
#~ msgstr ""

View File

@@ -1,14 +1,20 @@
from wtforms import validators, fields, widgets
from wtforms.validators import ValidationError
from wtforms_components import fields as fields_
from flask_babel import lazy_gettext as _
import flask_login
import flask_wtf
import re
import string
import ipaddress
LOCALPART_REGEX = r'^[a-zA-Z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&\'*+/=?^_`{|}~-]+)*$'
def checkStrippable(form, field):
if field.data != field.data.strip(string.whitespace):
raise ValidationError(_('Passwords should not start or end with whitespaces'))
class DestinationField(fields.SelectMultipleField):
""" Allow for multiple emails selection from current user choices and
additional email addresses.
@@ -68,7 +74,7 @@ class DomainForm(flask_wtf.FlaskForm):
class DomainSignupForm(flask_wtf.FlaskForm):
name = fields.StringField(_('Domain name'), [validators.DataRequired()])
localpart = fields.StringField(_('Initial admin'), [validators.DataRequired()])
pw = fields.PasswordField(_('Admin password'), [validators.DataRequired()])
pw = fields.PasswordField(_('Admin password'), [validators.DataRequired(), checkStrippable])
pw2 = fields.PasswordField(_('Confirm password'), [validators.EqualTo('pw')])
pwned = fields.HiddenField(label='', default=-1)
captcha = flask_wtf.RecaptchaField()
@@ -90,7 +96,7 @@ class RelayForm(flask_wtf.FlaskForm):
class UserForm(flask_wtf.FlaskForm):
localpart = fields.StringField(_('E-mail'), [validators.DataRequired(), validators.Regexp(LOCALPART_REGEX)])
pw = fields.PasswordField(_('Password'))
pw2 = fields.PasswordField(_('Confirm password'), [validators.EqualTo('pw')])
pw2 = fields.PasswordField(_('Confirm password'), [checkStrippable, validators.EqualTo('pw')])
pwned = fields.HiddenField(label='', default=-1)
quota_bytes = fields_.IntegerSliderField(_('Quota'), default=10**9)
enable_imap = fields.BooleanField(_('Allow IMAP access'), default=True)
@@ -105,7 +111,7 @@ class UserForm(flask_wtf.FlaskForm):
class UserSignupForm(flask_wtf.FlaskForm):
localpart = fields.StringField(_('Email address'), [validators.DataRequired(), validators.Regexp(LOCALPART_REGEX)])
pw = fields.PasswordField(_('Password'), [validators.DataRequired()])
pw = fields.PasswordField(_('Password'), [validators.DataRequired(), checkStrippable])
pw2 = fields.PasswordField(_('Confirm password'), [validators.EqualTo('pw')])
pwned = fields.HiddenField(label='', default=-1)
submit = fields.SubmitField(_('Sign up'))
@@ -132,7 +138,7 @@ class UserPasswordForm(flask_wtf.FlaskForm):
class UserPasswordChangeForm(flask_wtf.FlaskForm):
current_pw = fields.PasswordField(_('Current password'), [validators.DataRequired()])
pw = fields.PasswordField(_('Password'), [validators.DataRequired()])
pw = fields.PasswordField(_('Password'), [validators.DataRequired(), checkStrippable])
pw2 = fields.PasswordField(_('Password check'), [validators.DataRequired()])
pwned = fields.HiddenField(label='', default=-1)
submit = fields.SubmitField(_('Update password'))

View File

@@ -63,4 +63,36 @@
</pre></td>
</tr>
{%- endcall %}
{%- for alternative in domain.alternatives %}
{%- call macros.table(datatable=False) %}
<tr>
<th>{% trans %}Alternative Domain name{% endtrans %}</th>
<td>{{ alternative.name }}</td>
</tr>
<tr>
<th>{% trans %}DNS MX entry{% endtrans %} <i class="fa {{ 'fa-check-circle text-success' if alternative.check_mx() else 'fa-exclamation-circle text-danger' }}"></i></th>
<td>{{ macros.clip("dns_mx") }}<pre id="dns_mx" class="pre-config border bg-light">{{ alternative.dns_mx }}</pre></td>
</tr>
<tr>
<th>{% trans %}DNS SPF entries{% endtrans %}</th>
<td>{{ macros.clip("dns_spf") }}<pre id="dns_spf" class="pre-config border bg-light">{{ alternative.dns_spf }}</pre>
</td>
</tr>
{%- if alternative.domain.dkim_publickey %}
<tr>
<th>{% trans %}DNS DKIM entry{% endtrans %}</th>
<td>{{ macros.clip("dns_dkim") }}<pre id="dns_dkim" class="pre-config border bg-light">{{ alternative.dns_dkim }}</pre></td>
</tr>
<tr>
<th>{% trans %}DNS DMARC entry{% endtrans %}</th>
<td>
{{ macros.clip("dns_dmarc") }}<pre id="dns_dmarc" class="pre-config border bg-light">{{ alternative.dns_dmarc }}</pre>
{{ macros.clip("dns_dmarc_report") }}<pre id="dns_dmarc_report" class="pre-config border bg-light">{{ alternative.dns_dmarc_report }}</pre>
</td>
</tr>
{%- endif %}
{%- endcall %}
{%- endfor %}
{%- endblock %}

View File

@@ -1,37 +1,53 @@
# Translations template for PROJECT.
# Copyright (C) 2022 ORGANIZATION
# Copyright (C) 2024 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-05-22 18:47+0200\n"
"POT-Creation-Date: 2024-06-20 12:30+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
"Generated-By: Babel 2.15.0\n"
#: mailu/sso/forms.py:8 mailu/ui/forms.py:79
#: mailu/sso/forms.py:8 mailu/ui/forms.py:91
msgid "E-mail"
msgstr ""
#: mailu/sso/forms.py:9 mailu/ui/forms.py:80 mailu/ui/forms.py:93
#: mailu/ui/forms.py:112 mailu/ui/forms.py:166
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:57
#: mailu/sso/forms.py:9 mailu/ui/forms.py:92 mailu/ui/forms.py:108
#: mailu/ui/forms.py:128 mailu/ui/forms.py:135 mailu/ui/forms.py:197
#: mailu/ui/templates/client.html:31 mailu/ui/templates/client.html:56
msgid "Password"
msgstr ""
#: mailu/sso/forms.py:10 mailu/sso/forms.py:11 mailu/sso/templates/login.html:4
#: mailu/ui/templates/sidebar.html:142
#: mailu/sso/forms.py:11 mailu/sso/forms.py:12 mailu/sso/templates/login.html:4
#: mailu/sso/templates/sidebar_sso.html:42 mailu/ui/templates/sidebar.html:144
msgid "Sign in"
msgstr ""
#: mailu/sso/forms.py:15 mailu/ui/forms.py:134
msgid "Current password"
msgstr ""
#: mailu/sso/forms.py:16
msgid "New password"
msgstr ""
#: mailu/sso/forms.py:17
msgid "New password (again)"
msgstr ""
#: mailu/sso/forms.py:19
msgid "Change password"
msgstr ""
#: mailu/sso/templates/base_sso.html:8 mailu/ui/templates/base.html:8
msgid "Admin page for"
msgstr ""
@@ -44,255 +60,301 @@ msgstr ""
msgid "change language"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:4 mailu/ui/templates/sidebar.html:94
#: mailu/sso/templates/sidebar_sso.html:4 mailu/ui/templates/sidebar.html:96
msgid "Go to"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:9 mailu/ui/templates/client.html:4
#: mailu/ui/templates/sidebar.html:50 mailu/ui/templates/sidebar.html:107
#: mailu/ui/templates/sidebar.html:52 mailu/ui/templates/sidebar.html:109
msgid "Client setup"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:16 mailu/ui/templates/sidebar.html:114
#: mailu/sso/templates/sidebar_sso.html:16 mailu/ui/templates/sidebar.html:116
msgid "Website"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:22 mailu/ui/templates/sidebar.html:120
#: mailu/sso/templates/sidebar_sso.html:22 mailu/ui/templates/sidebar.html:122
msgid "Help"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:35
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:127
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:129
msgid "Register a domain"
msgstr ""
#: mailu/sso/templates/sidebar_sso.html:49 mailu/ui/forms.py:95
#: mailu/ui/templates/sidebar.html:149 mailu/ui/templates/user/signup.html:4
#: mailu/sso/templates/sidebar_sso.html:55 mailu/ui/forms.py:111
#: mailu/ui/templates/sidebar.html:151 mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:33 mailu/ui/forms.py:36
#: mailu/sso/views/base.py:48
msgid "Too many attempts from your IP (rate-limit)"
msgstr ""
#: mailu/sso/views/base.py:51
msgid "Too many attempts for this user (rate-limit)"
msgstr ""
#: mailu/sso/views/base.py:69
msgid "Wrong e-mail or password"
msgstr ""
#: mailu/sso/views/base.py:85
msgid "The new password can't be the same as the old password"
msgstr ""
#: mailu/sso/views/base.py:88
msgid "The new passwords don't match"
msgstr ""
#: mailu/sso/views/base.py:100
msgid "The current password is incorrect!"
msgstr ""
#: mailu/ui/forms.py:34 mailu/ui/forms.py:37
msgid "Invalid email address."
msgstr ""
#: mailu/ui/forms.py:45
#: mailu/ui/forms.py:47
msgid "Invalid list of folders."
msgstr ""
#: mailu/ui/forms.py:56
msgid "Confirm"
msgstr ""
#: mailu/ui/forms.py:48 mailu/ui/forms.py:58
#: mailu/ui/forms.py:59 mailu/ui/forms.py:69
#: mailu/ui/templates/domain/details.html:26
#: mailu/ui/templates/domain/list.html:19 mailu/ui/templates/relay/list.html:18
msgid "Domain name"
msgstr ""
#: mailu/ui/forms.py:49
#: mailu/ui/forms.py:60
msgid "Maximum user count"
msgstr ""
#: mailu/ui/forms.py:50
#: mailu/ui/forms.py:61
msgid "Maximum alias count"
msgstr ""
#: mailu/ui/forms.py:51
#: mailu/ui/forms.py:62
msgid "Maximum user quota"
msgstr ""
#: mailu/ui/forms.py:52
#: mailu/ui/forms.py:63 mailu/ui/templates/domain/list.html:24
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:53 mailu/ui/forms.py:74 mailu/ui/forms.py:86
#: mailu/ui/forms.py:132 mailu/ui/forms.py:144
#: mailu/ui/templates/alias/list.html:22 mailu/ui/templates/domain/list.html:22
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:20
#: mailu/ui/forms.py:64 mailu/ui/forms.py:86 mailu/ui/forms.py:100
#: mailu/ui/forms.py:155 mailu/ui/forms.py:175
#: mailu/ui/templates/alias/list.html:22 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Comment"
msgstr ""
#: mailu/ui/forms.py:54 mailu/ui/forms.py:68 mailu/ui/forms.py:75
#: mailu/ui/forms.py:88 mailu/ui/forms.py:136 mailu/ui/forms.py:145
#: mailu/ui/forms.py:65 mailu/ui/forms.py:80 mailu/ui/forms.py:87
#: mailu/ui/forms.py:103 mailu/ui/forms.py:159 mailu/ui/forms.py:176
msgid "Save"
msgstr ""
#: mailu/ui/forms.py:59
#: mailu/ui/forms.py:70
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:60
#: mailu/ui/forms.py:71
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:61 mailu/ui/forms.py:81 mailu/ui/forms.py:94
#: mailu/ui/forms.py:72 mailu/ui/forms.py:93 mailu/ui/forms.py:109
msgid "Confirm password"
msgstr ""
#: mailu/ui/forms.py:63
#: mailu/ui/forms.py:75
msgid "Create"
msgstr ""
#: mailu/ui/forms.py:67
#: mailu/ui/forms.py:79
msgid "Alternative name"
msgstr ""
#: mailu/ui/forms.py:72
#: mailu/ui/forms.py:84
msgid "Relayed domain name"
msgstr ""
#: mailu/ui/forms.py:73 mailu/ui/templates/relay/list.html:19
#: mailu/ui/forms.py:85 mailu/ui/templates/relay/list.html:19
msgid "Remote host"
msgstr ""
#: mailu/ui/forms.py:82 mailu/ui/templates/user/list.html:23
#: mailu/ui/templates/user/signup_domain.html:16
#: mailu/ui/forms.py:95 mailu/ui/templates/domain/list.html:22
#: mailu/ui/templates/user/list.html:23
#: mailu/ui/templates/user/signup_domain.html:17
msgid "Quota"
msgstr ""
#: mailu/ui/forms.py:83
#: mailu/ui/forms.py:96
msgid "Allow IMAP access"
msgstr ""
#: mailu/ui/forms.py:84
#: mailu/ui/forms.py:97
msgid "Allow POP3 access"
msgstr ""
#: mailu/ui/forms.py:85 mailu/ui/forms.py:101
#: mailu/ui/forms.py:98
msgid "Allow the user to spoof the sender (send email as anyone)"
msgstr ""
#: mailu/ui/forms.py:99 mailu/ui/forms.py:117
#: mailu/ui/templates/user/settings.html:15
msgid "Displayed name"
msgstr ""
#: mailu/ui/forms.py:87
#: mailu/ui/forms.py:101
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:92
#: mailu/ui/forms.py:102
msgid "Force password change at next login"
msgstr ""
#: mailu/ui/forms.py:107
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:102
#: mailu/ui/forms.py:118
msgid "Enable spam filter"
msgstr ""
#: mailu/ui/forms.py:103
#: mailu/ui/forms.py:119
msgid "Enable marking spam mails as read"
msgstr ""
#: mailu/ui/forms.py:104
#: mailu/ui/forms.py:120
msgid "Spam filter tolerance"
msgstr ""
#: mailu/ui/forms.py:105
#: mailu/ui/forms.py:121
msgid "Enable forwarding"
msgstr ""
#: mailu/ui/forms.py:106
#: mailu/ui/forms.py:122
msgid "Keep a copy of the emails"
msgstr ""
#: mailu/ui/forms.py:107 mailu/ui/forms.py:143
#: mailu/ui/forms.py:123 mailu/ui/forms.py:174
#: mailu/ui/templates/alias/list.html:21
msgid "Destination"
msgstr ""
#: mailu/ui/forms.py:108
#: mailu/ui/forms.py:124
msgid "Save settings"
msgstr ""
#: mailu/ui/forms.py:113
#: mailu/ui/forms.py:129 mailu/ui/forms.py:136
msgid "Password check"
msgstr ""
#: mailu/ui/forms.py:114 mailu/ui/templates/sidebar.html:25
#: mailu/ui/forms.py:131 mailu/ui/forms.py:138
#: mailu/ui/templates/sidebar.html:25
msgid "Update password"
msgstr ""
#: mailu/ui/forms.py:118
#: mailu/ui/forms.py:141
msgid "Enable automatic reply"
msgstr ""
#: mailu/ui/forms.py:119
#: mailu/ui/forms.py:142
msgid "Reply subject"
msgstr ""
#: mailu/ui/forms.py:120
#: mailu/ui/forms.py:143
msgid "Reply body"
msgstr ""
#: mailu/ui/forms.py:122
#: mailu/ui/forms.py:145
msgid "Start of vacation"
msgstr ""
#: mailu/ui/forms.py:123
#: mailu/ui/forms.py:146
msgid "End of vacation"
msgstr ""
#: mailu/ui/forms.py:124
#: mailu/ui/forms.py:147
msgid "Update"
msgstr ""
#: mailu/ui/forms.py:129
#: mailu/ui/forms.py:152
msgid "Your token (write it down, as it will never be displayed again)"
msgstr ""
#: mailu/ui/forms.py:134 mailu/ui/templates/token/list.html:21
#: mailu/ui/forms.py:157 mailu/ui/templates/token/list.html:22
msgid "Authorized IP"
msgstr ""
#: mailu/ui/forms.py:140
#: mailu/ui/forms.py:171
msgid "Alias"
msgstr ""
#: mailu/ui/forms.py:142
#: mailu/ui/forms.py:173
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr ""
#: mailu/ui/forms.py:149
#: mailu/ui/forms.py:180
msgid "Admin email"
msgstr ""
#: mailu/ui/forms.py:150 mailu/ui/forms.py:155 mailu/ui/forms.py:168
#: mailu/ui/forms.py:181 mailu/ui/forms.py:186 mailu/ui/forms.py:201
msgid "Submit"
msgstr ""
#: mailu/ui/forms.py:154
#: mailu/ui/forms.py:185
msgid "Manager email"
msgstr ""
#: mailu/ui/forms.py:159
#: mailu/ui/forms.py:190
msgid "Protocol"
msgstr ""
#: mailu/ui/forms.py:162
#: mailu/ui/forms.py:193
msgid "Hostname or IP"
msgstr ""
#: mailu/ui/forms.py:163 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:45
#: mailu/ui/forms.py:194 mailu/ui/templates/client.html:19
#: mailu/ui/templates/client.html:44
msgid "TCP port"
msgstr ""
#: mailu/ui/forms.py:164
#: mailu/ui/forms.py:195
msgid "Enable TLS"
msgstr ""
#: mailu/ui/forms.py:165 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:53 mailu/ui/templates/fetch/list.html:21
#: mailu/ui/forms.py:196 mailu/ui/templates/client.html:27
#: mailu/ui/templates/client.html:52 mailu/ui/templates/fetch/list.html:21
msgid "Username"
msgstr ""
#: mailu/ui/forms.py:167
#: mailu/ui/forms.py:198
msgid "Keep emails on the server"
msgstr ""
#: mailu/ui/forms.py:172
#: mailu/ui/forms.py:199
msgid "Rescan emails locally"
msgstr ""
#: mailu/ui/forms.py:200
msgid "Folders to fetch on the server"
msgstr ""
#: mailu/ui/forms.py:205
msgid "Announcement subject"
msgstr ""
#: mailu/ui/forms.py:174
#: mailu/ui/forms.py:207
msgid "Announcement body"
msgstr ""
#: mailu/ui/forms.py:176
#: mailu/ui/forms.py:209
msgid "Send"
msgstr ""
@@ -300,7 +362,7 @@ msgstr ""
msgid "Public announcement"
msgstr ""
#: mailu/ui/templates/antispam.html:4 mailu/ui/templates/sidebar.html:80
#: mailu/ui/templates/antispam.html:4 mailu/ui/templates/sidebar.html:82
#: mailu/ui/templates/user/settings.html:19
msgid "Antispam"
msgstr ""
@@ -313,22 +375,30 @@ msgstr ""
msgid "configure your email client"
msgstr ""
#: mailu/ui/templates/client.html:13
#: mailu/ui/templates/client.html:12
msgid "Incoming mail"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:41
#: mailu/ui/templates/client.html:15 mailu/ui/templates/client.html:40
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:49
#: mailu/ui/templates/client.html:23 mailu/ui/templates/client.html:48
msgid "Server name"
msgstr ""
#: mailu/ui/templates/client.html:38
#: mailu/ui/templates/client.html:37
msgid "Outgoing mail"
msgstr ""
#: mailu/ui/templates/client.html:62
msgid "If you use an Apple device,"
msgstr ""
#: mailu/ui/templates/client.html:63
msgid "click here to auto-configure it."
msgstr ""
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr ""
@@ -346,7 +416,7 @@ msgstr ""
msgid "An error occurred while talking to the Docker server."
msgstr ""
#: mailu/ui/templates/macros.html:129
#: mailu/ui/templates/macros.html:128
msgid "copy to clipboard"
msgstr ""
@@ -354,48 +424,48 @@ msgstr ""
msgid "My account"
msgstr ""
#: mailu/ui/templates/sidebar.html:19 mailu/ui/templates/user/list.html:37
#: mailu/ui/templates/sidebar.html:19 mailu/ui/templates/user/list.html:36
msgid "Settings"
msgstr ""
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/user/list.html:38
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/user/list.html:37
msgid "Auto-reply"
msgstr ""
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:37
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:38
#: mailu/ui/templates/user/list.html:39
msgid "Fetched accounts"
msgstr ""
#: mailu/ui/templates/sidebar.html:43 mailu/ui/templates/token/list.html:4
#: mailu/ui/templates/sidebar.html:45 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr ""
#: mailu/ui/templates/sidebar.html:56
#: mailu/ui/templates/sidebar.html:58
msgid "Administration"
msgstr ""
#: mailu/ui/templates/sidebar.html:62
#: mailu/ui/templates/sidebar.html:64
msgid "Announcement"
msgstr ""
#: mailu/ui/templates/sidebar.html:68
#: mailu/ui/templates/sidebar.html:70
msgid "Administrators"
msgstr ""
#: mailu/ui/templates/sidebar.html:74
#: mailu/ui/templates/sidebar.html:76
msgid "Relayed domains"
msgstr ""
#: mailu/ui/templates/sidebar.html:88
#: mailu/ui/templates/sidebar.html:90
msgid "Mail domains"
msgstr ""
#: mailu/ui/templates/sidebar.html:99
#: mailu/ui/templates/sidebar.html:101
msgid "Webmail"
msgstr ""
#: mailu/ui/templates/sidebar.html:135
#: mailu/ui/templates/sidebar.html:137
msgid "Sign out"
msgstr ""
@@ -429,12 +499,18 @@ msgstr ""
msgid "Email"
msgstr ""
#: mailu/ui/templates/admin/list.html:25 mailu/ui/templates/alias/list.html:32
#: mailu/ui/templates/alternative/list.html:29
#: mailu/ui/templates/domain/list.html:34 mailu/ui/templates/fetch/list.html:34
#: mailu/ui/templates/admin/list.html:25 mailu/ui/templates/alias/list.html:31
#: mailu/ui/templates/domain/list.html:35 mailu/ui/templates/fetch/list.html:35
#: mailu/ui/templates/manager/list.html:27
#: mailu/ui/templates/relay/list.html:30 mailu/ui/templates/token/list.html:30
#: mailu/ui/templates/user/list.html:34
#: mailu/ui/templates/relay/list.html:29 mailu/ui/templates/user/list.html:33
msgid "Edit"
msgstr ""
#: mailu/ui/templates/admin/list.html:26 mailu/ui/templates/alias/list.html:32
#: mailu/ui/templates/alternative/list.html:29
#: mailu/ui/templates/domain/list.html:36 mailu/ui/templates/fetch/list.html:36
#: mailu/ui/templates/manager/list.html:28
#: mailu/ui/templates/relay/list.html:30 mailu/ui/templates/token/list.html:31
msgid "Delete"
msgstr ""
@@ -456,26 +532,20 @@ msgstr ""
#: mailu/ui/templates/alias/list.html:23
#: mailu/ui/templates/alternative/list.html:21
#: mailu/ui/templates/domain/list.html:23 mailu/ui/templates/fetch/list.html:25
#: mailu/ui/templates/relay/list.html:21 mailu/ui/templates/token/list.html:22
#: mailu/ui/templates/domain/list.html:25 mailu/ui/templates/fetch/list.html:27
#: mailu/ui/templates/relay/list.html:21 mailu/ui/templates/token/list.html:23
#: mailu/ui/templates/user/list.html:25
msgid "Created"
msgstr ""
#: mailu/ui/templates/alias/list.html:24
#: mailu/ui/templates/alternative/list.html:22
#: mailu/ui/templates/domain/list.html:24 mailu/ui/templates/fetch/list.html:26
#: mailu/ui/templates/relay/list.html:22 mailu/ui/templates/token/list.html:23
#: mailu/ui/templates/domain/list.html:26 mailu/ui/templates/fetch/list.html:28
#: mailu/ui/templates/relay/list.html:22 mailu/ui/templates/token/list.html:24
#: mailu/ui/templates/user/list.html:26
msgid "Last edit"
msgstr ""
#: mailu/ui/templates/alias/list.html:31 mailu/ui/templates/domain/list.html:33
#: mailu/ui/templates/fetch/list.html:33 mailu/ui/templates/relay/list.html:29
#: mailu/ui/templates/user/list.html:33
msgid "Edit"
msgstr ""
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr ""
@@ -509,6 +579,10 @@ msgstr ""
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/details.html:19
msgid "Download zonefile"
msgstr ""
#: mailu/ui/templates/domain/details.html:30
msgid "DNS MX entry"
msgstr ""
@@ -518,22 +592,18 @@ msgid "DNS SPF entries"
msgstr ""
#: mailu/ui/templates/domain/details.html:40
msgid "DKIM public key"
msgstr ""
#: mailu/ui/templates/domain/details.html:44
msgid "DNS DKIM entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:48
#: mailu/ui/templates/domain/details.html:44
msgid "DNS DMARC entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:58
#: mailu/ui/templates/domain/details.html:53
msgid "DNS TLSA entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:63
#: mailu/ui/templates/domain/details.html:58
msgid "DNS client auto-configuration entries"
msgstr ""
@@ -557,26 +627,36 @@ msgstr ""
msgid "Alias count"
msgstr ""
#: mailu/ui/templates/domain/list.html:31
#: mailu/ui/templates/domain/list.html:33
msgid "Details"
msgstr ""
#: mailu/ui/templates/domain/list.html:38
#: mailu/ui/templates/domain/list.html:40
msgid "Users"
msgstr ""
#: mailu/ui/templates/domain/list.html:39
#: mailu/ui/templates/domain/list.html:41
msgid "Aliases"
msgstr ""
#: mailu/ui/templates/domain/list.html:40
#: mailu/ui/templates/domain/list.html:42
msgid "Managers"
msgstr ""
#: mailu/ui/templates/domain/list.html:42
#: mailu/ui/templates/domain/list.html:44
msgid "Alternatives"
msgstr ""
#: mailu/ui/templates/domain/list.html:52 mailu/ui/templates/fetch/list.html:40
#: mailu/ui/templates/fetch/list.html:41
msgid "yes"
msgstr ""
#: mailu/ui/templates/domain/list.html:52 mailu/ui/templates/fetch/list.html:40
#: mailu/ui/templates/fetch/list.html:41
msgid "no"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid ""
"In order to register a new domain, you must first setup the\n"
@@ -615,21 +695,21 @@ msgid "Keep emails"
msgstr ""
#: mailu/ui/templates/fetch/list.html:23
msgid "Last check"
msgid "Rescan emails"
msgstr ""
#: mailu/ui/templates/fetch/list.html:24
msgid "Folders"
msgstr ""
#: mailu/ui/templates/fetch/list.html:25
msgid "Last check"
msgstr ""
#: mailu/ui/templates/fetch/list.html:26
msgid "Status"
msgstr ""
#: mailu/ui/templates/fetch/list.html:38
msgid "yes"
msgstr ""
#: mailu/ui/templates/fetch/list.html:38
msgid "no"
msgstr ""
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr ""
@@ -666,6 +746,10 @@ msgstr ""
msgid "New token"
msgstr ""
#: mailu/ui/templates/token/list.html:20
msgid "ID"
msgstr ""
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr ""
@@ -674,7 +758,7 @@ msgstr ""
msgid "General"
msgstr ""
#: mailu/ui/templates/user/create.html:23
#: mailu/ui/templates/user/create.html:24
msgid "Features and quotas"
msgstr ""
@@ -714,11 +798,11 @@ msgstr ""
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Available slots"
msgstr ""

View File

@@ -3,7 +3,7 @@
# base system image (intermediate)
# Note when updating the alpine tag, first manually run the workflow .github/workflows/mirror.yml.
# Just run the workflow with the tag that must be synchronised.
ARG DISTRO=ghcr.io/mailu/alpine:3.20.3
ARG DISTRO=ghcr.io/mailu/alpine:3.21.0
FROM $DISTRO as system
ENV TZ=Etc/UTC LANG=C.UTF-8
@@ -15,7 +15,7 @@ RUN set -euxo pipefail \
; addgroup -Sg ${MAILU_GID} mailu \
; adduser -Sg ${MAILU_UID} -G mailu -h /app -g "mailu app" -s /bin/bash mailu \
; apk add --no-cache bash ca-certificates curl python3 tzdata \
; ! [[ "$(uname -m)" == x86_64 ]] \
; ! [[ "$(apk --print-arch)" == x86_64 ]] \
|| apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing hardened-malloc
WORKDIR /app
@@ -27,7 +27,7 @@ CMD /bin/bash
FROM system as build
ARG MAILU_DEPS=prod
ARG SNUFFLEUPAGUS_VERSION=0.10.0
ARG SNUFFLEUPAGUS_VERSION=0.11.0
ENV VIRTUAL_ENV=/app/venv
@@ -52,10 +52,10 @@ ENV \
SNUFFLEUPAGUS_URL="https://github.com/jvoisin/snuffleupagus/archive/refs/tags/v${SNUFFLEUPAGUS_VERSION}.tar.gz"
RUN set -euxo pipefail \
; machine="$(uname -m)" \
; deps="build-base gcc libffi-dev python3-dev" \
; machine="$(apk --print-arch)" \
; deps="build-base gcc libffi-dev python3-dev mariadb-dev" \
; [[ "${machine}" != x86_64 ]] && \
deps="${deps} cargo git libretls-dev mariadb-connector-c-dev postgresql-dev" \
deps="${deps} rust cargo git libretls-dev mariadb-connector-c-dev postgresql-dev" \
; apk add --virtual .build-deps ${deps} \
; [[ "${machine}" == armv7* ]] && \
mkdir -p /root/.cargo/registry/index && \

View File

@@ -57,6 +57,11 @@ class LogFilter(object):
self.stream.flush()
def _is_compatible_with_hardened_malloc():
with open('/proc/version', 'r') as f:
major, minor = f.readline().split()[2].split('.')[:2]
if int(major) < 6 or int(major) == 6 and int(minor) < 1:
return False
with open('/proc/cpuinfo', 'r') as f:
lines = f.readlines()
for line in lines:
@@ -81,9 +86,13 @@ def set_env(required_secrets=[], log_filters=[]):
log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", 'WARNING'))
signal.signal(signal.SIGTERM, sigterm_handler)
if not 'LD_PRELOAD' in os.environ and _is_compatible_with_hardened_malloc():
log.warning('Your CPU has Advanced Vector Extensions available, we recommend you enable hardened-malloc earlier in the boot process by adding LD_PRELOAD=/usr/lib/libhardened_malloc.so to your mailu.env')
os.environ['LD_PRELOAD'] = '/usr/lib/libhardened_malloc.so'
if _is_compatible_with_hardened_malloc():
if not 'LD_PRELOAD' in os.environ and _is_compatible_with_hardened_malloc():
log.warning('Your CPU has Advanced Vector Extensions available, we recommend you enable hardened-malloc earlier in the boot process by adding LD_PRELOAD=/usr/lib/libhardened_malloc.so to your mailu.env')
os.environ['LD_PRELOAD'] = '/usr/lib/libhardened_malloc.so'
with open('/proc/sys/vm/max_map_count', 'r') as f:
if int(f.readline()) < 1048576:
log.warning('Please consider increasing vm.max_map_count to 1048576 as per https://github.com/GrapheneOS/hardened_malloc?tab=readme-ov-file#traditional-linux-based-operating-systems')
""" This will set all the environment variables and retains only the secrets we need """
if 'SECRET_KEY_FILE' in os.environ:

View File

@@ -22,6 +22,7 @@ gunicorn
idna
itsdangerous
limits
mariadb
marshmallow
marshmallow-sqlalchemy
mysql-connector-python
@@ -45,6 +46,7 @@ watchdog
# core/postfix
postfix-mta-sts-resolver
uvloop
# core/oletools
python-magic

View File

@@ -42,6 +42,7 @@ jsonschema==4.22.0
jsonschema-specifications==2023.12.1
limits==3.11.0
Mako==1.3.3
mariadb==1.1.11
MarkupSafe==2.1.5
marshmallow==3.21.2
marshmallow-sqlalchemy==1.0.0
@@ -79,6 +80,7 @@ tabulate==0.9.0
tenacity==8.2.3
typing_extensions==4.11.0
urllib3==2.2.2
uvloop==0.21.0
validators==0.28.1
visitor==0.1.3
vobject==0.9.7

View File

@@ -17,8 +17,7 @@ ARG VERSION
LABEL version=$VERSION
RUN set -euxo pipefail \
; apk add --no-cache certbot nginx nginx-mod-http-brotli nginx-mod-mail openssl \
; apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main dovecot-lua dovecot-pigeonhole-plugin 'dovecot-lmtpd<2.4' dovecot-pop3d dovecot-submissiond
; apk add --no-cache certbot nginx nginx-mod-http-brotli nginx-mod-mail openssl dovecot-lua dovecot-pigeonhole-plugin 'dovecot-lmtpd<2.4' dovecot-pop3d dovecot-submissiond
COPY conf/ /conf/
COPY --from=static /static/ /static/

View File

@@ -221,7 +221,7 @@ The minimum length is 3 characters.
This token must be passed as request header to the API as authentication token.
This is a mandatory setting for using the RESTful API.
The ``CREDENTIAL_ROUNDS`` (default: 12) setting is the number of rounds used by the
The ``CREDENTIAL_ROUNDS`` (default: 13) setting is the number of rounds used by the
password hashing scheme. The number of rounds can be reduced in case faster
authentication is needed or increased when additional protection is desired.
Keep in mind that this is a mitigation against offline attacks on password hashes,

View File

@@ -986,3 +986,32 @@ Below are the steps for writing the postfix (mail) logs to a log file on the fil
if [ -d /run/systemd/system ]; then
systemctl kill -s HUP rsyslog.service
fi
Admin container fails to connect to external MariaDB database
`````````````````````````````````````````````````````````````
If the admin container is `unable to connect to an external MariaDB database due to incompatible collation`_, you may need to change the ``SQLALCHEMY_DATABASE_URI`` setting to ensure the right connector is used.
Alternatively, you may set ``DB_APPENDIX`` accordingly. For example: ``?collation=utf8mb4_unicode_ci`` is appended as is just after the database name in case DB_TYPE and related values are set.
MariaDB has no support for utf8mb4_0900_ai_ci which is the new default since MySQL version 8.0.
.. _`unable to connect to an external MariaDB database due to incompatible collation`: https://github.com/Mailu/Mailu/issues/3449
Why is Rspamd giving me an "Illegal instruction" error ?
`````````````````````````````````````````````````````````
On Linux amd64 (x84_64), if the antispam container is crashing and gives you an ``Illegal instruction`` error, you may have a CPU that lacks support of the ``SSE4.2`` instruction set.
The more modern and FOSS ``vectorscan`` library used by rspamd superseeded the now closed source Intel ``hyperscan`` library in Alpine Linux, and since August 2024 it requires the ``SSE4.2`` instruction set to work properly.
Pre-2013 Intel Atom CPUs (Like N2800 or D425), Intel pre-Nehalem architectures and AMD pre-Bulldozer architectures do not support ``SSE4.2``.
To check if your CPU supports ``SSE4.2`` you can use this one liner command:
``if grep -q sse4_2 /proc/cpuinfo; then echo "CPU is SSE4.2 Capable"; else echo "CPU is NOT SSE4.2 capable"; fi``
A workaround to this issue is to use a x86_32 (or i686) version of rspamd, because the ``vectorscan`` library is only used on 64-bit capable systems.
Note that this may stop working in the future, as 32-bit software support is being progressively dropped.
*Issue reference:* `3713`_.
.. _`3713`: https://github.com/Mailu/Mailu/issues/3713

View File

@@ -7,10 +7,31 @@ other Web services are available on other FQDNs served from the same IP address.
In such a configuration, one would usually run a front-end reverse proxy to serve all
Web contents based on criteria like the requested hostname (virtual hosts).
The Mailu team recommends to use Traefik as reverse proxy. This program is solely designed
to act as reverse proxy. It is easy to configure and offers a streamlined experienced when
used with other docker containers on the same host.
When using a reverse proxy, Mailu should still be used for requesting certificates.
This prevents duplicate certificates.
Other reasons are:
- Mailu controls the ciphers and keys used for certificates (Mailu has both RSA and ECDSA certs)
- Mailu cerbot client is configured to prevent hitting ratelimits of the CA
- Due to usage of proxy protocol it is less likely that Mailu becomes an open relay due to misconfiguration of special headers.
- No special scripting is required to copy over certs from the proxy to Mailu
When using Mailu with Traefik as reverse proxy. Traefik is configured to use proxy protocol for all ports, but port 80.
Port 80 is configured to let through the letsencrypt HTTP challenges for Mailu.
This means that if Traefik must request certificates for other services than Mailu, Traefik should use the TLS (TLS-ALPN-01)
challenge method. The HTTP challenge (HTTP-01) cannot be used since this is already used by Mailu.
.. _traefik_proxy:
Traefik as reverse proxy
------------------------
Traefik as reverse proxy (same host)
------------------------------------
This example is for when Traefik (reverse proxy) runs on the same host as Mailu.
It makes use of the docker configuration method for Traefik.
In your docker-compose.yml, remove the `ports` section of the `front` container
and add a section like follows:
@@ -102,7 +123,7 @@ and then add the following to the front section:
in mailu.env:
.. code-block:: docker
.. code-block:: bash
REAL_IP_FROM=192.168.203.0/24
PROXY_PROTOCOL=25,443,465,993,995,4190
@@ -111,3 +132,164 @@ in mailu.env:
WEBROOT_REDIRECT=/sso/login
Using the above configuration, Traefik will proxy all the traffic related to Mailu's FQDNs without requiring duplicate certificates.
Traefik as reverse proxy (different host)
-----------------------------------------
This example is for when Traefik (reverse proxy) runs on a different server than the Mailu server.
This example makes use of the File configuration method (File Provider) of Traefik.
It makes use of a single static configuration file and one or more dynamic configuration files.
This example uses V3 of Traefik. V2 and V3 of Traefik have some differences in the configuration method.
The contents for the static configuration file. The static configuration file must be provided as argument to Traefik.
.. code-block:: yaml
#STATIC CONFIGURATION FILE
#Below value for 'directory' is the location where the dynamic configuration files reside:
#When a change is made in this folder, Traefik automatically loads or reloads it.
providers:
file:
directory: "/etc/traefik/conf"
entryPoints:
web:
address: :80
websecure:
address: :443
mailu-smtp:
address: :25
mailu-imaps:
address: :993
mailu-pop3s:
address: :995
mailu-submissions:
address: :465
mailu-sieve:
address: :4190
#Optional, enables access logging at:
accessLog:
filePath: "/var/log/traefik_access.log"
#Optional, enables normal logging at:
log:
level: INFO
filePath: "/var/log/traefik.log"
This is the contents for the dynamic configuration. You can use any filename you want.
The extension must end with .yml and the file must be placed in the configured directory for
dynamic configuration files.
.. code-block:: yaml
http:
routers:
mailu-web:
entryPoints:
- web
rule: "Host(`mail.example.com) || PathPrefix(`/.well-known/acme-challenge/`))"
service: "mailu-web"
services:
mailu-web:
loadBalancer:
servers:
- url: "http://mailu-server"
tcp:
routers:
mailu-websecure:
entryPoints:
- websecure
# Add other FQDN's here
rule: "HostSNI(`mail.example.com`) || HostSNI(`autoconfig.example.com`) || HostSNI(`mta-sts.example.com`)"
service: "mailu-websecure"
tls:
passthrough: true
mailu-submissions:
entryPoints:
- mailu-submissions
rule: "HostSNI(`*`)"
service: "mailu-submissions"
mailu-imaps:
entryPoints:
- mailu-imaps
rule: "HostSNI(`*`)"
service: "mailu-imaps"
tls:
passthrough: true
mailu-pop3s:
entryPoints:
- mailu-pop3s
rule: "HostSNI(`*`)"
service: "mailu-pop3s"
tls:
passthrough: true
mailu-submissions:
entryPoints:
- mailu-submissions
rule: "HostSNI(`*`)"
service: "mailu-submissions"
tls:
passthrough: true
mailu-sieve:
entryPoints:
- mailu-sieve
rule: "HostSNI(`*`)"
service: "mailu-sieve"
services:
mailu-websecure:
loadBalancer:
proxyProtocol:
version: 2
servers:
- address: "mailu-server:443"
mailu-smtp:
loadBalancer:
proxyProtocol:
version: 2
servers:
- address: "mailu-server:25"
mailu-submissions:
loadBalancer:
proxyProtocol:
version: 2
servers:
- address: "mailu-server:465"
mailu-imaps:
loadBalancer:
proxyProtocol:
version: 2
servers:
- address: "mailu-server:993"
mailu-pop3s:
loadBalancer:
proxyProtocol:
version: 2
servers:
- address: "mailu-server:995"
mailu-sieve:
loadBalancer:
proxyProtocol:
version: 2
servers:
- address: "mailu-server:4190"
In the mailu.env file add the following:
.. code-block:: bash
#Add the IP address of the Traefik server as value for REAL_IP_FROM
REAL_IP_FROM=192.168.2.300/32
PROXY_PROTOCOL=25,443,465,993,995,4190
TLS_FLAVOR=letsencrypt
WEBROOT_REDIRECT=/sso/login
Using the above configuration, Traefik will proxy all the traffic related to Mailu's FQDNs without requiring duplicate certificates.

View File

@@ -22,6 +22,9 @@ linux/arm64v8 or linux/armv7 hardware, so it
should run on pretty much any cloud server as long as enough power is
provided.
On x86_64, check that your processor supports the ``SSE4.2`` instruction set.
For example, pre-2013 Intel Atom CPUs lacks ``SSE4.2`` support. See :ref:`faq`.
You should also have at least a DNS hostname and a DNS name for receiving
emails. Some instructions are provided on the matter in the article
:ref:`dns_setup`.

View File

@@ -217,7 +217,7 @@ services:
# Optional services
{% if antivirus_enabled %}
antivirus:
image: clamav/clamav-debian:1.2.3-45
image: clamav/clamav-debian:1.4
restart: always
logging:
driver: journald
@@ -226,13 +226,7 @@ services:
networks:
- clamav
volumes:
- "{{ root }}/filter/clamav:/var/lib/clamav"
healthcheck:
test: ["CMD-SHELL", "kill -0 `cat /tmp/clamd.pid` && kill -0 `cat /tmp/freshclam.pid`"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
- "{{ root }}/clamav:/var/lib/clamav"
{% endif %}
{% if webdav_enabled %}

View File

@@ -10,8 +10,8 @@ IP addresses in order to expose its public services. You must at least set up
an IPv4 or an IPv6 address if you wish to access Mailu.</p>
<p><span class="label label-warning">Warning</span> You must use specific addresses, please
avoid generic all-interfaces addresses like <code>0.0.0.0</code> or <code>::</code>.
<a href="https://mailu.io/{{ version }}/compose/setup.html#bind-address">How to find these addresses.</a></p>
avoid generic all-interfaces addresses like <code>0.0.0.0</code> or <code>::</code>. If you still want to use generic addresses you <b>MUST</b> disable <code>userland-proxy</code>; failing to do so will turn your Mailu installation into an open-relay.
<a href="https://mailu.io/{{ version }}/compose/setup.html#bind-address">How to find these addresses.</a> <a href="https://mailu.io/{{ version }}/faq.html#how-to-make-ipv6-work">How to disable userland-proxy.</a></p>
<div class="form-group">
<label>IPv4 listen address</label>

View File

@@ -1,9 +1,10 @@
set -e
echo "Users tests ..."
# Should fail, admin is already auto-created
docker compose -f tests/compose/core/docker-compose.yml exec -T admin flask mailu admin admin mailu.io 'FooBar' && exit 1
echo "The above error was intended!"
# Should not fail, but does nothing; ifmissing mode
docker compose -f tests/compose/core/docker-compose.yml exec -T admin flask mailu admin admin mailu.io 'FooBar' --mode=ifmissing || exit 1
docker compose -f tests/compose/core/docker-compose.yml exec -T admin flask mailu admin admin mailu.io 'FooBar' --mode=ifmissing
# Should not fail and update the password; update mode
docker compose -f tests/compose/core/docker-compose.yml exec -T admin flask mailu admin admin mailu.io 'password' --mode=update || exit 1
docker compose -f tests/compose/core/docker-compose.yml exec -T admin flask mailu user user mailu.io 'password' || exit 1

View File

@@ -1 +1,2 @@
python3 tests/email_test.py message-core
set -e
python3 tests/email_test.py message-core

View File

@@ -1,3 +1,4 @@
set -e
cat << EOF | docker compose -f tests/compose/core/docker-compose.yml exec -T admin flask mailu config-update -v 1
users:
- localpart: forwardinguser

View File

@@ -1,3 +1,5 @@
set -e
cat << EOF | docker compose -f tests/compose/core/docker-compose.yml exec -T admin flask mailu config-update -v 1
aliases:
- localpart: alltheusers

View File

@@ -1,3 +1,4 @@
set -e
cat << EOF | docker compose -f tests/compose/core/docker-compose.yml exec -T admin flask mailu config-update -v 1
users:
- localpart: replyuser

View File

@@ -99,7 +99,7 @@ services:
networks:
- clamav
volumes:
- "/mailu/filter/clamav:/var/lib/clamav"
- "/mailu/clamav:/var/lib/clamav"
healthcheck:
test: ["CMD-SHELL", "kill -0 `cat /tmp/clamd.pid` && kill -0 `cat /tmp/freshclam.pid`"]
interval: 10s

View File

@@ -0,0 +1 @@
Bump CREDENTIAL_ROUNDS to 13. If your system is too slow you may want to revert back to 12.

View File

@@ -0,0 +1 @@
Add DKIM support for alternative domains: alternative domains use the same DKIM key as the main domain.

View File

@@ -0,0 +1 @@
Fix a bug preventing user "forward_destination" to be updated with a PATCH request

View File

@@ -0,0 +1 @@
Warn if passwords set from the UI contain leading or trailing whitespaces (see #3425)

View File

@@ -0,0 +1 @@
The reverse proxy documentation page is updated with the scenario where Traefik (the reverse proxy) resides on a different server.

View File

@@ -0,0 +1 @@
Add the mariadb connector, as per #3449

View File

@@ -0,0 +1 @@
Ensure the tests actually work

View File

@@ -0,0 +1 @@
Upgrade to snuffleupagus 0.11, filter php:// wrapper types

View File

@@ -0,0 +1 @@
Modern docker versions enable the userland-proxy by default, clarify in setup that unless the bindto address is specific that will create problems.

View File

@@ -0,0 +1 @@
autoconfig shouldn't set useGlobalPreferredServer

View File

@@ -0,0 +1 @@
Add optional DB_APPENDIX configuration parameter which is appended as is to the postgresql or mysql URI

View File

@@ -0,0 +1,7 @@
Place ClamAV files under `mailu/clamav` instead of `mailu/filter/clamav` such that they can be modified by ClamAV
itself.
Users will want to change their `docker-compose.yml` accordingly and remove `mailu/filter/clamav` after upgrade.
Also ClamAV image tag increased to `1.4` instead of specific (older) release, users will need to update it manually as
well and keep it updated over time.

View File

@@ -0,0 +1 @@
Update roundcube to 1.6.10

View File

@@ -0,0 +1 @@
domain name of an IDN domain in the DKIM signature needs to follow RFC6376; puny encoding the domain name when rspamd accesses the vault;

View File

@@ -0,0 +1 @@
Remove the healthcheck section of clamav: use upstream's

View File

@@ -28,8 +28,8 @@ RUN set -euxo pipefail \
; mkdir -p /run/nginx /conf
# roundcube
ENV ROUNDCUBE_URL=https://github.com/roundcube/roundcubemail/releases/download/1.6.9/roundcubemail-1.6.9-complete.tar.gz
ENV CARDDAV_URL=https://github.com/mstilkerich/rcmcarddav/releases/download/v5.1.0/carddav-v5.1.0.tar.gz
ENV ROUNDCUBE_URL https://github.com/roundcube/roundcubemail/releases/download/1.6.10/roundcubemail-1.6.10-complete.tar.gz
ENV CARDDAV_URL https://github.com/mstilkerich/rcmcarddav/releases/download/v5.1.0/carddav-v5.1.0.tar.gz
RUN set -euxo pipefail \
; cd /var/www \

View File

@@ -26,6 +26,8 @@ sp.readonly_exec.enable();
# PHP has a lot of wrappers, most of them aren't usually useful, you should
# only enable the ones you're using.
sp.wrappers_whitelist.list("file,php,phar,mailsosubstreams,mailsoliteral,mailsotempfile,mailsobinary");
# The "php" wrapper can be further filtered: we probably don't want 'filter' nor 'fd'
sp.wrappers_whitelist.php_list("stdout,stdin,stderr,input,output,memory,temp");
# Prevent sloppy comparisons.
sp.sloppy_comparison.enable();