This works for me, season to taste:
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Outlook';
my $username="username"; # fix me
my $outlook = Win32::OLE->CreateObject("Outlook.Application");
OLEErrChk("Create Outlook Object");
my $namespace=$outlook->GetNameSpace("MAPI");
OLEErrChk("Get MAPI Namespace");
my $ol=Win32::OLE::Const->Load($outlook);
OLEErrChk("Loading Outlook Constants");
my $logon=$namespace->Logon($username);
OLEErrChk("Logging in");
my $folder=$namespace->Folders(4);
OLEErrChk("Opening Folders");
my $inbox=$folder->Folders("Inbox");
OLEErrChk("Get a handle to the Inbox");
my $i=1;
while (my $msg=$inbox->Items($i)) {
OLEErrChk("Got message id $i");
my @lines=split/\n/,$msg->Body;
my $skills=0;
my %data=();
LINE: for my $line (@lines) {
# do something with the message body..
}
my $subject=$msg->Subject;
if ($subject =~ /something/) {
# blah
}
$i++;
}
sub OLEErrChk {
my $oleaction=shift;
my $errNum=Win32::OLE->LastError;
if ($errNum != 0) {
die "$oleaction failed: $errNum\n";
}
}