Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^5: Reading msg file

by Corion (Pope)
on Oct 21, 2019 at 07:18 UTC ( #11107747=note: print w/replies, xml ) Need Help??


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

You don't show any code, so it is hard for us to give you concrete advice.

Please tell use where exactly you have problems:

Do you have a problem finding the mail body?

Do you have a problem finding the keyword ("training") in your case?

Do you have a problem printing the filename on a condition?

The best approach is to reduce your code to something relevant, self-contained and short (http://sscce.org) and post that code. This allows us to reproduce your situation and give you concrete advice towards your next goal.

Replies are listed 'Best First'.
Re^6: Reading msg file
by monkee (Initiate) on Oct 21, 2019 at 18:22 UTC

    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

      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;

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (7)
As of 2019-11-19 12:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Strict and warnings: which comes first?



    Results (95 votes). Check out past polls.

    Notices?