aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/README.mold_remover
blob: 09adddc0c38b49bcf61aab233bc0df2c70044a87 (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://fetchmail.berlios.de/> 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
an class="w"> strict; # Any arguments are expected to be an mda invocation. if (@ARGV) { my $mda = join(' ', @ARGV); open(MDA, "| $mda") or die "Can't exec $mda: $!\n"; select(MDA); } # Look for a Boundary declaration in the message header my $decltag; while (<STDIN>) { print; if (/boundary=\"(.*)\"$/i) { $decltag = $1; } elsif (/^$/) { # An empty line marks the end of the headers. last; } } # If we didn't find a Boundary declaration just pipe the rest of the # message unchanged. if (!defined $decltag) { while (<STDIN>) { print; } exit 0; } # Substitute $decltag for every ocurrence of an outer-level boundary # string found in the body of the message. my $usedtag; while (<STDIN>) { if (/^--(.*)$/) { $usedtag = $1 unless defined $usedtag; if ($1 eq $usedtag) { $_ = "--$decltag\n"; } elsif ($1 eq "$usedtag--") { $_ = "--$decltag--\n"; } } print; } =pod This script can be used to bypass a bug in the Domino-5.0.2b IMAP service that manifests itself when you use fetchmail as the IMAP client. The problem is that fetchmail (differently from other IMAP clients) fetches messages in two parts, first the headers and then the body. It seems that Domino converts the messages from its internal format into MIME twice. In doing so, it declared a boundary string in the messages Content-type header and uses another one to separate the parts in the body. This script should be used as a mda option for fetchmail. As arguments to it, pass the former mda you used. I, for example, use the following entry in my .fetchmailrc: poll server ... mda "/usr/bin/procmail -d %T"; To use this filter, I changed the above into the following: poll server ... mda "/home/gustavo/bin/correct-domino-mime-conversion /usr/bin/procmail -d %T"; If you do not use a mda normally, you can try the following to call sendmail directly: poll server ... mda "/home/gustavo/bin/correct-domino-mime-conversion //wherever/is/your/sendmail -oem -f %F %T"; Without argumets this script is a filter that reads from its stdin and outputs the result into its stdout. I should mention that this bug seems to be solved in Domino 5.0.3 (http://www.notes.net/46dom.nsf/434e319a66960d8385256857005cd97b/4499e0db6e43732b852568b2006ef7e9?OpenDocument) but I have not checked it. Gustavo. <gustavo@cpqd.com.br> =cut