瀏覽代碼

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

andryyy 5 年之前
父節點
當前提交
b2cff8226e

+ 3 - 3
data/web/inc/functions.quarantine.inc.php

@@ -624,7 +624,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` FROM `quarantine` WHERE `rcpt` = :mbox');
+        $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->execute(array(':mbox' => $_SESSION['mailcow_cc_username']));
         $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
         while($row = array_shift($rows)) {
@@ -632,7 +632,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` FROM `quarantine`');
+        $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`');
         $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
         while($row = array_shift($rows)) {
           $q_meta[] = $row;
@@ -641,7 +641,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` FROM `quarantine` WHERE `rcpt` REGEXP :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->execute(array(':domain' => '@' . $domain . '$'));
           $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
           while($row = array_shift($rows)) {

+ 7 - 1
data/web/js/site/quarantine.js

@@ -15,10 +15,11 @@ jQuery(function($){
         {"name":"id","type":"ID","filterable": false,"sorted": true,"direction":"DESC","title":"ID","style":{"width":"50px"}},
         {"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":"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"},
-        {"name":"subject","title":lang.subj, "type": "text"},
+        {"name":"notified","title":lang.notified, "type": "text"},
         {"name":"created","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleString();},"title":lang.received,"style":{"width":"170px"}},
         {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right"},"style":{"width":"220px"},"type":"html","title":lang.action,"breakpoints":"xs sm md"}
       ],
@@ -44,6 +45,11 @@ jQuery(function($){
             } else {
               item.virus = '<span class="dot-neutral"></span>';
             }
+            if(item.notified > 0) {
+              item.notified = '&#10004;';
+            } else {
+              item.notified = '&#10006;';
+            }
             if (acl_data.login_as === 1) {
             item.action = '<div class="btn-group">' +
               '<a href="#" data-item="' + encodeURI(item.id) + '" class="btn btn-xs btn-info show_qid_info"><span class="glyphicon glyphicon-modal-window"></span> ' + lang.show_item + '</a>' +

+ 2 - 1
data/web/lang/lang.de.json

@@ -534,7 +534,8 @@
         "qhandler_success": "Aktion wurde an das System übergeben. Sie dürfen dieses Fenster nun schließen.",
         "release_body": "Die ursprüngliche Nachricht wurde als EML-Datei im Anhang hinterlegt.",
         "release_subject": "Potentiell schädliche Nachricht aus Quarantäne: %s",
-        "confirm_delete": "Bestätigen Sie die Löschung dieses Elements."
+        "confirm_delete": "Bestätigen Sie die Löschung dieses Elements.",
+        "notified": "Benachrichtigt"
     },
     "mailbox": {
         "tls_policy_maps": "TLS-Richtlinien",

+ 2 - 1
data/web/lang/lang.en.json

@@ -533,7 +533,8 @@
         "confirm_delete": "Confirm the deletion of this element.",
         "qhandler_success": "Request successfully sent to the system. You can now close the window.",
         "release_body": "We have attached your message as eml file to this message.",
-        "release_subject": "Potentially damaging quarantine item %s"
+        "release_subject": "Potentially damaging quarantine item %s",
+        "notified": "Notified"
     },
     "mailbox": {
         "tls_policy_maps": "TLS policy maps",

+ 26 - 21
data/web/lang/lang.nl.json

@@ -52,7 +52,7 @@
         "rl_timeframe": "Ratelimit-tijdsbestek is ongeldig",
         "invalid_bcc_map_type": "Ongeldig BCC-map type",
         "bcc_empty": "BCC-bestemming dient ingevuld te worden",
-        "bcc_must_be_email": "BCC-bestemming %s is geen geldig e-mailadres",
+        "bcc_must_be_email": "BCC-bestemming %s is geen geldig mailadres",
         "bcc_exists": "BCC-map %s bestaat voor type %s",
         "private_key_error": "Privésleutel-fout: %s",
         "map_content_empty": "Inhoud dient ingevuld te zijn",
@@ -221,13 +221,13 @@
         "user_settings": "Gebruikersinstellingen",
         "mailbox_details": "Postvakdetails",
         "change_password": "Verander wachtwoord",
-        "client_configuration": "Toon configuratiegidsen voor e-mailprogramma's",
+        "client_configuration": "Toon configuratiegidsen voor mailprogramma's",
         "new_password": "Nieuw wachtwoord",
         "save_changes": "Wijzigingen opslaan",
         "password_now": "Huidig wachtwoord",
         "new_password_repeat": "Herhaal wachtwoord",
         "new_password_description": "Vereisten: 6 tekens lang, letters en nummers",
-        "spam_aliases": "Tijdelijk e-mailadres",
+        "spam_aliases": "Tijdelijk mailadres",
         "alias": "Alias",
         "shared_aliases": "Gedeelde aliasadressen",
         "shared_aliases_desc": "Een gedeeld aliasadres wordt niet beïnvloed door gebruiker-specifieke instellingen. Een aangepast spamfilter kan eventueel worden ingesteld door een beheerder.",
@@ -252,9 +252,9 @@
         "weeks": "weken",
         "spamfilter": "Spamfilter",
         "spamfilter_wl": "Whitelist",
-        "spamfilter_wl_desc": "Zet e-mailadressen op de whitelist om ze <b>nooit</b> als spam te markeren.<br>Deze lijst wordt niet toegepast op een gedeeld aliasadres.<br>Wildcards (*) zijn toegestaan.",
+        "spamfilter_wl_desc": "Zet mailadressen op de whitelist om ze <b>nooit</b> als spam te markeren.<br>Deze lijst wordt niet toegepast op een gedeeld aliasadres.<br>Wildcards (*) zijn toegestaan.",
         "spamfilter_bl": "Blacklist",
-        "spamfilter_bl_desc": "Zet e-mailadressen op de blacklist om ze <b>altijd</b> als spam te markeren.<br>Deze lijst wordt niet toegepast op een gedeeld aliasadres.<br>Wildcards (*) zijn toegestaan.",
+        "spamfilter_bl_desc": "Zet mailadressen op de blacklist om ze <b>altijd</b> als spam te markeren.<br>Deze lijst wordt niet toegepast op een gedeeld aliasadres.<br>Wildcards (*) zijn toegestaan.",
         "spamfilter_behavior": "Beoordeling",
         "spamfilter_table_rule": "Regel",
         "spamfilter_table_action": "Handeling",
@@ -270,17 +270,17 @@
         "waiting": "Wachten",
         "status": "Status",
         "running": "Wordt uitgevoerd",
-        "tls_policy_warning": "<strong>Let wel:</strong> Door versleuteling te forceren, worden mogelijk niet alle e-mails afgeleverd.<br>Berichten die niet aan het ingestelde beleid voldoen, worden resoluut geweigerd.<br>Dit is van toepassing op het primaire e-mailadres, inclusief alle <b>directe</b> aliasadressen.",
+        "tls_policy_warning": "<strong>Let wel:</strong> Door versleuteling te forceren, worden mogelijk niet alle mails afgeleverd.<br>Berichten die niet aan het ingestelde beleid voldoen, worden resoluut geweigerd.<br>Dit is van toepassing op het primaire mailadres, inclusief alle <b>directe</b> aliasadressen.",
         "tls_policy": "Versleutelingsbeleid",
         "tls_enforce_in": "Vereis inkomend",
         "tls_enforce_out": "Vereis uitgaand",
         "no_record": "Geen vermelding",
-        "tag_handling": "E-mailtags",
+        "tag_handling": "Mail-tags",
         "tag_in_subfolder": "In submap",
         "tag_in_subject": "In onderwerp",
         "tag_in_none": "Niets doen",
         "tag_help_explain": "In submap: er wordt een nieuwe map aangemaakt, genoemd naar de tag (bijv.: \"INBOX/Tesla\").<br>In onderwerp: de tag wordt vóór het oorspronkelijke onderwerp geplaatst (bijv.: \"[Tesla] Uw serviceafspraak\").",
-        "tag_help_example": "Voorbeeld van een e-maildres met tag: ik<b>+Tesla</b>@example.org",
+        "tag_help_example": "Voorbeeld van een maildres met tag: ik<b>+Tesla</b>@example.org",
         "eas_reset": "Herstel ActiveSync-apparaatcache",
         "eas_reset_now": "Herstel nu",
         "eas_reset_help": "In de meeste gevallen verhelpt dit problemen met ActiveSync op je apparaten<br><b>Let wel:</b> alle mails, contacten en agenda's zullen opnieuw gedownload worden!",
@@ -310,7 +310,7 @@
         "spamfilter": "Spamfilter",
         "domain": "Domein",
         "domain_s": "Domein(en)",
-        "rspamd-com_settings": "<a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd documentatie</a> - Een beschrijving voor deze instelling zal automatisch worden gegenereerd, bekijk de onderstaande presets voor meer info.",
+        "rspamd-com_settings": "Een beschrijving voor deze instelling zal automatisch worden gegenereerd, gebruik de onderstaande presets als voorbeeld. Raadpleeg de <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Rspamd-documentatie</a> voor meer informatie.",
         "no_new_rows": "Er zijn geen extra rijen beschikbaar",
         "queue_manager": "Wachtrijbeheerder",
         "additional_rows": " extra rijen zijn toegevoegd",
@@ -491,16 +491,16 @@
         "rspamd_global_filters_info": "Ieder globaal filter heeft zijn eigen functie, zie de namen. De velden kunnen enkel regular expressions bevatten met het formaat \"/pattern/options\", bijvoorbeeld <code>/.+@domain\\.tld/i</code>.<br>Ondanks dat alle invoer wordt gecontroleerd op fouten, is het toch mogelijk dat Rspamd onbruikbaar wordt als deze de invoer niet kan lezen.<br>Als je problemen ervaart, <a href=\"\" data-toggle=\"modal\" data-container=\"rspamd-mailcow\" data-target=\"#RestartContainer\">herstart Rspamd</a> dan om de filters opnieuw te laten lezen."
     },
     "start": {
-        "mailcow_apps_detail": "Gebruik een Mailcow-app om je e-mails, agenda, contacten en meer te bekijken.",
+        "mailcow_apps_detail": "Gebruik een Mailcow-app om je mails, agenda, contacten en meer te bekijken.",
         "mailcow_panel_detail": "<b>Domeinbeheerders</b> kunnen postvakken en aliassen aanmaken, wijzigen en verwijderen. Ook kunnen ze domeinen aanpassen en informatie over deze verkrijgen.<br><b>Gebruikers</b> kunnen tijdelijke aliassen aanmaken, hun wachtwoord aanpassen en de spamfilterinstellingen wijzigen.",
-        "imap_smtp_server_auth_info": "Gebruik je volledige e-mailadres en het bijbehorende (onversleutelde) verificatiemechanisme.<br>De aanmeldgegevens worden versleuteld verstuurd.",
+        "imap_smtp_server_auth_info": "Gebruik je volledige mailadres en het bijbehorende (onversleutelde) verificatiemechanisme.<br>De aanmeldgegevens worden versleuteld verstuurd.",
         "help": "Toon/verberg hulppaneel"
     },
     "quarantine": {
         "disabled_by_config": "De huidige systeemconfiguratie deactiveert de quarantainefunctionaliteit.",
         "quarantine": "Quarantaine",
         "learn_spam_delete": "Onthoud als spam en verwijder",
-        "qinfo": "Het quarantainesysteem slaat geweigerde e-mail op, terwijl het voor de afzender lijkt alsof deze <em>niet</em> ontvangen is.<br>\"Onthoud als spam en verwijder\" traint het systeem om soortgelijke e-mails in de toekomst weer als spam te markeren.<br>Wees er van bewust dat wanneer er meerdere berichten worden onderzocht, dit mogelijk enige tijd kan duren.",
+        "qinfo": "Het quarantainesysteem slaat geweigerde mail op, terwijl het voor de afzender lijkt alsof deze <em>niet</em> ontvangen is.<br>\"Onthoud als spam en verwijder\" traint het systeem om soortgelijke mails in de toekomst weer als spam te markeren.<br>Wees er van bewust dat wanneer er meerdere berichten worden onderzocht, dit mogelijk enige tijd kan duren.",
         "download_eml": "Download (.eml)",
         "release": "Geef vrij",
         "empty": "Geen resultaten",
@@ -530,7 +530,8 @@
         "confirm_delete": "Bevestig de verwijdering van dit item.",
         "qhandler_success": "Verzoek met succes verzonden naar het systeem. Je kunt het venster nu veilig sluiten.",
         "release_body": "We hebben het oorspronkelijke bericht als los bestand meegestuurd. Klik erop om deze weer te geven.",
-        "release_subject": "Mogelijk schadelijk quarantaine-item %s"
+        "release_subject": "Mogelijk schadelijk quarantaine-item %s",
+        "notified": "Verwittigd"
     },
     "mailbox": {
         "tls_policy_maps": "Globaal versleutelingsbeleid",
@@ -635,13 +636,17 @@
         "recipient_maps": "Ontvanger-maps",
         "recipient_map": "Ontvanger-map",
         "recipient_map_info": "Ontvanger-maps worden gebruikt om het doeladres van een bericht te vervangen voordat het in een postvak terecht komt.",
-        "recipient_map_old_info": "De oorspronkelijke bestemming van een ontvanger-map dient een geldig e-mailadres of domeinnaam te zijn.",
-        "recipient_map_new_info": "De bestemming van een ontvanger-map dient een geldig e-mailadres te zijn.",
+        "recipient_map_old_info": "De oorspronkelijke bestemming van een ontvanger-map dient een geldig mailadres of domeinnaam te zijn.",
+        "recipient_map_new_info": "De bestemming van een ontvanger-map dient een geldig mailadres te zijn.",
         "recipient_map_old": "Oorspronkelijke ontvanger",
         "recipient_map_new": "Nieuwe ontvanger",
         "add_recipient_map_entry": "Voeg ontvanger-map toe",
         "mailbox_defquota": "Standaard postvakgrootte",
-        "alias_domain_backupmx": "Aliasdomein inactief voor doorstuurdomein"
+        "alias_domain_backupmx": "Aliasdomein inactief voor doorstuurdomein",
+        "insert_preset": "Voeg voorbeelden in \"%s\"",
+        "sieve_preset_header": "Zie de onderstaande voorbeelden. Raadpleeg <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipedia</a> voor meer informatie.",
+        "sieve_preset_1": "Weiger mail met mogelijk schadelijke bestandstypes",
+        "sieve_preset_2": "Markeer de mail van een specifieke afzender altijd als gelezen"
     },
     "edit": {
         "sogo_visible": "Alias is zichtbaar in SOGo",
@@ -719,7 +724,7 @@
         "spam_score": "Stel een aangepaste spamscore in",
         "spam_policy": "Voeg onderdelen toe, of verwijder onderdelen van de white- of blacklist",
         "spam_alias": "Maak een nieuw tijdelijk alias aan, of pas deze aan",
-        "bcc_dest_format": "Een BCC-bestemming dient één geldig e-mailadres te zijn.",
+        "bcc_dest_format": "Een BCC-bestemming dient één geldig mailadres te zijn.",
         "mailbox_quota_def": "Standaard postvakquotum",
         "mbox_rl_info": "Deze ratelimit wordt toegepast op de postvakgebruiker, en geldt voor elk \"van\"-adres gebruikt door de huidige postvakgebruiker. Een postvak-ratelimit gaat boven een domein-ratelimit."
     },
@@ -764,22 +769,22 @@
         "relay_domain": "Schakel dit domein door",
         "relay_all_info": "<small>Wanneer er wordt gekozen om <b>niet</b> alle ontvangers door te schakelen, dient er per ontvanger een blind postvak aangemaakt te worden.</small>",
         "alias_address": "Aliasadres(sen)",
-        "alias_address_info": "<small>Volledig(e) e-mailadres(sen) of @example.com, om een catch-all aan te maken voor een domein (kommagescheiden). <b>Enkel Mailcow-domeinen</b>.</small>",
+        "alias_address_info": "<small>Volledig(e) mailadres(sen) of @example.com, om een catch-all aan te maken voor een domein (kommagescheiden). <b>Enkel Mailcow-domeinen</b>.</small>",
         "alias_domain_info": "<small>Enkel geldige domeinnamen (kommagescheiden).</small>",
         "target_address": "Doeladressen",
-        "target_address_info": "<small>Volledig(e) e-mailadres(sen) (kommagescheiden).</small>",
+        "target_address_info": "<small>Volledig(e) mailadres(sen) (kommagescheiden).</small>",
         "alias_domain": "Aliasdomein",
         "select": "Selecteer...",
         "target_domain": "Doeldomein",
         "kind": "Soort",
-        "mailbox_username": "Gebruikersnaam (linkergedeelte van een e-mailadres)",
+        "mailbox_username": "Gebruikersnaam (linkergedeelte van een mailadres)",
         "full_name": "Volledige naam",
         "quota_mb": "Quotum (MiB)",
         "select_domain": "Selecteer eerst een domein",
         "password": "Wachtwoord",
         "password_repeat": "Herhaal wachtwoord",
         "restart_sogo_hint": "SOGo dient opnieuw opgestart te worden nadat een domein is toegevoegd",
-        "goto_null": "Houd e-mail achterwege",
+        "goto_null": "Houd mail achterwege",
         "goto_ham": "Leer als <span class=\"text-success\"><b>ham</b></span>",
         "goto_spam": "Leer als <span class=\"text-danger\"><b>spam</b></span>",
         "validation_success": "Succesvol geverifieerd",