Exobrain
view release on metacpan or search on metacpan
bin/source/imap view on Meta::CPAN
#!/usr/bin/perl -w
use 5.010;
use strict;
use warnings;
use autodie;
use IO::Socket::SSL qw(debug1);
use Socket qw( SO_KEEPALIVE );
use Net::IMAP::Client;
use Term::ReadKey;
use Exobrain;
# PODNAME: imap
# ABSTRACT: Report IMAP folder sizes to exobrain
my $exobrain = Exobrain->new;
my $user = shift || die "Usage: $0 user server";
my $server = shift || die "Usage: $0 user server";
say "Password?";
ReadMode('noecho');
my $password = ReadLine(0);
ReadMode(0); # Reset term
chomp($password);
# Horrible, horrible hack that allows us to avoid
# self-signed cert errors, at the expense of not
# checking certs at all.
my $socket = IO::Socket::SSL->new(
PeerAddr => $server,
PeerPort => 993,
Timeout => 90,
Proto => 'tcp',
Blocking => 1,
SSL_verify_mode => SSL_VERIFY_NONE,
);
$socket->sockopt(SO_KEEPALIVE, 1);
my $imap = Net::IMAP::Client->new(
server => $server,
user => $user,
pass => $password,
ssl => 1,
port => 993,
socket => $socket,
) or die "Could not connect to IMAP server";
$imap->login or die "Can't login " . $imap->last_error;
say "Connected...";
my $sent_box;
# These really should be configured or auto-sniffed on a per-server
# baiss.
if ($server =~ /gmail/) { $sent_box = '[Gmail]/Sent Mail'; }
else { $sent_box = 'Sent'; }
while (1) {
measure($imap, 'INBOX');
measure($imap, $sent_box);
sleep(60);
}
sub measure {
my ($imap, $mailbox) = @_;
my $data = $imap->status($mailbox);
my $count = $data->{MESSAGES};
my $msg = $exobrain->measure('Mailbox',
source => 'IMAP',
count => $count,
user => $user,
server => $server,
mailbox => $mailbox,
raw => $data,
);
return;
}
__END__
( run in 2.452 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )