加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl:Win32 :: OLE和Microsoft Outlook – 有效地通过电子邮件

发布时间:2020-12-15 21:45:31 所属栏目:大数据 来源:网络整理
导读:我是一个实习生,对此很新… 我的老板每周一收到一封带有两个附件的电子邮件,他必须将其变成维基代码并将其放在我们的内部网站上.由于要转移的信息量,该过程每周一大约需要20分钟.我被要求简化这个过程. 我有代码将解析文件并将其分解为组件,我有代码从他的收
我是一个实习生,对此很新…

我的老板每周一收到一封带有两个附件的电子邮件,他必须将其变成维基代码并将其放在我们的内部网站上.由于要转移的信息量,该过程每周一大约需要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-> {Items}?Foreach以外的其他东西?将$folder-> {Items}转储到另一个可以撤销的对象中?只需跳过数千封电子邮件,直到日期在过去2周内?(I虽然不喜欢那个))

谢谢.

解决方法

您从包Win32 :: OLE导入in子例程.这可能是一些可怕的“语法糖”.而且非常不合时宜.我想它从Win32 :: OLE对象$Folder返回某种列表.试试这个:
foreach my $msg (reverse $Folder->{items}->in)

要么

foreach my $msg (reverse in($Folder->{items}))

此外,请务必在每个脚本中使用严格和使用警告,以确保高质量的代码.如果您可以确定将使用现代perl,您还可以使用v5.10并享受say功能 – 它的行为类似于打印,但会自动为您的输出添加换行符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读