Я стажер и совсем новичок в этом...
Мой босс каждый понедельник получает электронное письмо с двумя вложениями, которые он должен преобразовать в вики-код и разместить на нашем внутреннем веб-сайте.Процесс занимает примерно 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 -> {Items}. Я даже не понимаю, что это такое. Когда я делаю ref ($Folder ->{Items}, он говорит, что это Win32 ::OLE, что мне мало помогло, так как документация для Win32 ::OLE, кажется, просто показывает, что это может быть любое количество вещей.
Любые идеи, как я могу сначала добраться до новых писем? (Реверс $Folder ->{Элементов}? Что-то кроме Foreach? Сброс $folder ->{Items} в другой объект, который можно отменить? Просто пропустить тысячи писем, пока дата не будет в пределах последних 2 недель? (Хотя это мне не нравится))
Спасибо.