diff --git a/src/app/Backends/IMAP.php b/src/app/Backends/IMAP.php --- a/src/app/Backends/IMAP.php +++ b/src/app/Backends/IMAP.php @@ -144,7 +144,7 @@ * * @param string $mailbox Folder name */ - protected static function deleteMailbox($mailbox): bool + public static function deleteMailbox($mailbox): bool { $config = self::getConfig(); $imap = self::initIMAP($config); @@ -169,6 +169,23 @@ return $result; } + /** + * Empty a mailbox + * + * @param string $mailbox Folder name + */ + public static function clearMailbox($mailbox): bool + { + $config = self::getConfig(); + $imap = self::initIMAP($config); + + $result = $imap->clearFolder($mailbox); + + $imap->closeConnection(); + + return $result; + } + /** * Delete a user mailbox. * diff --git a/src/app/Console/Commands/Imap/DeleteCommand.php b/src/app/Console/Commands/Imap/DeleteCommand.php new file mode 100644 --- /dev/null +++ b/src/app/Console/Commands/Imap/DeleteCommand.php @@ -0,0 +1,47 @@ +argument('user'); + $mailbox = $this->argument('mailbox'); + if ($mailbox == "*") { + // Reverse so subfolders are deleted before parent folders + foreach (array_reverse(\App\Backends\IMAP::listMailboxes($user)) as $mailbox) { + \App\Backends\IMAP::deleteMailbox($mailbox); + } + // Can't delete INBOX + \App\Backends\IMAP::clearMailbox(\App\Backends\IMAP::userMailbox($user, "INBOX")); + } else { + if ($this->option('clear')) { + \App\Backends\IMAP::clearMailbox(\App\Backends\IMAP::userMailbox($user, $mailbox)); + } else { + \App\Backends\IMAP::deleteMailbox(\App\Backends\IMAP::userMailbox($user, $mailbox)); + } + } + } +}