This is very similar to a script that I use, except mine is supposed to be run by cron and therefore loops through several mailboxes. I've got some basic exception handling in it, because of this if one of the mailboxes is corrupted.
The only comments I have is that you use the 'Date' header to expire. I decided not to do this and use the 'Date Received' header that exim writes to mails or the last Received header, just in case an email languishes somewhere on the net before being delivered. This happens rarely, but often enought to be an issue.
The other comment is that you use HTTP::Date. This is OK as long as the dates come in that format. I looked around and see that MTAs write dates in all sorts of ways, hence I chose to use Date::Manip, because it understands most, if not all formats.