Deleting Junk messages from POP serverFrom MozillaZine Knowledge BaseSince 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. [edit] 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>
[edit] How to useTo start,
Then, whenever there are a number of messages in 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)
[edit] One AlternativeAnother 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) |
|