1# Provides /mail command for POP3 mail checking 2# for irssi 0.7.98 (tested on CVS) by Kimmo Lehto 3# 4# Requires Net::POP3 module 5# If you don't have it, you can install it using: 6# 7# perl -e shell -MCPAN; 8# >install Net::POP3 9# 10 11use strict; 12use Irssi; 13use Net::POP3; 14use vars qw($VERSION %IRSSI); 15 16$VERSION = '0.5'; 17%IRSSI = ( 18 authors => 'Kimmo Lehto', 19 contact => 'kimmo@a-men.org' , 20 name => 'Mailcheck-POP3', 21 description => 'POP3 new mail notification and listing of mailbox contents. Use "/mail help" for instructions. Requires Net::POP3.', 22 license => 'Public Domain', 23 changed => 'Sun Apr 7 00:10 EET 2002' 24); 25 26 27my (%_mailcount, %_mailchecktimer); 28 29sub cmd_checkmail 30{ 31 my $args = shift; 32 my ($user, $pass, $host) = split(/\;/, $args); 33 my ($i, $from, $subject, $head); 34 my $POP3TIMEOUT = Irssi::settings_get_int("pop3_timeout"); 35 my $pop = Net::POP3->new( $host, Timeout => $POP3TIMEOUT ); 36 my $count = $pop->login($user, $pass); 37 38 if (!$count || !$pop) 39 { 40 Irssi::print("Invalid POP3 user, pass or host.", MSGLEVEL_CLIENTERROR); 41 if (!$_mailcount{"$user\@$host"}) 42 { 43 Irssi::timeout_remove($_mailchecktimer{"$user\@$host"}); 44 delete $_mailchecktimer{"$user\@$host"}; 45 } 46 $pop->quit(); 47 return undef; 48 } 49 if (!$_mailcount{"$user\@$host"}) { $_mailcount{"$user\@$host"} = $count; $pop->quit(); return 1; } 50 if ($_mailcount{"$user\@$host"} < $count) 51 { 52 Irssi::print("%R>>%n New Mail for $user\@$host:"); 53 54 for( $i = $_mailcount{"$user\@$host"} + 1; $i <= $count; $i++ ) 55 { 56 foreach $head (@{$pop->top($i)}) 57 { 58 if ($head =~ /^From:\s+(.*)$/i) { $from = $1; chomp($from);} 59 elsif ($head =~ /^Subject:\s+(.*)$/i) { $subject = $1; chomp($subject);} 60 } 61 Irssi::print("From : %W$from%n\nSubject: %W$subject%n"); 62 } 63 } 64 65 $_mailcount{"$user\@$host"} = $count; 66 $pop->quit(); 67 return 1; 68} 69sub start_check 70{ 71 my ($userhost, $pass) = @_; 72 my ($user, $host) = split(/\@/, $userhost); 73 my $INTERVAL = Irssi::settings_get_int("pop3_interval"); 74 if (cmd_checkmail("$user;$pass;$host")) 75 { 76 $_mailchecktimer{"$user\@$host"} = Irssi::timeout_add($INTERVAL * 1000, 'cmd_checkmail', "$user;$pass;$host"); 77 Irssi::print("Account $user\@$host is now being monitored for new mail."); 78 } 79} 80 81sub cmd_mail 82{ 83 my $args = shift; 84 my (@arg) = split(/\s+/, $args); 85 86 if (($arg[0] eq "add") && $arg[1] && $arg[2]) 87 { 88 if ($_mailchecktimer{$arg[1]}) 89 { 90 Irssi::print("Account " . $arg[1] . " is already being monitored."); 91 } 92 else 93 { 94 start_check($arg[1], $arg[2]); 95 } 96 } 97 elsif ($arg[0] eq "list") 98 { 99 Irssi::print("Active POP3 Accounts Being Monitored:"); 100 foreach (keys %_mailchecktimer) 101 { 102 Irssi::print(" %W-%n $_ ($_mailcount{$_} Mail message(s))"); 103 } 104 Irssi::print("End of /mail list"); 105 } 106 else 107 { 108 Irssi::print("%Wmailcheck.pl%n $VERSION - By KimmoKe\%W@%nircnet\n"); 109 Irssi::print("Usage:"); 110 Irssi::print("/mail add <user\@host> <password> - add account to be monitored."); 111 Irssi::print("/mail remove <user\@host> - stop monitoring account"); 112 Irssi::print("/mail list - list monitored accounts"); 113 Irssi::print("/mail list <user\@host> - list ALL messages in mailbox"); 114 Irssi::print("\n%WNote:%n Passwords are kept in irssi's memory in %Wplain text%n, and the password will also remain in the command history. The POP3 authorization is currently also plain text.\n"); 115 Irssi::print("Check interval and POP3 login timeout are controlled with %W/set pop3_interval%n (default: 60 seconds) and %Wpop3_timeout%n (default: 30 seconds)."); 116 } 117 118 119 120} 121 122 123Irssi::settings_add_int("misc","pop3_timeout",30); 124Irssi::settings_add_str("misc","pop3_interval","60"); 125Irssi::command_bind('mail', 'cmd_mail'); 126