@@ -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 */
0 commit comments