Merge branch 'master' of github.com:mailcow/mailcow-dockerized

master
andryyy 2021-02-11 09:36:18 +01:00
commit 386d6109c8
8 changed files with 224 additions and 85 deletions

View File

@ -130,6 +130,24 @@ namespace inbox {
mailbox "Verwijderde items" { mailbox "Verwijderde items" {
special_use = \Trash special_use = \Trash
} }
mailbox "Удаленные" {
special_use = \Trash
}
mailbox "Удаленные элементы" {
special_use = \Trash
}
mailbox "Корзина" {
special_use = \Trash
}
mailbox "Видалені" {
special_use = \Trash
}
mailbox "Видалені елементи" {
special_use = \Trash
}
mailbox "Кошик" {
special_use = \Trash
}
mailbox "废件箱" { mailbox "废件箱" {
special_use = \Trash special_use = \Trash
} }
@ -167,6 +185,12 @@ namespace inbox {
mailbox "归档" { mailbox "归档" {
special_use = \Archive special_use = \Archive
} }
mailbox "Архив" {
special_use = \Archive
}
mailbox "Архів" {
special_use = \Archive
}
mailbox "Sent" { mailbox "Sent" {
auto = subscribe auto = subscribe
special_use = \Sent special_use = \Sent
@ -186,6 +210,18 @@ namespace inbox {
mailbox "已发送邮件" { mailbox "已发送邮件" {
special_use = \Sent special_use = \Sent
} }
mailbox "Отправленные" {
special_use = \Sent
}
mailbox "Отправленные элементы" {
special_use = \Sent
}
mailbox "Надіслані" {
special_use = \Sent
}
mailbox "Надіслані елементи" {
special_use = \Sent
}
mailbox "Gesendet" { mailbox "Gesendet" {
special_use = \Sent special_use = \Sent
} }
@ -235,6 +271,12 @@ namespace inbox {
mailbox "草稿箱" { mailbox "草稿箱" {
special_use = \Drafts special_use = \Drafts
} }
mailbox "Черновики" {
special_use = \Drafts
}
mailbox "Чернетки" {
special_use = \Drafts
}
mailbox "Junk" { mailbox "Junk" {
auto = subscribe auto = subscribe
special_use = \Junk special_use = \Junk
@ -266,6 +308,15 @@ namespace inbox {
mailbox "垃圾箱" { mailbox "垃圾箱" {
special_use = \Junk special_use = \Junk
} }
mailbox "Нежелательная почта" {
special_use = \Junk
}
mailbox "Спам" {
special_use = \Junk
}
mailbox "Небажана пошта" {
special_use = \Junk
}
mailbox "Koncepty" { mailbox "Koncepty" {
special_use = \Drafts special_use = \Drafts
} }
@ -331,6 +382,7 @@ service auth {
mode = 0600 mode = 0600
user = vmail user = vmail
} }
vsz_limit = 2G
} }
service managesieve-login { service managesieve-login {
inet_listener sieve { inet_listener sieve {

View File

@ -56,6 +56,9 @@ BOUNCE_FUZZY {
} }
# Remove bayes ham if fuzzy denied # Remove bayes ham if fuzzy denied
FUZZY_HAM_MISMATCH { FUZZY_HAM_MISMATCH {
expression = "(-FUZZY_DENIED | -MAILCOW_FUZZY_DENIED | -LOCAL_FUZZY_DENIED) & (^BAYES_HAM | ^NEURAL_HAM_LONG | ^NEURAL_HAM_SHORT)"; expression = "( -FUZZY_DENIED | -MAILCOW_FUZZY_DENIED | -LOCAL_FUZZY_DENIED ) & ( ^BAYES_HAM | ^NEURAL_HAM_LONG | ^NEURAL_HAM_SHORT )"
score = 1.0; }
# Remove bayes spam if local fuzzy white
FUZZY_SPAM_MISMATCH {
expression = "( -LOCAL_FUZZY_WHITE ) & ( ^BAYES_SPAM | ^NEURAL_SPAM_LONG | ^NEURAL_SPAM_SHORT )"
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -126,6 +126,9 @@ paths:
goto_spam: goto_spam:
description: learn as spam description: learn as spam
type: boolean type: boolean
sogo_visible:
description: toggle visibility as selectable sender in SOGo
type: boolean
type: object type: object
summary: Create alias summary: Create alias
/api/v1/add/app-passwd: /api/v1/add/app-passwd:
@ -2752,6 +2755,9 @@ paths:
type: string type: string
public_comment: public_comment:
type: string type: string
sogo_visible:
description: toggle visibility as selectable sender in SOGo
type: boolean
type: object type: object
items: items:
description: contains list of aliases you want update description: contains list of aliases you want update
@ -3029,7 +3035,8 @@ paths:
- domain3.tld - domain3.tld
- "*" - "*"
sogo_access: "1" sogo_access: "1"
items: info@domain.tld items:
- info@domain.tld
properties: properties:
attr: attr:
properties: properties:

View File

@ -483,75 +483,94 @@ function alertbox_log_parser($_data){
} }
return false; return false;
} }
function verify_hash($hash, $password) { function verify_salted_hash($hash, $password, $algo, $salt_length)
if (preg_match('/^{SSHA256}/i', $hash)) { {
// Remove tag if any
$hash = preg_replace('/^{SSHA256}/i', '', $hash);
// Decode hash
$dhash = base64_decode($hash);
// Get first 32 bytes of binary which equals a SHA256 hash
$ohash = substr($dhash, 0, 32);
// Remove SHA256 hash from decoded hash to get original salt string
$osalt = str_replace($ohash, '', $dhash);
// Check single salted SHA256 hash against extracted hash
if (hash_equals(hash('sha256', $password . $osalt, true), $ohash)) {
return true;
}
}
elseif (preg_match('/^{SSHA}/i', $hash)) {
// Remove tag if any
$hash = preg_replace('/^{SSHA}/i', '', $hash);
// Decode hash // Decode hash
$dhash = base64_decode($hash); $dhash = base64_decode($hash);
// Get first 20 bytes of binary which equals a SSHA hash // Get first 20 bytes of binary which equals a SSHA hash
$ohash = substr($dhash, 0, 20); $ohash = substr($dhash, 0, $salt_length);
// Remove SSHA hash from decoded hash to get original salt string // Remove SSHA hash from decoded hash to get original salt string
$osalt = str_replace($ohash, '', $dhash); $osalt = str_replace($ohash, '', $dhash);
// Check single salted SSHA hash against extracted hash // Check single salted SSHA hash against extracted hash
if (hash_equals(hash('sha1', $password . $osalt, true), $ohash)) { if (hash_equals(hash($algo, $password . $osalt, true), $ohash)) {
return true; return true;
} }
return false;
} }
elseif (preg_match('/^{PLAIN-MD5}/i', $hash)) {
$hash = preg_replace('/^{PLAIN-MD5}/i', '', $hash); function verify_hash($hash, $password)
if (md5($password) == $hash) { {
return true; if (preg_match('/^{(.+)}(.+)/i', $hash, $hash_array)) {
$scheme = strtoupper($hash_array[1]);
$hash = $hash_array[2];
switch ($scheme) {
case "ARGON2I":
case "ARGON2ID":
case "BLF-CRYPT":
case "CRYPT":
case "DES-CRYPT":
case "MD5-CRYPT":
case "MD5":
case "SHA256-CRYPT":
case "SHA512-CRYPT":
return password_verify($password, $hash);
case "CLEAR":
case "CLEARTEXT":
case "PLAIN":
return $password == $hash;
case "LDAP-MD5":
$hash = base64_decode($hash);
return hash_equals(hash('md5', $password, true), $hash);
case "PBKDF2":
$components = explode('$', $hash);
$salt = $components[2];
$rounds = $components[3];
$hash = $components[4];
return hash_equals(hash_pbkdf2('sha1', $password, $salt, $rounds), $hash);
case "PLAIN-MD4":
return hash_equals(hash('md4', $password), $hash);
case "PLAIN-MD5":
return md5($password) == $hash;
case "PLAIN-TRUNC":
$components = explode('-', $hash);
if (count($components) > 1) {
$trunc_len = $components[0];
$trunc_password = $components[1];
return substr($password, 0, $trunc_len) == $trunc_password;
} else {
return $password == $hash;
} }
}
elseif (preg_match('/^{SHA512-CRYPT}/i', $hash)) { case "SHA":
// Remove tag if any case "SHA1":
$hash = preg_replace('/^{SHA512-CRYPT}/i', '', $hash); case "SHA256":
// Decode hash case "SHA512":
preg_match('/\\$6\\$(.*)\\$(.*)/i', $hash, $hash_array); // SHA is an alias for SHA1
$osalt = $hash_array[1]; $scheme = $scheme == "SHA" ? "sha1" : strtolower($scheme);
$ohash = $hash_array[2]; $hash = base64_decode($hash);
if (hash_equals(crypt($password, '$6$' . $osalt . '$'), $hash)) { return hash_equals(hash($scheme, $password, true), $hash);
return true;
} case "SMD5":
} return verify_salted_hash($hash, $password, 'md5', 16);
elseif (preg_match('/^{SSHA512}/i', $hash)) {
$hash = preg_replace('/^{SSHA512}/i', '', $hash); case "SSHA":
// Decode hash return verify_salted_hash($hash, $password, 'sha1', 20);
$dhash = base64_decode($hash);
// Get first 64 bytes of binary which equals a SHA512 hash case "SSHA256":
$ohash = substr($dhash, 0, 64); return verify_salted_hash($hash, $password, 'sha256', 32);
// Remove SHA512 hash from decoded hash to get original salt string
$osalt = str_replace($ohash, '', $dhash); case "SSHA512":
// Check single salted SHA512 hash against extracted hash return verify_salted_hash($hash, $password, 'sha512', 64);
if (hash_equals(hash('sha512', $password . $osalt, true), $ohash)) {
return true; default:
} return false;
}
elseif (preg_match('/^{MD5-CRYPT}/i', $hash)) {
$hash = preg_replace('/^{MD5-CRYPT}/i', '', $hash);
if (password_verify($password, $hash)) {
return true;
}
}
elseif (preg_match('/^{BLF-CRYPT}/i', $hash)) {
$hash = preg_replace('/^{BLF-CRYPT}/i', '', $hash);
if (password_verify($password, $hash)) {
return true;
} }
} }
return false; return false;

View File

@ -1063,7 +1063,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
return false; return false;
} }
// support pre hashed passwords // support pre hashed passwords
if (preg_match('/^({SSHA256}|{SSHA}|{SHA512-CRYPT}|{SSHA512}|{MD5-CRYPT}|{PLAIN-MD5})/i', $password)) { if (preg_match('/^{(ARGON2I|ARGON2ID|BLF-CRYPT|CLEAR|CLEARTEXT|CRYPT|DES-CRYPT|LDAP-MD5|MD5|MD5-CRYPT|PBKDF2|PLAIN|PLAIN-MD4|PLAIN-MD5|PLAIN-TRUNC|PLAIN-TRUNC|SHA|SHA1|SHA256|SHA256-CRYPT|SHA512|SHA512-CRYPT|SMD5|SSHA|SSHA256|SSHA512)}/i', $password)) {
$password_hashed = $password; $password_hashed = $password;
} }
else { else {
@ -2579,7 +2579,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
continue; continue;
} }
// support pre hashed passwords // support pre hashed passwords
if (preg_match('/^({SSHA256}|{SSHA}|{SHA512-CRYPT}|{SSHA512}|{MD5-CRYPT}|{PLAIN-MD5})/i', $password)) { if (preg_match('/^{(ARGON2I|ARGON2ID|BLF-CRYPT|CLEAR|CLEARTEXT|CRYPT|DES-CRYPT|LDAP-MD5|MD5|MD5-CRYPT|PBKDF2|PLAIN|PLAIN-MD4|PLAIN-MD5|PLAIN-TRUNC|PLAIN-TRUNC|SHA|SHA1|SHA256|SHA256-CRYPT|SHA512|SHA512-CRYPT|SMD5|SSHA|SSHA256|SSHA512)}/i', $password)) {
$password_hashed = $password; $password_hashed = $password;
} }
else { else {

View File

@ -9,10 +9,12 @@
"filters": "Filtres", "filters": "Filtres",
"login_as": "S'identifier en tant qu'utilisateur", "login_as": "S'identifier en tant qu'utilisateur",
"prohibited": "Interdit par les ACL", "prohibited": "Interdit par les ACL",
"protocol_access": "Modifier le protocol d'acces",
"pushover": "Pushover", "pushover": "Pushover",
"quarantine": "Actions de quarantaine", "quarantine": "Actions de quarantaine",
"quarantine_attachments": "Pièces jointes en quarantaine", "quarantine_attachments": "Pièces jointes en quarantaine",
"quarantine_notification": "Modifier la notification de quarantaine", "quarantine_notification": "Modifier la notification de quarantaine",
"quarantine_category": "Modifier la catégorie de la notification de quarantaine",
"ratelimit": "Limite d'envoi", "ratelimit": "Limite d'envoi",
"recipient_maps": "Cartes destinataire", "recipient_maps": "Cartes destinataire",
"smtp_ip_access": "Changer les hôtes autorisés pour SMTP", "smtp_ip_access": "Changer les hôtes autorisés pour SMTP",
@ -23,7 +25,8 @@
"spam_score": "Score SPAM", "spam_score": "Score SPAM",
"syncjobs": "Tâches de synchronisation", "syncjobs": "Tâches de synchronisation",
"tls_policy": "Police TLS", "tls_policy": "Police TLS",
"unlimited_quota": "Quota illimité pour les boites de courriel" "unlimited_quota": "Quota illimité pour les boites de courriel",
"domain_desc": "Modifier la description du domaine"
}, },
"add": { "add": {
"activate_filter_warn": "Tous les autres filtres seront désactivés, quand activé est coché.", "activate_filter_warn": "Tous les autres filtres seront désactivés, quand activé est coché.",
@ -31,7 +34,7 @@
"add": "Ajouter", "add": "Ajouter",
"add_domain_only": "Ajouter uniquement le domaine", "add_domain_only": "Ajouter uniquement le domaine",
"add_domain_restart": "Ajouter le domaine et redémarrer SOGo", "add_domain_restart": "Ajouter le domaine et redémarrer SOGo",
"alias_address": "Alias d'adresse/s", "alias_address": "Alias d'adresse(s)",
"alias_address_info": "<small>Adresse(s) courriel complète(s) ou @example.com, pour capturer tous les messages d'un domaine (séparées par des virgules). <b>Seulement des domaines Mailcow</b>.</small>", "alias_address_info": "<small>Adresse(s) courriel complète(s) ou @example.com, pour capturer tous les messages d'un domaine (séparées par des virgules). <b>Seulement des domaines Mailcow</b>.</small>",
"alias_domain": "Alias de domaine", "alias_domain": "Alias de domaine",
"alias_domain_info": "<small>Seulement des noms de domaines valides (séparés par des virgules).</small>", "alias_domain_info": "<small>Seulement des noms de domaines valides (séparés par des virgules).</small>",
@ -136,6 +139,7 @@
"ban_list_info": "Consultez la liste des adresses IP interdites ci-dessous: <b>réseau (durée d'interdiction restante) - [actions]</b>.<br />Les adresses IP mises en file d'attente pour être interdites seront supprimées de la liste d'interdiction active dans quelques secondes.<br />Les étiquettes rouges indiquent des interdictions permanentes actives par liste noire.", "ban_list_info": "Consultez la liste des adresses IP interdites ci-dessous: <b>réseau (durée d'interdiction restante) - [actions]</b>.<br />Les adresses IP mises en file d'attente pour être interdites seront supprimées de la liste d'interdiction active dans quelques secondes.<br />Les étiquettes rouges indiquent des interdictions permanentes actives par liste noire.",
"change_logo": "Changer de logo", "change_logo": "Changer de logo",
"configuration": "Configuration", "configuration": "Configuration",
"convert_html_to_text": "Convertir le code HTML en texte brut",
"credentials_transport_warning": "<b>Attention</b>: Lajout dune nouvelle entrée de carte de transport mettra à jour les informations didentification pour toutes les entrées avec une colonne nexthop correspondante.", "credentials_transport_warning": "<b>Attention</b>: Lajout dune nouvelle entrée de carte de transport mettra à jour les informations didentification pour toutes les entrées avec une colonne nexthop correspondante.",
"customer_id": "ID client", "customer_id": "ID client",
"customize": "Personnaliser", "customize": "Personnaliser",
@ -156,8 +160,9 @@
"dkim_to": "Vers", "dkim_to": "Vers",
"dkim_to_title": "Les domaines ciblés seront réécrits", "dkim_to_title": "Les domaines ciblés seront réécrits",
"domain": "Domaine", "domain": "Domaine",
"domain_admin": "Administrateur de domaine",
"domain_admins": "Administrateurs de domaine", "domain_admins": "Administrateurs de domaine",
"domain_s": "Domaine/s", "domain_s": "Domaine(s)",
"duplicate": "Dupliquer", "duplicate": "Dupliquer",
"duplicate_dkim": "Dupliquer l'enregistrement DKIM", "duplicate_dkim": "Dupliquer l'enregistrement DKIM",
"edit": "Editer", "edit": "Editer",
@ -165,11 +170,13 @@
"excludes": "Exclure ces destinataires", "excludes": "Exclure ces destinataires",
"f2b_ban_time": "Durée du bannissement(s)", "f2b_ban_time": "Durée du bannissement(s)",
"f2b_blacklist": "Réseaux/Domaines sur Liste Noire", "f2b_blacklist": "Réseaux/Domaines sur Liste Noire",
"f2b_filter": "Filtre(s) Regex",
"f2b_list_info": "Un hôte ou un réseau sur liste noire l'emportera toujours sur une entité de liste blanche. <b>L'application des mises à jour de liste prendra quelques secondes.</b>", "f2b_list_info": "Un hôte ou un réseau sur liste noire l'emportera toujours sur une entité de liste blanche. <b>L'application des mises à jour de liste prendra quelques secondes.</b>",
"f2b_max_attempts": "Nb max. de tentatives", "f2b_max_attempts": "Nb max. de tentatives",
"f2b_netban_ipv4": "Taille du sous-réseau IPv4 pour l'application du bannissement (8-32)", "f2b_netban_ipv4": "Taille du sous-réseau IPv4 pour l'application du bannissement (8-32)",
"f2b_netban_ipv6": "Taille du sous-réseau IPv6 pour l'application du bannissement (8-128)", "f2b_netban_ipv6": "Taille du sous-réseau IPv6 pour l'application du bannissement (8-128)",
"f2b_parameters": "Paramètres Fail2ban", "f2b_parameters": "Paramètres Fail2ban",
"f2b_regex_info": "Logs pris en compte: SOGo, Postfix, Dovecot, PHP-FPM.",
"f2b_retry_window": "Fenêtre de nouvel essai pour le nb max. de tentatives", "f2b_retry_window": "Fenêtre de nouvel essai pour le nb max. de tentatives",
"f2b_whitelist": "Réseaux/hôtes en liste blanche", "f2b_whitelist": "Réseaux/hôtes en liste blanche",
"filter_table": "Table de filtrage", "filter_table": "Table de filtrage",
@ -184,6 +191,7 @@
"hash_remove_info": "La suppression d'un hachage ratelimit (s'il existe toujours) réinitialisera complètement son compteur.<br>\r\n Chaque hachage est indiqué par une couleur individuelle.", "hash_remove_info": "La suppression d'un hachage ratelimit (s'il existe toujours) réinitialisera complètement son compteur.<br>\r\n Chaque hachage est indiqué par une couleur individuelle.",
"help_text": "Remplacer le texte d'aide sous le masque de connexion (HTML autorisé)", "help_text": "Remplacer le texte d'aide sous le masque de connexion (HTML autorisé)",
"host": "Hôte", "host": "Hôte",
"html": "HTML",
"import": "Importer", "import": "Importer",
"import_private_key": "Importer la clè privée", "import_private_key": "Importer la clè privée",
"in_use_by": "Utilisé par", "in_use_by": "Utilisé par",
@ -212,6 +220,7 @@
"oauth2_redirect_uri": "URI de redirection", "oauth2_redirect_uri": "URI de redirection",
"oauth2_renew_secret": "Générer un nouveau secret client", "oauth2_renew_secret": "Générer un nouveau secret client",
"oauth2_revoke_tokens": "Révoquer tous les jetons", "oauth2_revoke_tokens": "Révoquer tous les jetons",
"optional": "Optionnel",
"password": "Mot de passe", "password": "Mot de passe",
"password_repeat": "Confirmation du mot de passe (répéter)", "password_repeat": "Confirmation du mot de passe (répéter)",
"priority": "Priorité", "priority": "Priorité",
@ -221,6 +230,7 @@
"quarantine_exclude_domains": "Exclure les domaines et les alias de domaine", "quarantine_exclude_domains": "Exclure les domaines et les alias de domaine",
"quarantine_max_age": "Âge maximun en jour(s)<br><small>La valeur doit être égale ou supérieure à 1 jour.</small>", "quarantine_max_age": "Âge maximun en jour(s)<br><small>La valeur doit être égale ou supérieure à 1 jour.</small>",
"quarantine_max_size": "Taille maximum en Mo (les éléments plus grands sont mis au rebut):<br><small>0 ne signifie <b>pas</b> illimité.</small>", "quarantine_max_size": "Taille maximum en Mo (les éléments plus grands sont mis au rebut):<br><small>0 ne signifie <b>pas</b> illimité.</small>",
"quarantine_max_score": "Ignorer la notification si le score de spam est au dessus de cette valeur:<br><small>Par défaut: 9999.0</small>",
"quarantine_notification_html": "Modèle de courriel de notification:<br><small>Laisser vide pour restaurer le modèle par défaut.</small>", "quarantine_notification_html": "Modèle de courriel de notification:<br><small>Laisser vide pour restaurer le modèle par défaut.</small>",
"quarantine_notification_sender": "Notification par e-mail de lexpéditeur", "quarantine_notification_sender": "Notification par e-mail de lexpéditeur",
"quarantine_notification_subject": "Objet du courriel de notification", "quarantine_notification_subject": "Objet du courriel de notification",
@ -397,6 +407,7 @@
"redis_error": "Erreur Redis: %s", "redis_error": "Erreur Redis: %s",
"relayhost_invalid": "La saisie de la carte %s est invalide", "relayhost_invalid": "La saisie de la carte %s est invalide",
"release_send_failed": "Le message na pas pu être diffusé: %s", "release_send_failed": "Le message na pas pu être diffusé: %s",
"reset_f2b_regex": "Le filtre regex n'a pas pu être réinitialisé à temps, veuillez réessayer ou attendre quelques secondes de plus et recharger le site web.",
"resource_invalid": "Le nom de la resource %s n'est pas valide", "resource_invalid": "Le nom de la resource %s n'est pas valide",
"rl_timeframe": "Le délai limite du taux est incorrect", "rl_timeframe": "Le délai limite du taux est incorrect",
"rspamd_ui_pw_length": "Le mot de passe de l'interface Rspamd doit être de 6 caratères au minimum", "rspamd_ui_pw_length": "Le mot de passe de l'interface Rspamd doit être de 6 caratères au minimum",
@ -412,19 +423,21 @@
"targetd_relay_domain": "Le domaine cible %s est un domaine de relais", "targetd_relay_domain": "Le domaine cible %s est un domaine de relais",
"temp_error": "Erreur temporaire", "temp_error": "Erreur temporaire",
"text_empty": "La zone texte ne peut pas être vide", "text_empty": "La zone texte ne peut pas être vide",
"tfa_token_invalid": "Le token TFA est invalide",
"tls_policy_map_dest_invalid": "La politique de destination n'est pas valide", "tls_policy_map_dest_invalid": "La politique de destination n'est pas valide",
"tls_policy_map_entry_exists": "Une entrée de carte de politique \"%s\" existe", "tls_policy_map_entry_exists": "Une entrée de carte de politique \"%s\" existe",
"tls_policy_map_parameter_invalid": "Le paramètre Policy est invalide", "tls_policy_map_parameter_invalid": "Le paramètre Policy est invalide",
"totp_verification_failed": "Echec de la vérification TOTP", "totp_verification_failed": "Echec de la vérification TOTP",
"transport_dest_exists": "La destination de transport \"%s\" existe", "transport_dest_exists": "La destination de transport \"%s\" existe",
"u2f_verification_failed": "Echec de la vérification U2F: %s", "u2f_verification_failed": "Echec de la vérification U2F: %s",
"fido2_verification_failed": "La vérification FIDO2 a échoué: %s",
"unknown": "Une erreur inconnue est survenue", "unknown": "Une erreur inconnue est survenue",
"unknown_tfa_method": "Methode TFA inconnue", "unknown_tfa_method": "Methode TFA inconnue",
"unlimited_quota_acl": "Quota illimité interdit par les ACL", "unlimited_quota_acl": "Quota illimité interdit par les ACL",
"username_invalid": "Le nom d'utilisateur %s ne peut pas être utilisé", "username_invalid": "Le nom d'utilisateur %s ne peut pas être utilisé",
"validity_missing": "Veuillez attribuer une période de validité", "validity_missing": "Veuillez attribuer une période de validité",
"value_missing": "Veuillez fournir toutes les valeurs", "value_missing": "Veuillez fournir toutes les valeurs",
"yotp_verification_failed": "La vérification Yubico OTP en échec: %s" "yotp_verification_failed": "La vérification Yubico OTP a échoué: %s"
}, },
"debug": { "debug": {
"chart_this_server": "Graphique (ce serveur)", "chart_this_server": "Graphique (ce serveur)",
@ -452,6 +465,7 @@
"cname_from_a": "Valeur dérivée de lenregistrement A/AAAA. Ceci est supporté tant que lenregistrement indique la bonne ressource.", "cname_from_a": "Valeur dérivée de lenregistrement A/AAAA. Ceci est supporté tant que lenregistrement indique la bonne ressource.",
"dns_records": "Enregistrements DNS", "dns_records": "Enregistrements DNS",
"dns_records_24hours": "Veuillez noter que les modifications apportées au DNS peuvent prendre jusquà 24 heures pour que leurs états actuels soient correctement reflétés sur cette page. Il est conçu comme un moyen pour vous de voir facilement comment configurer vos enregistrements DNS et de vérifier si tous vos enregistrements sont correctement stockés dans les DNS.", "dns_records_24hours": "Veuillez noter que les modifications apportées au DNS peuvent prendre jusquà 24 heures pour que leurs états actuels soient correctement reflétés sur cette page. Il est conçu comme un moyen pour vous de voir facilement comment configurer vos enregistrements DNS et de vérifier si tous vos enregistrements sont correctement stockés dans les DNS.",
"dns_records_docs": "Veuillez également consulter <a target=\"_blank\" href=\"https://mailcow.github.io/mailcow-dockerized-docs/prerequisite-dns/\">la documentation</a>.",
"dns_records_data": "Données correcte", "dns_records_data": "Données correcte",
"dns_records_name": "Nom", "dns_records_name": "Nom",
"dns_records_status": "Etat courant", "dns_records_status": "Etat courant",
@ -464,6 +478,7 @@
"alias": "Editer les alias", "alias": "Editer les alias",
"allow_from_smtp": "Restreindre l'utilisation de <b>SMTP</b> à ces adresses IP", "allow_from_smtp": "Restreindre l'utilisation de <b>SMTP</b> à ces adresses IP",
"allow_from_smtp_info": "Laissez vide pour autoriser tous les expéditeurs.<br>Adresses IPv4/IPv6 et réseaux.", "allow_from_smtp_info": "Laissez vide pour autoriser tous les expéditeurs.<br>Adresses IPv4/IPv6 et réseaux.",
"allowed_protocols": "Protocoles autorisés",
"app_name": "Nom de l'application", "app_name": "Nom de l'application",
"app_passwd": "Mot de passe de l'application", "app_passwd": "Mot de passe de l'application",
"automap": "Essayer dautomatiser les dossiers (\"Sent items\", \"Sent\" => \"Sent\" etc.)", "automap": "Essayer dautomatiser les dossiers (\"Sent items\", \"Sent\" => \"Sent\" etc.)",
@ -550,7 +565,7 @@
"spam_score": "Définir un score spam personnalisé", "spam_score": "Définir un score spam personnalisé",
"subfolder2": "Synchronisation dans le sous-dossier sur la destination<br><small>(vide = ne pas utiliser de sous-dossier)</small>", "subfolder2": "Synchronisation dans le sous-dossier sur la destination<br><small>(vide = ne pas utiliser de sous-dossier)</small>",
"syncjob": "Modifier la tâche de synchronisation", "syncjob": "Modifier la tâche de synchronisation",
"target_address": "Adresse/s Goto<small>(séparé/s par des virgules)</small>", "target_address": "Adresse(s) Goto<small>(séparé(s) par des virgules)</small>",
"target_domain": "Domaine cible", "target_domain": "Domaine cible",
"timeout1": "Délai de connexion à lhôte distant", "timeout1": "Délai de connexion à lhôte distant",
"timeout2": "Délai de connexion à lhôte local", "timeout2": "Délai de connexion à lhôte local",
@ -590,8 +605,10 @@
}, },
"login": { "login": {
"delayed": "La connexion a été retardée de %s secondes.", "delayed": "La connexion a été retardée de %s secondes.",
"fido2_webauthn": "FIDO2/WebAuthn",
"login": "Connexion", "login": "Connexion",
"mobileconfig_info": "Veuillez vous connecter en tant quutilisateur de la boîte pour télécharger le profil de connexion Apple demandé.", "mobileconfig_info": "Veuillez vous connecter en tant quutilisateur de la boîte pour télécharger le profil de connexion Apple demandé.",
"other_logins": "Clé d'authentification",
"password": "Mot de passe", "password": "Mot de passe",
"username": "Nom d'utilisateur" "username": "Nom d'utilisateur"
}, },
@ -617,6 +634,7 @@
"aliases": "Aliases", "aliases": "Aliases",
"allow_from_smtp": "Restreindre l'utilisation de <b>SMTP</b> à ces adresses IP", "allow_from_smtp": "Restreindre l'utilisation de <b>SMTP</b> à ces adresses IP",
"allow_from_smtp_info": "Laissez vide pour autoriser tous les expéditeurs.<br>Adresses IPv4/IPv6 et réseaux.", "allow_from_smtp_info": "Laissez vide pour autoriser tous les expéditeurs.<br>Adresses IPv4/IPv6 et réseaux.",
"allowed_protocols": "Protocoles autorisés",
"backup_mx": "Sauvegarde MX", "backup_mx": "Sauvegarde MX",
"bcc": "BCC", "bcc": "BCC",
"bcc_destination": "Destination BCC", "bcc_destination": "Destination BCC",
@ -666,6 +684,8 @@
"mailbox_defquota": "Taille de boîte par défaut", "mailbox_defquota": "Taille de boîte par défaut",
"mailbox_quota": "Taille max. dune boîte", "mailbox_quota": "Taille max. dune boîte",
"mailboxes": "Boîtes mail", "mailboxes": "Boîtes mail",
"mailbox_defaults": "Paramètres par défaut",
"mailbox_defaults_info": "Définir les paramètres par défaut pour les nouvelles boîtes aux lettres.",
"mins_interval": "Intervalle (min)", "mins_interval": "Intervalle (min)",
"msg_num": "Message #", "msg_num": "Message #",
"multiple_bookings": "Réservations multiples", "multiple_bookings": "Réservations multiples",
@ -676,7 +696,11 @@
"owner": "Propriétaire", "owner": "Propriétaire",
"private_comment": "Commentaire privé", "private_comment": "Commentaire privé",
"public_comment": "Commentaire public", "public_comment": "Commentaire public",
"q_add_header": "Courriers indésirables",
"q_all": "Toutes les catégories",
"q_reject": "Rejecté",
"quarantine_notification": "Avis de quarantaine", "quarantine_notification": "Avis de quarantaine",
"quarantine_category": "Catégorie de la notification de quarantaine",
"quick_actions": "Actions", "quick_actions": "Actions",
"recipient_map": "Carte du destinataire", "recipient_map": "Carte du destinataire",
"recipient_map_info": "Les cartes des destinataires sont utilisées pour remplacer ladresse de destination dun message avant sa livraison.", "recipient_map_info": "Les cartes des destinataires sont utilisées pour remplacer ladresse de destination dun message avant sa livraison.",
@ -711,7 +735,7 @@
"table_size": "Taille de la table", "table_size": "Taille de la table",
"table_size_show_n": "Montrer %s articles", "table_size_show_n": "Montrer %s articles",
"target_address": "Goto adresse", "target_address": "Goto adresse",
"target_domain": "Domain cible", "target_domain": "Domaine cible",
"tls_enforce_in": "Appliquer le TLS entrant", "tls_enforce_in": "Appliquer le TLS entrant",
"tls_enforce_out": "Appliquer le TLS sortant", "tls_enforce_out": "Appliquer le TLS sortant",
"tls_map_dest": "Destination", "tls_map_dest": "Destination",
@ -742,12 +766,16 @@
"action": "Action", "action": "Action",
"atts": "Pièces jointes", "atts": "Pièces jointes",
"check_hash": "Hachage du fichier de recherche @ VT", "check_hash": "Hachage du fichier de recherche @ VT",
"confirm": "Confirmer",
"confirm_delete": "Confirmer la suppression de cet élément.", "confirm_delete": "Confirmer la suppression de cet élément.",
"danger": "Danger", "danger": "Danger",
"deliver_inbox": "Envoyer dans la boîte de reception",
"disabled_by_config": "La configuration actuelle du système désactive la fonctionnalité de quarantaine. Veuillez définir \"retentions par boîte\" et une \"taille maximum\" pour les éléments en quarantaine.", "disabled_by_config": "La configuration actuelle du système désactive la fonctionnalité de quarantaine. Veuillez définir \"retentions par boîte\" et une \"taille maximum\" pour les éléments en quarantaine.",
"download_eml": "Télécharger (.eml)", "download_eml": "Télécharger (.eml)",
"empty": "Pas de résultat", "empty": "Pas de résultat",
"high_danger": "Haut", "high_danger": "Haut",
"info": "Information",
"junk_folder": "Courriers indésirables",
"learn_spam_delete": "Apprendre comme spam et supprimer", "learn_spam_delete": "Apprendre comme spam et supprimer",
"low_danger": "Danger faible", "low_danger": "Danger faible",
"medium_danger": "Danger moyen", "medium_danger": "Danger moyen",
@ -755,6 +783,7 @@
"notified": "Notifié", "notified": "Notifié",
"qhandler_success": "Demande envoyée avec succès au système. Vous pouvez maintenant fermer la fenêtre.", "qhandler_success": "Demande envoyée avec succès au système. Vous pouvez maintenant fermer la fenêtre.",
"qid": "Rspamd QID", "qid": "Rspamd QID",
"qinfo": "Le système de quarantaine enregistrera le courrier rejeté dans la base de données (l'expéditeur n'aura <em> pas </em> l'impression d'un courrier remis) ainsi que le courrier, qui est remis sous forme de copie dans le dossier indésirable d'une boîte aux lettres.\r\n <br>\"Apprendre comme spam et supprimer\" apprendra un message comme spam via le théorème Bayesianet calculera également des hachages flous pour refuser des messages similaires à l'avenir.\r\n <br>Veuillez noter que l'apprentissage de plusieurs messages peut prendre du temps, selon votre système. <br> Les éléments figurant sur la liste noire sont exclus de la quarantaine.",
"qitem": "Élément de quarantaine", "qitem": "Élément de quarantaine",
"quarantine": "Quarantaine", "quarantine": "Quarantaine",
"quick_actions": "Actions", "quick_actions": "Actions",
@ -762,16 +791,21 @@
"received": "Reçu", "received": "Reçu",
"recipients": "Destinataires", "recipients": "Destinataires",
"refresh": "Rafraîchir", "refresh": "Rafraîchir",
"rejected": "Rejeté",
"release": "Libérer", "release": "Libérer",
"release_body": "Nous avons joint votre message comme fichier eml à ce message.", "release_body": "Nous avons joint votre message comme fichier eml à ce message.",
"release_subject": "Article de quarantaine potentiellement dommageable %s", "release_subject": "Article de quarantaine potentiellement dommageable %s",
"remove": "Enlever", "remove": "Enlever",
"rewrite_subject": "Réécrire le sujet",
"rspamd_result": "Résultat Rspamd", "rspamd_result": "Résultat Rspamd",
"sender": "Expéditeur (SMTP)", "sender": "Expéditeur (SMTP)",
"sender_header": "Expéditeur (\"From\" header)", "sender_header": "Expéditeur (\"From\" header)",
"type": "Type",
"quick_release_link": "Ouvrir le lien de dégagement rapide", "quick_release_link": "Ouvrir le lien de dégagement rapide",
"quick_delete_link": "Ouvrir le lien de suppression rapide", "quick_delete_link": "Ouvrir le lien de suppression rapide",
"quick_info_link": "Ouvrir le lien d'informations",
"show_item": "Montrer l'article", "show_item": "Montrer l'article",
"spam": "Spam",
"spam_score": "Score", "spam_score": "Score",
"subj": "Sujet", "subj": "Sujet",
"table_size": "Dimension de la table", "table_size": "Dimension de la table",
@ -859,6 +893,7 @@
"upload_success": "Fichier téléchargé avec succès", "upload_success": "Fichier téléchargé avec succès",
"verified_totp_login": "Authentification TOTP vérifiée", "verified_totp_login": "Authentification TOTP vérifiée",
"verified_u2f_login": "Authentification U2F vérifiée", "verified_u2f_login": "Authentification U2F vérifiée",
"verified_fido2_login": "Authentification FIDO2 vérifiée",
"verified_yotp_login": "Authentification Yubico OTP vérifiée" "verified_yotp_login": "Authentification Yubico OTP vérifiée"
}, },
"tfa": { "tfa": {
@ -879,15 +914,30 @@
"set_tfa": "Définir une méthode dauthentification à deux facteurs", "set_tfa": "Définir une méthode dauthentification à deux facteurs",
"start_u2f_validation": "Début de la validation", "start_u2f_validation": "Début de la validation",
"tfa": "Authentification à deux facteurs", "tfa": "Authentification à deux facteurs",
"tfa_token_invalid": "Token TFA invalide",
"totp": "OTP (One Time Password = Mot de passe à usage unique : Google Authenticator, Authy, etc.)", "totp": "OTP (One Time Password = Mot de passe à usage unique : Google Authenticator, Authy, etc.)",
"u2f": "Authentification U2F", "u2f": "Authentification U2F",
"waiting_usb_auth": "<i>En attente dun périphérique USB...</i><br><br>Sil vous plaît appuyez maintenant sur le bouton de votre périphérique USB U2F.", "waiting_usb_auth": "<i>En attente dun périphérique USB...</i><br><br>Sil vous plaît appuyez maintenant sur le bouton de votre périphérique USB U2F.",
"waiting_usb_register": "<i>En attente dun périphérique USB...</i><br><br>Veuillez entrer votre mot de passe ci-dessus et confirmer votre inscription U2F en appuyant sur le bouton de votre périphérique USB U2F.", "waiting_usb_register": "<i>En attente dun périphérique USB...</i><br><br>Veuillez entrer votre mot de passe ci-dessus et confirmer votre inscription U2F en appuyant sur le bouton de votre périphérique USB U2F.",
"yubi_otp": "Authentification OTP Yubico" "yubi_otp": "Authentification OTP Yubico"
}, },
"fido2": {
"set_fn": "Définir un nom",
"fn": "Nom",
"rename": "renommer",
"confirm": "Confirmer",
"register_status": "Etat de l'enregistrement",
"known_ids": "Identifiant(s) connu(s)",
"none": "Désactivé",
"set_fido2": "Enregistrer un nouvel appareil FIDO2",
"start_fido2_validation": "Tester la validation FIDO2",
"fido2_auth": "Se connecter avec FIDO2",
"fido2_success": "L'appareil est enregistré avec succès",
"fido2_validation_failed": "La validation a échoué"
},
"user": { "user": {
"action": "Action", "action": "Action",
"active": "Active", "active": "Actif",
"active_sieve": "Filtre actif", "active_sieve": "Filtre actif",
"advanced_settings": "Paramètres avancés", "advanced_settings": "Paramètres avancés",
"alias": "Alias", "alias": "Alias",
@ -931,7 +981,7 @@
"hours": "heures", "hours": "heures",
"in_use": "Utilisé", "in_use": "Utilisé",
"interval": "Intervalle", "interval": "Intervalle",
"is_catch_all": "Attrape-tout pour le domaine/s", "is_catch_all": "Attrape-tout pour le domaine(s)",
"last_mail_login": "Dernière connexion mail", "last_mail_login": "Dernière connexion mail",
"last_run": "Dernière exécution", "last_run": "Dernière exécution",
"loading": "Chargement...", "loading": "Chargement...",
@ -956,8 +1006,13 @@
"pushover_title": "Titre de la notification", "pushover_title": "Titre de la notification",
"pushover_vars": "Lorsquaucun filtre dexpéditeur nest défini, tous les messages seront considérés.<br>Les filtres Regex ainsi que les vérifications exactes de lexpéditeur peuvent être définis individuellement et seront considérés de façon séquentielle. Ils ne dépendent pas les uns des autres.<br>Variables utilisables pour le texte et le titre (veuillez prendre note des politiques de protection des données)", "pushover_vars": "Lorsquaucun filtre dexpéditeur nest défini, tous les messages seront considérés.<br>Les filtres Regex ainsi que les vérifications exactes de lexpéditeur peuvent être définis individuellement et seront considérés de façon séquentielle. Ils ne dépendent pas les uns des autres.<br>Variables utilisables pour le texte et le titre (veuillez prendre note des politiques de protection des données)",
"pushover_verify": "Vérifier les justificatifs", "pushover_verify": "Vérifier les justificatifs",
"q_add_header": "Courrier indésirable",
"q_all": "Toutes les catégories",
"q_reject": "Rejeté",
"quarantine_notification": "Avis de quarantaine", "quarantine_notification": "Avis de quarantaine",
"quarantine_category": "Catégorie de la notification de quarantaine",
"quarantine_notification_info": "Une fois quun avis a été envoyé, les articles seront marqués comme \"notified\" et aucune autre notification ne sera envoyée pour ce point particulier.", "quarantine_notification_info": "Une fois quun avis a été envoyé, les articles seront marqués comme \"notified\" et aucune autre notification ne sera envoyée pour ce point particulier.",
"quarantine_category_info": "La catégorie de notification \"Rejeté\" inclut le courrier qui a été rejeté, tandis que \"Dossier indésirable\" informera un utilisateur des e-mails qui ont été placés dans le dossier indésirable.",
"remove": "Enlever", "remove": "Enlever",
"running": "En fonction", "running": "En fonction",
"save": "Sauvegarder les changements", "save": "Sauvegarder les changements",

View File

@ -185,8 +185,9 @@ services:
volumes: volumes:
- ./data/conf/sogo/:/etc/sogo/:z - ./data/conf/sogo/:/etc/sogo/:z
- ./data/web/inc/init_db.inc.php:/init_db.inc.php:Z - ./data/web/inc/init_db.inc.php:/init_db.inc.php:Z
- ./data/conf/sogo/custom-sogo.js:/usr/lib/GNUstep/SOGo/WebServerResources/js/custom-sogo.js:z - ./data/conf/sogo/custom-favicon.ico:/usr/lib/GNUstep/SOGo/WebServerResources/img/sogo.ico:z
- ./data/conf/sogo/custom-theme.js:/usr/lib/GNUstep/SOGo/WebServerResources/js/theme.js:z - ./data/conf/sogo/custom-theme.js:/usr/lib/GNUstep/SOGo/WebServerResources/js/theme.js:z
- ./data/conf/sogo/custom-sogo.js:/usr/lib/GNUstep/SOGo/WebServerResources/js/custom-sogo.js:z
- mysql-socket-vol-1:/var/run/mysqld/:z - mysql-socket-vol-1:/var/run/mysqld/:z
- sogo-web-vol-1:/sogo_web:z - sogo-web-vol-1:/sogo_web:z
- sogo-userdata-backup-vol-1:/sogo_backup:Z - sogo-userdata-backup-vol-1:/sogo_backup:Z
@ -414,6 +415,8 @@ services:
#command: /watchdog.sh #command: /watchdog.sh
dns: dns:
- ${IPV4_NETWORK:-172.22.1}.254 - ${IPV4_NETWORK:-172.22.1}.254
tmpfs:
- /tmp
volumes: volumes:
- rspamd-vol-1:/var/lib/rspamd:z - rspamd-vol-1:/var/lib/rspamd:z
- mysql-socket-vol-1:/var/run/mysqld/:z - mysql-socket-vol-1:/var/run/mysqld/:z