How To Empty A Mail Box In CPanel
We recently received an email from a customer of ours on a un-managed VPS hosting solution. The mail in short was asking the question
How do I delete thousands of e-mail messages from one of our mail boxes in cPanel?
This is quite a common question and the number of emails can be very high. If you run a website, you may find out one day that you have a mail account containing thousands or even hundreds of thousands of messages. The most common reason this happens is because the default e-mail account is set up as a “catch-all” address. This will direct all e-mail sent to invalid usernames at your domain to the default Inbox and because spammers send out spam messages to invalid e-mail addresses all the time, the number of e-mails received by the default mailbox can grow by thousands of messages each day.
Luckily there is a easy solution to resolve this which we are going to split into 2 parts.
- Deleting the messages from the mailbox
- Preventing it from happening again
First lets delete all the mail in the box
Once Logged in on the left you will see the number of emails in the inbox
Your Mail Has Now Been Deleted!
There is a potential issue that could arise if the mailbox has a very high volume of messages
Depending on how many messages are stored in your Inbox, this may take up to several minutes to complete.
The only catch is that if the mailbox contains too many messages, the operation will time out and will not empty the mailbox.
This is what happened to one of our readers who had over half a million messages.
If this is also your situation, you may have to delete the message folders manually. To do this, you will first need to navigate to the mail folder, which is located in the following directory:
/home/username/mail/ (where “username” is the username for the mail account)
The two folders you’ll need to delete are the cur and new folders, which contain the messages. You may be able to do this with an SSH or SFTP program, though I also had problems with this method timing out. If you know some basic Unix commands, you can use a terminal (command-line) program to manually delete the folders. First navigate to the mail folder, then recursively delete the cur and new directories. The commands to do this are:
$ cd /home/username/mail
$ rm -rf cur
$ rm -rf new
Again, even this method may take awhile if the directories are loaded with thousands of mail messages. But it should eventually remove the folders. This command-line method should only be used a last resort, as the maildirsize file will no longer contain the correct information for the mail account. Fortunately, as soon as a new message is received into the empty Inbox, the cur and new folders are automatically recreated and the maildirsize is updated with the correct data.
Now lets stop it happening again!
This will then reply to all e-mails sent to addresses which have not been set up (all catch all addresses *@domain.com), the message sent can be specificied on that page but if not it will simply send ‘No such person at this address’.
As you can see, you can also discard the message totally (no reply to sender) but keep in mind if someone sends a genuine email they will not be aware they mistyped your e-mail address and thus assume . The other option is to pipe all e-mails, this is commonly used in scripts like help desks etc (PHP, Pearl).