Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Getting message body structure

by saurabh.hirani (Beadle)
on May 20, 2009 at 15:54 UTC ( [id://765265]=perlquestion: print w/replies, xml ) Need Help??

saurabh.hirani has asked for the wisdom of the Perl Monks concerning the following question:

Hi guys,

I am writing a sub which takes in a email message string as input and decides whether to send it or not depending upon certain parameters like message size, attachments types and their sizes, etc.

I know that in order to determine the exact size of the message I will have to decode the attachments for which I need to parse it through MIME::Parser. But I wanted to achieve a simple first round elimination by looking at the sender addr, rcpt addr, attachment types (not their sizes) and if the message satisifies these constraints, create a MIME::Parser object

The reason is to delay decoding of message attachments as it would be an expensive operation for heavy attachments. I have done this before on an IMAP mailbox using Mail::IMAPClient::BodyStructure which gives me a data struct representing the body of the message. But it internally parses an IMAP command output which is not useful here.

Is there a Perl Module which can give me the header and body of the message in a parseable data structure without decoding the attachments?

Replies are listed 'Best First'.
Re: Getting message body structure
by John M. Dlugosz (Monsignor) on May 20, 2009 at 16:14 UTC
    Isn't the header just there? Start reading lines.
Re: Getting message body structure
by skx (Parson) on May 20, 2009 at 19:55 UTC
      Thanks for your feedback. I had considered using Email::Simple. That would solve checking against header entities like from, to, subject, etc. But I also wanted to check if the message contains any of the restricted attachments defined in the configuration. So in my quest for the determining structure of email message cheaply, I also looked at the following:
      1. Email::MIME (thinking it to be lighter than MIME::Parser)
      2. MIME::Structure (the name suggests the ideal solution)

      But both of these modules do not drill down into message/rfc822 headers i.e. if I write an email with a covering note and an image attachment, these modules will show that my email contains - text/plain and image/gif, which is what I want.

      But if I forward this mail to someone with a covering note then they should show - text/plain, message/rfc822 and its children - text/plain and image/gif from the original msg. But they show - text/plain and message/rfc822 - they don't drill down into message/rfc822.

      And yes, I did call the sub parsing the message recursively for message/rfc822. But then I dumped the object hash of these modules and saw that they stop drilling once they hit the message/rfc822 header. I don't know if it is a design decision but it doesn't help me.

      So I am going to do the following - for checking against headers use Email::Simple which benchmarks (using Benchmark module) to be much faster than the same check using MIME::Parser. And for checking attachment names and their mime types, I have no choice but to resort to MIME::Parser.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://765265]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (1)
As of 2024-04-18 23:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found