Deleting Junk messages from POP server
Since moving from OE, the main thing I have missed is the automatic deletion of messages from the POP3 server when I have deleted them locally -- I either only keep the last week's messages or I have to delete messages by hand, to stay below the mailbox's size-limit.
The following solution has worked well, but expects you to have a server (e.g. Apache) with php available on your computer, as well as the extension php_imap.dll (on Windows; this can be found by searching the web; there is an .so version for Linux systems.) The extension has to be loaded of course, which requires the removal of one ";" (semicolon) in php.ini.
While this may be a rather specific solution, I hope it will inspire other people to write a more general one. Hopefully that option from OE will eventually find its way into Thunderbird.
The script
<html> <head> </head> <body> <pre> <?php $server = 'mail.your.server'; $username = 'username'; $password = 'password'; $junkfile = 'c:/path/to/folder/Junk'; set_time_limit(30); echo " Deleting messages marked as 'junk' from account $username on $server:\n\n"; $file = file_get_contents($junkfile); $mbox = imap_open('{'.$server.':110/pop3}Inbox', $username, $password) OR exit(" Error: unable to open online-Inbox.\n"); $numm = imap_num_msg($mbox); echo " There are $numm messages in the online-Inbox.\n\n"; $numj = preg_match_all("/X-UIDL/i", $file, $junk); if ($numj == 0) { echo " The folder $junkfile is empty.\n"; imap_close($mbox); exit; } else { preg_match_all("/(?:Message-ID|Date): (.*)/i", $file, $junk); } $junk = join(' ', $junk[1]); $done = 0; for ($i = $numm; $i >= $numm-14; $i--) { $head = imap_fetchheader($mbox, $i); preg_match_all("/(?:Message-ID|Date): (.*)/i", $head, $rtrn); $rtrn = join(' ', $rtrn[1]); if (strpos(' '.$junk, $rtrn)) { $done++; if (preg_match("/From: (\".*\")/", $head, $from)) { imap_delete($mbox, $i); echo " ... message deleted From: $from[1] \n"; } elseif (preg_match("/From: (.{0,40})/", $head, $from)) { imap_delete($mbox, $i); echo " ... message deleted From: $from[1] \n"; } else { imap_delete($mbox, $i); echo " ... message deleted:\n$head\n"; } if ($done == $numj) { break; } } } $date = date('D, d M y H:i'); if ($done == 0) { echo "\n Done. No messages were deleted.\n ($date)\n"; } else { imap_expunge($mbox); echo "\n Done. $done message(s) was/were deleted.\n ($date)\n"; } imap_close($mbox); ?> </pre> </body> </html>
How to use
To start,
- copy the above script into a file "deljunk.php" in a place where Apache can find it (-- note the one long line that should be read as one;)
- set the parameters in the first four lines of the php-section;
- set the Junk Mail Controls in Thunderbird to
- "Move incoming messages determined to be junk mail to ..." and choose a folder, and
- "When I manually mark messages as Junk: Move them to the "Junk" folder."
Then, whenever there are a number of messages in the Junk folder,
- move any messages that are not junk out of the Junk folder;
- compact the Junk folder (otherwise messages that have been moved out will also be deleted);
- while on-line, in your browser, run the "deljunk.php" script, like "localhost\path\to\deljunk.php": this will delete those of the 15 most recent messages on the server that are in the Junk folder;
- delete the mails from the Junk folder.
If the script regularly times out, it may be necessary to increase the number of seconds in the line "set_time_limit(30);"
(Needless to say, the script is provided as is, with no guarantees.)
Kai 17:10, 30 May 2005 (PDT)
One Alternative
Another lower-tech alternative to tricking Thunderbird into deleting Junk messages from a POP server is to use a Local Folders specific message filter. One of the actions available to message filters is "Delete from POP Server". Unfortunately, there's no "match all" conditional argument for filters, so I used "Status" "is" "Flagged", then flagged all messages in the Junk folder. After selecting the Junk local folder and choosing "Tools -> Run Filters on Folder", the next time I connect to the POP server(s), magically all of my junk mail is deleted.
ViperGeek 15:07, 14 Nov 2006 (EST)