Fast registration of maildir -- script inside
    Matthias Andree 
    matthias.andree at gmx.de
       
    Mon Feb 10 03:34:15 CET 2003
    
    
  
Hi,
I've written a small Perl script that prints a whole maildir to stdout,
so you can easily register your whole maildir; this example assumes you
have a "spam" subfolder (Courier-IMAP/Sqwebmail style):
perl printmaildir.pl ~/Maildir/ | bogofilter -n
perl printmaildir.pl ~/Maildir/.spam | bogofilter -s
printmaildir.pl prints all mails from the cur and new directories,
adding From_ lines when missing and escaping existing From_ lines when
found in the body, so that the message count is correct.
This script has been committed to the CVS contrib/ section, a copy of it
is below.
Hope that helps somebody.
---------------------------------------------------------
#! /usr/bin/perl -w
# printmaildir.pl -- (C) 2003 by Matthias Andree
# This program reads a Maildir and prints in in UNIX mbox format on
# stdout. It is redistributable in accordance to the terms of the
# GNU GENERAL PUBLIC LICENSE V2
use strict;
use POSIX;
sub read_dir($ ) {
    my $dir = shift;
    my @list = ();
    my $d;
    foreach $d (qw/cur new/) {
	opendir(DIR, $dir . "/$d") || die "can't opendir $dir/$d: $!";
	push @list, grep { ! /^\./ && $_ =~ s|^|$dir/$d/|; } readdir(DIR);
	closedir DIR;
    }
    foreach (@list) {
	if (open F, $_) {
	    my $head = <F>;
	    my $last = $head;
	    if ($head !~ /^From /) {
		print "From unknown\@example.invalid  ", POSIX::ctime(time);
	    }
	    print $head;
	    while(<F>) {
		$last = $_;
		if (/^From /){
		    print ">$_";
		} else {
		    print $_;
		}
	    }
	    if ($last !~ /\n$/) {
		print "\n";
	    }
	   close F;
	} else { # open failed
	    warn "can't open $_: $!";
	}
    }
}
if (!@ARGV) { unshift @ARGV, "."; }
foreach(@ARGV) {
    read_dir $_;
}
---------------------------------------------------------
-- 
Matthias Andree
    
    
More information about the bogofilter
mailing list