# 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>
<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,

1. 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;)
2. set the parameters in the first four lines of the php-section;
3. 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,

1. move any messages that are not junk out of the Junk folder;
2. compact the Junk folder (otherwise messages that have been moved out will also be deleted);
3. 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;
4. 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)