Skip to content

Commit da13e20

Browse files
committed
Integrate handle_mailbox_soft_deleted.sh into 500-clean_mailboxes.inc.php
1 parent 8271e11 commit da13e20

File tree

6 files changed

+58
-61
lines changed

6 files changed

+58
-61
lines changed

install/lib/installer_base.lib.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3884,10 +3884,6 @@ public function install_crontab() {
38843884
$root_cron_jobs[] = "0 0 * * * ".$install_dir."/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null";
38853885
}
38863886

3887-
if ($conf['services']['mail'] == 1) {
3888-
$root_cron_jobs[] = "30 23 * * * ".$install_dir."/server/scripts/handle_mailbox_soft_deleted.sh &> /dev/null";
3889-
}
3890-
38913887
foreach($root_cron_jobs as $cron_job) {
38923888
if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
38933889
$existing_root_cron_jobs[] = $cron_job."\n";

install/tpl/server.ini.master

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ relayhost_user=
5656
relayhost_password=
5757
mailbox_size_limit=0
5858
message_size_limit=0
59-
mailbox_soft_delete=n
59+
mailbox_soft_delete=0
6060
mailbox_quota_stats=y
6161
realtime_blackhole_list=zen.spamhaus.org
6262
overquota_notify_threshold=90

interface/web/admin/form/server_config.tform.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -736,9 +736,17 @@
736736
),
737737
'mailbox_soft_delete' => array (
738738
'datatype' => 'VARCHAR',
739-
'formtype' => 'CHECKBOX',
739+
'formtype' => 'SELECT',
740740
'default' => 'n',
741-
'value' => array(0 => 'n', 1 => 'y')
741+
'value' => array(
742+
0 => 'soft_delete_directly_txt',
743+
-1 => 'soft_delete_keep_indefinately_txt',
744+
1 => 'soft_delete_keep_1_txt',
745+
7 => 'soft_delete_keep_7_txt',
746+
30 => 'soft_delete_keep_30_txt',
747+
90 => 'soft_delete_keep_90_txt',
748+
365 => 'soft_delete_keep_365_txt',
749+
)
742750
),
743751
'mailbox_quota_stats' => array (
744752
'datatype' => 'VARCHAR',

interface/web/admin/templates/server_config_mail_edit.htm

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,9 @@
143143
<div class="form-group">
144144
<label class="col-sm-3 control-label">{tmpl_var name='mailbox_soft_delete_txt'}</label>
145145
<div class="col-sm-9">
146-
{tmpl_var name='mailbox_soft_delete'}&nbsp;{tmpl_var name='mailbox_soft_delete_info_txt'}
146+
<select name="mailbox_soft_delete" id="mailbox_soft_delete" class="form-control">
147+
{tmpl_var name='mailbox_soft_delete'}
148+
</select></a>
147149
</div>
148150
</div>
149151
<div class="form-group">

server/lib/classes/cron.d/500-clean_mailboxes.inc.php

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,29 @@ public function onBeforeRun() {
5353
public function onRunJob() {
5454
global $app, $conf;
5555

56-
$trash_names=array('Trash', 'Papierkorb', 'Deleted Items', 'Deleted Messages', 'Corbeille');
57-
$junk_names=array('Junk', 'Junk Email', 'SPAM');
56+
$this->purge_junk_thrash();
57+
$this->purge_soft_deleted_maildir();
58+
59+
parent::onRunJob();
60+
}
61+
62+
private function purge_junk_thrash() {
63+
global $app, $conf;
64+
65+
$trash_names = array('Trash', 'Papierkorb', 'Deleted Items', 'Deleted Messages', 'Corbeille');
66+
$junk_names = array('Junk', 'Junk Email', 'SPAM');
5867

5968
$expunge_cmd = 'doveadm expunge -u ? mailbox ? sentbefore ';
6069
$purge_cmd = 'doveadm purge -u ?';
6170
$recalc_cmd = 'doveadm quota recalc -u ?';
6271

6372
$server_id = intval($conf['server_id']);
64-
$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);
73+
$records = $app->db->queryAllRecords("
74+
SELECT email, maildir, purge_trash_days, purge_junk_days, imap_prefix
75+
FROM mail_user
76+
WHERE maildir_format = 'maildir' AND disableimap = 'n' AND server_id = ?
77+
AND (purge_trash_days > 0 OR purge_junk_days > 0)",
78+
$server_id);
6579

6680
if(is_array($records) && !empty($records)) {
6781
foreach($records as $email) {
@@ -93,8 +107,34 @@ public function onRunJob() {
93107
$app->system->exec_safe($recalc_cmd, $email['email']);
94108
}
95109
}
110+
}
96111

97-
parent::onRunJob();
112+
// Purge soft deleted mailboxes.
113+
private function purge_soft_deleted_maildir() {
114+
global $app, $conf;
115+
$mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail');
116+
117+
if ($mail_config['mailbox_soft_delete'] == 'y') {
118+
// Backward compatibility for dev installs between 3.2.9 and 3.2.10.
119+
$mail_config['mailbox_soft_delete'] = 7;
120+
}
121+
if ($mail_config['mailbox_soft_delete'] > 0) {
122+
$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]");
123+
124+
if (!empty($matched_dirs)) {
125+
$delay_days = $mail_config['mailbox_soft_delete'];
126+
foreach($matched_dirs as $dir) {
127+
if (is_dir($dir)) {
128+
$mtime = filemtime($dir);
129+
echo "$mtime < " . strtotime("-$delay_days days") ;
130+
if ($mtime < strtotime("-$delay_days days")) {
131+
// do remove
132+
$app->system->exec_safe('rm -rf ?', $dir);
133+
}
134+
}
135+
}
136+
}
137+
}
98138
}
99139

100140
/* this function is optional if it contains no custom code */

server/scripts/handle_mailbox_soft_deleted.sh

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)