http://qs321.pair.com?node_id=164458


in reply to Win32 - M$ Outlook and Perl.

This is a bit ugly but should get you started.
#!/cygdrive/c/Perl/bin/perl.exe use strict; use warnings; use Win32::OLE; use Win32::OLE::Const 'Microsoft Outlook'; $|++; #what properties do we want to get from Outlook? my @properties = ( "SenderName", "To", "Subject", "Body" ); #get an Outlook object my $outlook; $outlook = Win32::OLE->new('Outlook.Application'); die unless $outlook; #get the Inbox folder my $namespace = $outlook->GetNamespace("MAPI"); my $folder = $namespace->GetDefaultFolder(olFolderInbox); my $items = $folder->Items; print STDERR "Folder: ", $folder->Name,"\n"; print STDERR "Total entries: ",$items->Count,"\n"; #print out the header print join(",",@properties),"\n"; #loop through the items, printing out each one for my $itemIndex (1..$items->Count) { my $message = $items->item($itemIndex); next if not defined $message; my $attach = $message->Attachments(); my @entry; #todo: the following line causes warnings on "Read:" read receipt +messages push @entry, defined($message->{$_}) ? $message->{$_} : 'undef' fo +reach (@properties); if (defined $attach) { #if there's attachments, print out the message info and save t +he attachments print join(",",@entry),"\n"; print "Attachment count == ",$attach->Count,"\n"; for my $attach_index (1..$attach->Count) { my $attachment = $attach->item($attach_index); my $filename = $attachment->Filename; print "Attachment == ",$filename,"\n"; my $saveas = 'c:\temp\foo'; print "saving attachment '$filename' to '$saveas'...\n"; $attachment->SaveAsFile($saveas); warn "error saving attachment $filename to $saveas" if !-e + $saveas; } } }

Replies are listed 'Best First'.
Re: (RhetTbull) Re: Win32 - M$ Outlook and Perl.
by Mr. Muskrat (Canon) on May 06, 2002 at 22:07 UTC

    Very nice.
    But I'd change the following: my $saveas = 'c:\temp\foo';
    to: my $saveas = "c:/temp/foo/".$filename;
    so you don't overwrite the attachments. Of course, you may have wanted to do that.


    Matthew Musgrove
    Who says that programmers can't work in the Marketing Department?
    Or is that who says that Marketing people can't program?
      Actually, that was just for demonstration purposes. I realized I was overwriting 'foo' but then again, I don't name anything I intend to keep 'foo' ;-)
Re^2: Win32 - M$ Outlook and Perl.
by Anonymous Monk on May 24, 2011 at 03:38 UTC
    RhetTbull , you rock man !! thanks a lot. this code eased my task very much ...
Re^2: Win32 - M$ Outlook and Perl.
by ttdri1 (Initiate) on May 11, 2005 at 06:16 UTC
    Who do I read mail in subfolders: inbox/subfolder
      This will recursively print out the names of all subfolders in Inbox. You could combine this with the code above to get the messages in each subfolder.
      use strict; use warnings; use Win32::OLE; use Win32::OLE::Const 'Microsoft Outlook'; $|++; #get an Outlook object my $outlook; $outlook = Win32::OLE->new('Outlook.Application'); die unless $outlook; #get the Inbox folder my $namespace = $outlook->GetNamespace("MAPI"); my $folder = $namespace->GetDefaultFolder(olFolderInbox); my $items = $folder->Items; print STDERR "Folder: ", $folder->Name,"\n"; print STDERR "Total entries: ",$items->Count,"\n"; print_folders($folder); sub print_folders { my $folder = shift; print "Folder: " . $folder->Name . "\n"; if ($folder->Folders->Count) { foreach my $i (1..$folder->Folders->Count) { print_folders($folder->Folders($i)); } } }
        What if a new folder (not a subfolder) is created by the user just like Inbox ?