Accessing Outlook mail via Mail::Outlook
- From: jason_normandin@xxxxxxxxxxx (Jason Normandin)
- Date: Wed, 25 May 2005 14:34:26 -0400
Greeting.
I am trying to create a script that will search a user's outlook email and move any messages that mtahc a certain subject to a new folder. To accomplish this I found the Mail::Outlook module on CPAN that allows me to easily access the OLE Outlook calls via Win32::Ole.
My problem is this, the Mail::Outlook module does not have a specific method to move an email from one mailbox to another. I can display the email when my match occurs, but I cannot figure out how to move it.
Here is an example of my code that works just find to pop-up an display any messages in my mailbox that match :
use Mail::Outlook;
use strict;
# Open filehandle to Remedy report file
open (_TICKETS,'C:\TicketCounts\MyOpen.rep') or die "Cannot open C:\TicketCounts\MyOpen.rep : $!";
# Iterate through each line of the file
print "Obtaining list of open tickets from $remedyReportFile .... ";
while (<_TICKETS>){
# Add ticket number to array in csv format
push @myTickets, "$1" if m/CallT0000(\d+)/;
}
print " Ok.\n";
# Open an Outlook OLE connection
print "Opening connection to Outlook .... ";
my $outlook = new Mail::Outlook('') or die "Cannot create mail object\n";
# Change to the Support mail folder
my $folder = $outlook->folder('Inbox/Support') or die "Cannot create folder object\n";
# Read the 1st message
print " Ok.\n";
print "Searching messages for call ticket match .... " unless defined $bodyMatchString;
print "Searching messages for subject containing: call ticket matches and body containing: $bodyMatchString ... " if defined $bodyMatchString;
my $message = $folder->first();
# Iternate all messages in the folder
while ($message) {
# Strip the call ticket number out of the subject
my $callTicketNumber=$1 if $message->Subject() =~ m/CallT0000(\d+) /;
# If a call ticket number was found, compare against the user's open call tickets
if (defined $callTicketNumber) {
if ( (grep /$callTicketNumber/, @myTickets) ) {
$emailMatches++;
$message->Display;
}
}
}
Now, I want to change the $message->Display to a move operation. Searching the available OLE/COM Objects for Outlook via Microsoft's OLE/COM Viewer, I see that there is a move method for the mailItem CO class:
[id(0x0000f034), helpcontext(0x004de8b9)]
IDispatch* Move([in] MAPIFolder* DestFldr);
I tried editing the Outlook::Mesage.pm file (that stores the message display call) to add a call to this OLE method.
The 1st thing I did was to see if I could simply add a new su b to the PM file called moveMessage that in actually would simply display the messag the same way the display sub did:
sub moveMessage {
my ($self,%hash) = @_;
# pre-populate the fields, if hash
foreach my $field (@autosubs) {
$self->{$field} = $hash{$field} if($hash{$field});
}
# we need a basic message fields
return 0 unless($self->{To} && $self->{Subject} && $self->{Body});
# Build the message
$self->{message}->{To} = $self->{To};
$self->{message}->{Cc} = $self->{Cc} if($self->{Cc});
$self->{message}->{Bcc} = $self->{Bcc} if($self->{Bcc});
$self->{message}->{Subject} = $self->{Subject};
$self->{message}->{Body} = $self->{Body};
# Send the email
$self->{message}->Display();
return 1;
}
I thought this would be an easy 1st step, but come to find out, I am getting teh following error when I run this:
retrying default method at E:/Perl/site/lib/Win32/OLE/Lite.pm line 157, <_TICKETS> line 9.
Win32::OLE(0.1403) error 0x8002000e: "Invalid number of parameters"
in METHOD/PROPERTYGET "" at H:\outlook2.pl line 45
Now, I must confess that I am new to OLE and have limited exposure to Object Orientation. Can anyone point me in the right direction or show me some sample code that will move a message from one mailbox to another?
I have searched extensively for any existing code to do this, but all I have found are very limited and do not come close to accomplishing my goal.
I appreciate any help.
Thanks!
Jason
.
- Prev by Date: Re: @ISA and the paths in 'use libs'
- Next by Date: Re: while loop -> map
- Previous by thread: @ISA and the paths in 'use libs'
- Next by thread: How to upgrade local module using -MCPAN?
- Index(es):
Relevant Pages
|