Perl: Win32 :: OLE i Microsoft Outlook - skutecznie iteruje za pomocą załączników e-mail

Jestem stażystą i bardzo nowy w tym ...

Mój szef dostaje e-mail z dwoma załącznikami w każdy poniedziałek, który musi zamienić w kod wiki i umieścić na naszej wewnętrznej stronie. Proces trwa około 20 minut w każdy poniedziałek ze względu na ilość informacji do przekazania. Zostałem poproszony o przesyłanie strumieniowe tego procesu.

Mam kod, który będzie analizować plik i rozbić go na komponenty, i mam kod, aby pobrać wszystkie załączniki z jego skrzynki odbiorczej.

Problem, z którym mam do czynienia, polega na tym, że mój skrypt zaczyna się od najstarszego e-maila. To nie jest ogromny problem, ale powoduje, że skrypt działa znacznie dłużej niż jest to konieczne.

#!/usr/bin/perl
use Cwd;
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Outlook';
use Win32::OLE::Variant;

my $OL = Win32::OLE->GetActiveObject('Outlook.Application') || Win32::OLE->new('Outlook.Application', 'Quit');
my $NameSpace = $OL->GetNameSpace("MAPI");
my $Folder = $NameSpace->GetDefaultFolder(olFolderInbox);
my $dir = cwd . "\\";
$dir =~ s/\//\\/g;
my $atch1, $file1, $atch2, $file2;

print ref($Folder->{Items}) . "\n";

foreach my $msg (in $Folder->{Items}){
    #print $msg->{CreationTime} . "\n";
    foreach my $atch (in $msg->{Attachments}){
        if($atch->{FileName} =~ m/.xls$/i){
            if($atch->{FileName} =~ /Name of attachment1/i){
                $atch1 = $atch;
                $file1 = $dir . "file1.xls";
            }
            if($atch->{FileName} =~ /Name of attachment2/i){
                $atch2 = $atch;
                $file2 = $dir . "file2.xls";
            }
       }
   }
}

if($atch1 && $atch2){
    print $file1 . "\n" . $file2 . "\n";
    $atch1->SaveAsFile($file1);
    $atch2->SaveAsFile($file2);
}

Sposób, w jaki jest teraz skonfigurowany, ponieważ był najstarszy i najnowszy, ma na celu znalezienie plików, a następnie ich zastąpienie, jeśli znajdzie nowszą (chociaż usunąłem tę funkcję). Realistycznie mogłem znaleźć najnowsze i przestać.

Nie mam pojęcia, jak odwrócić $ Folder -> {Items}. Nawet nie rozumiem, co to jest. Kiedy robię ref ($ Folder -> {Items}, mówi, że jest to Win32 :: OLE, co mi nie pomogło, ponieważ dokumentacja Win32 :: OLE wydaje się po prostu pokazywać, że może to być dowolna liczba rzeczy.

Jakieś pomysły, jak mogę najpierw dotrzeć do nowszych wiadomości e-mail? (Odwracanie $ Folder -> {Elementy}? Coś innego niż Foreach? Dumping $ folder -> {Elementy} do innego obiektu, który może zostać odwrócony? t tak jednak))

Dzięki.

questionAnswers(2)

yourAnswerToTheQuestion