Merge branch 'feature/bootstrap5' into nightly
This commit is contained in:
commit
4227890ab5
|
@ -1,4 +1,4 @@
|
||||||
FROM alpine:3.16
|
FROM alpine:3.17
|
||||||
|
|
||||||
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"
|
||||||
|
|
||||||
|
|
|
@ -1420,11 +1420,11 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
// check attributes
|
// check attributes
|
||||||
$attr = array();
|
$attr = array();
|
||||||
$attr['tags'] = (isset($_data['tags'])) ? $_data['tags'] : array();
|
$attr['tags'] = (isset($_data['tags'])) ? $_data['tags'] : array();
|
||||||
$attr['max_num_aliases_for_domain'] = (isset($_data['max_num_aliases_for_domain'])) ? intval($_data['max_num_aliases_for_domain']) : 0;
|
$attr['max_num_aliases_for_domain'] = (!empty($_data['max_num_aliases_for_domain'])) ? intval($_data['max_num_aliases_for_domain']) : 400;
|
||||||
$attr['max_num_mboxes_for_domain'] = (isset($_data['max_num_mboxes_for_domain'])) ? intval($_data['max_num_mboxes_for_domain']) : 0;
|
$attr['max_num_mboxes_for_domain'] = (!empty($_data['max_num_mboxes_for_domain'])) ? intval($_data['max_num_mboxes_for_domain']) : 10;
|
||||||
$attr['def_quota_for_mbox'] = (isset($_data['def_quota_for_mbox'])) ? intval($_data['def_quota_for_mbox']) * 1048576 : 0;
|
$attr['def_quota_for_mbox'] = (!empty($_data['def_quota_for_mbox'])) ? intval($_data['def_quota_for_mbox']) * 1048576 : 3072 * 1048576;
|
||||||
$attr['max_quota_for_mbox'] = (isset($_data['max_quota_for_mbox'])) ? intval($_data['max_quota_for_mbox']) * 1048576 : 0;
|
$attr['max_quota_for_mbox'] = (!empty($_data['max_quota_for_mbox'])) ? intval($_data['max_quota_for_mbox']) * 1048576 : 10240 * 1048576;
|
||||||
$attr['max_quota_for_domain'] = (isset($_data['max_quota_for_domain'])) ? intval($_data['max_quota_for_domain']) * 1048576 : 0;
|
$attr['max_quota_for_domain'] = (!empty($_data['max_quota_for_domain'])) ? intval($_data['max_quota_for_domain']) * 1048576 : 10240 * 1048576;
|
||||||
$attr['rl_frame'] = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : "s";
|
$attr['rl_frame'] = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : "s";
|
||||||
$attr['rl_value'] = (!empty($_data['rl_value'])) ? $_data['rl_value'] : "";
|
$attr['rl_value'] = (!empty($_data['rl_value'])) ? $_data['rl_value'] : "";
|
||||||
$attr['active'] = isset($_data['active']) ? intval($_data['active']) : 1;
|
$attr['active'] = isset($_data['active']) ? intval($_data['active']) : 1;
|
||||||
|
@ -1435,7 +1435,6 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
$attr['dkim_selector'] = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : "dkim";
|
$attr['dkim_selector'] = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : "dkim";
|
||||||
$attr['key_size'] = isset($_data['key_size']) ? intval($_data['key_size']) : 2048;
|
$attr['key_size'] = isset($_data['key_size']) ? intval($_data['key_size']) : 2048;
|
||||||
|
|
||||||
|
|
||||||
// save template
|
// save template
|
||||||
$stmt = $pdo->prepare("INSERT INTO `templates` (`type`, `template`, `attributes`)
|
$stmt = $pdo->prepare("INSERT INTO `templates` (`type`, `template`, `attributes`)
|
||||||
VALUES (:type, :template, :attributes)");
|
VALUES (:type, :template, :attributes)");
|
||||||
|
@ -4756,15 +4755,15 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
":id" => $id,
|
":id" => $id,
|
||||||
":type" => "domain",
|
":type" => "domain",
|
||||||
":template" => "Default"
|
":template" => "Default"
|
||||||
));
|
));
|
||||||
}
|
|
||||||
|
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
'msg' => 'template_removed'
|
'msg' => array('template_removed', htmlspecialchars($id))
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'alias':
|
case 'alias':
|
||||||
if (!is_array($_data['id'])) {
|
if (!is_array($_data['id'])) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
// mailcow alert box generator
|
// mailcow alert box generator
|
||||||
window.mailcow_alert_box = function(message, type) {
|
window.mailcow_alert_box = function(message, type) {
|
||||||
msg = $('<span/>').text(message).text();
|
msg = $('<span/>').text(escapeHtml(message)).text();
|
||||||
if (type == 'danger' || type == 'info') {
|
if (type == 'danger' || type == 'info') {
|
||||||
auto_hide = 0;
|
auto_hide = 0;
|
||||||
$('#' + localStorage.getItem("add_modal")).modal('show');
|
$('#' + localStorage.getItem("add_modal")).modal('show');
|
||||||
|
|
|
@ -441,6 +441,8 @@ jQuery(function($){
|
||||||
url: "/api/v1/get/domain/all",
|
url: "/api/v1/get/domain/all",
|
||||||
dataSrc: function(json){
|
dataSrc: function(json){
|
||||||
$.each(json, function(i, item) {
|
$.each(json, function(i, item) {
|
||||||
|
item.domain_name = escapeHtml(item.domain_name);
|
||||||
|
|
||||||
item.aliases = item.aliases_in_domain + " / " + item.max_num_aliases_for_domain;
|
item.aliases = item.aliases_in_domain + " / " + item.max_num_aliases_for_domain;
|
||||||
item.mailboxes = item.mboxes_in_domain + " / " + item.max_num_mboxes_for_domain;
|
item.mailboxes = item.mboxes_in_domain + " / " + item.max_num_mboxes_for_domain;
|
||||||
item.quota = item.quota_used_in_domain + "/" + item.max_quota_for_domain + "/" + item.bytes_total;
|
item.quota = item.quota_used_in_domain + "/" + item.max_quota_for_domain + "/" + item.bytes_total;
|
||||||
|
@ -625,7 +627,6 @@ jQuery(function($){
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: "/api/v1/get/domain/template/all",
|
url: "/api/v1/get/domain/template/all",
|
||||||
dataSrc: function(json){
|
dataSrc: function(json){
|
||||||
console.log(json);
|
|
||||||
$.each(json, function (i, item) {
|
$.each(json, function (i, item) {
|
||||||
item.chkbox = '<input type="checkbox" data-id="domain_template" name="multi_select" value="' + encodeURIComponent(item.id) + '" />';
|
item.chkbox = '<input type="checkbox" data-id="domain_template" name="multi_select" value="' + encodeURIComponent(item.id) + '" />';
|
||||||
|
|
||||||
|
@ -645,10 +646,18 @@ jQuery(function($){
|
||||||
}
|
}
|
||||||
item.attributes.rl_value = escapeHtml(item.attributes.rl_value);
|
item.attributes.rl_value = escapeHtml(item.attributes.rl_value);
|
||||||
|
|
||||||
item.action = '<div class="btn-group">' +
|
|
||||||
|
if (item.template.toLowerCase() == "default"){
|
||||||
|
item.action = '<div class="btn-group">' +
|
||||||
|
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
||||||
|
'</div>';
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
item.action = '<div class="btn-group">' +
|
||||||
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
||||||
'<a href="#" data-action="delete_selected" data-id="single-template" data-api-url="delete/domain/template" data-item="' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
|
'<a href="#" data-action="delete_selected" data-id="single-template" data-api-url="delete/domain/template" data-item="' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
|
||||||
'</div>';
|
'</div>';
|
||||||
|
}
|
||||||
|
|
||||||
if (Array.isArray(item.attributes.tags)){
|
if (Array.isArray(item.attributes.tags)){
|
||||||
var tags = '';
|
var tags = '';
|
||||||
|
@ -688,7 +697,7 @@ jQuery(function($){
|
||||||
defaultContent: ''
|
defaultContent: ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Template",
|
title: lang.template,
|
||||||
data: 'template',
|
data: 'template',
|
||||||
responsivePriority: 3,
|
responsivePriority: 3,
|
||||||
defaultContent: ''
|
defaultContent: ''
|
||||||
|
@ -1115,11 +1124,17 @@ jQuery(function($){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (item.template.toLowerCase() == "default"){
|
||||||
item.action = '<div class="btn-group">' +
|
item.action = '<div class="btn-group">' +
|
||||||
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
||||||
'<a href="#" data-action="delete_selected" data-id="single-template" data-api-url="delete/mailbox/template" data-item="' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
|
'</div>';
|
||||||
'</div>';
|
}
|
||||||
|
else {
|
||||||
|
item.action = '<div class="btn-group">' +
|
||||||
|
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
||||||
|
'<a href="#" data-action="delete_selected" data-id="single-template" data-api-url="delete/mailbox/template" data-item="' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
|
||||||
|
'</div>';
|
||||||
|
}
|
||||||
|
|
||||||
if (Array.isArray(item.attributes.tags)){
|
if (Array.isArray(item.attributes.tags)){
|
||||||
var tags = '';
|
var tags = '';
|
||||||
|
@ -1159,7 +1174,7 @@ jQuery(function($){
|
||||||
defaultContent: ''
|
defaultContent: ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Template",
|
title: lang.template,
|
||||||
data: 'template',
|
data: 'template',
|
||||||
responsivePriority: 3,
|
responsivePriority: 3,
|
||||||
defaultContent: ''
|
defaultContent: ''
|
||||||
|
@ -1582,7 +1597,6 @@ jQuery(function($){
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: "/api/v1/get/tls-policy-map/all",
|
url: "/api/v1/get/tls-policy-map/all",
|
||||||
dataSrc: function(json){
|
dataSrc: function(json){
|
||||||
console.log(json);
|
|
||||||
if (role !== "admin") return null;
|
if (role !== "admin") return null;
|
||||||
|
|
||||||
$.each(json, function (i, item) {
|
$.each(json, function (i, item) {
|
||||||
|
@ -1817,6 +1831,8 @@ jQuery(function($){
|
||||||
url: "/api/v1/get/alias-domain/all",
|
url: "/api/v1/get/alias-domain/all",
|
||||||
dataSrc: function(json){
|
dataSrc: function(json){
|
||||||
$.each(json, function (i, item) {
|
$.each(json, function (i, item) {
|
||||||
|
item.alias_domain = escapeHtml(item.alias_domain);
|
||||||
|
|
||||||
item.action = '<div class="btn-group">' +
|
item.action = '<div class="btn-group">' +
|
||||||
'<a href="/edit/aliasdomain/' + encodeURIComponent(item.alias_domain) + '" class="btn btn-sm btn-xs-third btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
'<a href="/edit/aliasdomain/' + encodeURIComponent(item.alias_domain) + '" class="btn btn-sm btn-xs-third btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
||||||
'<a href="#" data-action="delete_selected" data-id="single-alias-domain" data-api-url="delete/alias-domain" data-item="' + encodeURIComponent(item.alias_domain) + '" class="btn btn-sm btn-xs-third btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
|
'<a href="#" data-action="delete_selected" data-id="single-alias-domain" data-api-url="delete/alias-domain" data-item="' + encodeURIComponent(item.alias_domain) + '" class="btn btn-sm btn-xs-third btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
|
||||||
|
@ -1904,7 +1920,7 @@ jQuery(function($){
|
||||||
} else {
|
} else {
|
||||||
item.exclude = '<code>' + escapeHtml(item.exclude) + '</code>';
|
item.exclude = '<code>' + escapeHtml(item.exclude) + '</code>';
|
||||||
}
|
}
|
||||||
item.server_w_port = escapeHtml(item.user1) + '@' + item.host1 + ':' + item.port1;
|
item.server_w_port = escapeHtml(item.user1) + '@' + escapeHtml(item.host1) + ':' + escapeHtml(item.port1);
|
||||||
item.action = '<div class="btn-group">' +
|
item.action = '<div class="btn-group">' +
|
||||||
'<a href="/edit/syncjob/' + item.id + '" class="btn btn-sm btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
'<a href="/edit/syncjob/' + item.id + '" class="btn btn-sm btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
||||||
'<a href="#" data-action="delete_selected" data-id="single-syncjob" data-api-url="delete/syncjob" data-item="' + item.id + '" class="btn btn-sm btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
|
'<a href="#" data-action="delete_selected" data-id="single-syncjob" data-api-url="delete/syncjob" data-item="' + item.id + '" class="btn btn-sm btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
|
||||||
|
@ -2042,6 +2058,7 @@ jQuery(function($){
|
||||||
} else {
|
} else {
|
||||||
item.active = '<span id="inactive-script" class="badge fs-6 bg-warning">' + lang.inactive + '</span>';
|
item.active = '<span id="inactive-script" class="badge fs-6 bg-warning">' + lang.inactive + '</span>';
|
||||||
}
|
}
|
||||||
|
item.script_desc = escapeHtml(item.script_desc);
|
||||||
item.script_data = '<pre class="text-break" style="margin:0px">' + escapeHtml(item.script_data) + '</pre>'
|
item.script_data = '<pre class="text-break" style="margin:0px">' + escapeHtml(item.script_data) + '</pre>'
|
||||||
item.filter_type = '<div class="badge fs-6 bg-secondary">' + item.filter_type.charAt(0).toUpperCase() + item.filter_type.slice(1).toLowerCase() + '</div>'
|
item.filter_type = '<div class="badge fs-6 bg-secondary">' + item.filter_type.charAt(0).toUpperCase() + item.filter_type.slice(1).toLowerCase() + '</div>'
|
||||||
item.action = '<div class="btn-group">' +
|
item.action = '<div class="btn-group">' +
|
||||||
|
|
|
@ -228,6 +228,7 @@
|
||||||
"oauth2_renew_secret": "Neues Client Secret generieren",
|
"oauth2_renew_secret": "Neues Client Secret generieren",
|
||||||
"oauth2_revoke_tokens": "Alle Client Tokens entfernen",
|
"oauth2_revoke_tokens": "Alle Client Tokens entfernen",
|
||||||
"optional": "Optional",
|
"optional": "Optional",
|
||||||
|
"options": "Einstellungen",
|
||||||
"password": "Passwort",
|
"password": "Passwort",
|
||||||
"password_length": "Passwortlänge",
|
"password_length": "Passwortlänge",
|
||||||
"password_policy": "Passwortrichtlinie",
|
"password_policy": "Passwortrichtlinie",
|
||||||
|
@ -714,6 +715,7 @@
|
||||||
"add_filter": "Filter erstellen",
|
"add_filter": "Filter erstellen",
|
||||||
"add_mailbox": "Mailbox hinzufügen",
|
"add_mailbox": "Mailbox hinzufügen",
|
||||||
"add_recipient_map_entry": "Empfängerumschreibung hinzufügen",
|
"add_recipient_map_entry": "Empfängerumschreibung hinzufügen",
|
||||||
|
"add_template": "Vorlage hinzufügen",
|
||||||
"add_resource": "Ressource hinzufügen",
|
"add_resource": "Ressource hinzufügen",
|
||||||
"add_tls_policy_map": "TLS-Richtlinieneintrag hinzufügen",
|
"add_tls_policy_map": "TLS-Richtlinieneintrag hinzufügen",
|
||||||
"address_rewriting": "Adressumschreibung",
|
"address_rewriting": "Adressumschreibung",
|
||||||
|
@ -755,6 +757,7 @@
|
||||||
"domain": "Domain",
|
"domain": "Domain",
|
||||||
"domain_admins": "Domain-Administratoren",
|
"domain_admins": "Domain-Administratoren",
|
||||||
"domain_aliases": "Domain-Aliasse",
|
"domain_aliases": "Domain-Aliasse",
|
||||||
|
"domain_templates": "Domainweite Vorlagen",
|
||||||
"domain_quota": "Gesamtspeicher",
|
"domain_quota": "Gesamtspeicher",
|
||||||
"domain_quota_total": "Domain-Speicherplatz gesamt",
|
"domain_quota_total": "Domain-Speicherplatz gesamt",
|
||||||
"domains": "Domains",
|
"domains": "Domains",
|
||||||
|
@ -781,6 +784,7 @@
|
||||||
"mailbox_defaults": "Standardeinstellungen",
|
"mailbox_defaults": "Standardeinstellungen",
|
||||||
"mailbox_defaults_info": "Steuert die Standardeinstellungen für neue Mailboxen.",
|
"mailbox_defaults_info": "Steuert die Standardeinstellungen für neue Mailboxen.",
|
||||||
"mailbox_defquota": "Standard-Quota",
|
"mailbox_defquota": "Standard-Quota",
|
||||||
|
"mailbox_templates": "Mailboxweite Vorlagen",
|
||||||
"mailbox_quota": "Max. Größe einer Mailbox",
|
"mailbox_quota": "Max. Größe einer Mailbox",
|
||||||
"mailboxes": "Mailboxen",
|
"mailboxes": "Mailboxen",
|
||||||
"max_aliases": "Max. mögliche Aliasse",
|
"max_aliases": "Max. mögliche Aliasse",
|
||||||
|
@ -810,6 +814,7 @@
|
||||||
"recipient_map_old_info": "Der originale Empfänger muss eine E-Mail-Adresse oder ein Domainname sein.",
|
"recipient_map_old_info": "Der originale Empfänger muss eine E-Mail-Adresse oder ein Domainname sein.",
|
||||||
"recipient_maps": "Empfängerumschreibungen",
|
"recipient_maps": "Empfängerumschreibungen",
|
||||||
"relay_all": "Alle Empfänger-Adressen relayen",
|
"relay_all": "Alle Empfänger-Adressen relayen",
|
||||||
|
"relay_unknown": "Unbekannte Mailboxen relayen",
|
||||||
"remove": "Entfernen",
|
"remove": "Entfernen",
|
||||||
"resources": "Ressourcen",
|
"resources": "Ressourcen",
|
||||||
"running": "In Ausführung",
|
"running": "In Ausführung",
|
||||||
|
@ -836,6 +841,8 @@
|
||||||
"table_size_show_n": "Zeige %s Einträge",
|
"table_size_show_n": "Zeige %s Einträge",
|
||||||
"target_address": "Ziel-Adresse",
|
"target_address": "Ziel-Adresse",
|
||||||
"target_domain": "Ziel-Domain",
|
"target_domain": "Ziel-Domain",
|
||||||
|
"templates": "Vorlagen",
|
||||||
|
"template": "Vorlage",
|
||||||
"tls_enforce_in": "TLS eingehend erzwingen",
|
"tls_enforce_in": "TLS eingehend erzwingen",
|
||||||
"tls_enforce_out": "TLS ausgehend erzwingen",
|
"tls_enforce_out": "TLS ausgehend erzwingen",
|
||||||
"tls_map_dest": "Ziel",
|
"tls_map_dest": "Ziel",
|
||||||
|
@ -932,16 +939,20 @@
|
||||||
"type": "Typ"
|
"type": "Typ"
|
||||||
},
|
},
|
||||||
"queue": {
|
"queue": {
|
||||||
"delete_queue": "Queue löschen",
|
"delete": "Queue löschen",
|
||||||
"flush_queue": "Queue flushen",
|
"flush": "Queue flushen",
|
||||||
"queue_ays": "Soll die derzeitige Queue wirklich komplett bereinigt werden?",
|
"info" : "In der Mailqueue befinden sich alle E-Mails, welche auf eine Zustellung warten. Sollte eine E-Mail eine längere Zeit innerhalb der Mailqueue stecken wird diese automatisch vom System gelöscht.<br>Die Fehlermeldung der jeweiligen Mail gibt aufschluss darüber, warum diese nicht zugestellt werden konnte",
|
||||||
"queue_command_success": "Queue-Aufgabe erfolgreich ausgeführt",
|
"legend": "Funktionen der Mailqueue Aktionen:",
|
||||||
"queue_deliver_mail": "Ausliefern",
|
"ays": "Soll die derzeitige Queue wirklich komplett bereinigt werden?",
|
||||||
"queue_hold_mail": "Zurückhalten",
|
"deliver_mail": "Ausliefern",
|
||||||
|
"deliver_mail_legend": "Versucht eine erneute Zustellung der ausgwählten Mails.",
|
||||||
|
"hold_mail": "Zurückhalten",
|
||||||
|
"hold_mail_legend": "Hält die ausgewählten Mails zurück. (Verhindert weitere Zustellversuche)",
|
||||||
"queue_manager": "Queue Manager",
|
"queue_manager": "Queue Manager",
|
||||||
"queue_show_message": "Nachricht anzeigen",
|
"show_message": "Nachricht anzeigen",
|
||||||
"queue_unban": "queue unban",
|
"unban": "queue unban",
|
||||||
"queue_unhold_mail": "Freigeben"
|
"unhold_mail": "Freigeben",
|
||||||
|
"unhold_mail_legend": "Gibt ausgewählte Mails zur Auslieferung frei. (Erfordert vorheriges Zurückhalten)"
|
||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
"help": "Hilfe ein-/ausblenden",
|
"help": "Hilfe ein-/ausblenden",
|
||||||
|
@ -1018,6 +1029,9 @@
|
||||||
"saved_settings": "Regel wurde gespeichert",
|
"saved_settings": "Regel wurde gespeichert",
|
||||||
"settings_map_added": "Regel wurde gespeichert",
|
"settings_map_added": "Regel wurde gespeichert",
|
||||||
"settings_map_removed": "Regeln wurden entfernt: %s",
|
"settings_map_removed": "Regeln wurden entfernt: %s",
|
||||||
|
"template_added": "Template %s hinzugefügt",
|
||||||
|
"template_modified": "Änderungen am Template %s wurden gespeichert",
|
||||||
|
"template_removed": "Template ID %s wurde gelöscht",
|
||||||
"sogo_profile_reset": "ActiveSync-Gerät des Benutzers %s wurde zurückgesetzt",
|
"sogo_profile_reset": "ActiveSync-Gerät des Benutzers %s wurde zurückgesetzt",
|
||||||
"tls_policy_map_entry_deleted": "TLS-Richtlinie mit der ID %s wurde gelöscht",
|
"tls_policy_map_entry_deleted": "TLS-Richtlinie mit der ID %s wurde gelöscht",
|
||||||
"tls_policy_map_entry_saved": "TLS-Richtlinieneintrag \"%s\" wurde gespeichert",
|
"tls_policy_map_entry_saved": "TLS-Richtlinieneintrag \"%s\" wurde gespeichert",
|
||||||
|
|
|
@ -232,6 +232,7 @@
|
||||||
"oauth2_renew_secret": "Generate new client secret",
|
"oauth2_renew_secret": "Generate new client secret",
|
||||||
"oauth2_revoke_tokens": "Revoke all client tokens",
|
"oauth2_revoke_tokens": "Revoke all client tokens",
|
||||||
"optional": "optional",
|
"optional": "optional",
|
||||||
|
"options": "Options",
|
||||||
"password": "Password",
|
"password": "Password",
|
||||||
"password_length": "Password length",
|
"password_length": "Password length",
|
||||||
"password_policy": "Password policy",
|
"password_policy": "Password policy",
|
||||||
|
@ -943,16 +944,20 @@
|
||||||
"type": "Type"
|
"type": "Type"
|
||||||
},
|
},
|
||||||
"queue": {
|
"queue": {
|
||||||
"delete_queue": "Delete all",
|
"delete": "Delete all",
|
||||||
"flush_queue": "Flush queue",
|
"flush": "Flush queue",
|
||||||
"queue_ays": "Please confirm you want to delete all items from the current queue.",
|
"info" : "The mail queue contains all e-mails that are waiting for delivery. If an email is stuck in the mail queue for a long time, it is automatically deleted by the system.<br>The error message of the respective mail gives information about why the mail could not be delivered.",
|
||||||
"queue_command_success": "Queue command completed successfully",
|
"legend": "Mail queue actions functions:",
|
||||||
"queue_deliver_mail": "Deliver",
|
"ays": "Please confirm you want to delete all items from the current queue.",
|
||||||
"queue_hold_mail": "Hold",
|
"deliver_mail": "Deliver",
|
||||||
|
"deliver_mail_legend": "Attempts to redeliver selected mails.",
|
||||||
|
"hold_mail": "Hold",
|
||||||
|
"hold_mail_legend": "Holds the selected mails. (Prevents further delivery attempts)",
|
||||||
"queue_manager": "Queue Manager",
|
"queue_manager": "Queue Manager",
|
||||||
"queue_show_message": "Show message",
|
"show_message": "Show message",
|
||||||
"queue_unban": "queue unban",
|
"unban": "queue unban",
|
||||||
"queue_unhold_mail": "Unhold"
|
"unhold_mail": "Unhold",
|
||||||
|
"unhold_mail_legend": "Releases selected mails for delivery. (Requires prior hold)"
|
||||||
},
|
},
|
||||||
"ratelimit": {
|
"ratelimit": {
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
|
@ -1022,6 +1027,7 @@
|
||||||
"password_policy_saved": "Password policy was saved successfully",
|
"password_policy_saved": "Password policy was saved successfully",
|
||||||
"pushover_settings_edited": "Pushover settings successfully set, please verify credentials.",
|
"pushover_settings_edited": "Pushover settings successfully set, please verify credentials.",
|
||||||
"qlearn_spam": "Message ID %s was learned as spam and deleted",
|
"qlearn_spam": "Message ID %s was learned as spam and deleted",
|
||||||
|
"queue_command_success": "Queue command completed successfully",
|
||||||
"recipient_map_entry_deleted": "Recipient map ID %s has been deleted",
|
"recipient_map_entry_deleted": "Recipient map ID %s has been deleted",
|
||||||
"recipient_map_entry_saved": "Recipient map entry \"%s\" has been saved",
|
"recipient_map_entry_saved": "Recipient map entry \"%s\" has been saved",
|
||||||
"relayhost_added": "Map entry %s has been added",
|
"relayhost_added": "Map entry %s has been added",
|
||||||
|
@ -1038,6 +1044,7 @@
|
||||||
"sogo_profile_reset": "SOGo profile for user %s was reset",
|
"sogo_profile_reset": "SOGo profile for user %s was reset",
|
||||||
"template_added": "Added template %s",
|
"template_added": "Added template %s",
|
||||||
"template_modified": "Changes to template %s have been saved",
|
"template_modified": "Changes to template %s have been saved",
|
||||||
|
"template_removed": "Template ID %s has been deleted",
|
||||||
"tls_policy_map_entry_deleted": "TLS policy map ID %s has been deleted",
|
"tls_policy_map_entry_deleted": "TLS policy map ID %s has been deleted",
|
||||||
"tls_policy_map_entry_saved": "TLS policy map entry \"%s\" has been saved",
|
"tls_policy_map_entry_saved": "TLS policy map entry \"%s\" has been saved",
|
||||||
"ui_texts": "Saved changes to UI texts",
|
"ui_texts": "Saved changes to UI texts",
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="nav-item dropdown">
|
<li class="nav-item dropdown">
|
||||||
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">{{ lang.admin.configuration }}</a>
|
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">{{ lang.admin.options }}</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><button class="dropdown-item" data-bs-target="#tab-config-dkim" aria-selected="false" aria-controls="tab-config-dkim" role="tab" data-bs-toggle="tab">{{ lang.admin.dkim_keys }}</button></li>
|
<li><button class="dropdown-item" data-bs-target="#tab-config-dkim" aria-selected="false" aria-controls="tab-config-dkim" role="tab" data-bs-toggle="tab">{{ lang.admin.dkim_keys }}</button></li>
|
||||||
<li><button class="dropdown-item" data-bs-target="#tab-config-fwdhosts" aria-selected="false" aria-controls="tab-config-fwdhosts" role="tab" data-bs-toggle="tab">{{ lang.admin.forwarding_hosts }}</button></li>
|
<li><button class="dropdown-item" data-bs-target="#tab-config-fwdhosts" aria-selected="false" aria-controls="tab-config-fwdhosts" role="tab" data-bs-toggle="tab">{{ lang.admin.forwarding_hosts }}</button></li>
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
<li><button class="dropdown-item {% if mailcow_cc_role != 'admin' %} d-none{% endif %}" aria-selected="false" aria-controls="tab-templates-domains" role="tab" data-bs-toggle="tab" data-bs-target="#tab-templates-domains">{{ lang.mailbox.templates }}</button></li>
|
<li><button class="dropdown-item {% if mailcow_cc_role != 'admin' %} d-none{% endif %}" aria-selected="false" aria-controls="tab-templates-domains" role="tab" data-bs-toggle="tab" data-bs-target="#tab-templates-domains">{{ lang.mailbox.templates }}</button></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{# <li class="nav-item" role="presentation"><button class="nav-link active" aria-selected="false" aria-controls="tab-domains" role="tab" data-bs-toggle="tab" data-bs-target="#tab-domains">{{ lang.mailbox.domains }}</button></li> #}
|
|
||||||
{# <li class="nav-item" role="presentation"><button class="nav-link" aria-selected="false" aria-controls="tab-mailboxes" role="tab" data-bs-toggle="tab" data-bs-target="#tab-mailboxes">{{ lang.mailbox.mailboxes }}</button></li> #}
|
|
||||||
<li class="nav-item dropdown" role="presentation">
|
<li class="nav-item dropdown" role="presentation">
|
||||||
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#">{{ lang.mailbox.mailboxes }}</a>
|
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#">{{ lang.mailbox.mailboxes }}</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
|
@ -37,7 +35,6 @@
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="tab-content" style="padding-top:20px">
|
<div class="tab-content" style="padding-top:20px">
|
||||||
{% include 'mailbox/tab-domains.twig' %}
|
{% include 'mailbox/tab-domains.twig' %}
|
||||||
{# {% include 'mailbox/tab-mailbox-defaults.twig' %} #}
|
|
||||||
{% include 'mailbox/tab-templates-domains.twig' %}
|
{% include 'mailbox/tab-templates-domains.twig' %}
|
||||||
{% include 'mailbox/tab-mailboxes.twig' %}
|
{% include 'mailbox/tab-mailboxes.twig' %}
|
||||||
{% include 'mailbox/tab-templates-mbox.twig' %}
|
{% include 'mailbox/tab-templates-mbox.twig' %}
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
<div role="tabpanel" class="tab-pane fade" id="tab-mailbox-defaults" role="tabpanel" aria-labelledby="tab-mailbox-defaults">
|
|
||||||
<div class="card mb-4">
|
|
||||||
<div class="card-header d-flex fs-5">
|
|
||||||
<button class="btn d-md-none flex-grow-1 text-start" data-bs-target="#collapse-tab-mailbox-defaults" data-bs-toggle="collapse" aria-controls="collapse-tab-mailbox-defaults">
|
|
||||||
{{ lang.mailbox.mailbox_defaults }} <span class="badge bg-info table-lines"></span>
|
|
||||||
</button>
|
|
||||||
<span class="d-none d-md-block">{{ lang.mailbox.mailbox_defaults }} <span class="badge bg-info table-lines"></span></span>
|
|
||||||
</div>
|
|
||||||
<div id="collapse-tab-mailbox-defaults" class="card-body collapse text-muted" data-bs-parent="#mail-content">
|
|
||||||
{{ lang.mailbox.mailbox_defaults_info }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -9,15 +9,22 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
<p class="text-muted">{{ lang.queue.info|raw }}</p>
|
||||||
|
<p class="text-muted"><b>{{ lang.queue.legend|raw }}</b></p>
|
||||||
|
<ul class="text-muted">
|
||||||
|
<li>{{ lang.queue.deliver_mail }} | {{ lang.queue.deliver_mail_legend }}</li>
|
||||||
|
<li>{{ lang.queue.unhold_mail }} | {{ lang.queue.unhold_mail_legend }}</li>
|
||||||
|
<li>{{ lang.queue.hold_mail }} | {{ lang.queue.hold_mail_legend }}</li>
|
||||||
|
</ul>
|
||||||
<table id="queuetable" class="table table-striped dt-responsive w-100"></table>
|
<table id="queuetable" class="table table-striped dt-responsive w-100"></table>
|
||||||
<div class="mass-actions-admin">
|
<div class="mass-actions-admin">
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<a class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary" id="toggle_multi_select_all" data-id="mailqitems" href="#"><i class="bi bi-check-all"></i> {{ lang.mailbox.toggle_all }}</a>
|
<a class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary" id="toggle_multi_select_all" data-id="mailqitems" href="#"><i class="bi bi-check-all"></i> {{ lang.mailbox.toggle_all }}</a>
|
||||||
<a class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary dropdown-toggle" data-bs-toggle="dropdown" href="#">{{ lang.mailbox.quick_actions }}</a>
|
<a class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary dropdown-toggle" data-bs-toggle="dropdown" href="#">{{ lang.mailbox.quick_actions }}</a>
|
||||||
<ul class="dropdown-menu top33">
|
<ul class="dropdown-menu">
|
||||||
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postqueue -i" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"deliver"}' href="#">{{ lang.queue.queue_deliver_mail }}</a></li>
|
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postqueue -i" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"deliver"}' href="#">{{ lang.queue.deliver_mail }}</a></li>
|
||||||
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -H" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"unhold"}' href="#">{{ lang.queue.queue_unhold_mail }}</a></li>
|
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -H" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"unhold"}' href="#">{{ lang.queue.unhold_mail }}</a></li>
|
||||||
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -h" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"hold"}' href="#">{{ lang.queue.queue_hold_mail }}</a></li>
|
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -h" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"hold"}' href="#">{{ lang.queue.hold_mail }}</a></li>
|
||||||
<li><hr class="dropdown-divider"></li>
|
<li><hr class="dropdown-divider"></li>
|
||||||
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -d" data-action="delete_selected" data-id="mailqitems" data-api-url='delete/mailq' href="#">{{ lang.mailbox.remove }}</a></li>
|
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -d" data-action="delete_selected" data-id="mailqitems" data-api-url='delete/mailq' href="#">{{ lang.mailbox.remove }}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -27,7 +34,7 @@
|
||||||
data-api-url='edit/mailq'
|
data-api-url='edit/mailq'
|
||||||
data-api-attr='{"action":"flush"}'
|
data-api-attr='{"action":"flush"}'
|
||||||
data-bs-toggle="tooltip" title="postqueue -f"
|
data-bs-toggle="tooltip" title="postqueue -f"
|
||||||
href="#"><i class="bi bi-check-all"></i> {{ lang.queue.flush_queue }}</a>
|
href="#"><i class="bi bi-check-all"></i> {{ lang.queue.flush }}</a>
|
||||||
<a class="btn btn-sm d-block d-sm-inline btn-danger"
|
<a class="btn btn-sm d-block d-sm-inline btn-danger"
|
||||||
id="super_delete"
|
id="super_delete"
|
||||||
data-action="edit_selected"
|
data-action="edit_selected"
|
||||||
|
@ -35,7 +42,7 @@
|
||||||
data-api-url='edit/mailq'
|
data-api-url='edit/mailq'
|
||||||
data-api-attr='{"action":"super_delete"}'
|
data-api-attr='{"action":"super_delete"}'
|
||||||
data-bs-toggle="tooltip" title="postsuper -d ALL"
|
data-bs-toggle="tooltip" title="postsuper -d ALL"
|
||||||
href="#"><i class="bi bi-trash"></i> {{ lang.queue.delete_queue }}</a>
|
href="#"><i class="bi bi-trash"></i> {{ lang.queue.delete }}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -76,7 +76,7 @@ services:
|
||||||
- clamd
|
- clamd
|
||||||
|
|
||||||
rspamd-mailcow:
|
rspamd-mailcow:
|
||||||
image: mailcow/rspamd:1.91
|
image: mailcow/rspamd:1.92
|
||||||
stop_grace_period: 30s
|
stop_grace_period: 30s
|
||||||
depends_on:
|
depends_on:
|
||||||
- dovecot-mailcow
|
- dovecot-mailcow
|
||||||
|
@ -510,7 +510,7 @@ services:
|
||||||
- watchdog
|
- watchdog
|
||||||
|
|
||||||
dockerapi-mailcow:
|
dockerapi-mailcow:
|
||||||
image: mailcow/dockerapi:1.44
|
image: mailcow/dockerapi:2.0
|
||||||
security_opt:
|
security_opt:
|
||||||
- label=disable
|
- label=disable
|
||||||
restart: always
|
restart: always
|
||||||
|
|
Loading…
Reference in New Issue