2017-02-13 2 views
0

처리 할 Outlook .msg 파일로 가득 찬 디렉터리가 있습니다. 처리는 파일을 열고 첨부 파일을 저장하는 것입니다. 저는 Win32 :: OLE를 성공적으로 사용하여 Outlook 폴더에서 메시지를 처리했습니다. 하지만 디스크의 파일입니다. 디스크상의 msg 파일을 열고 펄과 Win32 :: OLE로 을 어떻게 처리 할 수 ​​있습니까?perl 및 Win32 :: OLE를 사용하여 디스크에서 Outlook msg 파일을 여는 방법

제한 사항 : 컴퓨터에 어떤 것도 설치할 수없는 환경에서 작업합니다. 특히 다른 프로그램이나 펄 모듈을 추가 할 수 없습니다. 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에 내 로컬 directory.Pass에 된 .msg 경로를 .msg 파일 존재에서 첨부 파일을 추출하는 내 작업을 수행하는 코드 아래에 도착 후 :: OLE-> LastError()는 흥미로운 것을 보여줍니다? –

+0

@ GeorgMavridis - 예! Win32 :: OLE (0.1709) 오류 0x8002000e : "METHOD/PROPERTYGET'에"매개 변수 개수가 잘못되었습니다. " . 나는 Open에서 문서를 추적하려고 시도 할 것이다 – G5W

+0

누군가가 이것에 대한 해결책을 가졌습니까 ?? – Mohit

답변

1

나는 어떻게 든 인터넷에서 몇 가지 조사가 $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

당신의 대답에 감사드립니다. 이것은 대부분의 사람들에게 유용 할 수 있지만, 불행히도이 솔루션은 저에게 도움이되지 않습니다. 내 질문에 ** 제한 ** 부분에서 말했듯이, 나는 내 작업 환경에서 추가적인 펄 모듈을 설치할 수 없다. 나는 Email 모듈을 가지고 있지만 Email :: Outlook은 가지고 있지 않다. – G5W

+0

죄송합니다. 새로운 모듈을 사용할 수있게되면 매우 오래된 상황에 빠지게됩니다. – Mohit