Merge branch 'master' into admin_create_user_enhancement

master
cristi 6 years ago
commit f2a009795b

@ -5,12 +5,20 @@ Notable changes to this project are documented in the current file. For more
details about individual changes, see the Git log. You should read this before details about individual changes, see the Git log. You should read this before
upgrading Freposte.io as some changes will include useful notes. upgrading Freposte.io as some changes will include useful notes.
<!-- TOWNCRIER -->
v1.6.1 - unreleased v1.6.1 - unreleased
------------------- -------------------
- Enhancement: Distinguish disabled user in user list view by row color
- Enhancement: Make Unbound drop privileges after binding to port - Enhancement: Make Unbound drop privileges after binding to port
- Enhancement: Create an Authentication Token with IPv6 address restriction ([#829](https://github.com/Mailu/Mailu/issues/829)) - Enhancement: Create an Authentication Token with IPv6 address restriction ([#829](https://github.com/Mailu/Mailu/issues/829))
- Enhancement: Automatically create admin user on container startup if given appropriate environment variables - Enhancement: Automatically create admin user on container startup if given appropriate environment variables
- Enhancement: Missing wildcard option in alias flask command ([#869](https://github.com/Mailu/Mailu/issues/869)) - Enhancement: Missing wildcard option in alias flask command ([#869](https://github.com/Mailu/Mailu/issues/869))
- Bug: Fix creating new fetched accounts
- Bug: Fix poor performance if ANTIVIRUS is configured to none.
- Bug: Implement mailustart to resolve webmail in admin ([#716](https://github.com/Mailu/Mailu/issues/716))
- Bug: Rename cli commands and their options (replace "\_" with "-") ([#877](https://github.com/Mailu/Mailu/issues/877))
- Bug: Fix typo in migration script ([#905](https://github.com/Mailu/Mailu/issues/905))
v1.6.0 - 2019-01-18 v1.6.0 - 2019-01-18
------------------- -------------------
@ -36,7 +44,6 @@ v1.6.0 - 2019-01-18
- Feature: Automated Releases ([#487](https://github.com/Mailu/Mailu/issues/487)) - Feature: Automated Releases ([#487](https://github.com/Mailu/Mailu/issues/487))
- Feature: Support for ARC ([#495](https://github.com/Mailu/Mailu/issues/495)) - Feature: Support for ARC ([#495](https://github.com/Mailu/Mailu/issues/495))
- Feature: Add posibilty to run webmail on root ([#501](https://github.com/Mailu/Mailu/issues/501)) - Feature: Add posibilty to run webmail on root ([#501](https://github.com/Mailu/Mailu/issues/501))
- Feature: Upgrade docker-compose.yml to version 3 ([#539](https://github.com/Mailu/Mailu/issues/539))
- Feature: Documentation to deploy mailu on a docker swarm ([#551](https://github.com/Mailu/Mailu/issues/551)) - Feature: Documentation to deploy mailu on a docker swarm ([#551](https://github.com/Mailu/Mailu/issues/551))
- Feature: Add optional Maildir-Compression ([#553](https://github.com/Mailu/Mailu/issues/553)) - Feature: Add optional Maildir-Compression ([#553](https://github.com/Mailu/Mailu/issues/553))
- Feature: Preserve rspamd history on container restart ([#561](https://github.com/Mailu/Mailu/issues/561)) - Feature: Preserve rspamd history on container restart ([#561](https://github.com/Mailu/Mailu/issues/561))
@ -87,6 +94,7 @@ v1.6.0 - 2019-01-18
- Enhancement: Include favicon package ([#801](https://github.com/Mailu/Mailu/issues/801), ([#802](https://github.com/Mailu/Mailu/issues/802)) - Enhancement: Include favicon package ([#801](https://github.com/Mailu/Mailu/issues/801), ([#802](https://github.com/Mailu/Mailu/issues/802))
- Enhancement: Add logging at critical places in python start.py scripts. Implement LOG_LEVEL to control verbosity ([#588](https://github.com/Mailu/Mailu/issues/588)) - Enhancement: Add logging at critical places in python start.py scripts. Implement LOG_LEVEL to control verbosity ([#588](https://github.com/Mailu/Mailu/issues/588))
- Enhancement: Mark message as seen when reporting as spam - Enhancement: Mark message as seen when reporting as spam
- Enhancement: Better support and document IPv6 ([#827](https://github.com/Mailu/Mailu/issues/827))
- Upstream: Update Roundcube - Upstream: Update Roundcube
- Upstream: Update Rainloop - Upstream: Update Rainloop
- Bug: Rainloop fails with "domain not allowed" ([#93](https://github.com/Mailu/Mailu/issues/93)) - Bug: Rainloop fails with "domain not allowed" ([#93](https://github.com/Mailu/Mailu/issues/93))

@ -13,4 +13,4 @@ Before we can consider review and merge, please make sure the following list is
If an entry in not applicable, you can check it or remove it from the list. If an entry in not applicable, you can check it or remove it from the list.
- [ ] In case of feature or enhancement: documentation updated accordingly - [ ] In case of feature or enhancement: documentation updated accordingly
- [ ] Unless it's docs or a minor change: place entry in the [changelog](CHANGELOG.md), under the latest un-released version. - [ ] Unless it's docs or a minor change: add [changelog](https://mailu.io/master/contributors/guide.html#changelog) entry file.

@ -1,8 +1,9 @@
FROM alpine:3.8 FROM alpine:3.8
# python3 shared with most images # python3 shared with most images
RUN apk add --no-cache \ RUN apk add --no-cache \
python3 py3-pip \ python3 py3-pip git bash \
&& pip3 install --upgrade pip && pip3 install --upgrade pip
RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart
# Image specific layers under this line # Image specific layers under this line
RUN mkdir -p /app RUN mkdir -p /app
WORKDIR /app WORKDIR /app

@ -1,5 +1,5 @@
import os import os
from mailustart import resolve
DEFAULT_CONFIG = { DEFAULT_CONFIG = {
# Specific to the admin UI # Specific to the admin UI
@ -46,6 +46,7 @@ DEFAULT_CONFIG = {
'WEBSITE': 'https://mailu.io', 'WEBSITE': 'https://mailu.io',
'WEB_ADMIN': '/admin', 'WEB_ADMIN': '/admin',
'WEB_WEBMAIL': '/webmail', 'WEB_WEBMAIL': '/webmail',
'WEBMAIL': 'none',
'RECAPTCHA_PUBLIC_KEY': '', 'RECAPTCHA_PUBLIC_KEY': '',
'RECAPTCHA_PRIVATE_KEY': '', 'RECAPTCHA_PRIVATE_KEY': '',
# Advanced settings # Advanced settings
@ -61,7 +62,6 @@ DEFAULT_CONFIG = {
'POD_ADDRESS_RANGE': None 'POD_ADDRESS_RANGE': None
} }
class ConfigManager(dict): class ConfigManager(dict):
""" Naive configuration manager that uses environment only """ Naive configuration manager that uses environment only
""" """
@ -75,6 +75,14 @@ class ConfigManager(dict):
def __init__(self): def __init__(self):
self.config = dict() self.config = dict()
def resolve_host(self):
self.config['HOST_IMAP'] = resolve(self.config['HOST_IMAP'])
self.config['HOST_POP3'] = resolve(self.config['HOST_POP3'])
self.config['HOST_AUTHSMTP'] = resolve(self.config['HOST_AUTHSMTP'])
self.config['HOST_SMTP'] = resolve(self.config['HOST_SMTP'])
if self.config['WEBMAIL'] != 'none':
self.config['HOST_WEBMAIL'] = resolve(self.config['HOST_WEBMAIL'])
def __coerce_value(self, value): def __coerce_value(self, value):
if isinstance(value, str) and value.lower() in ('true','yes'): if isinstance(value, str) and value.lower() in ('true','yes'):
return True return True
@ -89,6 +97,7 @@ class ConfigManager(dict):
key: self.__coerce_value(os.environ.get(key, value)) key: self.__coerce_value(os.environ.get(key, value))
for key, value in DEFAULT_CONFIG.items() for key, value in DEFAULT_CONFIG.items()
}) })
self.resolve_host()
# automatically set the sqlalchemy string # automatically set the sqlalchemy string
if self.config['DB_FLAVOR']: if self.config['DB_FLAVOR']:

@ -1,6 +1,7 @@
from flask_limiter import RateLimitExceeded from flask_limiter import RateLimitExceeded
from mailu import utils from mailu import utils
from flask import current_app as app
import socket import socket
import flask import flask
@ -23,7 +24,7 @@ def rate_limit_handler(e):
def whitelist_webmail(): def whitelist_webmail():
try: try:
return flask.request.headers["Client-Ip"] ==\ return flask.request.headers["Client-Ip"] ==\
socket.gethostbyname("webmail") app.config["HOST_WEBMAIL"]
except: except:
return False return False

@ -2,7 +2,6 @@ from mailu import models
from flask import current_app as app from flask import current_app as app
import re import re
import socket
import urllib import urllib
@ -89,5 +88,4 @@ def get_server(protocol, authenticated=False):
hostname, port = extract_host_port(app.config['HOST_AUTHSMTP'], 10025) hostname, port = extract_host_port(app.config['HOST_AUTHSMTP'], 10025)
else: else:
hostname, port = extract_host_port(app.config['HOST_SMTP'], 25) hostname, port = extract_host_port(app.config['HOST_SMTP'], 25)
address = socket.gethostbyname(hostname) return hostname, port
return address, port

@ -86,7 +86,7 @@ def admin(localpart, domain_name, password, mode = 'create'):
@click.argument('localpart') @click.argument('localpart')
@click.argument('domain_name') @click.argument('domain_name')
@click.argument('password') @click.argument('password')
@click.argument('hash_scheme') @click.argument('hash_scheme', required=False)
@flask_cli.with_appcontext @flask_cli.with_appcontext
def user(localpart, domain_name, password, hash_scheme=None): def user(localpart, domain_name, password, hash_scheme=None):
""" Create a user """ Create a user
@ -108,15 +108,18 @@ def user(localpart, domain_name, password, hash_scheme=None):
@mailu.command() @mailu.command()
@click.option('-n', '--domain_name') @click.argument('domain_name')
@click.option('-u', '--max_users') @click.option('-u', '--max-users')
@click.option('-a', '--max_aliases') @click.option('-a', '--max-aliases')
@click.option('-q', '--max_quota_bytes') @click.option('-q', '--max-quota-bytes')
@flask_cli.with_appcontext @flask_cli.with_appcontext
def domain(domain_name, max_users=-1, max_aliases=-1, max_quota_bytes=0): def domain(domain_name, max_users=-1, max_aliases=-1, max_quota_bytes=0):
""" Create a domain
"""
domain = models.Domain.query.get(domain_name) domain = models.Domain.query.get(domain_name)
if not domain: if not domain:
domain = models.Domain(name=domain_name) domain = models.Domain(name=domain_name, max_users=max_users,
max_aliases=max_aliases, max_quota_bytes=max_quota_bytes)
db.session.add(domain) db.session.add(domain)
db.session.commit() db.session.commit()
@ -148,7 +151,7 @@ def user_import(localpart, domain_name, password_hash, hash_scheme = None):
@mailu.command() @mailu.command()
@click.option('-v', '--verbose') @click.option('-v', '--verbose')
@click.option('-d', '--delete_objects') @click.option('-d', '--delete-objects')
@flask_cli.with_appcontext @flask_cli.with_appcontext
def config_update(verbose=False, delete_objects=False): def config_update(verbose=False, delete_objects=False):
"""sync configuration with data from YAML-formatted stdin""" """sync configuration with data from YAML-formatted stdin"""

@ -436,20 +436,37 @@ class Alias(Base, Email):
@classmethod @classmethod
def resolve(cls, localpart, domain_name): def resolve(cls, localpart, domain_name):
return cls.query.filter( alias_preserve_case = cls.query.filter(
sqlalchemy.and_(cls.domain_name == domain_name, sqlalchemy.and_(cls.domain_name == domain_name,
sqlalchemy.or_( sqlalchemy.or_(
sqlalchemy.and_( sqlalchemy.and_(
cls.wildcard == False, cls.wildcard == False,
cls.localpart == localpart cls.localpart == localpart
), sqlalchemy.and_( ), sqlalchemy.and_(
cls.wildcard == True, cls.wildcard == True,
sqlalchemy.bindparam("l", localpart).like(cls.localpart) sqlalchemy.bindparam("l", localpart).like(cls.localpart)
)
) )
) )
) ).order_by(cls.wildcard, sqlalchemy.func.char_length(cls.localpart).desc()).first()
).order_by(cls.wildcard, sqlalchemy.func.char_length(cls.localpart).desc()).first() if alias_preserve_case:
return alias_preserve_case
if localpart:
localpart = localpart.lower()
return cls.query.filter(
sqlalchemy.and_(cls.domain_name == domain_name,
sqlalchemy.or_(
sqlalchemy.and_(
cls.wildcard == False,
sqlalchemy.func.lower(cls.localpart) == localpart
), sqlalchemy.and_(
cls.wildcard == True,
sqlalchemy.bindparam("l", localpart).like(sqlalchemy.func.lower(cls.localpart))
)
)
)
).order_by(cls.wildcard, sqlalchemy.func.char_length(sqlalchemy.func.lower(cls.localpart)).desc()).first()
class Token(Base): class Token(Base):
""" A token is an application password for a given user. """ A token is an application password for a given user.

@ -158,11 +158,11 @@ msgstr "Hostname oder IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20 #: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47 #: mailu/ui/templates/client.html:47
msgid "TCP port" msgid "TCP port"
msgstr "Port" msgstr "TCP Port"
#: mailu/ui/forms.py:160 #: mailu/ui/forms.py:160
msgid "Enable TLS" msgid "Enable TLS"
msgstr "Verschlüsselung aktivieren" msgstr "Verschlüsselung aktivieren (TLS)"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28 #: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20 #: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
@ -193,6 +193,34 @@ msgstr "Konto"
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "für administrativen Zugriff" msgstr "für administrativen Zugriff"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "Dienst-Status"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr "Dienst"
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "Status"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "Image"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr "Gestartet"
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "Letztes Update"
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "Mein Konto" msgstr "Mein Konto"
@ -600,75 +628,75 @@ msgstr "Spamfilter-Grenzwert"
#: mailu/ui/forms.py:50 #: mailu/ui/forms.py:50
msgid "Enable sign-up" msgid "Enable sign-up"
msgstr "" msgstr "Neuanmeldung erlauben"
#: mailu/ui/forms.py:57 #: mailu/ui/forms.py:57
msgid "Initial admin" msgid "Initial admin"
msgstr "" msgstr "Initiale Admin-Adresse"
#: mailu/ui/forms.py:58 #: mailu/ui/forms.py:58
msgid "Admin password" msgid "Admin password"
msgstr "" msgstr "Administrator Passwort"
#: mailu/ui/forms.py:84 #: mailu/ui/forms.py:84
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr "Aktiv"
#: mailu/ui/forms.py:89 #: mailu/ui/forms.py:89
msgid "Email address" msgid "Email address"
msgstr "" msgstr "E-Mail-Adresse"
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117 #: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4 #: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4 #: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up" msgid "Sign up"
msgstr "" msgstr "Registrieren"
#: mailu/ui/forms.py:119 #: mailu/ui/forms.py:119
msgid "End of vacation" msgid "End of vacation"
msgstr "" msgstr "Ende der Abwesenheit"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup" msgid "Client setup"
msgstr "" msgstr "Client Einrichtung"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol" msgid "Mail protocol"
msgstr "" msgstr "E-Mail-Protokoll"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name" msgid "Server name"
msgstr "" msgstr "Servername"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain" msgid "Register a domain"
msgstr "" msgstr "Regestrieren Sie eine Domain"
#: mailu/ui/templates/domain/details.html:17 #: mailu/ui/templates/domain/details.html:17
msgid "Generate keys" msgid "Generate keys"
msgstr "" msgstr "Schlüssel erzeugen"
#: mailu/ui/templates/domain/signup.html:13 #: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n" msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server" " domain zone so that the domain <code>MX</code> points to this server"
msgstr "" msgstr "Um eine neue Domain registrieren zu können, müssen Sie zuerst den <code>MX Resource Record</code> der neuen Domäne konfigurieren. Dieser muss auf den aktuellen Mail-Server verweisen."
#: mailu/ui/templates/domain/signup.html:18 #: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n" msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n" " please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n" " couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires." " expires."
msgstr "" msgstr "Bitte kontaktieren Sie ihren DNS-Anbieter oder -Administrator, falls Sie nicht wissen, wie ein <code>MX Resource Record</code> auf Ihrem DNS-Server eingerichtet wird. Bitte beachten Sie auch, dass aufgrund der lokalen Server Cache Einstellungen eine Änderung am <code>MX Resource Record</code> erst nach einigen Minuten aktiv wird."
#: mailu/ui/templates/user/signup_domain.html:8 #: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account" msgid "pick a domain for the new account"
msgstr "" 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:14
msgid "Domain" msgid "Domain"
msgstr "" msgstr "Domain"
#: mailu/ui/templates/user/signup_domain.html:15 #: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots" msgid "Available slots"
msgstr "" msgstr "Verfügbare Plätze"

@ -121,11 +121,11 @@ msgstr "Habilitar respuesta automática"
#: mailu/ui/forms.py:116 #: mailu/ui/forms.py:116
msgid "Reply subject" msgid "Reply subject"
msgstr "" msgstr "Título de la respuesta"
#: mailu/ui/forms.py:117 #: mailu/ui/forms.py:117
msgid "Reply body" msgid "Reply body"
msgstr "" msgstr "Texto de la respuesta"
#: mailu/ui/forms.py:136 #: mailu/ui/forms.py:136
msgid "Alias" msgid "Alias"
@ -137,15 +137,15 @@ msgstr "Usar sintaxis SQL (p.ej. para abarcar todos los alias)"
#: mailu/ui/forms.py:145 #: mailu/ui/forms.py:145
msgid "Admin email" msgid "Admin email"
msgstr "" msgstr "Correo-e del administrador"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164 #: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit" msgid "Submit"
msgstr "" msgstr "Enviar"
#: mailu/ui/forms.py:150 #: mailu/ui/forms.py:150
msgid "Manager email" msgid "Manager email"
msgstr "" msgstr "Gestor de correo"
#: mailu/ui/forms.py:155 #: mailu/ui/forms.py:155
msgid "Protocol" msgid "Protocol"
@ -153,7 +153,7 @@ msgstr "Protocolo"
#: mailu/ui/forms.py:158 #: mailu/ui/forms.py:158
msgid "Hostname or IP" msgid "Hostname or IP"
msgstr "" msgstr "Nombre o IP del servidor"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20 #: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47 #: mailu/ui/templates/client.html:47
@ -175,7 +175,7 @@ msgstr "Confirmar acción"
#: mailu/ui/templates/confirm.html:13 #: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action." msgid "You are about to %(action)s. Please confirm your action."
msgstr "" msgstr "Está a punto de %(action)s. Por favor, confirme su acción. "
#: mailu/ui/templates/docker-error.html:4 #: mailu/ui/templates/docker-error.html:4
msgid "Docker error" msgid "Docker error"
@ -187,12 +187,40 @@ msgstr "Ocurrió un error en la comunicación con el servidor Docker."
#: mailu/admin/templates/login.html:6 #: mailu/admin/templates/login.html:6
msgid "Your account" msgid "Your account"
msgstr "" msgstr "Su cuenta"
#: mailu/ui/templates/login.html:8 #: mailu/ui/templates/login.html:8
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "para acceder a las herramientas de administración" msgstr "para acceder a las herramientas de administración"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "Estado de servicios"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr "Servicio"
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "Estado"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "Imagen"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr "Iniciado"
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "Última actualización"
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "Mi cuenta" msgstr "Mi cuenta"
@ -212,7 +240,7 @@ msgstr "Auto-respuesta"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26 #: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36 #: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts" msgid "Fetched accounts"
msgstr "" msgstr "Cuentas recogidas"
#: mailu/ui/templates/sidebar.html:105 #: mailu/ui/templates/sidebar.html:105
msgid "Sign out" msgid "Sign out"
@ -324,23 +352,23 @@ msgstr "Regenerar llaves"
#: mailu/ui/templates/domain/details.html:31 #: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry" msgid "DNS MX entry"
msgstr "" msgstr "Entrada MX del DNS"
#: mailu/ui/templates/domain/details.html:35 #: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries" msgid "DNS SPF entries"
msgstr "" msgstr "Entradas SPF del DNS"
#: mailu/ui/templates/domain/details.html:42 #: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key" msgid "DKIM public key"
msgstr "" msgstr "Llave pública DKIM"
#: mailu/ui/templates/domain/details.html:46 #: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry" msgid "DNS DKIM entry"
msgstr "" msgstr "Entrada DKIM en DNS"
#: mailu/ui/templates/domain/details.html:50 #: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry" msgid "DNS DMARC entry"
msgstr "" msgstr "Registro DMARC en DNS"
#: mailu/ui/templates/domain/edit.html:4 #: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain" msgid "Edit domain"
@ -352,15 +380,15 @@ msgstr "Lista de dominios"
#: mailu/ui/templates/domain/list.html:17 #: mailu/ui/templates/domain/list.html:17
msgid "Manage" msgid "Manage"
msgstr "" msgstr "Gestionar"
#: mailu/ui/templates/domain/list.html:19 #: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count" msgid "Mailbox count"
msgstr "" msgstr "Contar buzones"
#: mailu/ui/templates/domain/list.html:20 #: mailu/ui/templates/domain/list.html:20
msgid "Alias count" msgid "Alias count"
msgstr "" msgstr "Contar alias"
#: mailu/ui/templates/domain/list.html:28 #: mailu/ui/templates/domain/list.html:28
msgid "Details" msgid "Details"
@ -376,15 +404,15 @@ msgstr "Alias"
#: mailu/ui/templates/domain/list.html:37 #: mailu/ui/templates/domain/list.html:37
msgid "Managers" msgid "Managers"
msgstr "" msgstr "Gestores"
#: mailu/ui/templates/fetch/create.html:4 #: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account" msgid "Add a fetched account"
msgstr "" msgstr "Añadir una cuenta externa (fetched)"
#: mailu/ui/templates/fetch/edit.html:4 #: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account" msgid "Update a fetched account"
msgstr "" msgstr "Actualizar cuenta externa (fetched)"
#: mailu/ui/templates/fetch/list.html:12 #: mailu/ui/templates/fetch/list.html:12
msgid "Add an account" msgid "Add an account"
@ -392,7 +420,7 @@ msgstr "Añadir una cuenta"
#: mailu/ui/templates/fetch/list.html:19 #: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint" msgid "Endpoint"
msgstr "" msgstr "Punto final"
#: mailu/ui/templates/fetch/list.html:22 #: mailu/ui/templates/fetch/list.html:22
msgid "Last check" msgid "Last check"
@ -400,23 +428,23 @@ msgstr "Último checkeo"
#: mailu/ui/templates/manager/create.html:4 #: mailu/ui/templates/manager/create.html:4
msgid "Add a manager" msgid "Add a manager"
msgstr "" msgstr "Añadir un gestor"
#: mailu/ui/templates/manager/list.html:4 #: mailu/ui/templates/manager/list.html:4
msgid "Manager list" msgid "Manager list"
msgstr "" msgstr "Gestor de lista"
#: mailu/ui/templates/manager/list.html:12 #: mailu/ui/templates/manager/list.html:12
msgid "Add manager" msgid "Add manager"
msgstr "" msgstr "Añadir un gestor"
#: mailu/ui/forms.py:168 #: mailu/ui/forms.py:168
msgid "Announcement subject" msgid "Announcement subject"
msgstr "" msgstr "Título del anuncio"
#: mailu/ui/forms.py:170 #: mailu/ui/forms.py:170
msgid "Announcement body" msgid "Announcement body"
msgstr "" msgstr "Texto del anuncio"
#: mailu/ui/forms.py:172 #: mailu/ui/forms.py:172
msgid "Send" msgid "Send"
@ -428,7 +456,7 @@ msgstr "Anuncio público"
#: mailu/ui/templates/announcement.html:8 #: mailu/ui/templates/announcement.html:8
msgid "from" msgid "from"
msgstr "" msgstr "De"
#: mailu/ui/templates/sidebar.html:44 #: mailu/ui/templates/sidebar.html:44
msgid "Announcement" msgid "Announcement"
@ -444,7 +472,7 @@ msgstr "Editar usuario"
#: mailu/ui/templates/user/forward.html:4 #: mailu/ui/templates/user/forward.html:4
msgid "Forward emails" msgid "Forward emails"
msgstr "" msgstr "Redirigir correos"
#: mailu/ui/templates/user/list.html:4 #: mailu/ui/templates/user/list.html:4
msgid "User list" msgid "User list"
@ -472,7 +500,7 @@ msgstr "Respuesta automática"
#: mailu/ui/forms.py:49 #: mailu/ui/forms.py:49
msgid "Maximum user quota" msgid "Maximum user quota"
msgstr "" msgstr "Límite de cuota de usuario"
#: mailu/ui/forms.py:101 #: mailu/ui/forms.py:101
msgid "Keep a copy of the emails" msgid "Keep a copy of the emails"
@ -496,31 +524,32 @@ msgstr "no"
#: mailu/ui/forms.py:65 #: mailu/ui/forms.py:65
msgid "Alternative name" msgid "Alternative name"
msgstr "" msgstr "Nombre alternativo"
#. I assume relayed domain means the server is a relay server (hoy receive it from another machine), and relay domain means hoy silla send it todo another machine. Is it right, or opossite?
#: mailu/ui/forms.py:70 #: mailu/ui/forms.py:70
msgid "Relayed domain name" msgid "Relayed domain name"
msgstr "" msgstr "Nombre de.dominio a recepcionar"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18 #: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host" msgid "Remote host"
msgstr "" msgstr "Servidor remoto"
#: mailu/ui/templates/sidebar.html:54 #: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains" msgid "Relayed domains"
msgstr "" msgstr "Dominios recepcionados (relayed)"
#: mailu/ui/templates/alternative/create.html:4 #: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain" msgid "Create alternative domain"
msgstr "" msgstr "Crear dominio alternativo"
#: mailu/ui/templates/alternative/list.html:4 #: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list" msgid "Alternative domain list"
msgstr "" msgstr "Lista de dominios alternativos"
#: mailu/ui/templates/alternative/list.html:12 #: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative" msgid "Add alternative"
msgstr "" msgstr "Añadir alternativa"
#: mailu/ui/templates/alternative/list.html:19 #: mailu/ui/templates/alternative/list.html:19
msgid "Name" msgid "Name"
@ -528,147 +557,147 @@ msgstr "Nombre"
#: mailu/ui/templates/domain/list.html:39 #: mailu/ui/templates/domain/list.html:39
msgid "Alternatives" msgid "Alternatives"
msgstr "" msgstr "Alternativas"
#: mailu/ui/templates/relay/create.html:4 #: mailu/ui/templates/relay/create.html:4
msgid "New relay domain" msgid "New relay domain"
msgstr "" msgstr "Nuevo dominio externo (relay)"
#: mailu/ui/templates/relay/edit.html:4 #: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain" msgid "Edit relayd domain"
msgstr "" msgstr "Editar dominio externo (relay)"
#: mailu/ui/templates/relay/list.html:4 #: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list" msgid "Relayed domain list"
msgstr "" msgstr "Lista de dominios externos (relayed)"
#: mailu/ui/templates/relay/list.html:9 #: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain" msgid "New relayed domain"
msgstr "" msgstr "Nuevo dominio externo (relayed)"
#: mailu/ui/forms.py:125 #: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)" msgid "Your token (write it down, as it will never be displayed again)"
msgstr "" msgstr "Sus llaves (token) (anótelas, ya que no se mostrarán nunca más)."
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20 #: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP" msgid "Authorized IP"
msgstr "" msgstr "IP autorizada"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4 #: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens" msgid "Authentication tokens"
msgstr "" msgstr "Tokens (llaves) autorizados"
#: mailu/ui/templates/sidebar.html:72 #: mailu/ui/templates/sidebar.html:72
msgid "Go to" msgid "Go to"
msgstr "" msgstr "Ir a"
#: mailu/ui/templates/sidebar.html:76 #: mailu/ui/templates/sidebar.html:76
msgid "Webmail" msgid "Webmail"
msgstr "" msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:87 #: mailu/ui/templates/sidebar.html:87
msgid "Website" msgid "Website"
msgstr "" msgstr "Web"
#: mailu/ui/templates/token/create.html:4 #: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token" msgid "Create an authentication token"
msgstr "" msgstr "Crear un token (llave) de autenticación."
#: mailu/ui/templates/token/list.html:12 #: mailu/ui/templates/token/list.html:12
msgid "New token" msgid "New token"
msgstr "" msgstr "Nuevo token"
#: mailu/ui/templates/user/create.html:15 #: mailu/ui/templates/user/create.html:15
msgid "General" msgid "General"
msgstr "" msgstr "General"
#: mailu/ui/templates/user/create.html:22 #: mailu/ui/templates/user/create.html:22
msgid "Features and quotas" msgid "Features and quotas"
msgstr "" msgstr "Funcionalidades y cuotas"
#: mailu/ui/templates/user/settings.html:14 #: mailu/ui/templates/user/settings.html:14
msgid "General settings" msgid "General settings"
msgstr "" msgstr "Configuración general"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15 #: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam" msgid "Antispam"
msgstr "" msgstr "Antispam"
#: mailu/ui/forms.py:99 #: mailu/ui/forms.py:99
msgid "Spam filter tolerance" msgid "Spam filter tolerance"
msgstr "" msgstr "Tolerancia del filtro de spam"
#: mailu/ui/forms.py:50 #: mailu/ui/forms.py:50
msgid "Enable sign-up" msgid "Enable sign-up"
msgstr "" msgstr "Permitir registros"
#: mailu/ui/forms.py:57 #: mailu/ui/forms.py:57
msgid "Initial admin" msgid "Initial admin"
msgstr "" msgstr "Administrador inicial"
#: mailu/ui/forms.py:58 #: mailu/ui/forms.py:58
msgid "Admin password" msgid "Admin password"
msgstr "" msgstr "Contraseña del administrador"
#: mailu/ui/forms.py:84 #: mailu/ui/forms.py:84
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr "Habilitado"
#: mailu/ui/forms.py:89 #: mailu/ui/forms.py:89
msgid "Email address" msgid "Email address"
msgstr "" msgstr "Direcciones de correo"
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117 #: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4 #: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4 #: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up" msgid "Sign up"
msgstr "" msgstr "Registrarse"
#: mailu/ui/forms.py:119 #: mailu/ui/forms.py:119
msgid "End of vacation" msgid "End of vacation"
msgstr "" msgstr "Fin de las vacaciones"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup" msgid "Client setup"
msgstr "" msgstr "Configuración del cliente"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol" msgid "Mail protocol"
msgstr "" msgstr "Protocolo de correo"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name" msgid "Server name"
msgstr "" msgstr "Nombre del servidor"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain" msgid "Register a domain"
msgstr "" msgstr "Registrar un dominio"
#: mailu/ui/templates/domain/details.html:17 #: mailu/ui/templates/domain/details.html:17
msgid "Generate keys" msgid "Generate keys"
msgstr "" msgstr "Generar llaves"
#: mailu/ui/templates/domain/signup.html:13 #: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n" msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server" " domain zone so that the domain <code>MX</code> points to this server"
msgstr "" msgstr "Para registrar un nuevo dominio primero debe configurar la zona DNS de modo que los registros <code>MX</code> apunten a este servidor"
#: mailu/ui/templates/domain/signup.html:18 #: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n" msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n" " please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n" " couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires." " expires."
msgstr "" msgstr "Si no sabe cómo configurar un registro <code>MX</code> para su.zona DNS, por favor, contacte con su proveedor del dominio o administrador. También debe esperar unos minutos después de configurar el <code>MX</code>, para que se refresque la caché del servidor."
#: mailu/ui/templates/user/signup_domain.html:8 #: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account" msgid "pick a domain for the new account"
msgstr "" msgstr "Seleccione un dominio para la nueva cuenta"
#: mailu/ui/templates/user/signup_domain.html:14 #: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain" msgid "Domain"
msgstr "" msgstr "Dominio"
#: mailu/ui/templates/user/signup_domain.html:15 #: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots" msgid "Available slots"
msgstr "" msgstr "Slots disponibles"

@ -193,6 +193,34 @@ msgstr "Votre compte"
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "pour accéder aux outils d'administration" msgstr "pour accéder aux outils d'administration"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "Etat des services"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr "Service"
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "Etat"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "Image"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr "Démarré depuis"
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "Dernière mise à jour"
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "Mon compte" msgstr "Mon compte"

@ -0,0 +1,703 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: hu\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Érvénytelen levelezési cím"
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Megerősít"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "E-mail"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Jelszó"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Belépés"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Tartomány"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "Maximális felhasználók száma"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "Maximális álnevek száma"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "Megjegyzés"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Létrehoz"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Jelszó megerősítése"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "Kvóta"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "IMAP hozzáférés engedélyezése"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "POP3 hozzáférés engedélyezéseq"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Mentés"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Megjelenő név"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Levélszemét szűrő engedélyezése"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Levélszemét szűrő korlátja"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Beállítások mentése"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "Jelszó ellenőrzése"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Jelszó frissítése"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Továbbítás engedélyezése"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Cél"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Frissítés"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Automatikus válasz engedélyezése"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "Válasz tárgya"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "Válasz levéltörzs"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Álnév"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "SQL-szerű kifejezések használata (pl.: mint a catch-all álnevek)"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "Adminisztrátor címe"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "Elküldés"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "Menedzser címe"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Protokoll"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "Hosztnév vagy IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "TCP port"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "TLS engedélyezése"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Felhasználó neve"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Megerősítés"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr "%(action) megerősítése."
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Docker hiba"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Hiba lépett fel a Docker kiszolgáló kommunikációjában."
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Saját fiók"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "az rendszergazai eszközökhöz fér hozzá"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "Szolgáltatások állapota"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr "Szolgáltatás"
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "Állapot"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "Kép"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr "Elindítva"
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "Utolsó frissítés"
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Saját fiók"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Beállítások"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Automatikus továbbítás"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Automatikus válasz"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr "Letöltött fiókok"
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Kilépés"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Adminisztrátor"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Adminisztrátorok"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "Levelezési tartomány"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Súgó"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Ezen a funkción még dolgozunk"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Globális adminisztrátor hozzáadása"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Globális adminisztrátorok"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Adminisztrátor hozzáadása"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Tevékenység"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "E-mail"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Törlés"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Álnév létrehozása"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Álnév szerkesztése"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Álnevek listája"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Álnév hozzáadása"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "Létrehozva"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Utolsó szerkesztés"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Szerkesztés"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Új tartomány"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Tartomány részletei"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Kulcsok újragenerálása"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "DNS MX rekord"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "DNS SPF rekord"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "DKIM nyilvános kulcs"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "DNS DKIM rekord"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "DNS DMARC rekord"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Tartomány szerkesztése"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Tartományok listája"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "Kezelés"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "Postaládák száma"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "Álnevek száma"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Részletek"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Felhasználók"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Álnevek"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr "Kezelők"
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Letöltött fiók hozzáadása"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Letöltött fiók frissítése"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Fiók hozzáadása"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr "Végpont"
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "Utolsó ellenőrzés"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Kezelő hozzáadása"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr "Kezelők listája"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "Kezelő hozzáadása"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr "Bejelentés tárgya"
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "Bejelentés levéltörzs"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Küldés"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Nyilvános bejelentés"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "küldő"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Bejelentés"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Új felhasználó"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Felhasználó szerkesztése"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "Továbbítás"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Felhasználók"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Felhasználó hozzáadása"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Felhasználói beállítások"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "Jellemzők"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Jelszó frissítése"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Automatikus válasz"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr "Maximális felhasználói kvóta"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Levélmásolat megtartása"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "Levelek szerveren tartása"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "Levelek megtartása"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "igen"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "nem"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr "Alternatív név"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr "Továbbított tartomány neve"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr "Távoli hoszt"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr "Továbbított tartományok"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "Alternatív tartomány létrehozása"
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr "Alternatív tartományok"
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr "Alternatív hozzáadása"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "Név"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr "Alternatívák"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr "Új továbbító tartomány"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr "Továbbított tartomány szerkesztése"
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr "Továbbított tartományok"
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr "Új továbbított tartomány"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "Token (írja le, többet nem jelenik meg a képernyőn)"
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr "Engedélyezett IP"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "Belépési tokenek"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr "Ugrás"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "Weboldal"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr "Belépési token létrehozása"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr "Új token"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "Általános"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr "Jellemzők és kvóták"
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "Általános beállítások"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "Levélszemét szűrő"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr "Szűrő tolerancia"
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr "Feliratkozás engedélyezése"
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr "Kezdeti adminisztrátor"
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr "Adminisztrátor jelszó"
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr "Engedélyezve"
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr "Email cím"
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr "Feliratkozás"
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr "Távollét vége"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr "Kliens beállítás"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr "Levél protokoll"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr "Kiszolgáló neve"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr "Tartomány regisztrálása"
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr "Kulcsok létrehozása"
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr "Új tartomány létrehozásához először regisztrálnia kell a tartományi zónát,\n"
" hogy a tartomány <code>MX</code> rekordja erre a kiszolgálóra mutasson."
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr "Ha nem tudja hogyan kell az <code>MX</code> rekordot regisztrálnia a DNS zónában, kérjük vegye fel a kapcsolatot a DNS rendszergazdával. Pár perc szükséges az <code>MX</code> rekord regisztárciója után, amíg a helyi gyorsítótár elavul."
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr "válasszon tartományt az új fiókhoz"
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr "Tartomány"
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr "Elérhető rekeszek"

@ -0,0 +1,669 @@
# Translations template for PROJECT.
# Copyright (C) 2018 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2018-04-22 12:10+0200\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"
"Language: is\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.3\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr ""
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr ""
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr ""
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr ""
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr ""
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr ""
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr ""
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr ""
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr ""
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr ""
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr ""
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr ""
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr ""
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr ""
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr ""
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr ""
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:85
msgid "Save"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr ""
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr ""
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr ""
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr ""
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr ""
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr ""
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr ""
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr ""
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr ""
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr ""
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr ""
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/forms.py:120
msgid "Update"
msgstr ""
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr ""
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr ""
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr ""
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr ""
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr ""
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr ""
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr ""
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr ""
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr ""
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr ""
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr ""
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr ""
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr ""
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr ""
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr ""
#: mailu/ui/forms.py:172
msgid "Send"
msgstr ""
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr ""
#: mailu/ui/templates/confirm.html:13
#, python-format
msgid "You are about to %(action)s. Please confirm your action."
msgstr ""
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr ""
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr ""
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr ""
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr ""
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr ""
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr ""
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr ""
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr ""
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr ""
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr ""
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr ""
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr ""
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr ""
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr ""
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr ""
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr ""
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr ""
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr ""
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr ""
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr ""
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr ""
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr ""
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr ""
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr ""
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr ""
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr ""
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr ""
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr ""
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr ""
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr ""
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr ""
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr ""
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr ""
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr ""
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr ""
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr ""
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr ""
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr ""
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr ""
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr ""
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr ""
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr ""
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr ""
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr ""
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr ""
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr ""
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr ""
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr ""
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid ""
"In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid ""
"If you do not know how to setup an <code>MX</code> record for your DNS "
"zone,\n"
" please contact your DNS provider or administrator. Also, please wait "
"a\n"
" couple minutes after the <code>MX</code> is set so the local server "
"cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr ""
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr ""
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr ""
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr ""
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr ""
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr ""
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr ""
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr ""
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr ""
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr ""
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr ""
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr ""
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr ""
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr ""
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr ""
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr ""
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr ""
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr ""
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr ""
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr ""
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr ""
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr ""
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr ""
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr ""
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr ""
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr ""
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

@ -194,6 +194,34 @@ msgstr "Il tuo account"
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "" msgstr ""
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr ""
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr ""
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "Stato"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "Immagine"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr "Avviato"
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "Ultimo aggiornamento"
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "Il mio account" msgstr "Il mio account"

@ -0,0 +1,702 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: ja\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "無効なメールアドレスです"
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr ""
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "E-Mailアドレス"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "パスワード"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "ログイン"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "ドメイン名"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "最大ユーザー数"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "最大エイリアス数"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "コメント"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "作成"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "パスワード(再入力)"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "容量"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "IMAPアクセスを許可"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "POP3アクセスを許可"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "保存"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "表示名"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "スパムフィルターを有効"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr ""
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "設定を保存"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "パスワード(再入力)"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "パスワード変更"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "自動転送を有効"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "宛先"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "更新"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "自動返信を有効"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "返信件名"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "返信本文"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "エイリアス名"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr ""
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr ""
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr ""
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "管理者メールアドレス"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "プロトコル"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "ホスト名またはIPアドレス"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr ""
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr ""
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "ユーザー名"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr ""
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr ""
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Docker エラー"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr ""
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr ""
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "管理画面"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "サービス稼働状態"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr ""
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr ""
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "Docker イメージ"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr ""
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr ""
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "アカウント設定"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "設定"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "自動転送"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "自動返信"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr ""
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "ログアウト"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "サービス設定"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "管理者"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "メールドメイン"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "ヘルプ"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr ""
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "グローバル管理者を追加"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "グローバル管理者"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "管理者を追加"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr ""
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "メールアドレス"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "削除"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "エイリアスを作成"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr ""
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "エイリアス一覧"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "エイリアスを作成"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "作成日"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "最終更新日"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr ""
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "ドメイン名を追加"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "ドメイン名詳細"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "鍵を再生成"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "DNS MXエントリ"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "DNS SPFエントリ"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "DKIM公開鍵"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "DNS DKIMエントリ"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "DNS DMARCエントリ"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr ""
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr ""
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "管理"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "メールボックス数"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "エイリアス数"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "詳細"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr ""
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr ""
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr ""
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "アカウントを追加"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr ""
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr ""
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr ""
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr "管理者一覧"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "管理者を追加"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr ""
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr ""
#: mailu/ui/forms.py:172
msgid "Send"
msgstr ""
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr ""
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr ""
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr ""
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "ユーザーを作成"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "ユーザーを編集"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr ""
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr ""
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr ""
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "ユーザー設定"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "サーバ機能"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "パスワード変更"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "自動返信"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr "ユーザーの最大容量"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "メールのコピーを残す"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr ""
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr ""
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr ""
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr ""
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr ""
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr "リレードメイン名"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr ""
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr "リレードメイン"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr ""
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr ""
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr ""
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr ""
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr ""
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr "リレードメイン名を追加"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr ""
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr ""
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr "リレードメイン名を追加"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "トークン (一度だけしか表示されません。書き留めてください。)"
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr "認証するIPアドレス"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "認証トークン"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr "リンク"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr "Webメール"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "Webサイト"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr "認証トークンを作成"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr "トークンを作成"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "一般"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr "サーバ機能と容量"
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "一般設定"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "スパムメール対策"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr ""
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr "自動返信終了日"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

@ -193,6 +193,34 @@ msgstr "Uw account"
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "om toegang te krijgen tot systeembeheer" msgstr "om toegang te krijgen tot systeembeheer"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "Status diensten"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr "Dienst"
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "Status"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "Image"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr "Gestart"
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "Laatste aanpassing"
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "Mijn account" msgstr "Mijn account"
@ -600,75 +628,75 @@ msgstr "Spam filter toleratie"
#: mailu/ui/forms.py:50 #: mailu/ui/forms.py:50
msgid "Enable sign-up" msgid "Enable sign-up"
msgstr "" msgstr "Schakel registreren in"
#: mailu/ui/forms.py:57 #: mailu/ui/forms.py:57
msgid "Initial admin" msgid "Initial admin"
msgstr "" msgstr "Eerste beheerder"
#: mailu/ui/forms.py:58 #: mailu/ui/forms.py:58
msgid "Admin password" msgid "Admin password"
msgstr "" msgstr "Beheerder wachtwoord"
#: mailu/ui/forms.py:84 #: mailu/ui/forms.py:84
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr "Ingeschakeld"
#: mailu/ui/forms.py:89 #: mailu/ui/forms.py:89
msgid "Email address" msgid "Email address"
msgstr "" msgstr "E-mailadres"
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117 #: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4 #: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4 #: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up" msgid "Sign up"
msgstr "" msgstr "Registreren"
#: mailu/ui/forms.py:119 #: mailu/ui/forms.py:119
msgid "End of vacation" msgid "End of vacation"
msgstr "" msgstr "Einde van vakantie"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup" msgid "Client setup"
msgstr "" msgstr "Client instellingen"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol" msgid "Mail protocol"
msgstr "" msgstr "Mail protocol"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name" msgid "Server name"
msgstr "" msgstr "Server naam"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain" msgid "Register a domain"
msgstr "" msgstr "Registreer een domein"
#: mailu/ui/templates/domain/details.html:17 #: mailu/ui/templates/domain/details.html:17
msgid "Generate keys" msgid "Generate keys"
msgstr "" msgstr "Genereer sleutels"
#: mailu/ui/templates/domain/signup.html:13 #: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n" msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server" " domain zone so that the domain <code>MX</code> points to this server"
msgstr "" msgstr "Om een nieuw domein te kunnen registreren moet je eerst je domein zone instellen zodat het domein <code>MX</code> points to this server"
#: mailu/ui/templates/domain/signup.html:18 #: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n" msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n" " please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n" " couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires." " expires."
msgstr "" msgstr "Als je niet weet hoe je een <code>MX</code> moet instellen voor je DNS zone neem dan contact op met je DNS provider of beheerder. Wacht ook een paar minuten nader de <code>MX</code> is ingesteld zodat de lokale server cache verloopt"
#: mailu/ui/templates/user/signup_domain.html:8 #: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account" msgid "pick a domain for the new account"
msgstr "" msgstr "kies een domein voor het nieuwe account"
#: mailu/ui/templates/user/signup_domain.html:14 #: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain" msgid "Domain"
msgstr "" msgstr "Domein"
#: mailu/ui/templates/user/signup_domain.html:15 #: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots" msgid "Available slots"
msgstr "" msgstr "Vrije sloten"

@ -194,6 +194,34 @@ msgstr "Twoje konto"
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "" msgstr ""
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "Status usług"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr "Usługa"
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "Status"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr ""
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr ""
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "Ostatnia aktualizacja"
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "Moje konto" msgstr "Moje konto"
@ -296,7 +324,7 @@ msgstr "Dodaj alias"
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21 #: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24 #: mailu/ui/templates/user/list.html:24
msgid "Created" msgid "Created"
msgstr "" msgstr "Utworzono"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23 #: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21 #: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
@ -529,7 +557,7 @@ msgstr ""
#: mailu/ui/templates/domain/list.html:39 #: mailu/ui/templates/domain/list.html:39
msgid "Alternatives" msgid "Alternatives"
msgstr "" msgstr "Alternatywy"
#: mailu/ui/templates/relay/create.html:4 #: mailu/ui/templates/relay/create.html:4
msgid "New relay domain" msgid "New relay domain"
@ -577,7 +605,7 @@ msgstr ""
#: mailu/ui/templates/token/list.html:12 #: mailu/ui/templates/token/list.html:12
msgid "New token" msgid "New token"
msgstr "" msgstr "Nowy token"
#: mailu/ui/templates/user/create.html:15 #: mailu/ui/templates/user/create.html:15
msgid "General" msgid "General"
@ -601,7 +629,7 @@ msgstr ""
#: mailu/ui/forms.py:50 #: mailu/ui/forms.py:50
msgid "Enable sign-up" msgid "Enable sign-up"
msgstr "" msgstr "Włącz rejestrację"
#: mailu/ui/forms.py:57 #: mailu/ui/forms.py:57
msgid "Initial admin" msgid "Initial admin"
@ -609,7 +637,7 @@ msgstr ""
#: mailu/ui/forms.py:58 #: mailu/ui/forms.py:58
msgid "Admin password" msgid "Admin password"
msgstr "" msgstr "hasło administratora"
#: mailu/ui/forms.py:84 #: mailu/ui/forms.py:84
msgid "Enabled" msgid "Enabled"
@ -635,19 +663,19 @@ msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol" msgid "Mail protocol"
msgstr "" msgstr "Protokół poczty"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name" msgid "Server name"
msgstr "" msgstr "Nazwa serwera"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain" msgid "Register a domain"
msgstr "" msgstr "Zarejestruj domenę"
#: mailu/ui/templates/domain/details.html:17 #: mailu/ui/templates/domain/details.html:17
msgid "Generate keys" msgid "Generate keys"
msgstr "" msgstr "Wygeneruj klucze"
#: mailu/ui/templates/domain/signup.html:13 #: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n" msgid "In order to register a new domain, you must first setup the\n"
@ -667,7 +695,7 @@ msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14 #: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain" msgid "Domain"
msgstr "" msgstr "Domena"
#: mailu/ui/templates/user/signup_domain.html:15 #: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots" msgid "Available slots"

@ -193,6 +193,34 @@ msgstr "Sua conta"
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "para acessar as ferramentas administrativas" msgstr "para acessar as ferramentas administrativas"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "Status do serviço"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr "Serviço"
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "Status"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "Imagem"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr "Iniciado"
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "Última atualização"
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "Minha conta" msgstr "Minha conta"
@ -548,127 +576,128 @@ msgstr "Novo domínio de encaminhamento"
#: mailu/ui/forms.py:125 #: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)" msgid "Your token (write it down, as it will never be displayed again)"
msgstr "" msgstr "Token (anote sem algum lugar pois não será mais exibido)\n"
""
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20 #: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP" msgid "Authorized IP"
msgstr "" msgstr "IP autorizado"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4 #: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens" msgid "Authentication tokens"
msgstr "" msgstr "Tokens de autenticação"
#: mailu/ui/templates/sidebar.html:72 #: mailu/ui/templates/sidebar.html:72
msgid "Go to" msgid "Go to"
msgstr "" msgstr "Ir para"
#: mailu/ui/templates/sidebar.html:76 #: mailu/ui/templates/sidebar.html:76
msgid "Webmail" msgid "Webmail"
msgstr "" msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:87 #: mailu/ui/templates/sidebar.html:87
msgid "Website" msgid "Website"
msgstr "" msgstr "Website"
#: mailu/ui/templates/token/create.html:4 #: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token" msgid "Create an authentication token"
msgstr "" msgstr "Criar token de autenticação"
#: mailu/ui/templates/token/list.html:12 #: mailu/ui/templates/token/list.html:12
msgid "New token" msgid "New token"
msgstr "" msgstr "Novo token"
#: mailu/ui/templates/user/create.html:15 #: mailu/ui/templates/user/create.html:15
msgid "General" msgid "General"
msgstr "" msgstr "Geral"
#: mailu/ui/templates/user/create.html:22 #: mailu/ui/templates/user/create.html:22
msgid "Features and quotas" msgid "Features and quotas"
msgstr "" msgstr "Recursos e quotas"
#: mailu/ui/templates/user/settings.html:14 #: mailu/ui/templates/user/settings.html:14
msgid "General settings" msgid "General settings"
msgstr "" msgstr "Configurações"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15 #: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam" msgid "Antispam"
msgstr "" msgstr "Antispam"
#: mailu/ui/forms.py:99 #: mailu/ui/forms.py:99
msgid "Spam filter tolerance" msgid "Spam filter tolerance"
msgstr "" msgstr "Filtro de tolerância de spam"
#: mailu/ui/forms.py:50 #: mailu/ui/forms.py:50
msgid "Enable sign-up" msgid "Enable sign-up"
msgstr "" msgstr "Habilitar acesso"
#: mailu/ui/forms.py:57 #: mailu/ui/forms.py:57
msgid "Initial admin" msgid "Initial admin"
msgstr "" msgstr "Administrador"
#: mailu/ui/forms.py:58 #: mailu/ui/forms.py:58
msgid "Admin password" msgid "Admin password"
msgstr "" msgstr "Senha administrador"
#: mailu/ui/forms.py:84 #: mailu/ui/forms.py:84
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr "Habilitado"
#: mailu/ui/forms.py:89 #: mailu/ui/forms.py:89
msgid "Email address" msgid "Email address"
msgstr "" msgstr "Endereço de email"
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117 #: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4 #: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4 #: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up" msgid "Sign up"
msgstr "" msgstr "Acesso"
#: mailu/ui/forms.py:119 #: mailu/ui/forms.py:119
msgid "End of vacation" msgid "End of vacation"
msgstr "" msgstr "Conclusão das férias"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup" msgid "Client setup"
msgstr "" msgstr "Configuração"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol" msgid "Mail protocol"
msgstr "" msgstr "Protocolo de e-mail"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name" msgid "Server name"
msgstr "" msgstr "Servidor"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain" msgid "Register a domain"
msgstr "" msgstr "Registrar domínio"
#: mailu/ui/templates/domain/details.html:17 #: mailu/ui/templates/domain/details.html:17
msgid "Generate keys" msgid "Generate keys"
msgstr "" msgstr "Gerar chaves"
#: mailu/ui/templates/domain/signup.html:13 #: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n" msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server" " domain zone so that the domain <code>MX</code> points to this server"
msgstr "" msgstr "Para registar um novo domínio, e necessário configurar as entradas <code>MX</code> no DNS"
#: mailu/ui/templates/domain/signup.html:18 #: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n" msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n" " please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n" " couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires." " expires."
msgstr "" msgstr "Caso não saiba configurar os registros <code>MX</code>no DNS, entre well contato com o administrador do domínio. Aos configurado, ajude alguns minutos até que o cachê local do servidor expire"
#: mailu/ui/templates/user/signup_domain.html:8 #: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account" msgid "pick a domain for the new account"
msgstr "" msgstr "Selecione o domínio da nova conta"
#: mailu/ui/templates/user/signup_domain.html:14 #: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain" msgid "Domain"
msgstr "" msgstr "Domínio"
#: mailu/ui/templates/user/signup_domain.html:15 #: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots" msgid "Available slots"
msgstr "" msgstr "Slots disponíveis"

@ -193,6 +193,34 @@ msgstr "Ваша учетная запись"
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "для доступа к утилитам администрирования" msgstr "для доступа к утилитам администрирования"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "Статусы сервисов"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr "Сервис"
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "Статус"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "PID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "Изображение"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr "Начато"
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "Последнее обновление"
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "Моя учетная запись" msgstr "Моя учетная запись"
@ -600,75 +628,79 @@ msgstr "Порог спам-фильтра"
#: mailu/ui/forms.py:50 #: mailu/ui/forms.py:50
msgid "Enable sign-up" msgid "Enable sign-up"
msgstr "" msgstr "Разрешить регистрацию"
#: mailu/ui/forms.py:57 #: mailu/ui/forms.py:57
msgid "Initial admin" msgid "Initial admin"
msgstr "" msgstr "Начальный админ"
#: mailu/ui/forms.py:58 #: mailu/ui/forms.py:58
msgid "Admin password" msgid "Admin password"
msgstr "" msgstr "Пароль администратора"
#: mailu/ui/forms.py:84 #: mailu/ui/forms.py:84
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr "Включено"
#: mailu/ui/forms.py:89 #: mailu/ui/forms.py:89
msgid "Email address" msgid "Email address"
msgstr "" msgstr "Почтовый адрес"
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117 #: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4 #: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4 #: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up" msgid "Sign up"
msgstr "" msgstr "Регистрация"
#: mailu/ui/forms.py:119 #: mailu/ui/forms.py:119
msgid "End of vacation" msgid "End of vacation"
msgstr "" msgstr "Конец отпуска"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup" msgid "Client setup"
msgstr "" msgstr "Настройка клиента"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol" msgid "Mail protocol"
msgstr "" msgstr "Почтовый протокол"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name" msgid "Server name"
msgstr "" msgstr "Имя сервера"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain" msgid "Register a domain"
msgstr "" msgstr "Зарегистрировать домен"
#: mailu/ui/templates/domain/details.html:17 #: mailu/ui/templates/domain/details.html:17
msgid "Generate keys" msgid "Generate keys"
msgstr "" msgstr "Сгенерировать ключи"
#: mailu/ui/templates/domain/signup.html:13 #: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n" msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server" " domain zone so that the domain <code>MX</code> points to this server"
msgstr "" msgstr "Чтобы зарегистрировать новый домен, вы должны сначала настроить\n"
"    доменная зона, так что домен <code> MX </ code> указывает на этот сервер"
#: mailu/ui/templates/domain/signup.html:18 #: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n" msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n" " please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n" " couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires." " expires."
msgstr "" msgstr "Если вы не знаете, как настроить запись <code> MX </ code> для своей зоны DNS,\n"
"    пожалуйста, свяжитесь с вашим поставщиком DNS или администратором. Также, пожалуйста, подождите\n"
"    через пару минут после установки <code> MX </ code>, чтобы кэш локального сервера\n"
"    истекает."
#: mailu/ui/templates/user/signup_domain.html:8 #: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account" msgid "pick a domain for the new account"
msgstr "" msgstr "выбрать домен для новой учетной записи"
#: mailu/ui/templates/user/signup_domain.html:14 #: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain" msgid "Domain"
msgstr "" msgstr "Домен"
#: mailu/ui/templates/user/signup_domain.html:15 #: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots" msgid "Available slots"
msgstr "" msgstr "Доступные слоты"

@ -5,7 +5,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n" "X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n" "Project-Id-Version: Mailu\n"
"Language: sv\n" "Language: sk\n"
#: mailu/ui/forms.py:32 #: mailu/ui/forms.py:32
msgid "Invalid email address." msgid "Invalid email address."
@ -193,6 +193,34 @@ msgstr "Ditt konto"
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "att komma åt administrationsverktygen" msgstr "att komma åt administrationsverktygen"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr ""
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr ""
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr ""
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr ""
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr ""
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr ""
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr ""
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "Mitt konto" msgstr "Mitt konto"

@ -193,6 +193,34 @@ msgstr "你的帐户"
msgid "to access the administration tools" msgid "to access the administration tools"
msgstr "访问管理员工具" msgstr "访问管理员工具"
#: mailu/ui/templates/services.html:4 mailu/ui/templates/sidebar.html:39
msgid "Services status"
msgstr "服务状态"
#: mailu/ui/templates/services.html:10
msgid "Service"
msgstr "服务"
#: mailu/ui/templates/fetch/list.html:23 mailu/ui/templates/services.html:11
msgid "Status"
msgstr "状态"
#: mailu/ui/templates/services.html:12
msgid "PID"
msgstr "进程ID"
#: mailu/ui/templates/services.html:13
msgid "Image"
msgstr "镜像"
#: mailu/ui/templates/services.html:14
msgid "Started"
msgstr "已开始"
#: mailu/ui/templates/services.html:15
msgid "Last update"
msgstr "最后更新"
#: mailu/ui/templates/sidebar.html:8 #: mailu/ui/templates/sidebar.html:8
msgid "My account" msgid "My account"
msgstr "我的帐户" msgstr "我的帐户"
@ -600,75 +628,75 @@ msgstr "垃圾邮件过滤器容忍度"
#: mailu/ui/forms.py:50 #: mailu/ui/forms.py:50
msgid "Enable sign-up" msgid "Enable sign-up"
msgstr "" msgstr "启用用户注册"
#: mailu/ui/forms.py:57 #: mailu/ui/forms.py:57
msgid "Initial admin" msgid "Initial admin"
msgstr "" msgstr "初始管理员"
#: mailu/ui/forms.py:58 #: mailu/ui/forms.py:58
msgid "Admin password" msgid "Admin password"
msgstr "" msgstr "管理员密码"
#: mailu/ui/forms.py:84 #: mailu/ui/forms.py:84
msgid "Enabled" msgid "Enabled"
msgstr "" msgstr "启用"
#: mailu/ui/forms.py:89 #: mailu/ui/forms.py:89
msgid "Email address" msgid "Email address"
msgstr "" msgstr "邮件地址"
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117 #: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4 #: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4 #: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up" msgid "Sign up"
msgstr "" msgstr "注册"
#: mailu/ui/forms.py:119 #: mailu/ui/forms.py:119
msgid "End of vacation" msgid "End of vacation"
msgstr "" msgstr "假期结束"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup" msgid "Client setup"
msgstr "" msgstr "客户端设置"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol" msgid "Mail protocol"
msgstr "" msgstr "邮件协议"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name" msgid "Server name"
msgstr "" msgstr "服务器名"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain" msgid "Register a domain"
msgstr "" msgstr "注册域名"
#: mailu/ui/templates/domain/details.html:17 #: mailu/ui/templates/domain/details.html:17
msgid "Generate keys" msgid "Generate keys"
msgstr "" msgstr "生成密钥"
#: mailu/ui/templates/domain/signup.html:13 #: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n" msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server" " domain zone so that the domain <code>MX</code> points to this server"
msgstr "" msgstr "在注册一个新的域名前,您必须先为该域名设置 <code>MX</code> 记录,并使其指向本服务器"
#: mailu/ui/templates/domain/signup.html:18 #: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n" msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n" " please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n" " couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires." " expires."
msgstr "" msgstr "如果您不知道如何为域名设置 <code>MX</code> 记录请联系你的DNS提供商或者系统管理员。在设置完成 <code>MX</code> 记录后,请等待本地域名服务器的缓存过期。"
#: mailu/ui/templates/user/signup_domain.html:8 #: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account" msgid "pick a domain for the new account"
msgstr "" msgstr "为新用户选择一个域名"
#: mailu/ui/templates/user/signup_domain.html:14 #: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain" msgid "Domain"
msgstr "" msgstr "域名"
#: mailu/ui/templates/user/signup_domain.html:15 #: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots" msgid "Available slots"
msgstr "" msgstr "可用"

@ -52,7 +52,7 @@
</a> </a>
</li> </li>
<li> <li>
<a href="{{ config["WEB_ADMIN"] }}/antispam/"> <a href="{{ config["WEB_ADMIN"] }}/antispam/" target="_blank">
<i class="fa fa-trash-o"></i> <span>{% trans %}Antispam{% endtrans %}</span> <i class="fa fa-trash-o"></i> <span>{% trans %}Antispam{% endtrans %}</span>
</a> </a>
</li> </li>
@ -69,7 +69,7 @@
<li class="header">{% trans %}Go to{% endtrans %}</li> <li class="header">{% trans %}Go to{% endtrans %}</li>
{% if config["WEBMAIL"] != "none" %} {% if config["WEBMAIL"] != "none" %}
<li> <li>
<a href="{{ config["WEB_WEBMAIL"] }}"> <a href="{{ config["WEB_WEBMAIL"] }}" target="_blank">
<i class="fa fa-envelope-o"></i> <span>{% trans %}Webmail{% endtrans %}</span> <i class="fa fa-envelope-o"></i> <span>{% trans %}Webmail{% endtrans %}</span>
</a> </a>
</li> </li>
@ -80,12 +80,12 @@
</a> </a>
</li> </li>
<li> <li>
<a href="{{ config["WEBSITE"] }}"> <a href="{{ config["WEBSITE"] }}" target="_blank">
<i class="fa fa-globe"></i> <span>{% trans %}Website{% endtrans %}</span> <i class="fa fa-globe"></i> <span>{% trans %}Website{% endtrans %}</span>
</a> </a>
</li> </li>
<li> <li>
<a href="https://mailu.io"> <a href="https://mailu.io" target="_blank">
<i class="fa fa-life-ring"></i> <span>{% trans %}Help{% endtrans %}</span> <i class="fa fa-life-ring"></i> <span>{% trans %}Help{% endtrans %}</span>
</a> </a>
</li> </li>

@ -25,7 +25,7 @@
<th>{% trans %}Last edit{% endtrans %}</th> <th>{% trans %}Last edit{% endtrans %}</th>
</tr> </tr>
{% for user in domain.users %} {% for user in domain.users %}
<tr> <tr {% if not user.enabled %}class="warning"{% endif %}>
<td> <td>
<a href="{{ url_for('.user_edit', user_email=user.email) }}" title="{% trans %}Edit{% endtrans %}"><i class="fa fa-pencil"></i></a>&nbsp; <a href="{{ url_for('.user_edit', user_email=user.email) }}" title="{% trans %}Edit{% endtrans %}"><i class="fa fa-pencil"></i></a>&nbsp;
<a href="{{ url_for('.user_delete', user_email=user.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a> <a href="{{ url_for('.user_delete', user_email=user.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>

@ -22,7 +22,7 @@ def fetch_create(user_email):
user_email = user_email or flask_login.current_user.email user_email = user_email or flask_login.current_user.email
user = models.User.query.get(user_email) or flask.abort(404) user = models.User.query.get(user_email) or flask.abort(404)
form = forms.FetchForm() form = forms.FetchForm()
form.pw.validators = [wtforms.validators.DataRequired()] form.password.validators = [wtforms.validators.DataRequired()]
if form.validate_on_submit(): if form.validate_on_submit():
fetch = models.Fetch(user=user) fetch = models.Fetch(user=user)
form.populate_obj(fetch) form.populate_obj(fetch)

@ -106,7 +106,7 @@ def upgrade():
# lower relays # lower relays
for relay in connection.execute(relay_table.select()): for relay in connection.execute(relay_table.select()):
connection.execute(relay_table.update().where( connection.execute(relay_table.update().where(
relay_tbale.c.name == relay.name relay_table.c.name == relay.name
).values( ).values(
name=relay.name.lower() name=relay.name.lower()
)) ))

@ -1,12 +1,10 @@
FROM alpine:3.8 FROM alpine:3.8
# python3 shared with most images # python3 shared with most images
RUN apk add --no-cache \ RUN apk add --no-cache \
python3 py3-pip \ python3 py3-pip git bash \
&& pip3 install --upgrade pip && pip3 install --upgrade pip
# Shared layer between rspamd, postfix, dovecot, unbound and nginx # Shared layer between rspamd, postfix, dovecot, unbound and nginx
RUN pip3 install jinja2 RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart
# Shared layer between rspamd, postfix, dovecot
RUN pip3 install tenacity
# Image specific layers under this line # Image specific layers under this line
RUN apk add --no-cache \ RUN apk add --no-cache \
dovecot dovecot-pigeonhole-plugin rspamd-client bash \ dovecot dovecot-pigeonhole-plugin rspamd-client bash \

@ -84,6 +84,7 @@ service auth-worker {
############### ###############
protocol imap { protocol imap {
mail_plugins = $mail_plugins imap_quota imap_sieve mail_plugins = $mail_plugins imap_quota imap_sieve
mail_max_userip_connections = 20
} }
protocol pop3 { protocol pop3 {

@ -1,47 +1,29 @@
#!/usr/bin/python3 #!/usr/bin/python3
import jinja2
import os import os
import socket
import glob import glob
import multiprocessing import multiprocessing
import tenacity
import logging as log import logging as log
import sys import sys
from mailustart import resolve, convert
from tenacity import retry
from podop import run_server from podop import run_server
log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING"))
def start_podop(): def start_podop():
os.setuid(8) os.setuid(8)
url = "http://" + os.environ["ADMIN_ADDRESS"] + "/internal/dovecot/§"
run_server(0, "dovecot", "/tmp/podop.socket", [ run_server(0, "dovecot", "/tmp/podop.socket", [
("quota", "url", "http://admin/internal/dovecot/§"), ("quota", "url", url ),
("auth", "url", "http://admin/internal/dovecot/§"), ("auth", "url", url),
("sieve", "url", "http://admin/internal/dovecot/§"), ("sieve", "url", url),
]) ])
def convert(src, dst):
logger = log.getLogger("convert()")
logger.debug("Source: %s, Destination: %s", src, dst)
open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ))
@retry(
stop=tenacity.stop_after_attempt(100),
wait=tenacity.wait_random(min=2, max=5),
before=tenacity.before_log(log.getLogger("tenacity.retry"), log.DEBUG),
before_sleep=tenacity.before_sleep_log(log.getLogger("tenacity.retry"), log.INFO),
after=tenacity.after_log(log.getLogger("tenacity.retry"), log.DEBUG)
)
def resolve(hostname):
logger = log.getLogger("resolve()")
logger.info(hostname)
return socket.gethostbyname(hostname)
# Actual startup script # Actual startup script
os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front"))
os.environ["REDIS_ADDRESS"] = resolve(os.environ.get("REDIS_ADDRESS", "redis")) os.environ["REDIS_ADDRESS"] = resolve(os.environ.get("REDIS_ADDRESS", "redis"))
os.environ["ADMIN_ADDRESS"] = resolve(os.environ.get("ADMIN_ADDRESS", "admin"))
if os.environ["WEBMAIL"] != "none": if os.environ["WEBMAIL"] != "none":
os.environ["WEBMAIL_ADDRESS"] = resolve(os.environ.get("WEBMAIL_ADDRESS", "webmail")) os.environ["WEBMAIL_ADDRESS"] = resolve(os.environ.get("WEBMAIL_ADDRESS", "webmail"))

@ -1,10 +1,10 @@
FROM alpine:3.8 FROM alpine:3.8
# python3 shared with most images # python3 shared with most images
RUN apk add --no-cache \ RUN apk add --no-cache \
python3 py3-pip \ python3 py3-pip git bash \
&& pip3 install --upgrade pip && pip3 install --upgrade pip
# Shared layer between rspamd, postfix, dovecot, unbound and nginx # Shared layer between rspamd, postfix, dovecot, unbound and nginx
RUN pip3 install jinja2 RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart
# Image specific layers under this line # Image specific layers under this line
RUN apk add --no-cache certbot nginx nginx-mod-mail openssl curl \ RUN apk add --no-cache certbot nginx nginx-mod-mail openssl curl \
&& pip3 install idna requests watchdog && pip3 install idna requests watchdog

@ -1,32 +1,27 @@
#!/usr/bin/python3 #!/usr/bin/python3
import jinja2
import os import os
import logging as log import logging as log
import sys import sys
from mailustart import resolve, convert
args = os.environ.copy() args = os.environ.copy()
log.basicConfig(stream=sys.stderr, level=args.get("LOG_LEVEL", "WARNING")) log.basicConfig(stream=sys.stderr, level=args.get("LOG_LEVEL", "WARNING"))
def convert(src, dst, args):
logger = log.getLogger("convert()")
logger.debug("Source: %s, Destination: %s", src, dst)
open(dst, "w").write(jinja2.Template(open(src).read()).render(**args))
# Get the first DNS server # Get the first DNS server
with open("/etc/resolv.conf") as handle: with open("/etc/resolv.conf") as handle:
content = handle.read().split() content = handle.read().split()
args["RESOLVER"] = content[content.index("nameserver") + 1] args["RESOLVER"] = content[content.index("nameserver") + 1]
if "HOST_WEBMAIL" not in args: args["HOST_ADMIN"] = resolve(args.get("HOST_ADMIN", "admin"))
args["HOST_WEBMAIL"] = "webmail" args["HOST_ANTISPAM"] = resolve(args.get("HOST_ANTISPAM", "antispam:11334"))
if "HOST_ADMIN" not in args: args["HOST_WEBMAIL"] = args.get("HOST_WEBMAIL", "webmail")
args["HOST_ADMIN"] = "admin" if args["WEBMAIL"] != "none":
if "HOST_WEBDAV" not in args: args["HOST_WEBMAIL"] = resolve(args.get("HOST_WEBMAIL"))
args["HOST_WEBDAV"] = "webdav:5232" args["HOST_WEBDAV"] = args.get("HOST_WEBDAV", "webdav:5232")
if "HOST_ANTISPAM" not in args: if args["WEBDAV"] != "none":
args["HOST_ANTISPAM"] = "antispam:11334" args["HOST_WEBDAV"] = resolve(args.get("HOST_WEBDAV"))
# TLS configuration # TLS configuration
cert_name = os.getenv("TLS_CERT_FILENAME", default="cert.pem") cert_name = os.getenv("TLS_CERT_FILENAME", default="cert.pem")

@ -1,12 +1,10 @@
FROM alpine:3.8 FROM alpine:3.8
# python3 shared with most images # python3 shared with most images
RUN apk add --no-cache \ RUN apk add --no-cache \
python3 py3-pip \ python3 py3-pip git bash \
&& pip3 install --upgrade pip && pip3 install --upgrade pip
# Shared layer between rspamd, postfix, dovecot, unbound and nginx # Shared layer between rspamd, postfix, dovecot, unbound and nginx
RUN pip3 install jinja2 RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart
# Shared layer between rspamd, postfix, dovecot
RUN pip3 install tenacity
# Image specific layers under this line # Image specific layers under this line
RUN apk add --no-cache postfix postfix-pcre rsyslog \ RUN apk add --no-cache postfix postfix-pcre rsyslog \

@ -112,3 +112,4 @@ milter_default_action = tempfail
############### ###############
# Extra Settings # Extra Settings
############### ###############

@ -1,53 +1,35 @@
#!/usr/bin/python3 #!/usr/bin/python3
import jinja2
import os import os
import socket
import glob import glob
import shutil import shutil
import tenacity
import multiprocessing import multiprocessing
import logging as log import logging as log
import sys import sys
from mailustart import resolve, convert
from tenacity import retry
from podop import run_server from podop import run_server
log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING"))
def start_podop(): def start_podop():
os.setuid(100) os.setuid(100)
url = "http://" + os.environ["ADMIN_ADDRESS"] + "/internal/postfix/"
# TODO: Remove verbosity setting from Podop? # TODO: Remove verbosity setting from Podop?
run_server(0, "postfix", "/tmp/podop.socket", [ run_server(0, "postfix", "/tmp/podop.socket", [
("transport", "url", "http://admin/internal/postfix/transport/§"), ("transport", "url", url + "transport/§"),
("alias", "url", "http://admin/internal/postfix/alias/§"), ("alias", "url", url + "alias/§"),
("domain", "url", "http://admin/internal/postfix/domain/§"), ("domain", "url", url + "domain/§"),
("mailbox", "url", "http://admin/internal/postfix/mailbox/§"), ("mailbox", "url", url + "mailbox/§"),
("senderaccess", "url", "http://admin/internal/postfix/sender/access/§"), ("senderaccess", "url", url + "sender/access/§"),
("senderlogin", "url", "http://admin/internal/postfix/sender/login/§") ("senderlogin", "url", url + "sender/login/§")
]) ])
def convert(src, dst):
logger = log.getLogger("convert()")
logger.debug("Source: %s, Destination: %s", src, dst)
open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ))
@retry(
stop=tenacity.stop_after_attempt(100),
wait=tenacity.wait_random(min=2, max=5),
before=tenacity.before_log(log.getLogger("tenacity.retry"), log.DEBUG),
before_sleep=tenacity.before_sleep_log(log.getLogger("tenacity.retry"), log.INFO),
after=tenacity.after_log(log.getLogger("tenacity.retry"), log.DEBUG)
)
def resolve(hostname):
logger = log.getLogger("resolve()")
logger.info(hostname)
return socket.gethostbyname(hostname)
# Actual startup script # Actual startup script
os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front"))
os.environ["HOST_ANTISPAM"] = os.environ.get("HOST_ANTISPAM", "antispam:11332") os.environ["ADMIN_ADDRESS"] = resolve(os.environ.get("ADMIN_ADDRESS", "admin"))
os.environ["HOST_LMTP"] = os.environ.get("HOST_LMTP", "imap:2525") os.environ["HOST_ANTISPAM"] = resolve(os.environ.get("HOST_ANTISPAM", "antispam:11332"))
os.environ["HOST_LMTP"] = resolve(os.environ.get("HOST_LMTP", "imap:2525"))
for postfix_file in glob.glob("/conf/*.cf"): for postfix_file in glob.glob("/conf/*.cf"):
convert(postfix_file, os.path.join("/etc/postfix", os.path.basename(postfix_file))) convert(postfix_file, os.path.join("/etc/postfix", os.path.basename(postfix_file)))

@ -4,11 +4,12 @@ Mailu command line
Managing users and aliases can be done from CLI using commands: Managing users and aliases can be done from CLI using commands:
* alias * alias
* alias_delete * alias-delete
* domain
* user * user
* user_import * user-import
* user_delete * user-delete
* config_update * config-update
alias alias
----- -----
@ -18,44 +19,54 @@ alias
docker-compose exec admin flask mailu alias foo example.net "mail1@example.com,mail2@example.com" docker-compose exec admin flask mailu alias foo example.net "mail1@example.com,mail2@example.com"
alias_delete alias-delete
------------ ------------
.. code-block:: bash .. code-block:: bash
docker-compose exec admin flask mailu alias_delete foo@example.net docker-compose exec admin flask mailu alias-delete foo@example.net
domain
----
.. code-block:: bash
docker-compose exec admin flask mailu domain example.net
user user
---- ----
.. code-block:: bash .. code-block:: bash
docker-compose exec admin flask mailu user --hash_scheme='SHA512-CRYPT' myuser example.net 'password123' docker-compose exec admin flask mailu user myuser example.net 'password123'
user_import
user-import
----------- -----------
primary difference with simple `user` command is that password is being imported as a hash - very useful when migrating users from other systems where only hash is known. primary difference with simple `user` command is that password is being imported as a hash - very useful when migrating users from other systems where only hash is known.
.. code-block:: bash .. code-block:: bash
docker-compose run --rm admin python manage.py user --hash_scheme='SHA512-CRYPT' myuser example.net '$6$51ebe0cb9f1dab48effa2a0ad8660cb489b445936b9ffd812a0b8f46bca66dd549fea530ce' docker-compose run --rm admin flask mailu user-import myuser example.net '$6$51ebe0cb9f1dab48effa2a0ad8660cb489b445936b9ffd812a0b8f46bca66dd549fea530ce' 'SHA512-CRYPT'
user_delete user-delete
------------ ------------
.. code-block:: bash .. code-block:: bash
docker-compose exec admin flask mailu user_delete foo@example.net docker-compose exec admin flask mailu user-delete foo@example.net
config_update config-update
------------- -------------
The sole purpose of this command is for importing users/aliases in bulk and synchronizing DB entries with external YAML template: The sole purpose of this command is for importing users/aliases in bulk and synchronizing DB entries with external YAML template:
.. code-block:: bash .. code-block:: bash
cat mail-config.yml | docker-compose exec admin flask mailu config_update --delete_objects cat mail-config.yml | docker-compose exec -T admin flask mailu config-update --delete-objects
where mail-config.yml looks like: where mail-config.yml looks like:
@ -72,7 +83,7 @@ where mail-config.yml looks like:
domain: example.com domain: example.com
destination: "user1@example.com,user2@example.com" destination: "user1@example.com,user2@example.com"
without ``--delete_object`` option config_update will only add/update new values but will *not* remove any entries missing in provided YAML input. without ``--delete-object`` option config-update will only add/update new values but will *not* remove any entries missing in provided YAML input.
Users Users
----- -----

@ -192,12 +192,10 @@ domain name would be required. This can be a simple free DynDNS account. Do not
server, as there are cases where data corruption occurs and you need to delete the ``/mailu`` server, as there are cases where data corruption occurs and you need to delete the ``/mailu``
directory structure. directory structure.
If you do no posses the resources, but want to become an involved tester/reviewer. If you do no posses the resources, but want to become an involved tester/reviewer, please contact
Please contact `muhlemmer on Matrix`_. us on `Matrix`_.
He can provide access to a testing server, if a trust relation can be established.
.. _`muhlemmer on Matrix`: https://matrix.to/#/@muhlemmer:matrix.org
.. _`Matrix`: https://matrix.to/#/#mailu:tedomum.net
.. _testing: .. _testing:
Test images Test images

@ -69,6 +69,24 @@ After some testing on master, we will approve and merge this new PR as well.
At the end of every milestone, a new stable branch will be created from ``master`` At the end of every milestone, a new stable branch will be created from ``master``
or any previous commit that matches the completion of the milestone. or any previous commit that matches the completion of the milestone.
CHANGELOG
`````````
Adding entries in the CHANGELOG is an automated process which requires creation of a file under
``towncrier/newsfragments`` directory.
The start of the filename is the ticket number, and the content is what will end up in the news file.
For example, if ticket ``#850`` is about adding a new widget, the filename would be towncrier/newsfragments/850.feature
and the content would be ``Feature that has just been added``.
Supported file extensions are:
- ``.feature``: Signifying a new feature.
- ``.bugfix``: Signifying a bug fix.
- ``.doc``: Signifying a documentation improvement.
- ``.removal``: Signifying a deprecation or removal of public API.
- ``.misc``: A ticket has been closed, but it is not of interest to users.
Forked projects Forked projects
--------------- ---------------

@ -71,22 +71,15 @@ We thank you for your understanding and patience.
I would like to donate (for a feature) I would like to donate (for a feature)
`````````````````````````````````````` ``````````````````````````````````````
Donations are welcome at the `patreon`_ account of the project lead. It will be used to pay Donations are welcome to the authors of the project directly, we do not manage any central
for infra structure and project related costs. If there are leftovers, it will be distributed donation pot. Also, check the ``AUTHORS.md`` file for Patreon link or equivalent. If you
among the developers. wish to contact a contributor specifically, please do so on `Matrix`_
It is not yet possible to pay for a specific feature. We don't have
any bounty system implemented. Feel free to come with suggestions in
our ongoing `project management`_ discussion issue.
.. _`Matrix`: https://matrix.to/#/#mailu:tedomum.net .. _`Matrix`: https://matrix.to/#/#mailu:tedomum.net
.. _`open issues`: https://github.com/Mailu/Mailu/issues .. _`open issues`: https://github.com/Mailu/Mailu/issues
.. _`new issue`: https://github.com/Mailu/Mailu/issues/new .. _`new issue`: https://github.com/Mailu/Mailu/issues/new
.. _`Enhancement issues`: https://github.com/Mailu/Mailu/issues?q=is%3Aissue+is%3Aopen+label%3Atype%2Fenhancement .. _`Enhancement issues`: https://github.com/Mailu/Mailu/issues?q=is%3Aissue+is%3Aopen+label%3Atype%2Fenhancement
.. _`Feature request issues`: https://github.com/Mailu/Mailu/issues?q=is%3Aopen+is%3Aissue+label%3Atype%2Ffeature .. _`Feature request issues`: https://github.com/Mailu/Mailu/issues?q=is%3Aopen+is%3Aissue+label%3Atype%2Ffeature
.. _`patreon`: https://patreon.com/kaiyou
.. _`project management`: https://github.com/Mailu/Mailu/issues/508
Deployment related Deployment related
------------------ ------------------
@ -136,6 +129,49 @@ You're mail service will be reachable for IMAP, POP3, SMTP and Webmail at the ad
*Issue reference:* `742`_, `747`_. *Issue reference:* `742`_, `747`_.
How to make IPv6 work?
``````````````````````
Docker currently does not expose the IPv6 ports properly, as it does not interface with ``ip6tables``.
Lets start with quoting everything that's wrong:
Unfortunately, initially Docker was not created with IPv6 in mind.
It was added later and, while it has come a long way, is still not as usable as one would want.
Much discussion is still going on as to how IPv6 should be used in a containerized world;
See the various GitHub issues linked below:
- Giving each container a publicly routable address means all ports (even unexposed / unpublished ports) are suddenly
reachable by everyone, if no additional filtering is done
(`docker/docker#21614 <https://github.com/docker/docker/issues/21614>`_)
- By default, each container gets a random IPv6, making it impossible to do properly do DNS;
the alternative is to assign a specific IPv6 address to each container,
still an administrative hassle (`docker/docker#13481 <https://github.com/docker/docker/issues/13481>`_)
- Published ports won't work on IPv6, unless you have the userland proxy enabled
(which, for now, is enabled by default in Docker)
- The userland proxy, however, seems to be on its way out
(`docker/docker#14856 <https://github.com/docker/docker/issues/14856>`_) and has various issues, like:
- It can use a lot of RAM (`docker/docker#11185 <https://github.com/docker/docker/issues/11185>`_)
- Source IP addresses are rewritten, making it completely unusable for many purposes, e.g. mail servers
(`docker/docker#17666 <https://github.com/docker/docker/issues/17666>`_),
(`docker/libnetwork#1099 <https://github.com/docker/libnetwork/issues/1099>`_).
-- `Robbert Klarenbeek <https://github.com/robbertkl>`_ (docker-ipv6nat author)
So, how to make it work? Well, by using `docker-ipv6nat`_! This nifty container will set up ``ip6tables``,
just as Docker would do for IPv4. We know that nat-ing is not advised in IPv6,
however exposing all containers to public network neither. The choice is ultimately yous.
Mailu `setup utility`_ generates a safe IPv6 ULA subnet by default. So when you run the following command,
Mailu will start to function on IPv6:
.. code-block:: bash
docker run -d --restart=always -v /var/run/docker.sock:/var/run/docker.sock:ro --privileged --net=host robbertkl/ipv6nat
.. _`docker-ipv6nat`: https://github.com/robbertkl/docker-ipv6nat
.. _`setup utility`: https://setup.mailu.io
How does Mailu scale up? How does Mailu scale up?
```````````````````````` ````````````````````````
@ -421,3 +457,7 @@ We **strongly** advice against downgrading the TLS version and ciphers!
.. _`681`: https://github.com/Mailu/Mailu/pull/681 .. _`681`: https://github.com/Mailu/Mailu/pull/681
.. _`698`: https://github.com/Mailu/Mailu/issues/698 .. _`698`: https://github.com/Mailu/Mailu/issues/698
.. _`unbound`: https://nlnetlabs.nl/projects/unbound/about/ .. _`unbound`: https://nlnetlabs.nl/projects/unbound/about/
A user gets ``Sender address rejected: Access denied. Please check the`` ``message recipient […] and try again`` even though the sender is legitimate?
``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
First, check if you are really sure the user is a legitimate sender, i.e. the registered user is authenticated successfully and own either the account or alias he/she is trying to send from. If you are really sure this is correct, then the user might try to errornously send via port 25 insteadof the designated SMTP client-ports. Port 25 is meant for server-to-server delivery, while users should use port 587 or 465.

@ -128,7 +128,7 @@ And in the pod run the following command. The command uses following entries:
.. code-block:: bash .. code-block:: bash
python manage.py admin root example.com password flask mailu admin root example.com password
- ``admin`` Make it an admin user - ``admin`` Make it an admin user
- ``root`` The first part of the e-mail address (ROOT@example.com) - ``root`` The first part of the e-mail address (ROOT@example.com)
@ -227,4 +227,4 @@ If the login problem still persists, or more specific, happens now and then and
kubectl -n mailu-mailserver get po kubectl -n mailu-mailserver get po
kubectl -n mailu-mailserver delete po/mailu-imap... kubectl -n mailu-mailserver delete po/mailu-imap...
Happy mailing! Happy mailing!

@ -1,7 +1,7 @@
FROM alpine:3.8 FROM alpine:3.8
# python3 shared with most images # python3 shared with most images
RUN apk add --no-cache \ RUN apk add --no-cache \
python3 py3-pip \ python3 py3-pip bash \
&& pip3 install --upgrade pip && pip3 install --upgrade pip
# Image specific layers under this line # Image specific layers under this line
RUN apk add --no-cache clamav rsyslog wget clamav-libunrar RUN apk add --no-cache clamav rsyslog wget clamav-libunrar

@ -1,7 +1,7 @@
FROM alpine:3.8 FROM alpine:3.8
# python3 shared with most images # python3 shared with most images
RUN apk add --no-cache \ RUN apk add --no-cache \
python3 py3-pip \ python3 py3-pip bash \
&& pip3 install --upgrade pip && pip3 install --upgrade pip
# Shared layer between rspamd, postfix, dovecot, unbound and nginx # Shared layer between rspamd, postfix, dovecot, unbound and nginx
RUN pip3 install jinja2 RUN pip3 install jinja2

@ -1,7 +1,7 @@
FROM alpine:edge FROM alpine:edge
RUN echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ RUN echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
&& apk add --no-cache radicale@testing py-dulwich@testing curl && apk add --no-cache radicale@testing py-dulwich@testing curl bash
COPY radicale.conf /radicale.conf COPY radicale.conf /radicale.conf

@ -0,0 +1,9 @@
[tool.towncrier]
#package = "mypackage"
package_dir = "towncrier"
filename = "CHANGELOG.md"
underlines = ["-", "", ""]
template = "towncrier/template.md"
title_format = "v{version} - {project_date}"
issue_format = "[#{issue}](https://github.com/Mailu/Mailu/issues/{issue})"
start_string = "<!-- TOWNCRIER -->"

@ -1,7 +1,7 @@
FROM alpine:3.8 FROM alpine:3.8
# python3 shared with most images # python3 shared with most images
RUN apk add --no-cache \ RUN apk add --no-cache \
python3 py3-pip \ python3 py3-pip bash \
&& pip3 install --upgrade pip && pip3 install --upgrade pip
# Image specific layers under this line # Image specific layers under this line
RUN apk add --no-cache fetchmail ca-certificates \ RUN apk add --no-cache fetchmail ca-certificates \

@ -1,12 +1,10 @@
FROM alpine:3.8 FROM alpine:3.8
# python3 shared with most images # python3 shared with most images
RUN apk add --no-cache \ RUN apk add --no-cache \
python3 py3-pip \ python3 py3-pip git bash \
&& pip3 install --upgrade pip && pip3 install --upgrade pip
# Shared layer between rspamd, postfix, dovecot, unbound and nginx # Shared layer between rspamd, postfix, dovecot, unbound and nginx
RUN pip3 install jinja2 RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart
# Shared layer between rspamd, postfix, dovecot
RUN pip3 install tenacity
# Image specific layers under this line # Image specific layers under this line
RUN apk add --no-cache rspamd rspamd-controller rspamd-proxy rspamd-fuzzy ca-certificates curl RUN apk add --no-cache rspamd rspamd-controller rspamd-proxy rspamd-fuzzy ca-certificates curl

@ -1,6 +1,8 @@
{% if ANTIVIRUS == 'clamav' %}
clamav { clamav {
attachments_only = true; attachments_only = true;
symbol = "CLAM_VIRUS"; symbol = "CLAM_VIRUS";
type = "clamav"; type = "clamav";
servers = "antivirus:3310"; servers = "antivirus:3310";
} }
{% endif %}

@ -1,34 +1,13 @@
#!/usr/bin/python3 #!/usr/bin/python3
import jinja2
import os import os
import socket
import glob import glob
import tenacity
import logging as log import logging as log
import sys import sys
from mailustart import resolve, convert
from tenacity import retry
log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING"))
def convert(src, dst):
logger = log.getLogger("convert()")
logger.debug("Source: %s, Destination: %s", src, dst)
open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ))
@retry(
stop=tenacity.stop_after_attempt(100),
wait=tenacity.wait_random(min=2, max=5),
before=tenacity.before_log(log.getLogger("tenacity.retry"), log.DEBUG),
before_sleep=tenacity.before_sleep_log(log.getLogger("tenacity.retry"), log.INFO),
after=tenacity.after_log(log.getLogger("tenacity.retry"), log.DEBUG)
)
def resolve(hostname):
logger = log.getLogger("resolve()")
logger.info(hostname)
return socket.gethostbyname(hostname)
# Actual startup script # Actual startup script
os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front"))

@ -1,10 +1,10 @@
FROM alpine:3.8 FROM alpine:3.8
# python3 shared with most images # python3 shared with most images
RUN apk add --no-cache \ RUN apk add --no-cache \
python3 py3-pip \ python3 py3-pip git bash \
&& pip3 install --upgrade pip && pip3 install --upgrade pip
# Shared layer between rspamd, postfix, dovecot, unbound and nginx # Shared layer between rspamd, postfix, dovecot, unbound and nginx
RUN pip3 install jinja2 RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart
# Image specific layers under this line # Image specific layers under this line
RUN apk add --no-cache unbound curl bind-tools \ RUN apk add --no-cache unbound curl bind-tools \
&& curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache \ && curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache \

@ -1,17 +1,12 @@
#!/usr/bin/python3 #!/usr/bin/python3
import jinja2
import os import os
import logging as log import logging as log
import sys import sys
from mailustart import convert
log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING"))
def convert(src, dst):
logger = log.getLogger("convert()")
logger.debug("Source: %s, Destination: %s", src, dst)
open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ))
convert("/unbound.conf", "/etc/unbound/unbound.conf") convert("/unbound.conf", "/etc/unbound/unbound.conf")
os.execv("/usr/sbin/unbound", ["-c /etc/unbound/unbound.conf"]) os.execv("/usr/sbin/unbound", ["-c /etc/unbound/unbound.conf"])

@ -3,7 +3,7 @@
# Please read the documentation before attempting any change. # Please read the documentation before attempting any change.
# Generated for {{ flavor }} flavor # Generated for {{ flavor }} flavor
version: '3.6' version: '2.2'
services: services:
@ -160,8 +160,14 @@ services:
networks: networks:
default: default:
{% if ipv6_enabled %}
enable_ipv6: true
{% endif %}
driver: bridge driver: bridge
ipam: ipam:
driver: default driver: default
config: config:
- subnet: {{ subnet }} - subnet: {{ subnet }}
{% if ipv6_enabled %}
- subnet: {{ subnet6 }}
{% endif %}

@ -1,8 +1,6 @@
# Mailu main configuration file # Mailu main configuration file
# #
# Generated for {{ flavor }} flavor # This file is autogenerated by the configuration management wizard for {{ flavor }} flavor.
#
# This file is autogenerated by the configuration management wizard.
# For a detailed list of configuration variables, see the documentation at # For a detailed list of configuration variables, see the documentation at
# https://mailu.io # https://mailu.io
@ -10,23 +8,14 @@
# Common configuration variables # Common configuration variables
################################### ###################################
# Set this to the path where Mailu data and configuration is stored
# This variable is now set directly in `docker-compose.yml by the setup utility
# ROOT={{ root }}
# Mailu version to run (1.0, 1.1, etc. or master)
#VERSION={{ version }}
# Set to a randomly generated 16 bytes string # Set to a randomly generated 16 bytes string
SECRET_KEY={{ secret(16) }} SECRET_KEY={{ secret(16) }}
# Address where listening ports should bind
# This variables are now set directly in `docker-compose.yml by the setup utility
# PUBLIC_IPV4= {{ bind4 }} (default: 127.0.0.1)
# PUBLIC_IPV6= {{ bind6 }} (default: ::1)
# Subnet of the docker network. This should not conflict with any networks to which your system is connected. (Internal and external!) # Subnet of the docker network. This should not conflict with any networks to which your system is connected. (Internal and external!)
SUBNET={{ subnet }} SUBNET={{ subnet }}
{% if ipv6_enabled %}
SUBNET6={{ subnet6 }}
{% endif %}
# Main mail domain # Main mail domain
DOMAIN={{ domain }} DOMAIN={{ domain }}
@ -64,9 +53,6 @@ WEBDAV={{ webdav_enabled or 'none' }}
# Antivirus solution (value: clamav, none) # Antivirus solution (value: clamav, none)
#ANTIVIRUS={{ antivirus_enabled or 'none' }} #ANTIVIRUS={{ antivirus_enabled or 'none' }}
#Antispam solution
ANTISPAM={{ antispam_enabled or 'none'}}
################################### ###################################
# Mail settings # Mail settings
################################### ###################################
@ -110,13 +96,21 @@ COMPRESSION_LEVEL={{ compression_level }}
################################### ###################################
# Path to redirect / to # Path to redirect / to
WEBROOT_REDIRECT=/webmail {% if webmail_type != 'none' and webmail_path == '' %}
WEBROOT_REDIRECT=/
{% else %}
WEBROOT_REDIRECT={{ webmail_path }}
{% endif %}
# Path to the admin interface if enabled # Path to the admin interface if enabled
WEB_ADMIN={{ admin_path }} WEB_ADMIN={{ admin_path }}
# Path to the webmail if enabled # Path to the webmail if enabled
{% if webmail_type != 'none' and webmail_path == '' %}
WEB_WEBMAIL=/
{% else %}
WEB_WEBMAIL={{ webmail_path }} WEB_WEBMAIL={{ webmail_path }}
{% endif %}
# Website name # Website name
SITENAME={{ site_name }} SITENAME={{ site_name }}

@ -44,8 +44,13 @@ Before you can use Mailu, you must create the primary administrator user account
one of the hostnames one of the hostnames
<a href="https://{{ hostnames.split(',')[0] }}{{ admin_path }}">{{ hostnames.split(',')[0] }}{{ admin_path }}</a>. <a href="https://{{ hostnames.split(',')[0] }}{{ admin_path }}">{{ hostnames.split(',')[0] }}{{ admin_path }}</a>.
{% else %} {% else %}
<a href="http://127.0.0.1:8080">http://127.0.0.1:8080</a> (only directly from the host running docker). <a href="http://127.0.0.1:8080/ui">http://127.0.0.1:8080/ui</a> (only directly from the host running docker).
If you run mailu on a remote server, and wish to access the admin interface via a SSH tunnel, you can create a port-forward from your local machine to your server like
<pre><code>ssh -L 127.0.0.1:8080:127.0.0.1:8080 &lt;user&gt;@&lt;server&gt;
</code></pre>
And access the above URL from your local machine.
<br />
{% endif %} {% endif %}
And choose the "Update password" option in the left menu. Also, choose the "Update password" option in the left menu.
</p> </p>
{% endcall %} {% endcall %}

@ -4,7 +4,7 @@
<p>Docker Stack expects a project file, named <code>docker-compose.yml</code> <p>Docker Stack expects a project file, named <code>docker-compose.yml</code>
in a project directory. First create your project directory.</p> in a project directory. First create your project directory.</p>
<pre><code>mkdir -p /{{ root }}/{redis,certs,data,dkim,mail,overrides/rspamd,filter,dav,webmail} <pre><code>mkdir -p /{{ root }}/{redis,certs,data,dkim,mail,overrides/rspamd,overrides/nginx,filter,dav,webmail}
</pre></code> </pre></code>
<p>Then download the project file. A side configuration file makes it easier <p>Then download the project file. A side configuration file makes it easier
@ -50,11 +50,16 @@ Before you can use Mailu, you must create the primary administrator user account
<p>Login to the admin interface to change the password for a safe one, at <p>Login to the admin interface to change the password for a safe one, at
{% if admin_enabled %} {% if admin_enabled %}
one of the hostnames one of the hostnames
<a href="https://{{ hostnames.split(',')[0] }}{{ admin_path }}">{{ hostnames.split(',')[0] }}{{ admin_path }}</a>. <a href="https://{{ hostnames.split(',')[0] }}{{ admin_path }}">{{ hostnames.split(',')[0] }}{{ admin_path }}</a>.
{% else %} {% else %}
<a href="http://127.0.0.1:8080">http://127.0.0.1:8080</a> (only directly from the host running docker). <a href="http://127.0.0.1:8080/ui">http://127.0.0.1:8080/ui</a> (only directly from the host running docker).
If you run mailu on a remote server, and wish to access the admin interface via a SSH tunnel, you can create a port-forward from your local machine to your server like
<pre><code>ssh -L 127.0.0.1:8080:127.0.0.1:8080 &lt;user&gt;@&lt;server&gt;
</code></pre>
And access the above URL from your local machine.
<br />
{% endif %} {% endif %}
And choose the "Update password" option in the left menu. Also, choose the "Update password" option in the left menu.
</p> </p>
{% endcall %} {% endcall %}

@ -9,6 +9,7 @@ import string
import random import random
import ipaddress import ipaddress
import hashlib import hashlib
import time
version = os.getenv("this_version", "master") version = os.getenv("this_version", "master")
@ -33,6 +34,17 @@ def secret(length=16):
for _ in range(length) for _ in range(length)
) )
#Original copied from https://github.com/andrewlkho/ulagen
def random_ipv6_subnet():
eui64 = uuid.getnode() >> 24 << 48 | 0xfffe000000 | uuid.getnode() & 0xffffff
eui64_canon = "-".join([format(eui64, "02X")[i:i+2] for i in range(0, 18, 2)])
h = hashlib.sha1()
h.update((eui64_canon + str(time.time() - time.mktime((1900, 1, 1, 0, 0, 0, 0, 1, -1)))).encode('utf-8'))
globalid = h.hexdigest()[0:10]
prefix = ":".join(("fd" + globalid[0:2], globalid[2:6], globalid[6:10]))
return prefix
def build_app(path): def build_app(path):
@ -69,15 +81,19 @@ def build_app(path):
@root_bp.route("/submit_flavor", methods=["POST"]) @root_bp.route("/submit_flavor", methods=["POST"])
def submit_flavor(): def submit_flavor():
data = flask.request.form.copy() data = flask.request.form.copy()
subnet6 = random_ipv6_subnet()
steps = sorted(os.listdir(os.path.join(path, "templates", "steps", data["flavor"]))) steps = sorted(os.listdir(os.path.join(path, "templates", "steps", data["flavor"])))
return flask.render_template('wizard.html', flavor=data["flavor"], steps=steps) return flask.render_template('wizard.html', flavor=data["flavor"], steps=steps, subnet6=subnet6)
@prefix_bp.route("/submit", methods=["POST"]) @prefix_bp.route("/submit", methods=["POST"])
@root_bp.route("/submit", methods=["POST"]) @root_bp.route("/submit", methods=["POST"])
def submit(): def submit():
data = flask.request.form.copy() data = flask.request.form.copy()
data['uid'] = str(uuid.uuid4()) data['uid'] = str(uuid.uuid4())
data['dns'] = str(ipaddress.IPv4Network(data['subnet'])[-2]) try:
data['dns'] = str(ipaddress.IPv4Network(data['subnet'])[-2])
except ValueError as err:
return "Error while generating files: " + str(err)
db.set(data['uid'], json.dumps(data)) db.set(data['uid'], json.dumps(data))
return flask.redirect(flask.url_for('.setup', uid=data['uid'])) return flask.redirect(flask.url_for('.setup', uid=data['uid']))

@ -86,3 +86,16 @@ $(document).ready(function() {
} }
}); });
}); });
$(document).ready(function() {
if ($('#enable_ipv6').prop('checked')) {
$("#ipv6").show();
}
$("#enable_ipv6").change(function() {
if ($(this).is(":checked")) {
$("#ipv6").show();
} else {
$("#ipv6").hide();
}
});
});

@ -18,13 +18,26 @@ avoid generic all-interfaces addresses like <code>0.0.0.0</code> or <code>::</co
<!-- Validates IPv4 address --> <!-- Validates IPv4 address -->
<input class="form-control" type="text" name="bind4" value="127.0.0.1" <input class="form-control" type="text" name="bind4" value="127.0.0.1"
pattern="^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"> pattern="^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$">
<label>Subnet of the docker network. This should not conflict with any networks to which your system is connected. (Internal and external!)</label>
<input class="form-control" type="text" name="subnet" required pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))$"
value="192.168.203.0/24">
</div> </div>
<div class="form-group"> <div class="form-check form-check-inline">
<label class="form-check-label">
<input class="form-check-input" type="checkbox" name="ipv6_enabled" value="true" id="enable_ipv6">
Enable IPv6
</label>
</div>
<div class="form-group" id="ipv6" style="display: none">
<p><span class="label label-danger">Read this:</span> Docker currently does not expose the IPv6 ports properly, as it does not interface with <code>ip6tables</code>. Be sure to read our <a href="https://mailu.io/{{ version }}/faq.html#how-to-make-ipv6-work">FAQ section</a>!</p>
<label>IPv6 listen address</label> <label>IPv6 listen address</label>
<!-- Validates IPv6 address --> <!-- Validates IPv6 address -->
<input class="form-control" type="text" name="bind6" value="::1" <input class="form-control" type="text" name="bind6" value="::1"
pattern="^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$"> pattern="^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$">
<label>Subnet of the docker network. This should not conflict with any networks to which your system is connected. (Internal and external!)</label>
<input class="form-control" type="text" name="subnet6" required value="{{ subnet6 }}:beef::/64">
</div> </div>
<p>The unbound resolver enables Mailu to do DNSsec verification, DNS root lookups and caching. This also helps the antispam service not to get blocked by the public or ISP DNS servers.</p> <p>The unbound resolver enables Mailu to do DNSsec verification, DNS root lookups and caching. This also helps the antispam service not to get blocked by the public or ISP DNS servers.</p>
@ -34,12 +47,6 @@ avoid generic all-interfaces addresses like <code>0.0.0.0</code> or <code>::</co
Enable unbound resolver Enable unbound resolver
</label> </label>
</div> </div>
<br><br>
<div class="form-group">
<label>Subnet of the docker network. This should not conflict with any networks to which your system is connected. (Internal and external!)</label>
<input class="form-control" type="text" name="subnet" required pattern="^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))$"
value="192.168.203.0/24">
</div>
<p>You server will be available under a main hostname but may expose multiple public <p>You server will be available under a main hostname but may expose multiple public
hostnames. Every e-mail domain that points to this server must have one of the hostnames. Every e-mail domain that points to this server must have one of the

@ -30,9 +30,9 @@ services:
image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}radicale:${MAILU_VERSION:-local} image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}radicale:${MAILU_VERSION:-local}
build: ../optional/radicale build: ../optional/radicale
traefik-certdumper: # traefik-certdumper:
image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}traefik-certdumper:${MAILU_VERSION:-local} # image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}traefik-certdumper:${MAILU_VERSION:-local}
build: ../optional/traefik-certdumper # build: ../optional/traefik-certdumper
admin: admin:
image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}admin:${MAILU_VERSION:-local} image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}admin:${MAILU_VERSION:-local}

@ -60,7 +60,7 @@ WEBMAIL=none
WEBDAV=none WEBDAV=none
# Antivirus solution (value: clamav, none) # Antivirus solution (value: clamav, none)
#ANTIVIRUS=clamav ANTIVIRUS=clamav
#Antispam solution #Antispam solution
ANTISPAM=none ANTISPAM=none

@ -0,0 +1 @@
Make aliases optionally case-insensitive: After attempting to resolve an alias in its preserved case, also attempt to match it case-insensitively

@ -0,0 +1,32 @@
{% for section, _ in sections.items() %}
{% set underline = underlines[0] %}{% if section %}{{section}}
{{ underline * section|length }}{% set underline = underlines[1] %}
{% endif %}
{% if sections[section] %}
{% for category, val in definitions.items() if category in sections[section]%}
{{ definitions[category]['name'] }}
{{ underline * definitions[category]['name']|length }}
{% if definitions[category]['showcontent'] %}
{% for text, values in sections[section][category].items() %}
- {{ text }} ({{ values|join(', ') }})
{% endfor %}
{% else %}
- {{ sections[section][category]['']|join(', ') }}
{% endif %}
{% if sections[section][category]|length == 0 %}
No significant changes.
{% else %}
{% endif %}
{% endfor %}
{% else %}
No significant changes.
{% endif %}
{% endfor %}

@ -1,7 +1,7 @@
FROM php:7.2-apache FROM php:7.2-apache
#Shared layer between rainloop and roundcube #Shared layer between rainloop and roundcube
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
python3 curl \ python3 curl python3-pip git \
&& rm -rf /var/lib/apt/lists \ && rm -rf /var/lib/apt/lists \
&& echo "ServerSignature Off" >> /etc/apache2/apache2.conf && echo "ServerSignature Off" >> /etc/apache2/apache2.conf
@ -21,11 +21,13 @@ RUN apt-get update && apt-get install -y \
&& chown -R www-data: * \ && chown -R www-data: * \
&& apt-get purge -y unzip \ && apt-get purge -y unzip \
&& rm -rf /var/lib/apt/lists && rm -rf /var/lib/apt/lists
RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart
COPY include.php /var/www/html/include.php COPY include.php /var/www/html/include.php
COPY php.ini /php.ini COPY php.ini /php.ini
COPY config.ini /config.ini COPY application.ini /application.ini
COPY default.ini /default.ini COPY default.ini /default.ini
COPY start.py /start.py COPY start.py /start.py

@ -15,5 +15,5 @@ function __get_custom_data_full_path()
*/ */
function __get_additional_configuration_name() function __get_additional_configuration_name()
{ {
return 'config.ini'; return 'application.ini';
} }

@ -1,21 +1,16 @@
#!/usr/bin/python3 #!/usr/bin/python3
import jinja2
import os import os
import shutil import shutil
import logging as log import logging as log
import sys import sys
from mailustart import resolve, convert
log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING"))
def convert(src, dst):
logger = log.getLogger("convert()")
logger.debug("Source: %s, Destination: %s", src, dst)
open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ))
# Actual startup script # Actual startup script
os.environ["FRONT_ADDRESS"] = os.environ.get("FRONT_ADDRESS", "front") os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front"))
os.environ["IMAP_ADDRESS"] = os.environ.get("IMAP_ADDRESS", "imap") os.environ["IMAP_ADDRESS"] = resolve(os.environ.get("IMAP_ADDRESS", "imap"))
os.environ["MAX_FILESIZE"] = str(int(int(os.environ.get("MESSAGE_SIZE_LIMIT"))*0.66/1048576)) os.environ["MAX_FILESIZE"] = str(int(int(os.environ.get("MESSAGE_SIZE_LIMIT"))*0.66/1048576))
@ -25,7 +20,7 @@ os.makedirs(base + "domains", exist_ok=True)
os.makedirs(base + "configs", exist_ok=True) os.makedirs(base + "configs", exist_ok=True)
convert("/default.ini", "/data/_data_/_default_/domains/default.ini") convert("/default.ini", "/data/_data_/_default_/domains/default.ini")
convert("/config.ini", "/data/_data_/_default_/configs/config.ini") convert("/application.ini", "/data/_data_/_default_/configs/application.ini")
convert("/php.ini", "/usr/local/etc/php/conf.d/rainloop.ini") convert("/php.ini", "/usr/local/etc/php/conf.d/rainloop.ini")
os.system("chown -R www-data:www-data /data") os.system("chown -R www-data:www-data /data")

@ -1,11 +1,11 @@
FROM php:7.2-apache FROM php:7.2-apache
#Shared layer between rainloop and roundcube #Shared layer between rainloop and roundcube
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
python3 curl \ python3 curl python3-pip git \
&& rm -rf /var/lib/apt/lists \ && rm -rf /var/lib/apt/lists \
&& echo "ServerSignature Off" >> /etc/apache2/apache2.conf && echo "ServerSignature Off" >> /etc/apache2/apache2.conf
ENV ROUNDCUBE_URL https://github.com/roundcube/roundcubemail/releases/download/1.3.8/roundcubemail-1.3.8-complete.tar.gz ENV ROUNDCUBE_URL https://github.com/roundcube/roundcubemail/releases/download/1.3.9/roundcubemail-1.3.9-complete.tar.gz
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
zlib1g-dev python3-jinja2 \ zlib1g-dev python3-jinja2 \
@ -23,6 +23,8 @@ RUN apt-get update && apt-get install -y \
&& chown -R www-data: logs temp \ && chown -R www-data: logs temp \
&& rm -rf /var/lib/apt/lists && rm -rf /var/lib/apt/lists
RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart
COPY php.ini /php.ini COPY php.ini /php.ini
COPY config.inc.php /var/www/html/config/ COPY config.inc.php /var/www/html/config/
COPY start.py /start.py COPY start.py /start.py

@ -1,17 +1,12 @@
#!/usr/bin/python3 #!/usr/bin/python3
import os import os
import jinja2
import logging as log import logging as log
import sys import sys
from mailustart import convert
log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING"))
def convert(src, dst):
logger = log.getLogger("convert()")
logger.debug("Source: %s, Destination: %s", src, dst)
open(dst, "w").write(jinja2.Template(open(src).read()).render(**os.environ))
os.environ["MAX_FILESIZE"] = str(int(int(os.environ.get("MESSAGE_SIZE_LIMIT"))*0.66/1048576)) os.environ["MAX_FILESIZE"] = str(int(int(os.environ.get("MESSAGE_SIZE_LIMIT"))*0.66/1048576))
convert("/php.ini", "/usr/local/etc/php/conf.d/roundcube.ini") convert("/php.ini", "/usr/local/etc/php/conf.d/roundcube.ini")

Loading…
Cancel
Save