Just Thinking

Fourth Woods Blog

Can’t call method “bodyhandle” on an undefined value

Posted on 20 April, 2012  in Perl, Programming

I’ve recently been seeing and increase in spam emails for my fourthwoods.com accounts. I started playing with a perl script to process the spam messages to feed to SpamAssassin. When I finish it I’ll post an article on here describing what I did and why. Hopefully it will be helpful to somebody.

Anyway, this was the first I used the MIME::Parser and related perl classes so I muddled my way through following some examples and reading the perl documentation. I did run across an error that wasn’t immediately obvious what was causing it. According to the examples, I was doing everything correctly. However, I ran into the following:

Can't call method "bodyhandle" on an undefined value at foo.pl line XX.

Ok, so I’m parsing a multipart message following along with this example and every time I try to access the bodyhandle I get the error. WTF?? My code isn’t that much different from the example. If I iterate through all the parts the data is there, so why no bodyhandle?

Digging through the documentation for bodyhandle “An entity will have either a body or parts: not both.” Aha! Ok, so when will there be parts and when will there be a bodyhandle? Well, it depends on the mime-type and whether or not the parser is set up to extract nested messages. In my case I’m concerned with mime-type “message/rfc822” which according to the table, if the parser is configured to extract nested messages the nested messages are parsed and put into an array of MIME::Entity objects returned by the parts method. If the parser is not to extract nested messages, they are placed into a MIME::Body object returned by bodyhandle.

For the MIME::Parser, according to the documentation for the extract_nested_messages option it defaults to true which causes my issue. To prevent extraction of nested messages and instead get a valid bodyhandle, extract_nested_messages must be set to false or 0.

In the example that I was following they do not ever set this option to false however, they also do not seem to be particularly interested in my specific case. I did see that sal-wrapper.pl does in fact set this option so I know I’m not nuts!

, , , , , , ,

0 thoughts on“Can’t call method “bodyhandle” on an undefined value

Leave a Reply

Your email address will not be published. Required fields are marked *