#!/usr/bin/perl
use strict;
use warnings;
use Mail::IMAPClient;

if(@ARGV != 3){
	print "usage: $0 host user password\n";
}

my ($host,$user,$password) = @ARGV;
my @folders		= ('SpamFeeder','HamFeeder');

# Create imap connection
my $imap     = new Mail::IMAPClient( 'Server' => $host , 'User' => $user , 'Password' => $password  ) 
	or die "Unable to connect to imap server\n";

# Foreach folder
foreach my $folder (@folders){
	my @list;
	$imap->select($folder) 
		or die "Unable to select folder $@\n";
	next if(!(@list = $imap->messages));
	foreach my $mess (@list){
		# Get messages
		my @output = $imap->fetch(($mess,'RFC822')) 
			or die "Unable to fetch$@\n";
		# Get bogofilter
		my $cmd  = "|/usr/bin/bogofilter -M ";
		if($folder eq 'SpamFeeder') { $cmd .= '-s'; }
		else{ $cmd .= '-n'; }
		open(BOG,$cmd)
			or die "Unable to launch bogofilter: $!\n";
		print BOG "$output[1]";
		while(<BOG>){ print $_; }
		# Delete messages
		$imap->delete_message($mess) 
			or die "Unable to delete message $@\n";
	}
}
# Commit changes
$imap->close();
$imap->disconnect() or die "Unable to disconnect\n";

