#!/usr/bin/perl

use strict 'vars';

if ($#ARGV != 0 && $#ARGV != 1) {
	print "Usage: $0 <directory> [go]\n";
	exit 1;
}

# specify dir with emails
chdir($ARGV[0]) || die("Cannot change directory to $ARGV[0]\n");

# path to qmail-inject
my $qmailinject = '/usr/local/qmail/bin/qmail-inject';

my ($debug) = 1;
my ($param, $soubor) = '';
my (@HLAVICKY) = ();

$debug = 0 if ($ARGV[1] eq "go");
$param .= " -n" if ($debug);

# read entire directory
opendir(DIR, ".") || die("Cannot read directory $ARGV[0]\n");

foreach $soubor (readdir(DIR)) {
	# email should be file
	if (!-f $soubor) {
		next;
	}
	# get headers from qmail-scanner
	@HLAVICKY = `tail -6 $soubor 2> /dev/null`;

	my ($odesilatel, $radek, $prijemci) = '';
	my ($odes, $prij) = 0;

	# extract sender and recipient(s)
	foreach $radek (@HLAVICKY) {
		if ($radek =~ /^X-Qmail-Scanner-Mail-From: \"(.*)\" via/) {
			$odesilatel = $1;
			$odes = 1;
		}
		if ($radek =~ /^X-Qmail-Scanner-Rcpt-To: \"([^\s]+)\"$/) {
			$prijemci = $1;
			$prij = 1;
		}
	}

	# send only if we have sender and at least one recipient
	if ($odes == 1 && $prij == 1) {
		my ($obsah) = '';
		# read file only once
		open(SOUBOR, "<$soubor");
		while (<SOUBOR>) {
			if (!/^\*\*\* Qmail-Scanner Quarantine Envelope Details Begin \*\*\*/) {
				$obsah .= $_;
			} else {
				last;
			}
		}
		close(SOUBOR);

		my ($prijemce) = '';

		# multiple recipients separated by coma
		foreach $prijemce (split(/\,/, $prijemci)) {
			$prijemce =~ s/^\s//g;
			$prijemce =~ s/\s$//g;
			$prijemce =~ s/,$//;

			# print what we are doing and do it
			print "*** Sending file $soubor: $odesilatel -> $prijemce *** ($qmailinject$param -f $odesilatel $prijemce)\n";
			open(QI, "|$qmailinject$param -f $odesilatel $prijemce") || die("Cannot execute qmail-inject\n");
			print QI $obsah;
			close(QI);
		}
	}
}

closedir(DIR);

exit;

