Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
XP is just a number
 
PerlMonks  

Re^9: How to parse outlook type attachment from inbox

by perlCrazy (Monk)
on Sep 26, 2006 at 04:12 UTC ( [id://574873]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to Re^8: How to parse outlook type attachment from inbox
in thread How to parse outlook type attachment from inbox

Thanks for reply and your precious time.
I think you got fed up that is why you written "So here's my final attempt to explain it to you."
Any way thanks again, i got the solution, it is like this:
Store all attachment in directories then read all files one by one then do the regexp and find the hotmail addresses.
All attachment is .msg file so it becomes easy for me to identify.
I just want your opinion on this, is this solution good?
In future also there will be lot of emails will be keep coming and i need to parse those
attachment and then find the sender address. I am posting my code here.Regarding setting the flag 0 to below method extract_nested_messages, due to storing all attachment.If I set this to 1, then it doesn't stores my .msg attachment that is the main one and I need to extract header info from that only. If I set to 1 and then try to get entity->parts, it just says that mime type, whn i try to get the header info doesn't print anything. May be because i am doing something wrong or not calling the method properly. If u have time then pls. look into my code then advice. Thanks in advance.
#!/usr/bin/perl use strict; use Mail::POP3Client; use MIME::Parser; use MIME::Head; use Mail::Header; #usage() unless scalar @ARGV == 3; my $pop = new Mail::POP3Client( HOST => 'server', USER => 'my', PASSWORD => 'pass' ); my $tmp_directory = "/tmp/attach"; my $parser = new MIME::Parser; $parser->output_dir($tmp_directory); $parser->output_prefix("attachment"); $parser->output_to_core(); open (FH,">>/tmp/msgtxt1"); for (my $i = 1; $i <= $pop->Count(); $i++){ my $head = $pop->Head($i); if ($head =~ /X-MS-Has-Attach: yes/i){ foreach ( $pop->Head( $i ) ) { if( /^(Subject):\s+/i ) { if ( /complaint about message from/) { my $msg = $pop->HeadAndBody($i); ### Automatically attempt to RFC-1522- +decode the MIME headers? $parser->decode_headers(1); + ### default is false ### Parse contained "message/rfc822" o +bjects as nested MIME streams? $parser->extract_nested_messages(1); + ### default is true ### Look for uuencode in "text" messag +es, and extract it? $parser->extract_uuencode(1); + ### default is false ### Should we forgive normally-fatal e +rrors? $parser->ignore_errors(0); + ### default is true my $entity = $parser->parse_data($msg) +; #$entity->print_header() my $head = $entity->head; my $msg_summary = " Message Summar +y for message \n" . " From : " . $head->get('From') +. " To : " . $head->get('To') . " Subject: " . $head->get('Subject +') . " Date : " . $head->get('Date') +. "\n"; print " -- $msg_summary \n"; my @parts = $entity->parts; my $body; my @attachments; # If this is a single part message, we + should just append it # (To be handled later) unless( $entity->parts ){ # Single part. Just add it as a comment $body = $entity->stringify_bod +y; #print " -- $body \n"; } else { # Multi-part. # Assume the first part is the + comment body and any additional # parts are the attachments @attachments = $entity->parts; $body = $attachments[0]->strin +gify_body; } for my $attachment ( @attachments ) { my $headers = $attachment->hea +d; print " - $attachment->bodyhan +dle->as_string()\n"; #print " -- $attachment --- +\n"; } #$entity->dump_skeleton; ### Get the head, a MIME::Head: } } } # print "\n"; } } close(FH); $pop->Close(); my $dirtoget="/tmp/attach/"; opendir(IMD, $dirtoget) || die("Cannot open directory"); my @thefiles= readdir(IMD); foreach my $fl (@thefiles) { if ($fl =~ m/msg/){ &readFile($fl); } } sub readFile { my ($filename) = @_; $filename = $dirtoget.$filename; open(MSG,"$filename") || die ("Cannot Open File for Reading\n" +); while (<MSG>) { my $ln = $_; if ($ln =~ m/^To: /){ print $ln; } } close(MSG); }

Thanks in advance

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://574873]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.