Perl: Win32 :: OLE und Microsoft Outlook - Effizientes Durchlaufen von E-Mail-Anhängen

Ich bin ein Praktikant und sehr neu in diesem ...

Mein Chef bekommt jeden Montag eine E-Mail mit zwei Anhängen, die er in Wiki-Code umwandeln und auf unsere interne Website stellen muss. Aufgrund der zu übertragenden Informationen dauert der Vorgang jeden Montag ca. 20 Minuten. Ich wurde gebeten, diesen Prozess zu optimieren.

Ich habe Code, der die Datei analysiert und in Komponenten aufteilt, und ich habe Code, um alle Anhänge aus seinem Posteingang zu holen.

Das Problem ist, dass mein Skript bei der ältesten E-Mail beginnt. Dies ist kein großes Problem, führt jedoch dazu, dass das Skript viel länger als erforderlich ausgeführt wird.

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

Die Art und Weise, wie dies im Moment eingerichtet ist, soll die Dateien finden und sie dann ersetzen, wenn sie eine neuere finden (obwohl ich diese Funktionalität entfernt habe). Realistisch konnte ich nur die neuesten finden und aufhören.

Ich habe keine Ahnung, wie ich $ Folder -> {Items} umkehren soll. Ich verstehe nicht mal was es ist. Wenn ich ref ($ Folder -> {Items} mache, heißt es, dass es sich um ein Win32 :: OLE handelt, was mir nicht viel geholfen hat, da die Dokumentation für Win32 :: OLE nur zu zeigen scheint, dass es sich um eine beliebige Anzahl von Dingen handeln könnte.

Irgendwelche Ideen, wie ich zuerst zu den neueren E-Mails kommen kann? ($ Folder umkehren -> {Items}? Etwas anderes als Foreach? $ Folder ausgeben -> {Items} in ein anderes Objekt, das rückgängig gemacht werden kann? Überspringen Sie einfach Tausende von E-Mails, bis das Datum innerhalb der letzten 2 Wochen liegt. (I don ' aber das gefällt mir nicht))

Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage