使用Perl从Exchange邮件下载附件

时间:2014-04-15 11:55:13

标签: perl download exchange-server

我通过perl自动从Exchange 2010服务器下载邮件。到目前为止,我已设法通过Exchange Web服务(EWS)和解析标头访问该邮件。现在我想知道如何将邮件的附件下载到本地临时文件夹。

我是Perl语言的新手,无法找到消息数据结构的源代码或文档。任何帮助表示赞赏。

use Email::Folder::Exchange;
use Email::Simple;

# some more code here....

my $folder = Email::Folder::Exchange->new($url, $user, $pass);

for my $message ($folder->messages) {
    if ($message->header('Subject') =~ /Downloadable Message/) {
        // How to access message's attachments?
    }
}

1 个答案:

答案 0 :(得分:1)

所以基本上诀窍是将Email :: Simple转换为Email :: MIME并使用Email :: MIME :: Attachment :: Stripper来解析每个附件。容易; - )

!我只复制了相关的部分......因此您可能需要将其扩展一点以便重复使用。

use Email::Folder::Exchange;
use Email::Simple;
use Email::MIME::Attachment::Stripper;

# some more code here....

my $folder = Email::Folder::Exchange->new($url, $user, $pass);

for my $message ($folder->messages) {
    my $tmpMsg = Email::MIME->new($message->as_string);
    my $stripper = Email::MIME::Attachment::Stripper->new($tmpMsg);

    for my $a ($stripper->attachments()) {
        next if $a->{'filename'} !~ /csv/i; #only csv attachments
        my $tempdir = "C:\\temp\\";
        my $tmpPath = $tmpdir . $a->{'filename'};


        # Save file to temporary path
        my $f = new IO::File $tmpPath, "w" or die "Cannot create file " . $tmpPath;
        print $f $a->{'payload'};
    }
 }