This works, and doesn't work - at the same time.

I think an explanation is due after a statement like that, so here goes:

Take this code:

#!/usr/bin/perl use Email::MIME; $file = shift; $which = shift; ############################## # $which is: # text = plain text portion # html = html portion ############################## local( $/, *FILE ) ; open(FILE, $file); $message = <FILE>; close(FILE); my $parsed = Email::MIME->new($message); if ($parsed->content_type =~ m{^multipart/alternative}) { print get_text_parts($parsed)->body; } sub get_text_parts { my @parts = shift->parts; my %ct; $ct{$_->content_type} = $_ for @parts; return $ct{'text/plain'} if exists $ct{'text/plain'}; return $ct{'text/html'} if exists $ct{'text/html'}; return $parts[0] if $which =~ /text/; return $parts[1] if $which =~ /html/; }

And also take this input:

Content-Type: multipart/alternative; boundary="_000_200907060005UAA14932pisas291mscom88clm_" MIME-Version: 1.0 --_000_200907060005UAA14932pisas291mscom88clm_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable line1 line2 line3 --_000_200907060005UAA14932pisas291mscom88clm_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <p>blah</p> <p>blah2</p> --_000_200907060005UAA14932pisas291mscom88clm_-- --_004_38D25DCAD7370B4FACA079E2FAA2C690B02CB5NYWEXMB24msadmsco_--

When you run it, the results are as follows (this is the "WORKS" part):

$ ./grab.pl mime4 text line1 line2 line3 $ ./grab.pl mime4 html <p>blah</p> <p>blah2</p> $

Now, what does NOT work is that as I said in my original request - sometimes the plain text mime can be on top, sometimes its on the bottom. using this code, if you switch the two mimes around it doesn't work. try switchign them around, and tell the code to give you the html portion. it'll give you the plain text portion instead.

Is there any way to specifically request a html or text portion (so it doesn't matter what order the MIMEs are in the input), to your knowledge?


In reply to Re^4: MIME voodoo. by vxp
in thread MIME voodoo. by vxp

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.