Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re^3: Reading msg file

by 2teez (Vicar)
on Sep 02, 2014 at 09:44 UTC ( #1099237=note: print w/replies, xml ) Need Help??

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

..The module Email::Outlook::Message can be used if I am trying to read mail in the outlook. But the mails will be saved in a folder..
Email::Outlook::Message, also parse mail when you are not reading from your Outlook mail directly. i.e with your mails saved in a folder on your local drive.

#!/usr/bin/perl -Wl use strict; use Email::Outlook::Message; for my $filename ( glob("$ARGV[0]*") ) { ## tell the filename reading print 'Filename: ', $filename; my $msg = new Email::Outlook::Message $filename; my $mime = $msg->to_email_mime; print $mime->as_string; }
NOTE: I didn't link the Email::Outlook::Message, I only outlined it here. Others in this thread had it linked already.
And of course, your folder which contain these msg files must be the given from the CLI.

If you tell me, I'll forget.
If you show me, I'll remember.
if you involve me, I'll understand.
--- Author unknown to me

Replies are listed 'Best First'.
Re^4: Reading msg file
by monkee (Initiate) on Oct 20, 2019 at 21:48 UTC
    Hi, how could I tailor this code to print $filename only if the email body contains a certain keyword, such as "training"?

      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 ( and post that code. This allows us to reproduce your situation and give you concrete advice towards your next goal.

        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

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (3)
As of 2020-11-01 02:07 GMT
Find Nodes?
    Voting Booth?
    My favourite web site is:

    Results (291 votes). Check out past polls.