[Web] More custom_params

master
andryyy 2020-11-06 14:26:48 +01:00
parent 8dce12dbfa
commit b9a8b8a3e7
No known key found for this signature in database
GPG Key ID: 8EC34FF2794E25EF
25 changed files with 158 additions and 123 deletions

View File

@ -42,22 +42,6 @@ table.footable>tbody>tr.footable-empty>td {
border-color: #FF4136;
}
.dot-danger {
height: 10px;
width: 10px;
background-color: #ff4136;
border-radius: 50%;
display: inline-block;
}
.dot-neutral {
height: 10px;
width: 10px;
background-color: #d4d4d4;
border-radius: 50%;
display: inline-block;
}
.modal#qidDetailModal p {
word-break: break-all;
}
@ -112,3 +96,7 @@ table tbody tr {
table tbody tr td input[type="checkbox"] {
cursor: pointer;
}
.label-rspamd-action {
font-size:110%;
margin:20px;
}

View File

@ -61,6 +61,8 @@ if (!empty($_GET['hash']) && ctype_alnum($_GET['hash'])) {
$data['env_from'] = $mailc['sender'];
// Get rspamd score
$data['score'] = $mailc['score'];
// Get rspamd action
$data['action'] = $mailc['action'];
// Get rspamd symbols
$data['symbols'] = json_decode($mailc['symbols']);
// Get fuzzy hashes
@ -118,6 +120,8 @@ elseif (!empty($_GET['id']) && ctype_alnum($_GET['id'])) {
$data['env_from'] = $mailc['sender'];
// Get rspamd score
$data['score'] = $mailc['score'];
// Get rspamd action
$data['action'] = $mailc['action'];
// Get rspamd symbols
$data['symbols'] = json_decode($mailc['symbols']);
// Get fuzzy hashes

View File

@ -329,6 +329,10 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
$mins_interval = $_data['mins_interval'];
$enc1 = $_data['enc1'];
$custom_params = (empty(trim($_data['custom_params']))) ? '' : trim($_data['custom_params']);
// Workaround, fixme
if (strpos($custom_params, 'pipemess')) {
$custom_params = '';
}
if (empty($subfolder2)) {
$subfolder2 = "";
}
@ -1638,6 +1642,9 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
);
continue;
}
if (strpos($custom_params, 'pipemess')) {
$custom_params = '';
}
if (empty($subfolder2)) {
$subfolder2 = "";
}

View File

@ -169,6 +169,7 @@ function quarantine($_action, $_data = null) {
}
}
elseif ($release_format == 'raw') {
$detail_row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/', 'X-Pre-Release-Spam-Flag $1', $detail_row['msg']);
$postfix_talk = array(
array('220', 'HELO quarantine' . chr(10)),
array('250', 'MAIL FROM: ' . $sender . chr(10)),
@ -375,12 +376,13 @@ function quarantine($_action, $_data = null) {
);
continue;
}
$stmt = $pdo->prepare('SELECT `msg`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');
$stmt = $pdo->prepare('SELECT `msg`, `action`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');
$stmt->execute(array(':id' => $id));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin') {
if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin' || empty($row['rcpt'])) {
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, $_action, $_data_log),
'msg' => 'access_denied'
);
continue;
@ -462,6 +464,7 @@ function quarantine($_action, $_data = null) {
}
}
elseif ($release_format == 'raw') {
$row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/', 'X-Pre-Release-Spam-Flag $1', $row['msg']);
$postfix_talk = array(
array('220', 'HELO quarantine' . chr(10)),
array('250', 'MAIL FROM: ' . $sender . chr(10)),
@ -633,12 +636,13 @@ function quarantine($_action, $_data = null) {
);
continue;
}
$stmt = $pdo->prepare('SELECT `msg`, `rcpt` FROM `quarantine` WHERE `id` = :id');
$stmt = $pdo->prepare('SELECT `msg`, `rcpt`, `action` FROM `quarantine` WHERE `id` = :id');
$stmt->execute(array(':id' => $id));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin') {
if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin' || empty($row['rcpt'])) {
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__, $_action, $_data_log),
'msg' => 'access_denied'
);
continue;
@ -658,7 +662,7 @@ function quarantine($_action, $_data = null) {
if (stripos($response['error'], 'already learned') === false) {
$_SESSION['return'][] = array(
'type' => 'danger',
'log' => array(__FUNCTION__),
'log' => array(__FUNCTION__, $_action, $_data_log),
'msg' => array('spam_learn_error', $response['error'])
);
continue;
@ -768,7 +772,7 @@ function quarantine($_action, $_data = null) {
break;
case 'get':
if ($_SESSION['mailcow_cc_role'] == "user") {
$stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` = :mbox');
$stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` = :mbox');
$stmt->execute(array(':mbox' => $_SESSION['mailcow_cc_username']));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
while($row = array_shift($rows)) {
@ -776,7 +780,7 @@ function quarantine($_action, $_data = null) {
}
}
elseif ($_SESSION['mailcow_cc_role'] == "admin") {
$stmt = $pdo->query('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine`');
$stmt = $pdo->query('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine`');
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
while($row = array_shift($rows)) {
$q_meta[] = $row;
@ -785,7 +789,7 @@ function quarantine($_action, $_data = null) {
else {
$domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));
foreach ($domains as $domain) {
$stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` REGEXP :domain');
$stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` REGEXP :domain');
$stmt->execute(array(':domain' => '@' . $domain . '$'));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
while($row = array_shift($rows)) {

View File

@ -3,7 +3,7 @@ function init_db_schema() {
try {
global $pdo;
$db_version = "31102020_1810";
$db_version = "06112020_1010";
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
@ -258,7 +258,6 @@ function init_db_schema() {
"subject" => "VARCHAR(500)",
"score" => "FLOAT(8,2)",
"ip" => "VARCHAR(50)",
"type" => "ENUM('reject','header') DEFAULT 'reject'",
"action" => "CHAR(20) NOT NULL DEFAULT 'unknown'",
"symbols" => "JSON",
"fuzzy_hashes" => "JSON",
@ -1130,6 +1129,9 @@ function init_db_schema() {
$pdo->query("DROP VIEW IF EXISTS `" . $view . "`;");
$pdo->query($create);
}
// Mitigate imapsync pipemess issue
$pdo->query("UPDATE `imapsync` SET `custom_params` = '' WHERE `custom_params` LIKE '%pipemess%';");
// Inject admin if not exists
$stmt = $pdo->query("SELECT NULL FROM `admin`");

View File

@ -16,10 +16,11 @@ jQuery(function($){
$('#qid_detail_subj').text(data.subject);
$('#qid_detail_hfrom').text(data.header_from);
$('#qid_detail_efrom').text(data.env_from);
$('#qid_detail_score').text(data.score);
$('#qid_detail_score').html('');
$('#qid_detail_symbols').html('');
$('#qid_detail_recipients').html('');
$('#qid_detail_fuzzy').html('');
if (data.fuzzy_hashes !== null) {
if (typeof data.fuzzy_hashes === 'object' && data.fuzzy_hashes !== null && data.fuzzy_hashes.length !== 0) {
$.each(data.fuzzy_hashes, function (index, value) {
$('#qid_detail_fuzzy').append('<p style="font-family:monospace">' + value + '</p>');
});
@ -47,7 +48,13 @@ jQuery(function($){
});
$('[data-toggle="tooltip"]').tooltip()
}
$('#qid_detail_recipients').html('');
if (typeof data.score !== 'undefined' && typeof data.action !== 'undefined') {
if (data.action === "add header") {
$('#qid_detail_score').append('<span class="label-rspamd-action label label-warning"><b>' + data.score + '</b> - ' + lang.junk_folder + '</span>');
} else {
$('#qid_detail_score').append('<span class="label-rspamd-action label label-danger"><b>' + data.score + '</b> - ' + lang.rejected + '</span>');
}
}
if (typeof data.recipients !== 'undefined') {
$.each(data.recipients, function(index, value) {
var elem = $('<span class="mail-address-item"></span>');

View File

@ -52,6 +52,7 @@ jQuery(function($){
{"name":"qid","breakpoints":"all","type":"text","title":lang.qid,"style":{"width":"125px"}},
{"name":"sender","title":lang.sender},
{"name":"subject","title":lang.subj, "type": "text"},
{"name":"rspamdaction","title":lang.rspamd_result, "type": "html"},
{"name":"rcpt","title":lang.rcpt, "breakpoints":"xs sm md", "type": "text"},
{"name":"virus","title":lang.danger, "type": "text"},
{"name":"score","title": lang.spam_score, "type": "text"},
@ -77,9 +78,14 @@ jQuery(function($){
item.score = '-';
}
if (item.virus_flag > 0) {
item.virus = '<span class="dot-danger"></span>';
item.virus = '<span class="label label-danger">' + lang.high_danger + '</span>';
} else {
item.virus = '<span class="dot-neutral"></span>';
item.virus = '<span class="label label-default">' + lang.neutral_danger + '</span>';
}
if (item.action === "reject") {
item.rspamdaction = '<span class="label label-danger">' + lang.rejected + '</span>';
} else if (item.action === "add header") {
item.rspamdaction = '<span class="label label-warning">' + lang.junk_folder + '</span>';
}
if(item.notified > 0) {
item.notified = '&#10004;';
@ -142,11 +148,10 @@ jQuery(function($){
});
$('#qid_detail_subj').text(data.subject);
$('#qid_detail_text').text(data.text_plain);
$('#qid_detail_text_from_html').text(data.text_html);
$('#qid_detail_hfrom').text(data.header_from);
$('#qid_detail_efrom').text(data.env_from);
$('#qid_detail_score').text(data.score);
$('#qid_detail_score').html('');
$('#qid_detail_recipients').html('');
$('#qid_detail_symbols').html('');
$('#qid_detail_fuzzy').html('');
if (typeof data.symbols !== 'undefined') {
@ -170,14 +175,20 @@ jQuery(function($){
});
$('[data-toggle="tooltip"]').tooltip()
}
if (data.fuzzy_hashes !== null) {
if (typeof data.fuzzy_hashes === 'object' && data.fuzzy_hashes !== null && data.fuzzy_hashes.length !== 0) {
$.each(data.fuzzy_hashes, function (index, value) {
$('#qid_detail_fuzzy').append('<p style="font-family:monospace">' + value + '</p>');
});
} else {
$('#qid_detail_fuzzy').append('-');
}
$('#qid_detail_recipients').html('');
if (typeof data.score !== 'undefined' && typeof data.action !== 'undefined') {
if (data.action == "add header") {
$('#qid_detail_score').append('<span class="label-rspamd-action label label-warning"><b>' + data.score + '</b> - ' + lang.junk_folder + '</span>');
} else {
$('#qid_detail_score').append('<span class="label-rspamd-action label label-danger"><b>' + data.score + '</b> - ' + lang.rejected + '</span>');
}
}
if (typeof data.recipients !== 'undefined') {
$.each(data.recipients, function(index, value) {
var elem = $('<span class="mail-address-item"></span>');
@ -185,7 +196,8 @@ jQuery(function($){
$('#qid_detail_recipients').append(elem);
});
}
$('#qid_detail_text').text(data.text_plain);
$('#qid_detail_text_from_html').text(data.text_html);
var qAtts = $("#qid_detail_atts");
if (typeof data.attachments !== 'undefined') {
qAtts.text('');

View File

@ -376,7 +376,6 @@
"check_hash": "Comprovar el hash del fitxer a VT",
"empty": "No hi ha elements",
"qid": "Rspamd QID",
"qinfo": "El sistema de quarantena desa a la base de dades els missatges que han estat refusats. El missatge, al emissor, li consta com a <em>no</em> lliurat.",
"qitem": "Element en quarantena",
"quarantine": "Quarantena",
"quick_actions": "Accions",

View File

@ -748,7 +748,6 @@
"notified": "Oznámeno",
"qhandler_success": "Požadavek úspěšně přijat. Můžete nyní zavřít okno.",
"qid": "Rspamd QID",
"qinfo": "Karanténní systém uloží odmítnutou poštu do databáze a odesílatel <em>nebude</em> informován o nedoručené poště.\r\n <br>\"Naučit jako spam a smazat\" naučí systém, že zpráva je spam, pomocí Bayes teorému a také vypočítá \"fuzzy hashes\" pro odmítnutí podobných zpráv v budoucnu.\r\n <br>Upozornění: Učení se vícera zpráv najednou může být v závislosti na výkonu systému časově náročné.",
"qitem": "Položka v karanténě",
"quarantine": "Karanténa",
"quick_actions": "Akce",

View File

@ -675,6 +675,8 @@
"mailbox_defquota": "Standard-Quota",
"mailbox_quota": "Max. Größe einer Mailbox",
"mailboxes": "Mailboxen",
"mailbox_defaults": "Standardeinstellungen",
"mailbox_defaults_info": "Steuert die Standardeinstellungen für neue Mailboxen.",
"mins_interval": "Intervall (min)",
"msg_num": "Anzahl Nachrichten",
"multiple_bookings": "Mehrfachbuchen",
@ -751,20 +753,24 @@
"action": "Aktion",
"atts": "Anhänge",
"check_hash": "Checksumme auf VirusTotal suchen",
"confirm": "Bestätigen",
"confirm_delete": "Bestätigen Sie die Löschung dieses Elements.",
"danger": "Gefahr",
"deliver_inbox": "In Posteingang zustellen",
"disabled_by_config": "Die derzeitige Konfiguration deaktiviert die Funktion des Quarantäne-Systems. Zur Funktion muss eine Anzahl an Rückhaltungen pro Mailbox sowie ein Limit für die maximale Größe pro Element definiert werden.",
"download_eml": "Herunterladen (.eml)",
"empty": "Keine Einträge",
"high_danger": "Hohe Gefahr",
"high_danger": "Hoch",
"info": "Information",
"junk_folder": "Junk-Ordner",
"learn_spam_delete": "Als Spam lernen und löschen",
"low_danger": "Niedrige Gefahr",
"medium_danger": "Mittlere Gefahr",
"neutral_danger": "Neutral/ohne Bewertung",
"low_danger": "Niedrig",
"medium_danger": "Mittel",
"neutral_danger": "Neutral",
"notified": "Benachrichtigt",
"qhandler_success": "Aktion wurde an das System übergeben. Sie dürfen dieses Fenster nun schließen.",
"qid": "Rspamd QID",
"qinfo": "Das Quarantänesystem speichert abgelehnte Nachrichten in der Datenbank. Dem Sender wird <em>nicht</em> signalisiert, dass seine E-Mail zugestellt wurde.\r\n <br>\"Als Spam lernen und löschen\" lernt Nachrichten nach bayesscher Statistik als Spam und erstellt Fuzzy Hashes ausgehend von der jeweiligen Nachricht, um ähnliche Inhalte zukünftig zu unterbinden.\r\n <br>Der Prozess des Lernens kann abhängig vom System zeitintensiv sein.<br>Auf Blacklists vorkommende Elemente sind von der Quarantäne ausgeschlossen.",
"qinfo": "Das Quarantänesystem speichert abgelehnte Nachrichten in der Datenbank (dem Sender wird <em>nicht</em> signalisiert, dass seine E-Mail zugestellt wurde) als auch diese, die als Kopie in den Junk-Ordner der jeweiligen Mailbox zugestellt wurden.\r\n <br>\"Als Spam lernen und löschen\" lernt Nachrichten nach bayesscher Statistik als Spam und erstellt Fuzzy Hashes ausgehend von der jeweiligen Nachricht, um ähnliche Inhalte zukünftig zu unterbinden.\r\n <br>Der Prozess des Lernens kann abhängig vom System zeitintensiv sein.<br>Auf Blacklists vorkommende Elemente sind von der Quarantäne ausgeschlossen.",
"qitem": "Quarantäneeintrag",
"quarantine": "Quarantäne",
"quick_actions": "Aktionen",
@ -772,6 +778,7 @@
"received": "Empfangen",
"recipients": "Empfänger",
"refresh": "Neu laden",
"rejected": "Abgelehnt",
"release": "Freigeben",
"release_body": "Die ursprüngliche Nachricht wurde als EML-Datei im Anhang hinterlegt.",
"release_subject": "Potentiell schädliche Nachricht aus Quarantäne: %s",
@ -779,11 +786,14 @@
"rspamd_result": "Rspamd Ergebnis",
"quick_release_link": "Quick-Release Link öffnen",
"quick_delete_link": "Quick-Delete Link öffnen",
"quick_info_link": "Element-Info Link öffnen",
"sender": "Sender (SMTP)",
"sender_header": "Sender (\"From\"-Header)",
"show_item": "Details",
"spam": "Spam",
"spam_score": "Bewertung",
"subj": "Betreff",
"type": "Typ",
"table_size": "Tabellengröße",
"table_size_show_n": "Zeige %s Einträge",
"text_from_html_content": "Inhalt (html, konvertiert)",
@ -984,7 +994,7 @@
"spamfilter": "Spamfilter",
"spamfilter_behavior": "Bewertung",
"spamfilter_bl": "Blacklist",
"spamfilter_bl_desc": "Für E-Mail-Adressen, die vom Spamfilter <b>immer</b> als Spam erfasst und abgelehnt werden. Die Verwendung von Wildcards ist gestattet. Ein Filter funktioniert lediglich für direkte nicht-\"Catch All\" Alias-Adressen (Alias-Adressen mit lediglich einer Mailbox als Ziel-Adresse) sowie die Mailbox-Adresse selbst.",
"spamfilter_bl_desc": "Für E-Mail-Adressen, die vom Spamfilter <b>immer</b> als Spam erfasst und abgelehnt werden. Die Quarantäne-Funktion ist für diese Nachrichten deaktiviert. Die Verwendung von Wildcards ist gestattet. Ein Filter funktioniert lediglich für direkte nicht-\"Catch All\" Alias-Adressen (Alias-Adressen mit lediglich einer Mailbox als Ziel-Adresse) sowie die Mailbox-Adresse selbst.",
"spamfilter_default_score": "Standardwert",
"spamfilter_green": "Grün: Die Nachricht ist kein Spam",
"spamfilter_hint": "Der erste Wert beschreibt den \"low spam score\", der zweite Wert den \"high spam score\".",

View File

@ -675,6 +675,8 @@
"mailbox_defquota": "Default mailbox size",
"mailbox_quota": "Max. size of a mailbox",
"mailboxes": "Mailboxes",
"mailbox_defaults": "Default settings",
"mailbox_defaults_info": "Define default settings for new mailboxes.",
"mins_interval": "Interval (min)",
"msg_num": "Message #",
"multiple_bookings": "Multiple bookings",
@ -751,20 +753,24 @@
"action": "Action",
"atts": "Attachments",
"check_hash": "Search file hash @ VT",
"confirm": "Confirm",
"confirm_delete": "Confirm the deletion of this element.",
"danger": "Danger",
"deliver_inbox": "Deliver to inbox",
"disabled_by_config": "The current system configuration disables the quarantine functionality. Please set \"retentions per mailbox\" and a \"maximum size\" for quarantine elements.",
"download_eml": "Download (.eml)",
"empty": "No results",
"high_danger": "High",
"info": "Information",
"junk_folder": "Junk folder",
"learn_spam_delete": "Learn as spam and delete",
"low_danger": "Low danger",
"medium_danger": "Medium danger",
"neutral_danger": "Neutral/no rating",
"low_danger": "Low",
"medium_danger": "Medium",
"neutral_danger": "Neutral",
"notified": "Notified",
"qhandler_success": "Request successfully sent to the system. You can now close the window.",
"qid": "Rspamd QID",
"qinfo": "The quarantine system will save rejected mail to the database, while the sender will <em>not</em> be given the impression of a delivered mail.\r\n <br>\"Learn as spam and delete\" will learn a message as spam via Bayesian theorem and also calculate fuzzy hashes to deny similar messages in the future.\r\n <br>Please be aware that learning multiple messages can be - depending on your system - time consuming.<br>Blacklisted elements are excluded from the quarantine.",
"qinfo": "The quarantine system will save rejected mail to the database (the sender will <em>not</em> be given the impression of a delivered mail) as well as mail, that is delivered as copy into the Junk folder of a mailbox.\r\n <br>\"Learn as spam and delete\" will learn a message as spam via Bayesian theorem and also calculate fuzzy hashes to deny similar messages in the future.\r\n <br>Please be aware that learning multiple messages can be - depending on your system - time consuming.<br>Blacklisted elements are excluded from the quarantine.",
"qitem": "Quarantine item",
"quarantine": "Quarantine",
"quick_actions": "Actions",
@ -772,6 +778,7 @@
"received": "Received",
"recipients": "Recipients",
"refresh": "Refresh",
"rejected": "Rejected",
"release": "Release",
"release_body": "We have attached your message as eml file to this message.",
"release_subject": "Potentially damaging quarantine item %s",
@ -779,9 +786,12 @@
"rspamd_result": "Rspamd result",
"sender": "Sender (SMTP)",
"sender_header": "Sender (\"From\" header)",
"type": "Type",
"quick_release_link": "Open quick release link",
"quick_delete_link": "Open quick delete link",
"quick_info_link": "Open info link",
"show_item": "Show item",
"spam": "Spam",
"spam_score": "Score",
"subj": "Subject",
"table_size": "Table size",
@ -984,7 +994,7 @@
"spamfilter": "Spam filter",
"spamfilter_behavior": "Rating",
"spamfilter_bl": "Blacklist",
"spamfilter_bl_desc": "Blacklisted email addresses to <b>always</b> classify as spam and reject. Wildcards may be used. A filter is only applied to direct aliases (aliases with a single target mailbox) excluding catch-all aliases and a mailbox itself.",
"spamfilter_bl_desc": "Blacklisted email addresses to <b>always</b> classify as spam and reject. Rejected mail will <b>not</b> be copied to quarantine. Wildcards may be used. A filter is only applied to direct aliases (aliases with a single target mailbox) excluding catch-all aliases and a mailbox itself.",
"spamfilter_default_score": "Default values",
"spamfilter_green": "Green: this message is not spam",
"spamfilter_hint": "The first value describes the \"low spam score\", the second represents the \"high spam score\".",

View File

@ -591,7 +591,6 @@
"neutral_danger": "Neutral",
"qhandler_success": "Solicitud enviada con éxito al sistema, puede cerrar la ventana",
"qid": "Rspamd QID",
"qinfo": "El sistema de cuarentena guardará el correo rechazado en la base de datos, mientras que el remitente <em>no</em> tendrá la impresión de un correo entregado.\r\n <br><b>Aprender como spam y eliminar</b> aprenderá un mensaje como correo no deseado a través del teorema bayesiano y también calculará hashes para rechazar mensajes similares en el futuro.\r\n Ten en cuenta que aprender varios mensajes puede ser lento, dependiendo de las especificaciones del servidor.",
"qitem": "Quarantine item",
"quarantine": "Cuarentena",
"quick_actions": "Acciones",

View File

@ -665,7 +665,6 @@
"neutral_danger": "Neutraali/ei pisteystä",
"qhandler_success": "Pyyntö lähetettiin järjestelmään onnistuneesti. Voit nyt sulkea ikkunan.",
"qid": "Rspamd QID",
"qinfo": "Karanteeni järjestelmä tallentaa hylätyn sähköpostin tieto kantaan, kun lähettäjä <em>ei</em> annetaan vaikutelma toimitetuksi sähköposti.\r\n <br>\"Opeta roska postiksi ja poista\" oppii viestin roska postiksi Bayes-teoreettilta ja laskee myös sumea hash kieltää samanlaisia viestejä tulevaisuudessa.\r\n <br>Huomaa, että useiden viestien oppiminen voi olla-riippuen järjestelmän ajasta.",
"qitem": "Laita karanteeniin",
"quarantine": "Karanteeni",
"quick_actions": "Toiminnot",

View File

@ -755,7 +755,6 @@
"notified": "Notifié",
"qhandler_success": "Demande envoyée avec succès au système. Vous pouvez maintenant fermer la fenêtre.",
"qid": "Rspamd QID",
"qinfo": "Le système de quarantaine enregistre le courrier rejeté dans la base de données, tandis que lexpéditeur <em>ne</em> reçoit limpression dun courrier livré.\r\n <br>\"Apprendre comme spam et supprimer\" apprendra un message comme spam via le théorème bayésien et calculera également des hachages flous pour refuser des messages similaires à lavenir.\r\n <br>Veuillez noter que - selon votre système - lapprentissage de plusieurs messages peut prendre beaucoup de temps.",
"qitem": "Élément de quarantaine",
"quarantine": "Quarantaine",
"quick_actions": "Actions",

View File

@ -377,7 +377,6 @@
"check_hash": "Meklēt faila hašu @ VT",
"empty": "Nav rezultātu",
"qid": "Rspamd QID",
"qinfo": "Karantīnas sistēma saglabās noraidīto vēstuli datubāzē, kamēr sūtītājs <em> nesaņems </em> iespaidu par piegādāto pastu.",
"qitem": "Karantīnas vienumi",
"quarantine": "Karantīna",
"quick_actions": "Darbības",

View File

@ -759,7 +759,6 @@
"notified": "Verwittigd",
"qhandler_success": "Aanvraag succesvol verzonden naar het systeem. Je kunt nu het venster sluiten.",
"qid": "Rspamd QID",
"qinfo": "Het quarantainesysteem slaat geweigerde mail op, terwijl het voor de afzender lijkt alsof deze <em>niet</em> ontvangen is.<br>\"Markeer als spam en verwijder\" traint het systeem om soortgelijke mails in de toekomst opnieuw als spam te markeren.<br>Wanneer er op meerdere berichten tegelijkertijd wordt getraind kan dit mogelijk enige tijd duren.",
"qitem": "Quarantaine-item",
"quarantine": "Quarantaine",
"quick_actions": "Handelingen",

View File

@ -744,7 +744,6 @@
"notified": "Notificat",
"qhandler_success": "Solicitare trimisă cu succes la sistem. Acum poți închide fereastra.",
"qid": "Rspamd QID",
"qinfo": "Sistemul de carantină va salva emailurile respinse în baza de date, în timp ce expeditorului <em>nu</em> i se va da impresia unui email livrat.\n <br>\"Învață ca spam și șterge\" va învăța un mesaj ca spam prin teorema Bayesiană și va calcula, de asemenea, hash-uri fuzzy pentru a nega mesaje similare în viitor.\n <br>Reține că învățarea mai multor mesaje poate fi - în funcție de sistemul tău - consumatoare de timp.",
"qitem": "Pune în carantină elementul",
"quarantine": "Carantină",
"quick_actions": "Acţiuni",

View File

@ -754,7 +754,6 @@
"notified": "Увед.",
"qhandler_success": "Запрос успешно отправлен в систему. Теперь вы можете закрыть окно.",
"qid": "Rspamd QID",
"qinfo": "Карантин сохраняет отклоненную почту в базу данных. Отправитель будет уверен что его письмо <b>не</b> было доставлено.\r\n <br>\"Восстановить\" изучит сообщение как хам по теореме Байеса.\r\n <br>\"Запомнить как спам и удалить\" изучит сообщение как спам по теореме Байеса, а также вычислит нечеткие хэши, чтобы запретить подобные сообщения в будущем.\r\n <br>Учтите, что в зависимости от вашей системы, изучение большого количества сообщений может занять много времени.",
"qitem": "Обьект карантина",
"quarantine": "Карантин",
"quick_actions": "Действия",

View File

@ -759,7 +759,6 @@
"notified": "Notifikovaný",
"qhandler_success": "Požiadavka úspešne odoslaná systému. Môžete zavrieť okno.",
"qid": "Rspamd QID",
"qinfo": "Karanténny systém uloží neprijatú poštu do databázy a odosielateľ <em>nebude</em> informovaný o jej nedoručení.\r\n <br>\"Naučiť ako spam a vymazať\" naučí správu ako spam pomocou Bayesian teorému a taktiež vypočíta \"fuzzy hashes\", aby sa v budúcnosti zabránilo prijímaní podobných správ.\r\n <br>Prosím majte na pamäti, že učenie viacerých správ naraz, môže byť záleží na vašom systéme časovo náročné.",
"qitem": "Karanténna položka",
"quarantine": "Karanténa",
"quick_actions": "Akcia",

View File

@ -764,7 +764,6 @@
"notified": "Anmält",
"qhandler_success": "Begäran skickas till systemet. Du kan nu stänga fönstret.",
"qid": "Rspamd QID",
"qinfo": "Karantänssystemet sparar avvisade e-post meddelanden till databasen, avsändaren komer <b>inte</b> informeras om att e-postmeddelandet har levererats.\r\n <br>\"Markera och kom ihåg som skräppost och ta bort\" Kommer med hjälp av Bayes sats hitta skräppost och samtidigt kalkylera en kontrollsumma för att i framtiden kasta liknande meddelanden automatiskt.\r\n<br>Observera att det kan vara tidskrävande att processa dessa meddelanden, beroende på hur kraftfullt system är.<br>Svartlistade objekt undantas från karantän.",
"qitem": "Objekt i karantän",
"quarantine": "Karantän",
"quick_actions": "Åtgärder",

View File

@ -763,7 +763,6 @@
"notified": "已通知",
"qhandler_success": "成功向系统发送请求,现在你可以关闭窗口了。",
"qid": "Rspamd QID",
"qinfo": "隔离系统会将已拒绝邮件保存到数据库,并且这些邮件的发件人<em>不会</em>收到拒收邮件。\r\n <br>\"学习为垃圾并删除\" 会根据贝叶斯定理将消息作为垃圾学习并计算其模糊特征以拒绝未来收到相似消息。\r\n <br>请注意,取决于你的系统资源,学习多个消息可能会花费较长时间。",
"qitem": "隔离项目",
"quarantine": "隔离",
"quick_actions": "操作",

View File

@ -10,6 +10,14 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#tab-domains" aria-controls="tab-domains" role="tab" data-toggle="tab"><?=$lang['mailbox']['domains'];?></a></li>
<li role="presentation"><a href="#tab-mailboxes" aria-controls="tab-mailboxes" role="tab" data-toggle="tab"><?=$lang['mailbox']['mailboxes'];?></a></li>
<?php /* <li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?=$lang['mailbox']['mailboxes'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li role="presentation"><a href="#tab-mailboxes" aria-controls="tab-mailboxes" role="tab" data-toggle="tab"><?=$lang['mailbox']['mailboxes'];?></a></li>
<li role="presentation"><a href="#tab-mailbox-defaults" aria-controls="tab-mailbox-defaults" role="tab" data-toggle="tab"><?=$lang['mailbox']['mailbox_defaults'];?></a></li>
</ul>
</li> */ ?>
<li role="presentation"><a href="#tab-resources" aria-controls="tab-resources" role="tab" data-toggle="tab"><?=$lang['mailbox']['resources'];?></a></li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?=$lang['mailbox']['aliases'];?>
@ -72,6 +80,17 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
</div>
</div>
<div role="tabpanel" class="tab-pane" id="tab-mailbox-defaults">
<div class="panel panel-default">
<div class="panel-heading">
<?=$lang['mailbox']['mailbox_defaults'];?>
</div>
<div class="panel-body help-block">
<?=$lang['mailbox']['mailbox_defaults_info'];?>
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="tab-mailboxes">
<div class="panel panel-default">
<div class="panel-heading">

View File

@ -16,6 +16,7 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
<div class="form-group">
<label for="qid_detail_symbols"><h4><?=$lang['quarantine']['rspamd_result'];?>:</h4></label>
<p><?=$lang['quarantine']['spam_score'];?>: <span id="qid_detail_score"></span></p>
<hr>
<p id="qid_detail_symbols"></p>
</div>
<div class="form-group">
@ -26,10 +27,6 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
<label for="qid_detail_recipients"><h4><?=$lang['quarantine']['recipients'];?>:</h4></label>
<p id="qid_detail_recipients"></p>
</div>
<div class="form-group">
<label for="qid_detail_fuzzy"><h4>Fuzzy Hashes:</h4></label>
<p id="qid_detail_fuzzy"></p>
</div>
<div class="form-group">
<label for="qid_detail_hfrom"><h4><?=$lang['quarantine']['sender_header'];?>:</h4></label>
<p><span class="mail-address-item" id="qid_detail_hfrom"></span></p>
@ -39,27 +36,31 @@ if (!isset($_SESSION['mailcow_cc_role'])) {
<p><span class="mail-address-item" id="qid_detail_efrom"></span></p>
</div>
<div class="form-group">
<label for="qid_detail_fuzzy"><h4>Fuzzy Hashes:</h4></label>
<p id="qid_detail_fuzzy"></p>
</div>
<div class="form-group" id="qTextPlain">
<label for="qid_detail_text"><h4><?=$lang['quarantine']['text_plain_content'];?>:</h4></label>
<pre id="qid_detail_text"></pre>
</div>
<div class="form-group">
<div class="form-group" id="qTextHtml">
<label for="qid_detail_text_from_html"><h4><?=$lang['quarantine']['text_from_html_content'];?>:</h4></label>
<pre id="qid_detail_text_from_html"></pre>
</div>
<?php
if ($_SESSION['acl']['quarantine_attachments'] == 1):
if ($_SESSION['acl']['quarantine_attachments'] == 1) {
?>
<div class="form-group">
<label for="qid_detail_atts"><h4><?=$lang['quarantine']['atts'];?>:</h4></label>
<div id="qid_detail_atts">-</div>
</div>
<?php
endif;
}
?>
<div class="btn-group dropup" data-acl="<?=$_SESSION['acl']['quarantine'];?>">
<a class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" href="#"><?=$lang['quarantine']['quick_actions'];?> <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a data-action="edit_selected" data-id="qitems_single" data-item="" data-api-url='edit/qitem' data-api-attr='{"action":"release"}' href="#"><?=$lang['quarantine']['release'];?></a></li>
<li><a data-action="edit_selected" data-id="qitems_single" data-item="" data-api-url='edit/qitem' data-api-attr='{"action":"release"}' href="#"><?=$lang['quarantine']['deliver_inbox'];?></a></li>
<li role="separator" class="divider"></li>
<li><a data-action="edit_selected" data-id="qitems_single" data-item="" data-api-url='edit/qitem' data-api-attr='{"action":"learnspam"}' href="#"><?=$lang['quarantine']['learn_spam_delete'];?></a></li>
<li role="separator" class="divider"></li>

View File

@ -25,7 +25,6 @@ if (preg_match("/^([a-f0-9]{64})$/", $_POST['quick_release']) || preg_match("/^(
}
elseif (in_array($_GET['action'], array('release', 'delete'))) {
if (preg_match("/^([a-f0-9]{64})$/", $_GET['hash'])) {
if ($_GET['action'] == "release"):
?>
<div class="container">
<div class="row">
@ -33,7 +32,18 @@ elseif (in_array($_GET['action'], array('release', 'delete'))) {
<div class="panel panel-default">
<div class="panel-heading"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> <?= $lang['header']['quarantine']; ?></div>
<div class="panel-body">
<legend data-hash="<?=$_GET['hash'];?>"><?=$lang['quarantine']['release'];?></legend>
<?php
if ($_GET['action'] == "release") {
?>
<legend id="qtitle" data-hash="<?=$_GET['hash'];?>"><?=$lang['quarantine']['release'];?></legend>
<?php
}
elseif ($_GET['action'] == "delete") {
?>
<legend id="qtitle" data-hash="<?=$_GET['hash'];?>"><?=$lang['quarantine']['remove'];?></legend>
<?php
}
?>
<div id="qid_error" style="display:none" class="alert alert-danger"></div>
<div class="form-group">
<label for="qid_detail_symbols"><h4><?=$lang['quarantine']['rspamd_result'];?>:</h4></label>
@ -60,62 +70,40 @@ elseif (in_array($_GET['action'], array('release', 'delete'))) {
<label for="qid_detail_fuzzy"><h4>Fuzzy Hashes:</h4></label>
<p id="qid_detail_fuzzy"></p>
</div>
<form method="post" autofill="off">
<div class="form-group">
<button type="submit" class="btn btn-success" name="quick_release" value="<?=$_GET['hash'];?>"><?= $lang['tfa']['confirm']; ?></button>
</div>
</form>
</div>
</div>
</div>
</div> <!-- /row -->
</div> <!-- /container -->
<div id="qactions">
<form method="post" autofill="off">
<div class="form-group">
<?php
elseif ($_GET['action'] == "delete"):
if ($_GET['action'] == "release") {
?>
<div class="container">
<div class="row">
<div class="col-md-offset-2 col-md-8">
<div class="panel panel-default">
<div class="panel-heading"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> <?= $lang['header']['quarantine']; ?></div>
<div class="panel-body">
<legend data-hash="<?=$_GET['hash'];?>"><?=$lang['quarantine']['remove'];?></legend>
<div id="qid_error" style="display:none" class="alert alert-danger"></div>
<div class="form-group">
<label for="qid_detail_symbols"><h4><?=$lang['quarantine']['rspamd_result'];?>:</h4></label>
<p><?=$lang['quarantine']['spam_score'];?>: <span id="qid_detail_score"></span></p>
<p id="qid_detail_symbols"></p>
<button type="submit" class="btn btn-success" name="quick_release" value="<?=$_GET['hash'];?>"><?= $lang['quarantine']['confirm']; ?></button>
<?php
}
elseif ($_GET['action'] == "delete") {
?>
<button type="submit" class="btn btn-success" name="quick_delete" value="<?=$_GET['hash'];?>"><?= $lang['quarantine']['confirm']; ?></button>
<?php
}
?>
</div>
</form>
</div>
<div class="form-group">
<label for="qid_detail_subj"><h4><?=$lang['quarantine']['subj'];?>:</h4></label>
<p id="qid_detail_subj"></p>
</div>
<div class="form-group">
<label for="qid_detail_hfrom"><h4><?=$lang['quarantine']['sender_header'];?>:</h4></label>
<p><span class="mail-address-item" id="qid_detail_hfrom"></span></p>
</div>
<div class="form-group">
<label for="qid_detail_efrom"><h4><?=$lang['quarantine']['sender'];?>:</h4></label>
<p><span class="mail-address-item" id="qid_detail_efrom"></span></p>
</div>
<div class="form-group">
<label for="qid_detail_recipients"><h4><?=$lang['quarantine']['recipients'];?>:</h4></label>
<p id="qid_detail_recipients"></p>
</div>
<form method="post" autofill="off">
<div class="form-group">
<button type="submit" class="btn btn-success" name="quick_delete" value="<?=$_GET['hash'];?>"><?= $lang['tfa']['confirm']; ?></button>
</div>
</form>
</div>
</div>
</div>
</div> <!-- /row -->
</div> <!-- /container -->
<?php
endif;
}
}
?>
<script type='text/javascript'>
<?php
$lang_quarantine = json_encode($lang['quarantine']);
echo "var lang = ". $lang_quarantine . ";\n";
?>
</script>
<?php
$js_minifier->add('/web/js/site/qhandler.js');
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';
?>

View File

@ -45,7 +45,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
<a class="btn btn-sm btn-default" id="toggle_multi_select_all" data-id="qitems" href="#"><span class="glyphicon glyphicon-check" aria-hidden="true"></span> <?=$lang['quarantine']['toggle_all'];?></a>
<a class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" href="#"><?=$lang['quarantine']['quick_actions'];?> <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a data-action="edit_selected" data-id="qitems" data-api-url='edit/qitem' data-api-attr='{"action":"release"}' href="#"><?=$lang['quarantine']['release'];?></a></li>
<li><a data-action="edit_selected" data-id="qitems" data-api-url='edit/qitem' data-api-attr='{"action":"release"}' href="#"><?=$lang['quarantine']['deliver_inbox'];?></a></li>
<li role="separator" class="divider"></li>
<li><a data-action="edit_selected" data-id="qitems" data-api-url='edit/qitem' data-api-attr='{"action":"learnspam"}' href="#"><?=$lang['quarantine']['learn_spam_delete'];?></a></li>
<li role="separator" class="divider"></li>
@ -53,11 +53,6 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
</ul>
</div>
</div>
<hr>
<div class="panel-body help-block">
<p><span class="dot-danger"></span> <?=$lang['quarantine']['high_danger'];?></p>
<p><span class="dot-neutral"></span> <?=$lang['quarantine']['neutral_danger'];?></p>
</div>
</div>
</div> <!-- /col-md-12 -->
</div> <!-- /row -->
@ -67,9 +62,9 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/modals/quarantine.php';
?>
<script type='text/javascript'>
<?php
$lang_mailbox = json_encode($lang['quarantine']);
$lang_quarantine = json_encode($lang['quarantine']);
echo "var acl = '". json_encode($_SESSION['acl']) . "';\n";
echo "var lang = ". $lang_mailbox . ";\n";
echo "var lang = ". $lang_quarantine . ";\n";
echo "var csrf_token = '". $_SESSION['CSRF']['TOKEN'] . "';\n";
$role = ($_SESSION['mailcow_cc_role'] == "admin") ? 'admin' : 'domainadmin';
echo "var role = '". $role . "';\n";