use Win32::OLE; use Win32::OLE::Variant; use strict; my $app = Win32::OLE->GetObject("SomeProject.mpp") or die "Couldn't open project"; my $project = $app->{Projects}->Item(1); #### my $current_date = Variant(VT_DATE, $project->{CurrentDate}); #### my @overdue; foreach my $i ( 1 .. $project->{Tasks}->Count() ) { my $task = $project->{Tasks}->Item($i); my $finish = Variant(VT_DATE, $task->{Finish}); push @overdue, $task if $finish < $current_date && $task->{PercentComplete} < 100; } #### my %overdue; foreach my $task ( @overdue ) { foreach my $ri ( $task->{Resources}->Count() ) { my $resource = $task->{Resources}->Item($ri); push @{$overdue{$resource->{EMailAddress}}}, $task; } } #### use Mail::Mailer; foreach my $email ( keys %overdue ) { my $mailer = new Mail::Mailer(); $mailer->open(From => "Nag-o-Matic", To => $email, Subject => "Overdue tasks"); print $mailer "You are associated with the following overdue tasks:\n\n"; foreach my $task ( @{$overdue{$email}} ) { print $mailer '"', $task->{Name}, '" was due on ', $task->{Finish}, "\n"; } print "\nPlease send a status update to your Manager.\n"; $mailer->close(); }