Guckt auf nem Imap-Server nach ungelesenen, respektive neuen Mails und schreibt deren Anzahl nach /tmp/mails. (Werd ich vll nutzen für ne Statusbaranzeige im Windowmanager) (Braucht Mail::IMAPClient Perl Modul von cpan, gibts im aur bei Arch)
Code:
#!/usr/bin/perl -w
use Getopt::Long;
use Mail::IMAPClient;
$SIG{INT} = \&logout;
$SIG{TERM} = \&logout;
my $tmpfile = "/tmp/mails";
my ($server, $user, $password, @folders, $interval);
if (!GetOptions(
"server=s" => \$server,
"user=s" => \$user,
"password=s" => \$password,
"folder=s@" => \@folders,
"interval=i" => \$interval
)) {
exit(1);
}
if (!$server || !$user || !scalar(@folders)) {
exit(1);
}
$interval = 300 unless $interval;
if (!$password) {
print "Enter password for user $user:\n";
# Do not echo the password on the console.
system("stty", "-echo");
chomp($password = <STDIN>);
# Enable echo again.
system("stty", "echo");
}
my %options = (
Server => $server,
User => $user,
Password => $password
);
print "\nLogin, using there parameters:\n";
print "------------------------------\n";
print "Server:\t\t$server\n";
print "User:\t\t$user\n";
print "Folders:\t@folders\n";
print "Interval:\t$interval seconds\n";
my $imap = Mail::IMAPClient->new(%options)
or die $!;
print "\nLogin successful!\n";
print "Starting loop. (no more output from here)\n";
my $fh;
my $unread_mail;
while (1) {
# Go thru all folders and check for unread mails.
$unread_mail = 0;
map { $unread_mail += $imap->unseen_count($_) } @folders;
open($fh, ">", $tmpfile) or die $!;
print $fh $unread_mail;
close($fh) or die $!;
sleep($interval);
}
sub logout
{
print "Logout...\n";
$imap->logout()
or die $imap->LastError();
unlink($tmpfile) if (-e $tmpfile);
exit(0);
}