Как открыть файлы Outlook msg с диска с помощью Perl и Win32 :: OLE

У меня есть каталог, полный файлов Outlook .msg, которые я хотел бы обработать. Обработка будет заключаться в открытии файла и сохранении вложений. Я успешно использовал Win32 :: OLE для обработки сообщений в папке Outlook, но это файлы на диске. Как я могу открыть файл msg на диске и обработать его с помощью Perl и Win32 :: OLE?

Ограничение: я работаю в среде, где мне не разрешено ничего устанавливать на машину. В частности, я не могу добавлять другие программы или модули Perl. Я застрял с модулями, которые поставляются со свежей установкой perl.

Вот что я пробовал:

use Win32::OLE;
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");

$File = Win32::GetFullPathName(".") . "\\" . "TestMessage.msg";
$msg  = $OL->Open($File);       ## Result is undefined

Приветствуются решения и / или ссылки.


person G5W    schedule 13.02.2017    source источник
comment
Показывает ли Win32 :: OLE- ›LastError () что-нибудь интересное?   -  person Georg Mavridis    schedule 14.02.2017
comment
@GeorgMavridis - Да! Я получаю Win32::OLE(0.1709) error 0x8002000e: "Invalid number of parameters" in METHOD/PROPERTYGET . Я постараюсь найти документацию по Open   -  person G5W    schedule 16.02.2017
comment
У кого-то есть решение этого?   -  person Mohit    schedule 17.04.2017
comment
@Mohit. Нет. Я пытался следить за сообщением об ошибке, но так и не получил рабочего примера.   -  person G5W    schedule 17.04.2017
comment
Но я смог это сделать   -  person Mohit    schedule 17.04.2017


Ответы (1)


Каким-то образом после некоторых исследований в Интернете я добрался до приведенного ниже кода, который выполняет мою работу по извлечению вложений из файла .msg, находящегося в моем локальном каталоге. Передайте путь .msg к $filename

my $msg = new Email::Outlook::Message $filename;
my $data = $msg->to_email_mime;
my $stripper = Email::MIME::Attachment::Stripper->new($data);
for my $a ($stripper->attachments()) {
    my $file = $a->{filename};
    open my $fh, '>', $file or die $!;
    print $fh $a->{payload};
    close $fh;
    chmod 0644, $file;
}
person Mohit    schedule 17.04.2017
comment
Спасибо за ваш ответ. Похоже, это может быть полезно для большинства людей, но, к сожалению, для меня это решение не сработает. Как я сказал в части своего вопроса, посвященной ограничениям, я не могу установить дополнительные модули Perl в своей рабочей среде. У меня есть модуль электронной почты, но нет электронной почты :: Outlook. - person G5W; 17.04.2017
comment
Извините, это очень плохая ситуация - привязываться к старым модулям, когда у нас есть новые. - person Mohit; 17.04.2017