Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re^6: Reading msg file

by monkee (Initiate)
on Oct 21, 2019 at 18:22 UTC ( #11107777=note: print w/replies, xml ) Need Help??

in reply to Re^5: Reading msg file
in thread Reading msg file

I am having a problem printing the filename on a condition.

I have successfully run the following code, which prints the entire two emails that are contained in the folder.

<br>use strict; <br>use warnings; <br>use Email::Outlook::Message; <br> <br>for my $filename ( glob("C:/path/to/folder/with/email/files/*.msg" +) ) { <br> <br> my $msg = new Email::Outlook::Message $filename; <br> my $mime = $msg->to_email_mime; <br>print $mime->as_string; <br>}

What I'd like PERL to do is read the file, search the body for the work "training", then print the name of the file only if the body contains the keyword.

One email contains the keyword and the other doesn't. Let's say the file names are "email 1.msg" and "email 2.msg". The first contains the work "training" in the body, the other doesn't. I want PERL to print only "email 1.msg" because it contains the keyword.

Seems I need to use an IF statement and =~/commit/ somewhere.

Note: the larger application will be to search thousands of emails within a folder.

Discipulus fixed code tags

Replies are listed 'Best First'.
Re^7: Reading msg file
by Corion (Pope) on Oct 21, 2019 at 18:50 UTC
    my $body = 'this is a test email. It contains the word training in its + second sentence.'; if( $body =~ /training/ ) { print "The body contains the word 'training'\n"; };

      What if emails are in a folder? The following code works if searching within folder with .txt files, but it does NOT work if searching for .msg files.

      use strict; use warnings; use Email::Outlook::Message; my @files = glob "C:/test_path/*"; foreach my $file (@files) { open (FILE, "$file"); while(my $line= <FILE> ){ print "$file" if $line =~ /training/; } close FILE; }

      Do I need the following 3 lines when working with .msg files, and where would I put these?

      my $msg = new Email::Outlook::Message $file; my $mime = $msg->to_email_mime; $mime->as_string;
        Essentially, how do I do a keyword search in a .msg file? It is not working the same way as with .txt files.

        Do I need to search $mime after the line $mime->as_string?

        Is there another package that I should be using instead of / in addition to Email::Outlook::Message?

        I really appreciate the help, as I am brand new to PERL and this assignment is the sole reason I'm trying to learn, to automate some super manual text mining through .msg files at my work. Thanks!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11107777]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (5)
As of 2020-01-28 22:30 GMT
Find Nodes?
    Voting Booth?