diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index b42aa6b78a22c61a87f5a933544482568a8df2f1..1d15474cf4c9c22e0fad41b61c42fb2ef935d394 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -3922,10 +3922,6 @@ class installer_base { $root_cron_jobs[] = "0 0 * * * ".$install_dir."/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null"; } - if ($conf['services']['mail'] == 1) { - $root_cron_jobs[] = "30 23 * * * ".$install_dir."/server/scripts/handle_mailbox_soft_deleted.sh &> /dev/null"; - } - foreach($root_cron_jobs as $cron_job) { if(!in_array($cron_job."\n", $existing_root_cron_jobs)) { $existing_root_cron_jobs[] = $cron_job."\n"; diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql index 2b5e94361bd1f1b5aecffc89a2d76801915bb844..31f045a6f9d30a9ff46640b7d0fa6878e33dbeec 100644 --- a/install/sql/incremental/upd_dev_collection.sql +++ b/install/sql/incremental/upd_dev_collection.sql @@ -6,3 +6,6 @@ UPDATE `dns_ssl_ca` SET `ca_issue` = 'sectigo.com' WHERE `ca_issue` = 'comodo.co UPDATE `dns_ssl_ca` SET `ca_issue` = 'sectigo.com' WHERE `ca_issue` = 'comodoca.com'; UPDATE `dns_ssl_ca` SET `ca_name` = 'Sectigo (formerly Comodo CA)' WHERE `ca_issue` = 'sectigo.com'; -- not updating the dns_rr table to change all CAA records that have comodo.com / comodoca.com - we should not touch users records imo - TP +-- #6445 Update the mailbox_soft_delete config option to it's new structure. +-- UPDATE server SET config=REGEXP_REPLACE(config, 'mailbox_soft_delete=n', 'mailbox_soft_delete=0') WHERE config LIKE '%mailbox_soft_delete=n%' +-- UPDATE server SET config=REGEXP_REPLACE(config, 'mailbox_soft_delete=y', 'mailbox_soft_delete=7') WHERE config LIKE '%mailbox_soft_delete=y%' \ No newline at end of file diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index bc0c3d9b4871080573324dab43abc39d65a4646e..a038e833beb1a20c9324eb20f9401ed7598343e9 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -56,7 +56,7 @@ relayhost_user= relayhost_password= mailbox_size_limit=0 message_size_limit=0 -mailbox_soft_delete=n +mailbox_soft_delete=0 mailbox_quota_stats=y realtime_blackhole_list=zen.spamhaus.org overquota_notify_threshold=90 diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index 7cc710ad539b56dccbe03220946729f07d77348a..d272b0807767f4a6a079f713db608f83f6dc4876 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -736,9 +736,17 @@ $form["tabs"]['mail'] = array( ), 'mailbox_soft_delete' => array ( 'datatype' => 'VARCHAR', - 'formtype' => 'CHECKBOX', + 'formtype' => 'SELECT', 'default' => 'n', - 'value' => array(0 => 'n', 1 => 'y') + 'value' => array( + 0 => 'soft_delete_directly_txt', + -1 => 'soft_delete_keep_indefinitely_txt', + 1 => 'soft_delete_keep_1_txt', + 7 => 'soft_delete_keep_7_txt', + 30 => 'soft_delete_keep_30_txt', + 90 => 'soft_delete_keep_90_txt', + 365 => 'soft_delete_keep_365_txt', + ) ), 'mailbox_quota_stats' => array ( 'datatype' => 'VARCHAR', diff --git a/interface/web/admin/lib/lang/ar_server_config.lng b/interface/web/admin/lib/lang/ar_server_config.lng index acfe895e5fdd28ae7cadccd4eec64bc929df8ed3..eff86620795d24ff04e842bd42ee78165c30d665 100644 --- a/interface/web/admin/lib/lang/ar_server_config.lng +++ b/interface/web/admin/lib/lang/ar_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/bg_server_config.lng b/interface/web/admin/lib/lang/bg_server_config.lng index fe0008b8cda85b5c5d9e39d8f1f636c4701e4622..94f805fae944bf054f4a148684ea939d2b7c5956 100644 --- a/interface/web/admin/lib/lang/bg_server_config.lng +++ b/interface/web/admin/lib/lang/bg_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/br_server_config.lng b/interface/web/admin/lib/lang/br_server_config.lng index cb7781fd57c3e412ffcec0a34ee2cfffd3753781..aa83f0dbba57a9855a053666c270eef21fbf2794 100644 --- a/interface/web/admin/lib/lang/br_server_config.lng +++ b/interface/web/admin/lib/lang/br_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/ca_server_config.lng b/interface/web/admin/lib/lang/ca_server_config.lng index 5f796ae7084dce8e022cf2475681451000d8625d..39feb97f352053aa23246ef85c3a3c73cc2804e8 100644 --- a/interface/web/admin/lib/lang/ca_server_config.lng +++ b/interface/web/admin/lib/lang/ca_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/cn_server_config.lng b/interface/web/admin/lib/lang/cn_server_config.lng index 5d5d6eeb25da23cf7c7f64cb297f023bccc978aa..bc728bb6321a3cb127f80fdece5e8a8667649eb1 100644 --- a/interface/web/admin/lib/lang/cn_server_config.lng +++ b/interface/web/admin/lib/lang/cn_server_config.lng @@ -351,4 +351,10 @@ $wb['jailkit_hardlinks_allow_txt'] = 'å…许狱ä¸ç¡¬é“¾æŽ¥'; $wb['jailkit_hardlinks_no_txt'] = 'ä¸ï¼Œåˆ 除硬链接文件'; $wb['jailkit_hardlinks_yes_txt'] = '是的,如果å¯èƒ½ï¼Œä½¿ç”¨ç¡¬é“¾æŽ¥'; $wb['mailbox_soft_delete_txt'] = 'é‚®ç®±è½¯åˆ é™¤'; -$wb['mailbox_soft_delete_info_txt'] = '默认情况下,7天åŽæ¸…ç†ã€‚'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/cz_server_config.lng b/interface/web/admin/lib/lang/cz_server_config.lng index ebc80b3aa3f2ae861516e6b7fcd826d420272bb4..96ea04fb968747580c78bb3f2766ca69e5a55f25 100644 --- a/interface/web/admin/lib/lang/cz_server_config.lng +++ b/interface/web/admin/lib/lang/cz_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index 5319bc8ee3ae2a67024fa36d2c1bd5fde49f7827..92297bb355a70aa94a68b2a9241e0aa5a0c673d4 100644 --- a/interface/web/admin/lib/lang/de_server_config.lng +++ b/interface/web/admin/lib/lang/de_server_config.lng @@ -344,7 +344,6 @@ $wb['jailkit_hardlinks_allow_txt'] = 'Erlaube hardlinks innerhalb des Jails'; $wb['jailkit_hardlinks_no_txt'] = 'Nein, entferne hardgelinkte Dateien'; $wb['jailkit_hardlinks_yes_txt'] = 'Ja, benutze hardlinks wenn möglich'; $wb['mailbox_soft_delete_txt'] = 'Postfach Soft-Löschung'; -$wb['mailbox_soft_delete_info_txt'] = 'wird standardmäßig nach 7 Tagen gelöscht.'; $wb['bind_zonefiles_masterprefix_txt'] = 'BIND master zonefiles prefix'; $wb['bind_zonefiles_slaveprefix_txt'] = 'BIND slave zonefiles prefix'; $wb['bind_keyfiles_dir_txt'] = 'BIND keyfiles directory'; @@ -352,3 +351,10 @@ $wb['bind_keyfiles_dir_error_empty'] = 'BIND keyfiles directory is empty.'; $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master prefix.'; $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/dk_server_config.lng b/interface/web/admin/lib/lang/dk_server_config.lng index 8f7b0499a63206f780b0431a101d1c23404e1b0c..05f540220260ae3bde82ce298b6b0cb9b437757b 100644 --- a/interface/web/admin/lib/lang/dk_server_config.lng +++ b/interface/web/admin/lib/lang/dk_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/el_server_config.lng b/interface/web/admin/lib/lang/el_server_config.lng index ee25798b24a0919d466430875817bad11c7f4007..ecedc2524339e3c1124ce486f99721886d1d641e 100644 --- a/interface/web/admin/lib/lang/el_server_config.lng +++ b/interface/web/admin/lib/lang/el_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index a572ce5d5c88e4701fa054a1a71568632a1f21a8..af7beb9a4d7807156439f0bfc4e8dc4e07ea3213 100644 --- a/interface/web/admin/lib/lang/en_server_config.lng +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -357,4 +357,10 @@ $wb['jailkit_hardlinks_allow_txt'] = 'Allow hardlinks within the jail'; $wb['jailkit_hardlinks_no_txt'] = 'No, remove hardlinked files'; $wb['jailkit_hardlinks_yes_txt'] = 'Yes, use hardlinks if possible'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/es_server_config.lng b/interface/web/admin/lib/lang/es_server_config.lng index 66a96af33f6f0f1352111df924b62371f0d41c8e..8961010f73f6e017e6e1d343fcb3fb983ae87dd5 100644 --- a/interface/web/admin/lib/lang/es_server_config.lng +++ b/interface/web/admin/lib/lang/es_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/fi_server_config.lng b/interface/web/admin/lib/lang/fi_server_config.lng index e968b228ace747336f697eb36487f225b31947ef..68f12468a0cbd0baf4fdf5a216398e44eccf9097 100644 --- a/interface/web/admin/lib/lang/fi_server_config.lng +++ b/interface/web/admin/lib/lang/fi_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/fr_server_config.lng b/interface/web/admin/lib/lang/fr_server_config.lng index d662adbaf9fe9e2c46a06a209db7a688060eaaee..fb5d1e2f973a7d2b47e7de305e5a7d3d7c6ad5c5 100644 --- a/interface/web/admin/lib/lang/fr_server_config.lng +++ b/interface/web/admin/lib/lang/fr_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/hr_server_config.lng b/interface/web/admin/lib/lang/hr_server_config.lng index 42b14a059daf572dcd002e88166648459e26692a..b40c7fd49e7aca7fff377496c32f39691b618d29 100644 --- a/interface/web/admin/lib/lang/hr_server_config.lng +++ b/interface/web/admin/lib/lang/hr_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/hu_server_config.lng b/interface/web/admin/lib/lang/hu_server_config.lng index 5574f534fb7967cf352410da0d30b533c9d0b97c..526b800cbdc42aada4a7e7e774416398dab0d7e4 100644 --- a/interface/web/admin/lib/lang/hu_server_config.lng +++ b/interface/web/admin/lib/lang/hu_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/id_server_config.lng b/interface/web/admin/lib/lang/id_server_config.lng index e547b714fe3e95cae754520c73c1a2cf2d4592d5..daaa08c24aecbe198a6ad6ea259b68de4ef728f8 100644 --- a/interface/web/admin/lib/lang/id_server_config.lng +++ b/interface/web/admin/lib/lang/id_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/it_server_config.lng b/interface/web/admin/lib/lang/it_server_config.lng index b0e2f33e23c128e861678b01887dd1cc424c44e8..9e7064fe14f12a9ac2333d3cbe97221fdb3d4893 100644 --- a/interface/web/admin/lib/lang/it_server_config.lng +++ b/interface/web/admin/lib/lang/it_server_config.lng @@ -350,4 +350,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/ja_server_config.lng b/interface/web/admin/lib/lang/ja_server_config.lng index 24c91559271806526c132d6a44d69f8cf1484547..fa9abcaaf1d4c39dd0f27422d824b901d5061c46 100644 --- a/interface/web/admin/lib/lang/ja_server_config.lng +++ b/interface/web/admin/lib/lang/ja_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/nl_server_config.lng b/interface/web/admin/lib/lang/nl_server_config.lng index 1875a5c7bccd09dc9faa0a407a9d998bc182f1ae..a8a8d473661b92d002f2e298aa782bfb1017b729 100644 --- a/interface/web/admin/lib/lang/nl_server_config.lng +++ b/interface/web/admin/lib/lang/nl_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/pl_server_config.lng b/interface/web/admin/lib/lang/pl_server_config.lng index 3b0f44fba624be28233ac4b7b109311ccaf115e8..83460000a22b282fc965e3674ff6be5169b8222a 100644 --- a/interface/web/admin/lib/lang/pl_server_config.lng +++ b/interface/web/admin/lib/lang/pl_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/pt_server_config.lng b/interface/web/admin/lib/lang/pt_server_config.lng index 53943f4263cc73bce834156cb8e101ec987b721c..f856344b0a9c248f1a781089b694a7c061bffd53 100644 --- a/interface/web/admin/lib/lang/pt_server_config.lng +++ b/interface/web/admin/lib/lang/pt_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/ro_server_config.lng b/interface/web/admin/lib/lang/ro_server_config.lng index abdc6d583056d969d0c198a54c861e1d956b72f4..d69c33ed6525ad2cf23aac355418884a1c74629d 100644 --- a/interface/web/admin/lib/lang/ro_server_config.lng +++ b/interface/web/admin/lib/lang/ro_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/ru_server_config.lng b/interface/web/admin/lib/lang/ru_server_config.lng index f0db8c095d388c60b6b08b8ca0bc6da50ba0c059..2fdb42393e3579634a528bd77258b7a9e26e26c9 100644 --- a/interface/web/admin/lib/lang/ru_server_config.lng +++ b/interface/web/admin/lib/lang/ru_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/se_server_config.lng b/interface/web/admin/lib/lang/se_server_config.lng index 77d5737825197958b12a7a9bf1db7d1286270196..24df537a561ef9fe99ad633533757dc837c43f3b 100644 --- a/interface/web/admin/lib/lang/se_server_config.lng +++ b/interface/web/admin/lib/lang/se_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/sk_server_config.lng b/interface/web/admin/lib/lang/sk_server_config.lng index d69b80f859f50c0c801e22caea087ca070d8618f..965ef097199729c5278731d7955662f7fa08bdcd 100644 --- a/interface/web/admin/lib/lang/sk_server_config.lng +++ b/interface/web/admin/lib/lang/sk_server_config.lng @@ -351,4 +351,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/lib/lang/tr_server_config.lng b/interface/web/admin/lib/lang/tr_server_config.lng index 066d4515cb405970f101ced539911b6dffeb7848..fcc26b10fdcb803070c202014078d16ff68639fb 100644 --- a/interface/web/admin/lib/lang/tr_server_config.lng +++ b/interface/web/admin/lib/lang/tr_server_config.lng @@ -348,4 +348,10 @@ $wb['bind_zonefiles_masterprefix_error_regex'] = 'Invalid BIND zonefiles master $wb['bind_zonefiles_slaveprefix_error_regex'] = 'Invalid BIND zonefiles slave prefix.'; $wb['bind_keyfiles_dir_error_regex'] = 'Invalid BIND keyfiles directory.'; $wb['mailbox_soft_delete_txt'] = 'Mailbox soft delete'; -$wb['mailbox_soft_delete_info_txt'] = 'by default cleaned up after 7 days.'; +$wb['soft_delete_directly_txt'] = 'Delete instantly'; +$wb['soft_delete_keep_indefinitely_txt'] = 'Rename but don\'t delete (manual cleanup)'; +$wb['soft_delete_keep_1_txt'] = 'Purge after 1 day'; +$wb['soft_delete_keep_7_txt'] = 'Purge after 7 days'; +$wb['soft_delete_keep_30_txt'] = 'Purge after 30 days'; +$wb['soft_delete_keep_90_txt'] = 'Purge after 90 days'; +$wb['soft_delete_keep_365_txt'] = 'Purge after 365 days'; diff --git a/interface/web/admin/templates/server_config_mail_edit.htm b/interface/web/admin/templates/server_config_mail_edit.htm index 84683191c804141cc6024a207dd92d3e1cb47af4..485f94b740eaa51ba66ab8020619b0c2ee5fb8b8 100644 --- a/interface/web/admin/templates/server_config_mail_edit.htm +++ b/interface/web/admin/templates/server_config_mail_edit.htm @@ -143,7 +143,9 @@ <div class="form-group"> <label class="col-sm-3 control-label">{tmpl_var name='mailbox_soft_delete_txt'}</label> <div class="col-sm-9"> - {tmpl_var name='mailbox_soft_delete'} {tmpl_var name='mailbox_soft_delete_info_txt'} + <select name="mailbox_soft_delete" id="mailbox_soft_delete" class="form-control"> + {tmpl_var name='mailbox_soft_delete'} + </select></a> </div> </div> <div class="form-group"> diff --git a/server/lib/classes/cron.d/500-clean_mailboxes.inc.php b/server/lib/classes/cron.d/500-clean_mailboxes.inc.php index 4a879dd7d71da648b677147a88bc97b2a7ca2391..a1a053fcca482405372d8dcc646a50229f854feb 100755 --- a/server/lib/classes/cron.d/500-clean_mailboxes.inc.php +++ b/server/lib/classes/cron.d/500-clean_mailboxes.inc.php @@ -53,15 +53,30 @@ class cronjob_clean_mailboxes extends cronjob { public function onRunJob() { global $app, $conf; - $trash_names=array('Trash', 'Papierkorb', 'Deleted Items', 'Deleted Messages', 'Corbeille'); - $junk_names=array('Junk', 'Junk Email', 'SPAM'); + $this->purge_junk_thrash(); + $this->purge_soft_deleted_maildir(); + $this->purge_mdbox_removed(); + + parent::onRunJob(); + } + + private function purge_junk_thrash() { + global $app, $conf; + + $trash_names = array('Trash', 'Papierkorb', 'Deleted Items', 'Deleted Messages', 'Corbeille'); + $junk_names = array('Junk', 'Junk Email', 'SPAM'); $expunge_cmd = 'doveadm expunge -u ? mailbox ? sentbefore '; $purge_cmd = 'doveadm purge -u ?'; $recalc_cmd = 'doveadm quota recalc -u ?'; $server_id = intval($conf['server_id']); - $records = $app->db->queryAllRecords("SELECT email, maildir, purge_trash_days, purge_junk_days, imap_prefix FROM mail_user WHERE maildir_format = 'maildir' AND disableimap = 'n' AND server_id = ? AND (purge_trash_days > 0 OR purge_junk_days > 0)", $server_id); + $records = $app->db->queryAllRecords(" + SELECT email, maildir, purge_trash_days, purge_junk_days, imap_prefix + FROM mail_user + WHERE maildir_format = 'maildir' AND disableimap = 'n' AND server_id = ? + AND (purge_trash_days > 0 OR purge_junk_days > 0)", + $server_id); if(is_array($records) && !empty($records)) { foreach($records as $email) { @@ -93,8 +108,52 @@ class cronjob_clean_mailboxes extends cronjob { $app->system->exec_safe($recalc_cmd, $email['email']); } } + } - parent::onRunJob(); + // Purge soft deleted mailboxes. + private function purge_soft_deleted_maildir() { + global $app, $conf; + $mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail'); + + // Convert old values in mailbox_soft_delete field + if(isset($mail_config['mailbox_soft_delete']) && $mail_config['mailbox_soft_delete'] == 'n') $mail_config['mailbox_soft_delete'] = 0; + if(isset($mail_config['mailbox_soft_delete']) && $mail_config['mailbox_soft_delete'] == 'y') $mail_config['mailbox_soft_delete'] = 7; + $mail_config['mailbox_soft_delete'] = intval($mail_config['mailbox_soft_delete']); + + + if ($mail_config['mailbox_soft_delete'] > 0) { + if(isset($mail_config['homedir_path']) || strlen($mail_config['homedir_path']) > 4) { + $matched_dirs = glob($mail_config['homedir_path'] . "/*/[a-z0-9.-]*-deleted-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"); + + if (!empty($matched_dirs)) { + $delay_days = $mail_config['mailbox_soft_delete']; + foreach($matched_dirs as $dir) { + $owner = posix_getpwuid(fileowner($dir)); + if (is_dir($dir) && is_array($owner) && $owner['name'] == 'vmail') { + $mtime = filemtime($dir); + if ($mtime < strtotime("-$delay_days days")) { + // do remove + $app->system->exec_safe('sudo -u vmail rm -rf ?', $dir); + } + } + } + } + } + } + } + + // Remove messages with refcount=0 from mdbox files. + private function purge_mdbox_removed() { + global $app, $conf; + + $sql = "SELECT email FROM mail_user WHERE maildir_format = 'mdbox' AND server_id = ?"; + $records = $app->db->queryAllRecords($sql, $server_id); + + if(is_array($records)) { + foreach($records as $rec) { + $app->system->exec_safe("su -c ?", 'doveadm purge -u "' . $rec["email"] . '"'); + } + } } /* this function is optional if it contains no custom code */ diff --git a/server/lib/classes/cron.d/600-purge_mailboxes.inc.php b/server/lib/classes/cron.d/600-purge_mailboxes.inc.php deleted file mode 100644 index 451eb56642751e9ce25b025406855fa70513dcf9..0000000000000000000000000000000000000000 --- a/server/lib/classes/cron.d/600-purge_mailboxes.inc.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php - -/* -Copyright (c) 2015, Dominik Müller, Profi Webdesign -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of ISPConfig nor the names of its contributors - may be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -class cronjob_purge_mailboxes extends cronjob { - - // should run before quota notify and backup - // quota notify and backup is both '0 0 * * *' - - // job schedule - protected $_schedule = '30 23 * * *'; - - /* this function is optional if it contains no custom code */ - public function onPrepare() { - global $app; - - parent::onPrepare(); - } - - /* this function is optional if it contains no custom code */ - public function onBeforeRun() { - global $app; - - return parent::onBeforeRun(); - } - - public function onRunJob() { - global $app, $conf; - - $sql = "SELECT email FROM mail_user WHERE maildir_format = 'mdbox' AND server_id = ?"; - $records = $app->db->queryAllRecords($sql, $server_id); - - if(is_array($records)) { - foreach($records as $rec){ - $app->system->exec_safe("su -c ?", 'doveadm purge -u "' . $rec["email"] . '"'); - } - } - - parent::onRunJob(); - } - - /* this function is optional if it contains no custom code */ - public function onAfterRun() { - global $app; - - parent::onAfterRun(); - } - -} - -?> diff --git a/server/scripts/handle_mailbox_soft_deleted.sh b/server/scripts/handle_mailbox_soft_deleted.sh deleted file mode 100644 index 7c7f280839d31233adabfd39832ed089e5fc66d3..0000000000000000000000000000000000000000 --- a/server/scripts/handle_mailbox_soft_deleted.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -# Archive directories for deleted mailboxes. -delay_days=7 - -# Test if there is something to do... to avoid 'No such file or directory' from find later. -ls /var/vmail/*/[a-z0-9.-]*-deleted-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] >/dev/null 2>&1 -if [ $? != 0 ]; then - exit 0; -fi - -function remove_soft_deleted_mailbox { - dir=$1 - - echo "Purging $dir" - rm -r "$dir" -} - -function compress_soft_deleted_mailbox { - dir=$1 - - backupfile="${dir}.tar.bz2" - - # Test if backup file already exists - if [ -f $backupfile ]; then - # Skip - echo "ERROR: Backupfile($backupfile) exists!" >&2 - continue - fi - - echo "Compressing for $dir" - tar cvfj "$backupfile" --remove-files "$dir" 2> >( grep -v "tar: Removing leading" >&2) -} - -# List deleted mailboxs to archive -# -mtime +7 ===> Only mailboxes deleted more then 7 days ago -# Test that the last dir component matches e.g. xxx-deleted-20220101094242 (14 digits) -# command: xxx-`date "+%Y%m%d%H%M%S"` -find /var/vmail/*/[a-z0-9.-]*-deleted-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] -maxdepth 0 -type d -mtime +$delay_days | while read line; do - # example $line: "/var/vmail/example.com/info-20220101094242" - - dir=$line - - # Uncomment the desired cleanup method below, or be creative and create your own. - - remove_soft_deleted_mailbox $dir - #compress_soft_deleted_mailbox $dir - -done