aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/README.mold_remover
blob: 0f81488507215432d5cf4d1a621a60f371511b35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Mold Remover

Mold Remover is a short python script which integrates with fetchmail 
<http://catb.org/~esr/fetchmail/> and allows the user to specify the 
number of days that mail should remain on the pop3 server before being 
deleted. 

It is released under the GNU GPL <http://www.gnu.org/copyleft/gpl.html>.

Usage: 
Set up fetchmail to run with keep and uidl options.
Edit the mold_remover.py file to specify the mailserver address
and login/password details. Also specify the UIDL file created by
fetchmail (this is created automatically by fetchmail when uidl option
is selected in the fetchmailrc file usually at
/var/mail/.fetchmail-UIDL-cache). Remember to chmod the moldremover
script to 700 so that passwords cannot be read. Next, edit the field to
set how many days you want the mail to be left on the server. Lastly
create a script to run moldremover.py with python which can either be
run as a cron job or as part of your connection script. It is advisable
to stop fetchmail before mold remover is run and then to restart
fetchmail afterwards. Here is an example /etc/cron.daily/ script:

#!/bin/bash
/etc/init.d/fetchmail stop >> /var/log/messages
/usr/bin/python /usr/local/bin/mold_remover.py >> /var/log/messages
/etc/init.d/fetchmail start >> /var/log/messages

Please feel free to email me (jmstone@dsl.pipex.com) if you have any questions or bugfixes!

James Stone
# # Warranty? None # If it breaks? The pieces are yours # If it breaks something? You drove it. # Bugs? At least one. # now we've cleared the air; # This supposed to allow one to talk pop-3 to a mail server. If you're lucky (and know how) # you might also be able to talk a few other Internet protocols with it. # Typically, it's run thus: # pop2test.1 <mailserver> [<mailport>] # mailport's optional; default is 110 (pop-3). # # Having started, you type away much as you would with telnet. # # # # It has this great advantage over telnet: it reads its input from stdin and writes to stdout; # you can prepare the entire sequence in a file, then run it this: # pop2test.1 <thefileyoujustcreated >theresultsyouwanttoperuse host port # # # uses: # 1 Debugging POP3 (and maybe imap does anyone know?) mail problems # 2 Deleting the occasional piece of mail that's too big or stuffs fetchmail. # 3 Talking to sendmail # use Socket; sub hx; sub getreply; $timeout=1; $RemoteHost = $ARGV[0];shift; $RemotePort = $ARGV[0] || 110;shift; ($PRname,$PRaliases,$PRport,$PRproto) = getservbyname($RemotePort,'tcp'); $PRport=$RemotePort unless $PRport; $proto=getprotobyname($PRproto); $RemoteIP = inet_aton $RemoteHost or die "Can't resolve $RemoteHost"; $that = pack 'Sna4x8',AF_INET, $PRport, $RemoteIP; socket(REMOTESITE,AF_INET,SOCK_STREAM,$proto) or die "Can't create socket to $RemoteHost: $!\n";; connect(REMOTESITE, $that) or die "Can't connect: $!\n"; select(REMOTESITE);$|=1;select STDOUT; $rin = $win = $ein = ''; vec($rin,fileno(REMOTESITE),1) = 1; #vec($win,fileno(REMOTESITE),1) = 1; $ein = $rin | $win; getreply; while ($L=<STDIN>) { chomp $L; print REMOTESITE $L . "\r\n"; print "send: " . $L . "\n"; getreply; } print REMOTESITE "Quit\r\n"; getreply; #print <REMOTESITE>; close REMOTESITE; exit; # P sub hx { $N=$_[0];shift; $S=$_[0];shift; return "$N(" . unpack("h", $S) . ") "; } sub getreply { while ('x') { ($nfound,$timeleft) = select($rout=$rin, undef, $eout=$ein, $timeout); last if $nfound == 0; # print "nf($nfound) tl($timeleft) " . hx("rin",$rin) . hx("rout", $rout) . hx("ein",$ein) . hx("eout",$eout) . "\n"; $Reply= <REMOTESITE>; print "recv: " . $Reply; last if $Reply eq ''; $Reply =~ s/[\r\n]*//; last if $Reply eq '.'; } }