I had serious issues using Win32::OLE to access Outlook.  Memory usage was 
outrageous.  I found the CDO library to be much easier to use and much lighter 
on the resources.  It's been a while since I've dug into it, but I believe it 
has the ability to access any folder within Outlook, either based on an already 
existing Outlook instance, or by creating it's own.  You have to change the 
threading model in the registry (under MAPI.Session) to be "Apartment" I 
believe, otherwise the CDO library doesn't work correctly (although this may 
have been specific to the version I was using).
 
The code below is snippets from my script, it won't work as is.
 
Jeremy Blonde
 
 
Win32::OLE->Initialize(Win32::OLE::COINIT_OLEINITIALIZE);
#$Win32::OLE::Warn = 0;
my($SESSION) = Win32::OLE->new('MAPI.Session'); # Session Object
 
my($profile) = "$server\n"."$MAILBOX";
 
my($session, $profile) = @_;
# Logon using the specified $profile
print "Logging on...";
 
${$session}->Logon("","",0,1,0,0,${$profile});
 
my $infostore = ${$session}->GetInfoStore();
if (!$infostore) {
  print "unsuccessful!\n";
  Logoff(\${$session});
  return;
}
  
print "  Scanning $infostore->{Name}\n";
# Get the RootFolder    
${$rootfolder} = $infostore->RootFolder();

# Get the folders collection
my($folders) = ${$parent}->Folders();  

# Get the first folder in the collection
my($folder) = $folders->GetFirst();   

while ($folder) {
  # Skip the Journal since it doesn't hold attachments
  if ($folder->{Name} eq "Journal") {
    $folder = $folders->GetNext();
    next;
  }
 
my($folderName) = $folder->{Name};
 
# Recurse through any sub-folders
if ($folder->Folders->Count()) {
   Scan_Folder(\$folder);
}
    
# Scan through the e-mail messages in the folder
if ($folder->Messages->Count()) {
  print "  Scanning: $folderName...\n";   
  Scan_Messages(\$folder);
}
 
Thanks,
Jeremy Blonde 
Network Technician 
Davis Joint Unified School District 
530.757.5300 ext. 117 
-----Original Message-----
From: Ounsted, Toby [mailto:[EMAIL PROTECTED]
Sent: Friday, October 17, 2003 7:19 AM
To: '[EMAIL PROTECTED]'
Cc: Perl-Win32-Gui-Users (E-mail)
Subject: RE: [perl-win32-gui-users] Outlook - list all folders


Adapted from a similar script by Rob Hanson on perl-win32-users - hope this 
helps.
 
use strict;
use Win32::OLE;
 
# use existing instance if Outlook is already running, or launch a new one
my $ol;
eval {$ol = Win32::OLE->GetActiveObject('Outlook.Application')};
die "Outlook not installed" if $@;
unless (defined $ol) {
  $ol = Win32::OLE->new('Outlook.Application', sub {$_[0]->Quit;})
    or die "Oops, cannot start Outlook";
}
 
my $mailbox = seekFolder($ol->Session, 'Mailbox - Doe, John');
 
listFolders($mailbox);
 
sub seekFolder {
  my $obj = shift;
  my $target = shift;
 
  for (my $i = 1; $i <= $obj->Folders->Count; $i++) {
    if ( $obj->Folders->Item($i)->Name eq $target ) {
      return $obj->Folders->Item($i);
    }
  }
}
 
 
sub listFolders {
            my $parent = shift;
            for (my $t = 1; $t <=$parent->Folders->Count;$t++){
            print $t . ": " . $parent->Folders->Item($t)->Name . "\n";
            }
}
 
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: 17 October 2003 13:37
To: perl-win32-gui-users@lists.sourceforge.net
Subject: [perl-win32-gui-users] Outlook - list all folders
 
 
Does anyone have any examples of how to list all the folder names for a 
particular Outlook profile? 
I'm looking at using Win32::OLE but can't figure out how to list ALL folder 
names. 
Any help would be appreciated. 
Thanks! 
------------------------------------------------------------
This e-mail may be privileged and/or confidential, and the sender does not 
waive any related rights and obligations. Any distribution, use or copying of 
this e-mail or the information it contains by other than an intended recipient 
is unauthorized. If you received this e-mail in error, please advise me (by 
return e-mail or otherwise) immediately. 

Ce courrier électronique est confidentiel et protégé. L'expéditeur ne renonce 
pas aux droits et obligations qui s'y rapportent. Toute diffusion, utilisation 
ou copie de ce message ou des renseignements qu'il contient par une personne 
autre que le (les) destinataire(s) désigné(s) est interdite. Si vous recevez ce 
courrier électronique par erreur, veuillez m'en aviser immédiatement, par 
retour de courrier électronique ou par un autre moyen.

============================================================

Reply via email to