我在使用Perl匹配.msg文件时遇到麻烦。第一段代码可以打印整个消息,但是如果文件名包含某个字符串,我只需要它即可。
use warnings;
use strict;
use Email::Outlook::Message;
use Email::MIME;
my $sourceDir = "c:/temp";
open_msg("test.msg");
sub open_msg {
my $verbose = 0;
my $msgFile = shift;
my $origMsg = new Email::Outlook::Message "$sourceDir/$msgFile", $verbose or die "$!";
my $mime = $origMsg->to_email_mime;
print $mime->as_string;
return ($origMsg);
}
.msg文件位于文件夹中(在Windows中)。我已经使用下面的代码来打印.txt文件的文件名,但是我需要对.msg文件使用类似的内容。
#works for .txt files
my @files = glob "C:/temp";
foreach my $file (@files) {
open (FILE, "$file");
while(my $line= <FILE> ){
print "$file" if $line =~ /test_string/;
}
close FILE;
}
谢谢!
答案 0 :(得分:1)
我没有任何便于测试的.msg
文件,但是如何替换此行:
print $mime->as_string;
...带有这样的声明?
print $mime->as_string if $mime->as_string =~ /test_string/;
就“打印包含test_string的内容”而言,这应该可以解决问题。
如果您还想遍历*.msg
文件的整个列表,请尝试以下操作:
my @files = glob "C:/temp";
foreach my $file (@files) {
open_msg($file);
}