Perl: Win32 :: OLE и Microsoft Outlook - Эффективная перебор вложений электронной почты

Я стажер и очень новичок в этом ...

Мой босс получает электронное письмо с двумя приложениями каждый понедельник, которое он должен превратить в вики-код и разместить его на нашем внутреннем веб-сайте. Процесс занимает около 20 минут каждый понедельник из-за объема передаваемой информации. Меня попросили упростить этот процесс.

У меня есть код, который будет анализировать файл и разбивать его на компоненты, и у меня есть код, чтобы извлечь все вложения из его папки «Входящие».

Проблема, с которой я сталкиваюсь, заключается в том, что мой сценарий начинается с самого старого электронного письма. Это не большая проблема, но это заставляет скрипт работать намного дольше, чем нужно.

#!/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);
}

Способ, которым это настроено прямо сейчас, поскольку он был самым старым или самым новым, предназначен для поиска файлов, а затем просто их замены, если он находит более новый (хотя я удалил эту функцию). Реально я мог просто найти самые новые и остановиться.

Я не знаю, как поменять $ Folder- & gt; {Items}. Я даже не понимаю, что это такое. Когда я делаю ref ($ Folder- & gt; {Items}), он говорит, что это Win32 :: OLE, что мне очень не помогло, так как документация для Win32 :: OLE, кажется, просто показывает, что это может быть сколько угодно.

Любые идеи, как я могу получить в новые письма в первую очередь? (Обращение $ Folder- & gt; {Items}? Что-то, кроме Foreach? Выгрузка $ folder- & gt; {Items} в другой объект, который можно перевернуть? Просто пропустите тысячи электронных писем, пока дата не окажется в течение последних 2 недель? ( не нравится этот хотя))

Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос