diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ebbcced..96c0f9f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 upgrading Freposte.io as some changes will include useful notes. + + 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: 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: 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 ------------------- @@ -36,7 +44,6 @@ v1.6.0 - 2019-01-18 - Feature: Automated Releases ([#487](https://github.com/Mailu/Mailu/issues/487)) - 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: 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: 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)) @@ -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: 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: Better support and document IPv6 ([#827](https://github.com/Mailu/Mailu/issues/827)) - Upstream: Update Roundcube - Upstream: Update Rainloop - Bug: Rainloop fails with "domain not allowed" ([#93](https://github.com/Mailu/Mailu/issues/93)) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 856fa5a0..059318fc 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -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. - [ ] 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. diff --git a/core/admin/Dockerfile b/core/admin/Dockerfile index 33c0bde7..40f9ff59 100644 --- a/core/admin/Dockerfile +++ b/core/admin/Dockerfile @@ -1,8 +1,9 @@ FROM alpine:3.8 # python3 shared with most images RUN apk add --no-cache \ - python3 py3-pip \ + python3 py3-pip git bash \ && pip3 install --upgrade pip +RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart # Image specific layers under this line RUN mkdir -p /app WORKDIR /app diff --git a/core/admin/mailu/configuration.py b/core/admin/mailu/configuration.py index 8ccafce2..14ead3dd 100644 --- a/core/admin/mailu/configuration.py +++ b/core/admin/mailu/configuration.py @@ -1,5 +1,5 @@ import os - +from mailustart import resolve DEFAULT_CONFIG = { # Specific to the admin UI @@ -46,6 +46,7 @@ DEFAULT_CONFIG = { 'WEBSITE': 'https://mailu.io', 'WEB_ADMIN': '/admin', 'WEB_WEBMAIL': '/webmail', + 'WEBMAIL': 'none', 'RECAPTCHA_PUBLIC_KEY': '', 'RECAPTCHA_PRIVATE_KEY': '', # Advanced settings @@ -61,7 +62,6 @@ DEFAULT_CONFIG = { 'POD_ADDRESS_RANGE': None } - class ConfigManager(dict): """ Naive configuration manager that uses environment only """ @@ -75,6 +75,14 @@ class ConfigManager(dict): def __init__(self): 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): if isinstance(value, str) and value.lower() in ('true','yes'): return True @@ -89,6 +97,7 @@ class ConfigManager(dict): key: self.__coerce_value(os.environ.get(key, value)) for key, value in DEFAULT_CONFIG.items() }) + self.resolve_host() # automatically set the sqlalchemy string if self.config['DB_FLAVOR']: diff --git a/core/admin/mailu/internal/__init__.py b/core/admin/mailu/internal/__init__.py index fcb19692..cf0ea3f7 100644 --- a/core/admin/mailu/internal/__init__.py +++ b/core/admin/mailu/internal/__init__.py @@ -1,6 +1,7 @@ from flask_limiter import RateLimitExceeded from mailu import utils +from flask import current_app as app import socket import flask @@ -23,7 +24,7 @@ def rate_limit_handler(e): def whitelist_webmail(): try: return flask.request.headers["Client-Ip"] ==\ - socket.gethostbyname("webmail") + app.config["HOST_WEBMAIL"] except: return False diff --git a/core/admin/mailu/internal/nginx.py b/core/admin/mailu/internal/nginx.py index 460719f2..2dac4db1 100644 --- a/core/admin/mailu/internal/nginx.py +++ b/core/admin/mailu/internal/nginx.py @@ -2,7 +2,6 @@ from mailu import models from flask import current_app as app import re -import socket import urllib @@ -89,5 +88,4 @@ def get_server(protocol, authenticated=False): hostname, port = extract_host_port(app.config['HOST_AUTHSMTP'], 10025) else: hostname, port = extract_host_port(app.config['HOST_SMTP'], 25) - address = socket.gethostbyname(hostname) - return address, port + return hostname, port diff --git a/core/admin/mailu/manage.py b/core/admin/mailu/manage.py index cbedc0d1..c22f9264 100644 --- a/core/admin/mailu/manage.py +++ b/core/admin/mailu/manage.py @@ -86,7 +86,7 @@ def admin(localpart, domain_name, password, mode = 'create'): @click.argument('localpart') @click.argument('domain_name') @click.argument('password') -@click.argument('hash_scheme') +@click.argument('hash_scheme', required=False) @flask_cli.with_appcontext def user(localpart, domain_name, password, hash_scheme=None): """ Create a user @@ -108,15 +108,18 @@ def user(localpart, domain_name, password, hash_scheme=None): @mailu.command() -@click.option('-n', '--domain_name') -@click.option('-u', '--max_users') -@click.option('-a', '--max_aliases') -@click.option('-q', '--max_quota_bytes') +@click.argument('domain_name') +@click.option('-u', '--max-users') +@click.option('-a', '--max-aliases') +@click.option('-q', '--max-quota-bytes') @flask_cli.with_appcontext def domain(domain_name, max_users=-1, max_aliases=-1, max_quota_bytes=0): + """ Create a domain + """ domain = models.Domain.query.get(domain_name) 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.commit() @@ -148,7 +151,7 @@ def user_import(localpart, domain_name, password_hash, hash_scheme = None): @mailu.command() @click.option('-v', '--verbose') -@click.option('-d', '--delete_objects') +@click.option('-d', '--delete-objects') @flask_cli.with_appcontext def config_update(verbose=False, delete_objects=False): """sync configuration with data from YAML-formatted stdin""" diff --git a/core/admin/mailu/models.py b/core/admin/mailu/models.py index 8bfb12fb..95dc16a6 100644 --- a/core/admin/mailu/models.py +++ b/core/admin/mailu/models.py @@ -436,20 +436,37 @@ class Alias(Base, Email): @classmethod def resolve(cls, localpart, domain_name): - return cls.query.filter( - sqlalchemy.and_(cls.domain_name == domain_name, - sqlalchemy.or_( - sqlalchemy.and_( - cls.wildcard == False, - cls.localpart == localpart - ), sqlalchemy.and_( - cls.wildcard == True, - sqlalchemy.bindparam("l", localpart).like(cls.localpart) + alias_preserve_case = cls.query.filter( + sqlalchemy.and_(cls.domain_name == domain_name, + sqlalchemy.or_( + sqlalchemy.and_( + cls.wildcard == False, + cls.localpart == localpart + ), sqlalchemy.and_( + cls.wildcard == True, + 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): """ A token is an application password for a given user. diff --git a/core/admin/mailu/translations/de/LC_MESSAGES/messages.po b/core/admin/mailu/translations/de/LC_MESSAGES/messages.po index c733b45d..941c22ef 100644 --- a/core/admin/mailu/translations/de/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/de/LC_MESSAGES/messages.po @@ -158,11 +158,11 @@ msgstr "Hostname oder IP" #: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20 #: mailu/ui/templates/client.html:47 msgid "TCP port" -msgstr "Port" +msgstr "TCP Port" #: mailu/ui/forms.py:160 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/templates/client.html:55 mailu/ui/templates/fetch/list.html:20 @@ -193,6 +193,34 @@ msgstr "Konto" msgid "to access the administration tools" 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 msgid "My account" msgstr "Mein Konto" @@ -600,75 +628,75 @@ msgstr "Spamfilter-Grenzwert" #: mailu/ui/forms.py:50 msgid "Enable sign-up" -msgstr "" +msgstr "Neuanmeldung erlauben" #: mailu/ui/forms.py:57 msgid "Initial admin" -msgstr "" +msgstr "Initiale Admin-Adresse" #: mailu/ui/forms.py:58 msgid "Admin password" -msgstr "" +msgstr "Administrator Passwort" #: mailu/ui/forms.py:84 msgid "Enabled" -msgstr "" +msgstr "Aktiv" #: mailu/ui/forms.py:89 msgid "Email address" -msgstr "" +msgstr "E-Mail-Adresse" #: 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 "" +msgstr "Registrieren" #: mailu/ui/forms.py:119 msgid "End of vacation" -msgstr "" +msgstr "Ende der Abwesenheit" #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 msgid "Client setup" -msgstr "" +msgstr "Client Einrichtung" #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 msgid "Mail protocol" -msgstr "" +msgstr "E-Mail-Protokoll" #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 msgid "Server name" -msgstr "" +msgstr "Servername" #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 msgid "Register a domain" -msgstr "" +msgstr "Regestrieren Sie eine Domain" #: mailu/ui/templates/domain/details.html:17 msgid "Generate keys" -msgstr "" +msgstr "Schlüssel erzeugen" #: 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 MX points to this server" -msgstr "" +msgstr "Um eine neue Domain registrieren zu können, müssen Sie zuerst den MX Resource Record der neuen Domäne konfigurieren. Dieser muss auf den aktuellen Mail-Server verweisen." #: mailu/ui/templates/domain/signup.html:18 msgid "If you do not know how to setup an MX record for your DNS zone,\n" " please contact your DNS provider or administrator. Also, please wait a\n" " couple minutes after the MX is set so the local server cache\n" " expires." -msgstr "" +msgstr "Bitte kontaktieren Sie ihren DNS-Anbieter oder -Administrator, falls Sie nicht wissen, wie ein MX Resource Record auf Ihrem DNS-Server eingerichtet wird. Bitte beachten Sie auch, dass aufgrund der lokalen Server Cache Einstellungen eine Änderung am MX Resource Record erst nach einigen Minuten aktiv wird." #: mailu/ui/templates/user/signup_domain.html:8 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 msgid "Domain" -msgstr "" +msgstr "Domain" #: mailu/ui/templates/user/signup_domain.html:15 msgid "Available slots" -msgstr "" +msgstr "Verfügbare Plätze" diff --git a/core/admin/mailu/translations/es/LC_MESSAGES/messages.po b/core/admin/mailu/translations/es/LC_MESSAGES/messages.po index e3fd6c1d..c5b0322c 100644 --- a/core/admin/mailu/translations/es/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/es/LC_MESSAGES/messages.po @@ -121,11 +121,11 @@ msgstr "Habilitar respuesta automática" #: mailu/ui/forms.py:116 msgid "Reply subject" -msgstr "" +msgstr "Título de la respuesta" #: mailu/ui/forms.py:117 msgid "Reply body" -msgstr "" +msgstr "Texto de la respuesta" #: mailu/ui/forms.py:136 msgid "Alias" @@ -137,15 +137,15 @@ msgstr "Usar sintaxis SQL (p.ej. para abarcar todos los alias)" #: mailu/ui/forms.py:145 msgid "Admin email" -msgstr "" +msgstr "Correo-e del administrador" #: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164 msgid "Submit" -msgstr "" +msgstr "Enviar" #: mailu/ui/forms.py:150 msgid "Manager email" -msgstr "" +msgstr "Gestor de correo" #: mailu/ui/forms.py:155 msgid "Protocol" @@ -153,7 +153,7 @@ msgstr "Protocolo" #: mailu/ui/forms.py:158 msgid "Hostname or IP" -msgstr "" +msgstr "Nombre o IP del servidor" #: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20 #: mailu/ui/templates/client.html:47 @@ -175,7 +175,7 @@ msgstr "Confirmar acción" #: mailu/ui/templates/confirm.html:13 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 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 msgid "Your account" -msgstr "" +msgstr "Su cuenta" #: mailu/ui/templates/login.html:8 msgid "to access the administration tools" 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 msgid "My account" 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/user/list.html:36 msgid "Fetched accounts" -msgstr "" +msgstr "Cuentas recogidas" #: mailu/ui/templates/sidebar.html:105 msgid "Sign out" @@ -324,23 +352,23 @@ msgstr "Regenerar llaves" #: mailu/ui/templates/domain/details.html:31 msgid "DNS MX entry" -msgstr "" +msgstr "Entrada MX del DNS" #: mailu/ui/templates/domain/details.html:35 msgid "DNS SPF entries" -msgstr "" +msgstr "Entradas SPF del DNS" #: mailu/ui/templates/domain/details.html:42 msgid "DKIM public key" -msgstr "" +msgstr "Llave pública DKIM" #: mailu/ui/templates/domain/details.html:46 msgid "DNS DKIM entry" -msgstr "" +msgstr "Entrada DKIM en DNS" #: mailu/ui/templates/domain/details.html:50 msgid "DNS DMARC entry" -msgstr "" +msgstr "Registro DMARC en DNS" #: mailu/ui/templates/domain/edit.html:4 msgid "Edit domain" @@ -352,15 +380,15 @@ msgstr "Lista de dominios" #: mailu/ui/templates/domain/list.html:17 msgid "Manage" -msgstr "" +msgstr "Gestionar" #: mailu/ui/templates/domain/list.html:19 msgid "Mailbox count" -msgstr "" +msgstr "Contar buzones" #: mailu/ui/templates/domain/list.html:20 msgid "Alias count" -msgstr "" +msgstr "Contar alias" #: mailu/ui/templates/domain/list.html:28 msgid "Details" @@ -376,15 +404,15 @@ msgstr "Alias" #: mailu/ui/templates/domain/list.html:37 msgid "Managers" -msgstr "" +msgstr "Gestores" #: mailu/ui/templates/fetch/create.html:4 msgid "Add a fetched account" -msgstr "" +msgstr "Añadir una cuenta externa (fetched)" #: mailu/ui/templates/fetch/edit.html:4 msgid "Update a fetched account" -msgstr "" +msgstr "Actualizar cuenta externa (fetched)" #: mailu/ui/templates/fetch/list.html:12 msgid "Add an account" @@ -392,7 +420,7 @@ msgstr "Añadir una cuenta" #: mailu/ui/templates/fetch/list.html:19 msgid "Endpoint" -msgstr "" +msgstr "Punto final" #: mailu/ui/templates/fetch/list.html:22 msgid "Last check" @@ -400,23 +428,23 @@ msgstr "Último checkeo" #: mailu/ui/templates/manager/create.html:4 msgid "Add a manager" -msgstr "" +msgstr "Añadir un gestor" #: mailu/ui/templates/manager/list.html:4 msgid "Manager list" -msgstr "" +msgstr "Gestor de lista" #: mailu/ui/templates/manager/list.html:12 msgid "Add manager" -msgstr "" +msgstr "Añadir un gestor" #: mailu/ui/forms.py:168 msgid "Announcement subject" -msgstr "" +msgstr "Título del anuncio" #: mailu/ui/forms.py:170 msgid "Announcement body" -msgstr "" +msgstr "Texto del anuncio" #: mailu/ui/forms.py:172 msgid "Send" @@ -428,7 +456,7 @@ msgstr "Anuncio público" #: mailu/ui/templates/announcement.html:8 msgid "from" -msgstr "" +msgstr "De" #: mailu/ui/templates/sidebar.html:44 msgid "Announcement" @@ -444,7 +472,7 @@ msgstr "Editar usuario" #: mailu/ui/templates/user/forward.html:4 msgid "Forward emails" -msgstr "" +msgstr "Redirigir correos" #: mailu/ui/templates/user/list.html:4 msgid "User list" @@ -472,7 +500,7 @@ msgstr "Respuesta automática" #: mailu/ui/forms.py:49 msgid "Maximum user quota" -msgstr "" +msgstr "Límite de cuota de usuario" #: mailu/ui/forms.py:101 msgid "Keep a copy of the emails" @@ -496,31 +524,32 @@ msgstr "no" #: mailu/ui/forms.py:65 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 msgid "Relayed domain name" -msgstr "" +msgstr "Nombre de.dominio a recepcionar" #: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18 msgid "Remote host" -msgstr "" +msgstr "Servidor remoto" #: mailu/ui/templates/sidebar.html:54 msgid "Relayed domains" -msgstr "" +msgstr "Dominios recepcionados (relayed)" #: mailu/ui/templates/alternative/create.html:4 msgid "Create alternative domain" -msgstr "" +msgstr "Crear dominio alternativo" #: mailu/ui/templates/alternative/list.html:4 msgid "Alternative domain list" -msgstr "" +msgstr "Lista de dominios alternativos" #: mailu/ui/templates/alternative/list.html:12 msgid "Add alternative" -msgstr "" +msgstr "Añadir alternativa" #: mailu/ui/templates/alternative/list.html:19 msgid "Name" @@ -528,147 +557,147 @@ msgstr "Nombre" #: mailu/ui/templates/domain/list.html:39 msgid "Alternatives" -msgstr "" +msgstr "Alternativas" #: mailu/ui/templates/relay/create.html:4 msgid "New relay domain" -msgstr "" +msgstr "Nuevo dominio externo (relay)" #: mailu/ui/templates/relay/edit.html:4 msgid "Edit relayd domain" -msgstr "" +msgstr "Editar dominio externo (relay)" #: mailu/ui/templates/relay/list.html:4 msgid "Relayed domain list" -msgstr "" +msgstr "Lista de dominios externos (relayed)" #: mailu/ui/templates/relay/list.html:9 msgid "New relayed domain" -msgstr "" +msgstr "Nuevo dominio externo (relayed)" #: mailu/ui/forms.py:125 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 msgid "Authorized IP" -msgstr "" +msgstr "IP autorizada" #: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4 msgid "Authentication tokens" -msgstr "" +msgstr "Tokens (llaves) autorizados" #: mailu/ui/templates/sidebar.html:72 msgid "Go to" -msgstr "" +msgstr "Ir a" #: mailu/ui/templates/sidebar.html:76 msgid "Webmail" -msgstr "" +msgstr "Webmail" #: mailu/ui/templates/sidebar.html:87 msgid "Website" -msgstr "" +msgstr "Web" #: mailu/ui/templates/token/create.html:4 msgid "Create an authentication token" -msgstr "" +msgstr "Crear un token (llave) de autenticación." #: mailu/ui/templates/token/list.html:12 msgid "New token" -msgstr "" +msgstr "Nuevo token" #: mailu/ui/templates/user/create.html:15 msgid "General" -msgstr "" +msgstr "General" #: mailu/ui/templates/user/create.html:22 msgid "Features and quotas" -msgstr "" +msgstr "Funcionalidades y cuotas" #: mailu/ui/templates/user/settings.html:14 msgid "General settings" -msgstr "" +msgstr "Configuración general" #: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15 msgid "Antispam" -msgstr "" +msgstr "Antispam" #: mailu/ui/forms.py:99 msgid "Spam filter tolerance" -msgstr "" +msgstr "Tolerancia del filtro de spam" #: mailu/ui/forms.py:50 msgid "Enable sign-up" -msgstr "" +msgstr "Permitir registros" #: mailu/ui/forms.py:57 msgid "Initial admin" -msgstr "" +msgstr "Administrador inicial" #: mailu/ui/forms.py:58 msgid "Admin password" -msgstr "" +msgstr "Contraseña del administrador" #: mailu/ui/forms.py:84 msgid "Enabled" -msgstr "" +msgstr "Habilitado" #: mailu/ui/forms.py:89 msgid "Email address" -msgstr "" +msgstr "Direcciones de correo" #: 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 "" +msgstr "Registrarse" #: mailu/ui/forms.py:119 msgid "End of vacation" -msgstr "" +msgstr "Fin de las vacaciones" #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 msgid "Client setup" -msgstr "" +msgstr "Configuración del cliente" #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 msgid "Mail protocol" -msgstr "" +msgstr "Protocolo de correo" #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 msgid "Server name" -msgstr "" +msgstr "Nombre del servidor" #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 msgid "Register a domain" -msgstr "" +msgstr "Registrar un dominio" #: mailu/ui/templates/domain/details.html:17 msgid "Generate keys" -msgstr "" +msgstr "Generar llaves" #: 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 MX points to this server" -msgstr "" +msgstr "Para registrar un nuevo dominio primero debe configurar la zona DNS de modo que los registros MX apunten a este servidor" #: mailu/ui/templates/domain/signup.html:18 msgid "If you do not know how to setup an MX record for your DNS zone,\n" " please contact your DNS provider or administrator. Also, please wait a\n" " couple minutes after the MX is set so the local server cache\n" " expires." -msgstr "" +msgstr "Si no sabe cómo configurar un registro MX 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 MX, para que se refresque la caché del servidor." #: mailu/ui/templates/user/signup_domain.html:8 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 msgid "Domain" -msgstr "" +msgstr "Dominio" #: mailu/ui/templates/user/signup_domain.html:15 msgid "Available slots" -msgstr "" +msgstr "Slots disponibles" diff --git a/core/admin/mailu/translations/fr/LC_MESSAGES/messages.po b/core/admin/mailu/translations/fr/LC_MESSAGES/messages.po index 0d8077a0..8939605c 100644 --- a/core/admin/mailu/translations/fr/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/fr/LC_MESSAGES/messages.po @@ -193,6 +193,34 @@ msgstr "Votre compte" msgid "to access the administration tools" 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 msgid "My account" msgstr "Mon compte" diff --git a/core/admin/mailu/translations/hu/LC_MESSAGES/messages.po b/core/admin/mailu/translations/hu/LC_MESSAGES/messages.po new file mode 100644 index 00000000..1fe2cc38 --- /dev/null +++ b/core/admin/mailu/translations/hu/LC_MESSAGES/messages.po @@ -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 MX 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 MX rekordja erre a kiszolgálóra mutasson." + +#: mailu/ui/templates/domain/signup.html:18 +msgid "If you do not know how to setup an MX record for your DNS zone,\n" +" please contact your DNS provider or administrator. Also, please wait a\n" +" couple minutes after the MX is set so the local server cache\n" +" expires." +msgstr "Ha nem tudja hogyan kell az MX 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 MX 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" + diff --git a/core/admin/mailu/translations/is/LC_MESSAGES/messages.po b/core/admin/mailu/translations/is/LC_MESSAGES/messages.po new file mode 100644 index 00000000..9798a792 --- /dev/null +++ b/core/admin/mailu/translations/is/LC_MESSAGES/messages.po @@ -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 , 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 \n" +"Language-Team: LANGUAGE \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 MX points to this server" +msgstr "" + +#: mailu/ui/templates/domain/signup.html:18 +msgid "" +"If you do not know how to setup an MX record for your DNS " +"zone,\n" +" please contact your DNS provider or administrator. Also, please wait " +"a\n" +" couple minutes after the MX 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 "" diff --git a/core/admin/mailu/translations/it/LC_MESSAGES/messages.po b/core/admin/mailu/translations/it/LC_MESSAGES/messages.po index e53cd4df..a7649e2a 100644 --- a/core/admin/mailu/translations/it/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/it/LC_MESSAGES/messages.po @@ -194,6 +194,34 @@ msgstr "Il tuo account" 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 "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 msgid "My account" msgstr "Il mio account" diff --git a/core/admin/mailu/translations/ja/LC_MESSAGES/messages.po b/core/admin/mailu/translations/ja/LC_MESSAGES/messages.po new file mode 100644 index 00000000..1215b6b3 --- /dev/null +++ b/core/admin/mailu/translations/ja/LC_MESSAGES/messages.po @@ -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 MX points to this server" +msgstr "" + +#: mailu/ui/templates/domain/signup.html:18 +msgid "If you do not know how to setup an MX record for your DNS zone,\n" +" please contact your DNS provider or administrator. Also, please wait a\n" +" couple minutes after the MX 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 "" + diff --git a/core/admin/mailu/translations/nl/LC_MESSAGES/messages.po b/core/admin/mailu/translations/nl/LC_MESSAGES/messages.po index 2e6e2c7e..8d7b5054 100644 --- a/core/admin/mailu/translations/nl/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/nl/LC_MESSAGES/messages.po @@ -193,6 +193,34 @@ msgstr "Uw account" msgid "to access the administration tools" 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 msgid "My account" msgstr "Mijn account" @@ -600,75 +628,75 @@ msgstr "Spam filter toleratie" #: mailu/ui/forms.py:50 msgid "Enable sign-up" -msgstr "" +msgstr "Schakel registreren in" #: mailu/ui/forms.py:57 msgid "Initial admin" -msgstr "" +msgstr "Eerste beheerder" #: mailu/ui/forms.py:58 msgid "Admin password" -msgstr "" +msgstr "Beheerder wachtwoord" #: mailu/ui/forms.py:84 msgid "Enabled" -msgstr "" +msgstr "Ingeschakeld" #: mailu/ui/forms.py:89 msgid "Email address" -msgstr "" +msgstr "E-mailadres" #: 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 "" +msgstr "Registreren" #: mailu/ui/forms.py:119 msgid "End of vacation" -msgstr "" +msgstr "Einde van vakantie" #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 msgid "Client setup" -msgstr "" +msgstr "Client instellingen" #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 msgid "Mail protocol" -msgstr "" +msgstr "Mail protocol" #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 msgid "Server name" -msgstr "" +msgstr "Server naam" #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 msgid "Register a domain" -msgstr "" +msgstr "Registreer een domein" #: mailu/ui/templates/domain/details.html:17 msgid "Generate keys" -msgstr "" +msgstr "Genereer sleutels" #: 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 MX points to this server" -msgstr "" +msgstr "Om een nieuw domein te kunnen registreren moet je eerst je domein zone instellen zodat het domein MX points to this server" #: mailu/ui/templates/domain/signup.html:18 msgid "If you do not know how to setup an MX record for your DNS zone,\n" " please contact your DNS provider or administrator. Also, please wait a\n" " couple minutes after the MX is set so the local server cache\n" " expires." -msgstr "" +msgstr "Als je niet weet hoe je een MX moet instellen voor je DNS zone neem dan contact op met je DNS provider of beheerder. Wacht ook een paar minuten nader de MX is ingesteld zodat de lokale server cache verloopt" #: mailu/ui/templates/user/signup_domain.html:8 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 msgid "Domain" -msgstr "" +msgstr "Domein" #: mailu/ui/templates/user/signup_domain.html:15 msgid "Available slots" -msgstr "" +msgstr "Vrije sloten" diff --git a/core/admin/mailu/translations/pl/LC_MESSAGES/messages.po b/core/admin/mailu/translations/pl/LC_MESSAGES/messages.po index 43f7b72b..595b1b43 100644 --- a/core/admin/mailu/translations/pl/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/pl/LC_MESSAGES/messages.po @@ -194,6 +194,34 @@ msgstr "Twoje konto" msgid "to access the administration tools" 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 msgid "My account" 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/user/list.html:24 msgid "Created" -msgstr "" +msgstr "Utworzono" #: 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 @@ -529,7 +557,7 @@ msgstr "" #: mailu/ui/templates/domain/list.html:39 msgid "Alternatives" -msgstr "" +msgstr "Alternatywy" #: mailu/ui/templates/relay/create.html:4 msgid "New relay domain" @@ -577,7 +605,7 @@ msgstr "" #: mailu/ui/templates/token/list.html:12 msgid "New token" -msgstr "" +msgstr "Nowy token" #: mailu/ui/templates/user/create.html:15 msgid "General" @@ -601,7 +629,7 @@ msgstr "" #: mailu/ui/forms.py:50 msgid "Enable sign-up" -msgstr "" +msgstr "Włącz rejestrację" #: mailu/ui/forms.py:57 msgid "Initial admin" @@ -609,7 +637,7 @@ msgstr "" #: mailu/ui/forms.py:58 msgid "Admin password" -msgstr "" +msgstr "hasło administratora" #: mailu/ui/forms.py:84 msgid "Enabled" @@ -635,19 +663,19 @@ msgstr "" #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 msgid "Mail protocol" -msgstr "" +msgstr "Protokół poczty" #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 msgid "Server name" -msgstr "" +msgstr "Nazwa serwera" #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 msgid "Register a domain" -msgstr "" +msgstr "Zarejestruj domenę" #: mailu/ui/templates/domain/details.html:17 msgid "Generate keys" -msgstr "" +msgstr "Wygeneruj klucze" #: mailu/ui/templates/domain/signup.html:13 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 msgid "Domain" -msgstr "" +msgstr "Domena" #: mailu/ui/templates/user/signup_domain.html:15 msgid "Available slots" diff --git a/core/admin/mailu/translations/pt/LC_MESSAGES/messages.po b/core/admin/mailu/translations/pt/LC_MESSAGES/messages.po index 6cef189f..58338380 100644 --- a/core/admin/mailu/translations/pt/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/pt/LC_MESSAGES/messages.po @@ -193,6 +193,34 @@ msgstr "Sua conta" msgid "to access the administration tools" 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 msgid "My account" msgstr "Minha conta" @@ -548,127 +576,128 @@ msgstr "Novo domínio de encaminhamento" #: mailu/ui/forms.py:125 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 msgid "Authorized IP" -msgstr "" +msgstr "IP autorizado" #: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4 msgid "Authentication tokens" -msgstr "" +msgstr "Tokens de autenticação" #: mailu/ui/templates/sidebar.html:72 msgid "Go to" -msgstr "" +msgstr "Ir para" #: mailu/ui/templates/sidebar.html:76 msgid "Webmail" -msgstr "" +msgstr "Webmail" #: mailu/ui/templates/sidebar.html:87 msgid "Website" -msgstr "" +msgstr "Website" #: mailu/ui/templates/token/create.html:4 msgid "Create an authentication token" -msgstr "" +msgstr "Criar token de autenticação" #: mailu/ui/templates/token/list.html:12 msgid "New token" -msgstr "" +msgstr "Novo token" #: mailu/ui/templates/user/create.html:15 msgid "General" -msgstr "" +msgstr "Geral" #: mailu/ui/templates/user/create.html:22 msgid "Features and quotas" -msgstr "" +msgstr "Recursos e quotas" #: mailu/ui/templates/user/settings.html:14 msgid "General settings" -msgstr "" +msgstr "Configurações" #: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15 msgid "Antispam" -msgstr "" +msgstr "Antispam" #: mailu/ui/forms.py:99 msgid "Spam filter tolerance" -msgstr "" +msgstr "Filtro de tolerância de spam" #: mailu/ui/forms.py:50 msgid "Enable sign-up" -msgstr "" +msgstr "Habilitar acesso" #: mailu/ui/forms.py:57 msgid "Initial admin" -msgstr "" +msgstr "Administrador" #: mailu/ui/forms.py:58 msgid "Admin password" -msgstr "" +msgstr "Senha administrador" #: mailu/ui/forms.py:84 msgid "Enabled" -msgstr "" +msgstr "Habilitado" #: mailu/ui/forms.py:89 msgid "Email address" -msgstr "" +msgstr "Endereço de email" #: 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 "" +msgstr "Acesso" #: mailu/ui/forms.py:119 msgid "End of vacation" -msgstr "" +msgstr "Conclusão das férias" #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 msgid "Client setup" -msgstr "" +msgstr "Configuração" #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 msgid "Mail protocol" -msgstr "" +msgstr "Protocolo de e-mail" #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 msgid "Server name" -msgstr "" +msgstr "Servidor" #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 msgid "Register a domain" -msgstr "" +msgstr "Registrar domínio" #: mailu/ui/templates/domain/details.html:17 msgid "Generate keys" -msgstr "" +msgstr "Gerar chaves" #: 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 MX points to this server" -msgstr "" +msgstr "Para registar um novo domínio, e necessário configurar as entradas MX no DNS" #: mailu/ui/templates/domain/signup.html:18 msgid "If you do not know how to setup an MX record for your DNS zone,\n" " please contact your DNS provider or administrator. Also, please wait a\n" " couple minutes after the MX is set so the local server cache\n" " expires." -msgstr "" +msgstr "Caso não saiba configurar os registros MXno 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 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 msgid "Domain" -msgstr "" +msgstr "Domínio" #: mailu/ui/templates/user/signup_domain.html:15 msgid "Available slots" -msgstr "" +msgstr "Slots disponíveis" diff --git a/core/admin/mailu/translations/ru/LC_MESSAGES/messages.po b/core/admin/mailu/translations/ru/LC_MESSAGES/messages.po index 3456cd6b..08803d1d 100644 --- a/core/admin/mailu/translations/ru/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/ru/LC_MESSAGES/messages.po @@ -193,6 +193,34 @@ msgstr "Ваша учетная запись" 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 "Изображение" + +#: 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 "Моя учетная запись" @@ -600,75 +628,79 @@ msgstr "Порог спам-фильтра" #: mailu/ui/forms.py:50 msgid "Enable sign-up" -msgstr "" +msgstr "Разрешить регистрацию" #: mailu/ui/forms.py:57 msgid "Initial admin" -msgstr "" +msgstr "Начальный админ" #: mailu/ui/forms.py:58 msgid "Admin password" -msgstr "" +msgstr "Пароль администратора" #: mailu/ui/forms.py:84 msgid "Enabled" -msgstr "" +msgstr "Включено" #: mailu/ui/forms.py:89 msgid "Email address" -msgstr "" +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 "" +msgstr "Регистрация" #: mailu/ui/forms.py:119 msgid "End of vacation" -msgstr "" +msgstr "Конец отпуска" #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 msgid "Client setup" -msgstr "" +msgstr "Настройка клиента" #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 msgid "Mail protocol" -msgstr "" +msgstr "Почтовый протокол" #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 msgid "Server name" -msgstr "" +msgstr "Имя сервера" #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 msgid "Register a domain" -msgstr "" +msgstr "Зарегистрировать домен" #: mailu/ui/templates/domain/details.html:17 msgid "Generate keys" -msgstr "" +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 MX points to this server" -msgstr "" +msgstr "Чтобы зарегистрировать новый домен, вы должны сначала настроить\n" +"    доменная зона, так что домен MX указывает на этот сервер" #: mailu/ui/templates/domain/signup.html:18 msgid "If you do not know how to setup an MX record for your DNS zone,\n" " please contact your DNS provider or administrator. Also, please wait a\n" " couple minutes after the MX is set so the local server cache\n" " expires." -msgstr "" +msgstr "Если вы не знаете, как настроить запись MX для своей зоны DNS,\n" +"    пожалуйста, свяжитесь с вашим поставщиком DNS или администратором. Также, пожалуйста, подождите\n" +"    через пару минут после установки MX , чтобы кэш локального сервера\n" +"    истекает." #: mailu/ui/templates/user/signup_domain.html:8 msgid "pick a domain for the new account" -msgstr "" +msgstr "выбрать домен для новой учетной записи" #: mailu/ui/templates/user/signup_domain.html:14 msgid "Domain" -msgstr "" +msgstr "Домен" #: mailu/ui/templates/user/signup_domain.html:15 msgid "Available slots" -msgstr "" +msgstr "Доступные слоты" diff --git a/core/admin/mailu/translations/sv/LC_MESSAGES/messages.po b/core/admin/mailu/translations/sv/LC_MESSAGES/messages.po index 61e3458b..825888f1 100644 --- a/core/admin/mailu/translations/sv/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/sv/LC_MESSAGES/messages.po @@ -5,7 +5,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: POEditor.com\n" "Project-Id-Version: Mailu\n" -"Language: sv\n" +"Language: sk\n" #: mailu/ui/forms.py:32 msgid "Invalid email address." @@ -193,6 +193,34 @@ msgstr "Ditt konto" msgid "to access the administration tools" 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 msgid "My account" msgstr "Mitt konto" diff --git a/core/admin/mailu/translations/zh_CN/LC_MESSAGES/messages.po b/core/admin/mailu/translations/zh_CN/LC_MESSAGES/messages.po index 3b0a2332..ee204fec 100644 --- a/core/admin/mailu/translations/zh_CN/LC_MESSAGES/messages.po +++ b/core/admin/mailu/translations/zh_CN/LC_MESSAGES/messages.po @@ -193,6 +193,34 @@ msgstr "你的帐户" 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 "进程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 msgid "My account" msgstr "我的帐户" @@ -600,75 +628,75 @@ msgstr "垃圾邮件过滤器容忍度" #: mailu/ui/forms.py:50 msgid "Enable sign-up" -msgstr "" +msgstr "启用用户注册" #: mailu/ui/forms.py:57 msgid "Initial admin" -msgstr "" +msgstr "初始管理员" #: mailu/ui/forms.py:58 msgid "Admin password" -msgstr "" +msgstr "管理员密码" #: mailu/ui/forms.py:84 msgid "Enabled" -msgstr "" +msgstr "启用" #: mailu/ui/forms.py:89 msgid "Email address" -msgstr "" +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 "" +msgstr "注册" #: mailu/ui/forms.py:119 msgid "End of vacation" -msgstr "" +msgstr "假期结束" #: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82 msgid "Client setup" -msgstr "" +msgstr "客户端设置" #: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43 msgid "Mail protocol" -msgstr "" +msgstr "邮件协议" #: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51 msgid "Server name" -msgstr "" +msgstr "服务器名" #: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98 msgid "Register a domain" -msgstr "" +msgstr "注册域名" #: mailu/ui/templates/domain/details.html:17 msgid "Generate keys" -msgstr "" +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 MX points to this server" -msgstr "" +msgstr "在注册一个新的域名前,您必须先为该域名设置 MX 记录,并使其指向本服务器" #: mailu/ui/templates/domain/signup.html:18 msgid "If you do not know how to setup an MX record for your DNS zone,\n" " please contact your DNS provider or administrator. Also, please wait a\n" " couple minutes after the MX is set so the local server cache\n" " expires." -msgstr "" +msgstr "如果您不知道如何为域名设置 MX 记录,请联系你的DNS提供商或者系统管理员。在设置完成 MX 记录后,请等待本地域名服务器的缓存过期。" #: mailu/ui/templates/user/signup_domain.html:8 msgid "pick a domain for the new account" -msgstr "" +msgstr "为新用户选择一个域名" #: mailu/ui/templates/user/signup_domain.html:14 msgid "Domain" -msgstr "" +msgstr "域名" #: mailu/ui/templates/user/signup_domain.html:15 msgid "Available slots" -msgstr "" +msgstr "可用" diff --git a/core/admin/mailu/ui/templates/sidebar.html b/core/admin/mailu/ui/templates/sidebar.html index 3d945380..8ff3a216 100644 --- a/core/admin/mailu/ui/templates/sidebar.html +++ b/core/admin/mailu/ui/templates/sidebar.html @@ -52,7 +52,7 @@
  • - + {% trans %}Antispam{% endtrans %}
  • @@ -69,7 +69,7 @@
  • {% trans %}Go to{% endtrans %}
  • {% if config["WEBMAIL"] != "none" %}
  • - + {% trans %}Webmail{% endtrans %}
  • @@ -80,12 +80,12 @@
  • - + {% trans %}Website{% endtrans %}
  • - + {% trans %}Help{% endtrans %}
  • diff --git a/core/admin/mailu/ui/templates/user/list.html b/core/admin/mailu/ui/templates/user/list.html index 8a8fad69..2aff662f 100644 --- a/core/admin/mailu/ui/templates/user/list.html +++ b/core/admin/mailu/ui/templates/user/list.html @@ -25,7 +25,7 @@ {% trans %}Last edit{% endtrans %} {% for user in domain.users %} - +   diff --git a/core/admin/mailu/ui/views/fetches.py b/core/admin/mailu/ui/views/fetches.py index f2049fe9..ec208af1 100644 --- a/core/admin/mailu/ui/views/fetches.py +++ b/core/admin/mailu/ui/views/fetches.py @@ -22,7 +22,7 @@ def fetch_create(user_email): user_email = user_email or flask_login.current_user.email user = models.User.query.get(user_email) or flask.abort(404) form = forms.FetchForm() - form.pw.validators = [wtforms.validators.DataRequired()] + form.password.validators = [wtforms.validators.DataRequired()] if form.validate_on_submit(): fetch = models.Fetch(user=user) form.populate_obj(fetch) diff --git a/core/admin/migrations/versions/5aeb5811408e_.py b/core/admin/migrations/versions/5aeb5811408e_.py index 2ea06ea9..647a61f7 100644 --- a/core/admin/migrations/versions/5aeb5811408e_.py +++ b/core/admin/migrations/versions/5aeb5811408e_.py @@ -106,7 +106,7 @@ def upgrade(): # lower relays for relay in connection.execute(relay_table.select()): connection.execute(relay_table.update().where( - relay_tbale.c.name == relay.name + relay_table.c.name == relay.name ).values( name=relay.name.lower() )) diff --git a/core/dovecot/Dockerfile b/core/dovecot/Dockerfile index 83d23b52..94432564 100644 --- a/core/dovecot/Dockerfile +++ b/core/dovecot/Dockerfile @@ -1,12 +1,10 @@ FROM alpine:3.8 # python3 shared with most images RUN apk add --no-cache \ - python3 py3-pip \ + python3 py3-pip git bash \ && pip3 install --upgrade pip # Shared layer between rspamd, postfix, dovecot, unbound and nginx -RUN pip3 install jinja2 -# Shared layer between rspamd, postfix, dovecot -RUN pip3 install tenacity +RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart # Image specific layers under this line RUN apk add --no-cache \ dovecot dovecot-pigeonhole-plugin rspamd-client bash \ diff --git a/core/dovecot/conf/dovecot.conf b/core/dovecot/conf/dovecot.conf index b7cca76c..f4181e0c 100644 --- a/core/dovecot/conf/dovecot.conf +++ b/core/dovecot/conf/dovecot.conf @@ -84,6 +84,7 @@ service auth-worker { ############### protocol imap { mail_plugins = $mail_plugins imap_quota imap_sieve + mail_max_userip_connections = 20 } protocol pop3 { diff --git a/core/dovecot/start.py b/core/dovecot/start.py index 15e370de..53999bd6 100755 --- a/core/dovecot/start.py +++ b/core/dovecot/start.py @@ -1,47 +1,29 @@ #!/usr/bin/python3 -import jinja2 import os -import socket import glob import multiprocessing -import tenacity import logging as log import sys +from mailustart import resolve, convert -from tenacity import retry from podop import run_server log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) def start_podop(): os.setuid(8) + url = "http://" + os.environ["ADMIN_ADDRESS"] + "/internal/dovecot/§" run_server(0, "dovecot", "/tmp/podop.socket", [ - ("quota", "url", "http://admin/internal/dovecot/§"), - ("auth", "url", "http://admin/internal/dovecot/§"), - ("sieve", "url", "http://admin/internal/dovecot/§"), + ("quota", "url", url ), + ("auth", "url", url), + ("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 os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) 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": os.environ["WEBMAIL_ADDRESS"] = resolve(os.environ.get("WEBMAIL_ADDRESS", "webmail")) diff --git a/core/nginx/Dockerfile b/core/nginx/Dockerfile index 6afa8301..0156cccf 100644 --- a/core/nginx/Dockerfile +++ b/core/nginx/Dockerfile @@ -1,10 +1,10 @@ FROM alpine:3.8 # python3 shared with most images RUN apk add --no-cache \ - python3 py3-pip \ + python3 py3-pip git bash \ && pip3 install --upgrade pip # 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 RUN apk add --no-cache certbot nginx nginx-mod-mail openssl curl \ && pip3 install idna requests watchdog diff --git a/core/nginx/config.py b/core/nginx/config.py index 79370508..78c76345 100755 --- a/core/nginx/config.py +++ b/core/nginx/config.py @@ -1,32 +1,27 @@ #!/usr/bin/python3 -import jinja2 import os import logging as log import sys +from mailustart import resolve, convert args = os.environ.copy() 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 with open("/etc/resolv.conf") as handle: content = handle.read().split() args["RESOLVER"] = content[content.index("nameserver") + 1] -if "HOST_WEBMAIL" not in args: - args["HOST_WEBMAIL"] = "webmail" -if "HOST_ADMIN" not in args: - args["HOST_ADMIN"] = "admin" -if "HOST_WEBDAV" not in args: - args["HOST_WEBDAV"] = "webdav:5232" -if "HOST_ANTISPAM" not in args: - args["HOST_ANTISPAM"] = "antispam:11334" +args["HOST_ADMIN"] = resolve(args.get("HOST_ADMIN", "admin")) +args["HOST_ANTISPAM"] = resolve(args.get("HOST_ANTISPAM", "antispam:11334")) +args["HOST_WEBMAIL"] = args.get("HOST_WEBMAIL", "webmail") +if args["WEBMAIL"] != "none": + args["HOST_WEBMAIL"] = resolve(args.get("HOST_WEBMAIL")) +args["HOST_WEBDAV"] = args.get("HOST_WEBDAV", "webdav:5232") +if args["WEBDAV"] != "none": + args["HOST_WEBDAV"] = resolve(args.get("HOST_WEBDAV")) # TLS configuration cert_name = os.getenv("TLS_CERT_FILENAME", default="cert.pem") diff --git a/core/postfix/Dockerfile b/core/postfix/Dockerfile index ac9c8159..3eff5218 100644 --- a/core/postfix/Dockerfile +++ b/core/postfix/Dockerfile @@ -1,12 +1,10 @@ FROM alpine:3.8 # python3 shared with most images RUN apk add --no-cache \ - python3 py3-pip \ + python3 py3-pip git bash \ && pip3 install --upgrade pip # Shared layer between rspamd, postfix, dovecot, unbound and nginx -RUN pip3 install jinja2 -# Shared layer between rspamd, postfix, dovecot -RUN pip3 install tenacity +RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart # Image specific layers under this line RUN apk add --no-cache postfix postfix-pcre rsyslog \ diff --git a/core/postfix/conf/main.cf b/core/postfix/conf/main.cf index d5d47d19..7fb32b67 100644 --- a/core/postfix/conf/main.cf +++ b/core/postfix/conf/main.cf @@ -112,3 +112,4 @@ milter_default_action = tempfail ############### # Extra Settings ############### + diff --git a/core/postfix/start.py b/core/postfix/start.py index a06b3833..95c97fde 100755 --- a/core/postfix/start.py +++ b/core/postfix/start.py @@ -1,53 +1,35 @@ #!/usr/bin/python3 -import jinja2 import os -import socket import glob import shutil -import tenacity import multiprocessing import logging as log import sys +from mailustart import resolve, convert -from tenacity import retry from podop import run_server log.basicConfig(stream=sys.stderr, level=os.environ.get("LOG_LEVEL", "WARNING")) def start_podop(): os.setuid(100) + url = "http://" + os.environ["ADMIN_ADDRESS"] + "/internal/postfix/" # TODO: Remove verbosity setting from Podop? run_server(0, "postfix", "/tmp/podop.socket", [ - ("transport", "url", "http://admin/internal/postfix/transport/§"), - ("alias", "url", "http://admin/internal/postfix/alias/§"), - ("domain", "url", "http://admin/internal/postfix/domain/§"), - ("mailbox", "url", "http://admin/internal/postfix/mailbox/§"), - ("senderaccess", "url", "http://admin/internal/postfix/sender/access/§"), - ("senderlogin", "url", "http://admin/internal/postfix/sender/login/§") + ("transport", "url", url + "transport/§"), + ("alias", "url", url + "alias/§"), + ("domain", "url", url + "domain/§"), + ("mailbox", "url", url + "mailbox/§"), + ("senderaccess", "url", url + "sender/access/§"), + ("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 os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) -os.environ["HOST_ANTISPAM"] = os.environ.get("HOST_ANTISPAM", "antispam:11332") -os.environ["HOST_LMTP"] = os.environ.get("HOST_LMTP", "imap:2525") +os.environ["ADMIN_ADDRESS"] = resolve(os.environ.get("ADMIN_ADDRESS", "admin")) +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"): convert(postfix_file, os.path.join("/etc/postfix", os.path.basename(postfix_file))) diff --git a/docs/cli.rst b/docs/cli.rst index bdf4a6d1..bdd030f9 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -4,11 +4,12 @@ Mailu command line Managing users and aliases can be done from CLI using commands: * alias -* alias_delete +* alias-delete +* domain * user -* user_import -* user_delete -* config_update +* user-import +* user-delete +* config-update alias ----- @@ -18,44 +19,54 @@ alias docker-compose exec admin flask mailu alias foo example.net "mail1@example.com,mail2@example.com" -alias_delete +alias-delete ------------ .. 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 ---- .. 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. .. 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 - 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: .. 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: @@ -72,7 +83,7 @@ where mail-config.yml looks like: domain: 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 ----- diff --git a/docs/contributors/environment.rst b/docs/contributors/environment.rst index e2e74d8f..161619f6 100644 --- a/docs/contributors/environment.rst +++ b/docs/contributors/environment.rst @@ -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`` directory structure. -If you do no posses the resources, but want to become an involved tester/reviewer. -Please contact `muhlemmer 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 +If you do no posses the resources, but want to become an involved tester/reviewer, please contact +us on `Matrix`_. +.. _`Matrix`: https://matrix.to/#/#mailu:tedomum.net .. _testing: Test images diff --git a/docs/contributors/guide.rst b/docs/contributors/guide.rst index a3b6d95a..0ae15c03 100644 --- a/docs/contributors/guide.rst +++ b/docs/contributors/guide.rst @@ -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`` 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 --------------- diff --git a/docs/faq.rst b/docs/faq.rst index 4abd8874..8d6b283f 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -71,22 +71,15 @@ We thank you for your understanding and patience. 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 -for infra structure and project related costs. If there are leftovers, it will be distributed -among the developers. - -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. - +Donations are welcome to the authors of the project directly, we do not manage any central +donation pot. Also, check the ``AUTHORS.md`` file for Patreon link or equivalent. If you +wish to contact a contributor specifically, please do so on `Matrix`_ .. _`Matrix`: https://matrix.to/#/#mailu:tedomum.net .. _`open issues`: https://github.com/Mailu/Mailu/issues .. _`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 .. _`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 ------------------ @@ -136,6 +129,49 @@ You're mail service will be reachable for IMAP, POP3, SMTP and Webmail at the ad *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 `_) + - 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 `_) + - 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 `_) and has various issues, like: + + - It can use a lot of RAM (`docker/docker#11185 `_) + - Source IP addresses are rewritten, making it completely unusable for many purposes, e.g. mail servers + (`docker/docker#17666 `_), + (`docker/libnetwork#1099 `_). + + -- `Robbert Klarenbeek `_ (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? ```````````````````````` @@ -421,3 +457,7 @@ We **strongly** advice against downgrading the TLS version and ciphers! .. _`681`: https://github.com/Mailu/Mailu/pull/681 .. _`698`: https://github.com/Mailu/Mailu/issues/698 .. _`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. diff --git a/docs/kubernetes/mailu/index.rst b/docs/kubernetes/mailu/index.rst index 425f4858..13943606 100644 --- a/docs/kubernetes/mailu/index.rst +++ b/docs/kubernetes/mailu/index.rst @@ -128,7 +128,7 @@ And in the pod run the following command. The command uses following entries: .. code-block:: bash - python manage.py admin root example.com password + flask mailu admin root example.com password - ``admin`` Make it an admin user - ``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 delete po/mailu-imap... -Happy mailing! \ No newline at end of file +Happy mailing! diff --git a/optional/clamav/Dockerfile b/optional/clamav/Dockerfile index a4a889c7..27254544 100644 --- a/optional/clamav/Dockerfile +++ b/optional/clamav/Dockerfile @@ -1,7 +1,7 @@ FROM alpine:3.8 # python3 shared with most images RUN apk add --no-cache \ - python3 py3-pip \ + python3 py3-pip bash \ && pip3 install --upgrade pip # Image specific layers under this line RUN apk add --no-cache clamav rsyslog wget clamav-libunrar diff --git a/optional/postgresql/Dockerfile b/optional/postgresql/Dockerfile index 22409597..b03ff2d1 100644 --- a/optional/postgresql/Dockerfile +++ b/optional/postgresql/Dockerfile @@ -1,7 +1,7 @@ FROM alpine:3.8 # python3 shared with most images RUN apk add --no-cache \ - python3 py3-pip \ + python3 py3-pip bash \ && pip3 install --upgrade pip # Shared layer between rspamd, postfix, dovecot, unbound and nginx RUN pip3 install jinja2 diff --git a/optional/radicale/Dockerfile b/optional/radicale/Dockerfile index 4616d53d..de63daec 100644 --- a/optional/radicale/Dockerfile +++ b/optional/radicale/Dockerfile @@ -1,7 +1,7 @@ FROM alpine:edge 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 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..17d66169 --- /dev/null +++ b/pyproject.toml @@ -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 = "" diff --git a/services/fetchmail/Dockerfile b/services/fetchmail/Dockerfile index 52f794d5..8e4d5db0 100644 --- a/services/fetchmail/Dockerfile +++ b/services/fetchmail/Dockerfile @@ -1,7 +1,7 @@ FROM alpine:3.8 # python3 shared with most images RUN apk add --no-cache \ - python3 py3-pip \ + python3 py3-pip bash \ && pip3 install --upgrade pip # Image specific layers under this line RUN apk add --no-cache fetchmail ca-certificates \ diff --git a/services/rspamd/Dockerfile b/services/rspamd/Dockerfile index 6d0cb5d0..70e6286d 100644 --- a/services/rspamd/Dockerfile +++ b/services/rspamd/Dockerfile @@ -1,12 +1,10 @@ FROM alpine:3.8 # python3 shared with most images RUN apk add --no-cache \ - python3 py3-pip \ + python3 py3-pip git bash \ && pip3 install --upgrade pip # Shared layer between rspamd, postfix, dovecot, unbound and nginx -RUN pip3 install jinja2 -# Shared layer between rspamd, postfix, dovecot -RUN pip3 install tenacity +RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart # Image specific layers under this line RUN apk add --no-cache rspamd rspamd-controller rspamd-proxy rspamd-fuzzy ca-certificates curl diff --git a/services/rspamd/conf/antivirus.conf b/services/rspamd/conf/antivirus.conf index a72f79c1..7bf646b8 100644 --- a/services/rspamd/conf/antivirus.conf +++ b/services/rspamd/conf/antivirus.conf @@ -1,6 +1,8 @@ +{% if ANTIVIRUS == 'clamav' %} clamav { attachments_only = true; symbol = "CLAM_VIRUS"; type = "clamav"; servers = "antivirus:3310"; } +{% endif %} diff --git a/services/rspamd/start.py b/services/rspamd/start.py index 744d4a9c..3febed2b 100755 --- a/services/rspamd/start.py +++ b/services/rspamd/start.py @@ -1,34 +1,13 @@ #!/usr/bin/python3 -import jinja2 import os -import socket import glob -import tenacity import logging as log import sys - -from tenacity import retry +from mailustart import resolve, convert 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 os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) diff --git a/services/unbound/Dockerfile b/services/unbound/Dockerfile index dbf8a3a9..325584fd 100644 --- a/services/unbound/Dockerfile +++ b/services/unbound/Dockerfile @@ -1,10 +1,10 @@ FROM alpine:3.8 # python3 shared with most images RUN apk add --no-cache \ - python3 py3-pip \ + python3 py3-pip git bash \ && pip3 install --upgrade pip # 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 RUN apk add --no-cache unbound curl bind-tools \ && curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache \ diff --git a/services/unbound/start.py b/services/unbound/start.py index 4dd5f3be..6216e783 100755 --- a/services/unbound/start.py +++ b/services/unbound/start.py @@ -1,17 +1,12 @@ #!/usr/bin/python3 -import jinja2 import os import logging as log import sys +from mailustart import convert 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") os.execv("/usr/sbin/unbound", ["-c /etc/unbound/unbound.conf"]) diff --git a/setup/flavors/compose/docker-compose.yml b/setup/flavors/compose/docker-compose.yml index 67408bee..a1d985e4 100644 --- a/setup/flavors/compose/docker-compose.yml +++ b/setup/flavors/compose/docker-compose.yml @@ -3,7 +3,7 @@ # Please read the documentation before attempting any change. # Generated for {{ flavor }} flavor -version: '3.6' +version: '2.2' services: @@ -160,8 +160,14 @@ services: networks: default: + {% if ipv6_enabled %} + enable_ipv6: true + {% endif %} driver: bridge ipam: driver: default config: - subnet: {{ subnet }} + {% if ipv6_enabled %} + - subnet: {{ subnet6 }} + {% endif %} diff --git a/setup/flavors/compose/mailu.env b/setup/flavors/compose/mailu.env index 5ccd8ace..3228fe41 100644 --- a/setup/flavors/compose/mailu.env +++ b/setup/flavors/compose/mailu.env @@ -1,8 +1,6 @@ # Mailu main configuration file # -# Generated for {{ flavor }} flavor -# -# This file is autogenerated by the configuration management wizard. +# This file is autogenerated by the configuration management wizard for {{ flavor }} flavor. # For a detailed list of configuration variables, see the documentation at # https://mailu.io @@ -10,23 +8,14 @@ # 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 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={{ subnet }} +{% if ipv6_enabled %} +SUBNET6={{ subnet6 }} +{% endif %} # Main mail domain DOMAIN={{ domain }} @@ -64,9 +53,6 @@ WEBDAV={{ webdav_enabled or 'none' }} # Antivirus solution (value: clamav, none) #ANTIVIRUS={{ antivirus_enabled or 'none' }} -#Antispam solution -ANTISPAM={{ antispam_enabled or 'none'}} - ################################### # Mail settings ################################### @@ -110,13 +96,21 @@ COMPRESSION_LEVEL={{ compression_level }} ################################### # 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 WEB_ADMIN={{ admin_path }} # Path to the webmail if enabled +{% if webmail_type != 'none' and webmail_path == '' %} +WEB_WEBMAIL=/ +{% else %} WEB_WEBMAIL={{ webmail_path }} +{% endif %} # Website name SITENAME={{ site_name }} diff --git a/setup/flavors/compose/setup.html b/setup/flavors/compose/setup.html index 46369577..b29e726a 100644 --- a/setup/flavors/compose/setup.html +++ b/setup/flavors/compose/setup.html @@ -44,8 +44,13 @@ Before you can use Mailu, you must create the primary administrator user account one of the hostnames {{ hostnames.split(',')[0] }}{{ admin_path }}. {% else %} -http://127.0.0.1:8080 (only directly from the host running docker). +http://127.0.0.1:8080/ui (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 +
    ssh -L 127.0.0.1:8080:127.0.0.1:8080 <user>@<server>
    +
    +And access the above URL from your local machine. +
    {% endif %} -And choose the "Update password" option in the left menu. +Also, choose the "Update password" option in the left menu.

    {% endcall %} diff --git a/setup/flavors/stack/setup.html b/setup/flavors/stack/setup.html index 81470b5b..5ae65cf7 100644 --- a/setup/flavors/stack/setup.html +++ b/setup/flavors/stack/setup.html @@ -4,7 +4,7 @@

    Docker Stack expects a project file, named docker-compose.yml in a project directory. First create your project directory.

    -
    mkdir -p /{{ root }}/{redis,certs,data,dkim,mail,overrides/rspamd,filter,dav,webmail}
    +
    mkdir -p /{{ root }}/{redis,certs,data,dkim,mail,overrides/rspamd,overrides/nginx,filter,dav,webmail}
     

    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

    Login to the admin interface to change the password for a safe one, at {% if admin_enabled %} -one of the hostnames +one of the hostnames {{ hostnames.split(',')[0] }}{{ admin_path }}. {% else %} -http://127.0.0.1:8080 (only directly from the host running docker). +http://127.0.0.1:8080/ui (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 +

    ssh -L 127.0.0.1:8080:127.0.0.1:8080 <user>@<server>
    +
    +And access the above URL from your local machine. +
    {% endif %} -And choose the "Update password" option in the left menu. +Also, choose the "Update password" option in the left menu.

    {% endcall %} diff --git a/setup/server.py b/setup/server.py index 556d4b3a..0bb25a51 100644 --- a/setup/server.py +++ b/setup/server.py @@ -9,6 +9,7 @@ import string import random import ipaddress import hashlib +import time version = os.getenv("this_version", "master") @@ -33,6 +34,17 @@ def secret(length=16): 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): @@ -69,15 +81,19 @@ def build_app(path): @root_bp.route("/submit_flavor", methods=["POST"]) def submit_flavor(): data = flask.request.form.copy() + subnet6 = random_ipv6_subnet() 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"]) @root_bp.route("/submit", methods=["POST"]) def submit(): data = flask.request.form.copy() 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)) return flask.redirect(flask.url_for('.setup', uid=data['uid'])) diff --git a/setup/static/render.js b/setup/static/render.js index 23afcbec..e501fffb 100644 --- a/setup/static/render.js +++ b/setup/static/render.js @@ -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(); + } + }); +}); diff --git a/setup/templates/steps/compose/03_expose.html b/setup/templates/steps/compose/03_expose.html index 837b7bba..c909fc9b 100644 --- a/setup/templates/steps/compose/03_expose.html +++ b/setup/templates/steps/compose/03_expose.html @@ -18,13 +18,26 @@ avoid generic all-interfaces addresses like 0.0.0.0 or :: + + -
    +
    + +
    + +

    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.

    @@ -34,12 +47,6 @@ avoid generic all-interfaces addresses like 0.0.0.0 or ::
    -

    -
    - - -

    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 diff --git a/tests/build.yml b/tests/build.yml index dd56dc41..b44bc745 100644 --- a/tests/build.yml +++ b/tests/build.yml @@ -30,9 +30,9 @@ services: image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}radicale:${MAILU_VERSION:-local} build: ../optional/radicale - traefik-certdumper: - image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}traefik-certdumper:${MAILU_VERSION:-local} - build: ../optional/traefik-certdumper +# traefik-certdumper: +# image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}traefik-certdumper:${MAILU_VERSION:-local} +# build: ../optional/traefik-certdumper admin: image: ${DOCKER_ORG:-mailu}/${DOCKER_PREFIX:-}admin:${MAILU_VERSION:-local} diff --git a/tests/compose/filters/mailu.env b/tests/compose/filters/mailu.env index 25c7c133..e165fee2 100644 --- a/tests/compose/filters/mailu.env +++ b/tests/compose/filters/mailu.env @@ -60,7 +60,7 @@ WEBMAIL=none WEBDAV=none # Antivirus solution (value: clamav, none) -#ANTIVIRUS=clamav +ANTIVIRUS=clamav #Antispam solution ANTISPAM=none diff --git a/towncrier/newsfragments/867.bugfix b/towncrier/newsfragments/867.bugfix new file mode 100644 index 00000000..ef9b04a7 --- /dev/null +++ b/towncrier/newsfragments/867.bugfix @@ -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 diff --git a/towncrier/template.md b/towncrier/template.md new file mode 100644 index 00000000..07ccb4f6 --- /dev/null +++ b/towncrier/template.md @@ -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 %} \ No newline at end of file diff --git a/webmails/rainloop/Dockerfile b/webmails/rainloop/Dockerfile index 224fe457..975227b0 100644 --- a/webmails/rainloop/Dockerfile +++ b/webmails/rainloop/Dockerfile @@ -1,7 +1,7 @@ FROM php:7.2-apache #Shared layer between rainloop and roundcube RUN apt-get update && apt-get install -y \ - python3 curl \ + python3 curl python3-pip git \ && rm -rf /var/lib/apt/lists \ && echo "ServerSignature Off" >> /etc/apache2/apache2.conf @@ -21,11 +21,13 @@ RUN apt-get update && apt-get install -y \ && chown -R www-data: * \ && apt-get purge -y unzip \ && 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 php.ini /php.ini -COPY config.ini /config.ini +COPY application.ini /application.ini COPY default.ini /default.ini COPY start.py /start.py diff --git a/webmails/rainloop/config.ini b/webmails/rainloop/application.ini similarity index 100% rename from webmails/rainloop/config.ini rename to webmails/rainloop/application.ini diff --git a/webmails/rainloop/include.php b/webmails/rainloop/include.php index 2376c683..fde91324 100644 --- a/webmails/rainloop/include.php +++ b/webmails/rainloop/include.php @@ -15,5 +15,5 @@ function __get_custom_data_full_path() */ function __get_additional_configuration_name() { - return 'config.ini'; + return 'application.ini'; } diff --git a/webmails/rainloop/start.py b/webmails/rainloop/start.py index e2b917bf..8d369e47 100755 --- a/webmails/rainloop/start.py +++ b/webmails/rainloop/start.py @@ -1,21 +1,16 @@ #!/usr/bin/python3 -import jinja2 import os import shutil import logging as log import sys +from mailustart import resolve, convert 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 -os.environ["FRONT_ADDRESS"] = os.environ.get("FRONT_ADDRESS", "front") -os.environ["IMAP_ADDRESS"] = os.environ.get("IMAP_ADDRESS", "imap") +os.environ["FRONT_ADDRESS"] = resolve(os.environ.get("FRONT_ADDRESS", "front")) +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)) @@ -25,7 +20,7 @@ os.makedirs(base + "domains", exist_ok=True) os.makedirs(base + "configs", exist_ok=True) 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") os.system("chown -R www-data:www-data /data") diff --git a/webmails/roundcube/Dockerfile b/webmails/roundcube/Dockerfile index 1c5d82c4..3c970ea4 100644 --- a/webmails/roundcube/Dockerfile +++ b/webmails/roundcube/Dockerfile @@ -1,11 +1,11 @@ FROM php:7.2-apache #Shared layer between rainloop and roundcube RUN apt-get update && apt-get install -y \ - python3 curl \ + python3 curl python3-pip git \ && rm -rf /var/lib/apt/lists \ && 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 \ zlib1g-dev python3-jinja2 \ @@ -23,6 +23,8 @@ RUN apt-get update && apt-get install -y \ && chown -R www-data: logs temp \ && rm -rf /var/lib/apt/lists + RUN pip3 install git+https://github.com/usrpro/MailuStart.git#egg=mailustart + COPY php.ini /php.ini COPY config.inc.php /var/www/html/config/ COPY start.py /start.py diff --git a/webmails/roundcube/start.py b/webmails/roundcube/start.py index 4effd965..c0e52883 100755 --- a/webmails/roundcube/start.py +++ b/webmails/roundcube/start.py @@ -1,17 +1,12 @@ #!/usr/bin/python3 import os -import jinja2 import logging as log import sys +from mailustart import convert 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)) convert("/php.ini", "/usr/local/etc/php/conf.d/roundcube.ini")