#!/usr/bin/perl -w

use Net::POP3;

my $pop_host = 'pop.internal.schools.net.au';
my $pop_uname = 'sam';
my $pop_passwd = ''; # NB insert password here
print "Getting mail from $pop_uname\@$pop_host mailbox.\n";

# connect to POP server
my $pop = Net::POP3->new($pop_host);
my $n_messages = $pop->login($pop_uname, $pop_passwd);

my $last_message = (<*>)[-1] || '';

my ($last_i) = $last_message =~ /^(\d\d\d)/;

my $start_i = ($last_i || 0) + 1;

# for each message
for my $i (1..$n_messages) {
    my $ar_msg_txt = $pop->get($i);
    my $message = join '', @$ar_msg_txt;
    my ($from) = $message =~ /^From:\s+(.*)?$/m;
    my ($subject) = $message =~ /^Subject:\s+(.*)?$/m;
    my $filename = sprintf '%03d %s %s', $i+$start_i-1, $from || '?', $subject || '?';
#    $filename =~ tr|/|_|;
#    $filename =~ tr| |_|;
    $filename =~ tr/A-Za-z0-9.\_\@<>/_/c;
    if (-e $filename) {
	my $fileno = 2;
	$fileno++ while -e "$filename.$fileno";
	$filename = "$filename.$fileno";
    }
    open FILE, ">$filename";
    print FILE $message;
    close FILE;

    print "Wrote message $filename\n";

    # delete the message from the mailbox
    $pop->delete($i);
}

$pop->quit; # deletes messages marked for deletion
