perl outlook打印电子邮件标题的最后一个单词

时间:2014-12-12 01:53:53

标签: perl

我有一个与电子邮件主题行的一部分匹配的脚本,然后将电子邮件正文打印到输出文件以进行排序等,然后将电子邮件移动到子文件夹。  我想要做的是获取主题行的最后一个单词(这是一个名称),并理想地将该单词添加到电子邮件正文的每一行的末尾,这是我目前所拥有的,它成功打印了该电子邮件身体输出并移动它们。

<code>
#!/usr/bin/perl
use strict;
use warnings;
#use diagnostics;

use Win32::OLE;
use Win32::OLE::Const 'Microsoft Outlook';

my $filename = 'c:\\test.txt';
open( my $output_fh, ">", $filename ) or die $!;

my $outlook = Win32::OLE->new('Outlook.Application')
    or die "Failed Opening Outlook.";

my $namespace    = $outlook->GetNamespace("MAPI");
 my $folder = $namespace->Folders("inbox");
my $tofolder = $namespace->Folders("archive");
my $items        = $folder->Items;

foreach my $msg ( $items->in ) {
    if ( $msg->{Subject} =~ m/^test test test / ) {
    my @name = split(/ /, $msg);
        print $name[-1] . "\n";
        print {$output_fh} $msg->{Body};
        $msg->Move($tofolder );
    }
}

close($output_fh);
<code>

此警告显示为“Win32 :: OLE = HASH(0x2a9432c)”

<code>
 the Email subject lines will be 
 test test test micky
 test test test jony
 test test test dave
 test test test adam
so i would like the name added to each line of the email body

<code>

1 个答案:

答案 0 :(得分:1)

你的分裂似乎是错误的。

my @name = split(/ /, $msg);

应该不是

my @name = split(/ /, $msg->{Subject});

另外,我很想在第一个主题测试中进行捕获:

if ( $msg->{Subject} =~ m/^test test test (.*)/ ) {
    my $name = $1;
    print "$name\n";

另请注意,我没有使用。操作符 - 通常认为在双引号字符串中使用扩展更为甜蜜。