2017-02-13 83 views
0

我有一個目錄充滿了Outlook .msg文件,我想處理它。 處理將打開文件並保存附件。 我已成功地使用Win32 :: OLE來處理Outlook文件夾中的郵件, 但這些都是磁盤上的文件。我如何打開磁盤上的msg文件並使用perl和Win32 :: OLE處理它 ?如何使用perl和Win32從磁盤打開Outlook msg文件:: 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 

解決方案和或參考,將不勝感激。

+0

確實的Win32 :: OLE-> LastError()顯示有趣的東西? –

+0

@GeorgMavridis - 是的!我得到'Win32 :: OLE(0.1709)錯誤0x8002000e:「METHOD/PROPERTYGET'中的參數數量無效」 「。我會嘗試追查'打開'文檔' – G5W

+0

有人得到了這個解決方案? – Mohit

回答

1

我莫名其妙後在互聯網上一些研究,得到了下面的代碼,做我的工作在我的本地directory.Pass提取從目前.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; 
} 
+0

謝謝你的回答。這看起來對大多數人來說可能是有用的,但不幸的是,這種解決方案對我來說不起作用。正如我在我的問題的**限制**部分中所說的,我無法在我的工作環境中安裝額外的perl模塊。我有電子郵件模塊,但沒有Email :: Outlook。 – G5W

+0

對不起,這是一個非常糟糕的情況,當我們有新的可用時,會與舊模塊綁定。 – Mohit

相關問題