Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: Modifying MIME messages with MIME-Tools

by rob_au (Abbot)
on Nov 08, 2004 at 10:49 UTC ( #406022=note: print w/ replies, xml ) Need Help??


in reply to Modifying MIME messages with MIME-Tools

Modifying MIME components with MIME-Tools is not at all impossible - Although I cannot copy and paste code directly from existing code in which I have implemented this functionality using MIME-Tools (as it corporate code), I should be able to provide some example code (see below) to help you in your task.

# The variable $entity contains a MIME::Entity object returned from +MIME::Parser # and from this object, a MIME::Body object is retrieved for content + manipulation. my $body = $entity->body; my $content = $body->as_string; # The content of the MIME component can now be modified as you see f +it $content =~ s/foo/bar/g; # The updated content must now be written back into the MIME message + component - # This is performed through manipulation of the MIME::Body object. my $io = $body->open('w'); $io->print( $content ) $io->close; # At this point, you may need to re-synchronise the headers of the M +IME::Entity # object - This method will add or update a Content-Length header wi +thin the # MIME component. $entity->sync_headers( 'Length' => 'COMPUTE', 'Nonstandard' => 'ERASE' );

 

perl -le "print unpack'N', pack'B32', '00000000000000000000001011110000'"


Comment on Re: Modifying MIME messages with MIME-Tools
Download Code
Replies are listed 'Best First'.
Re^2: Modifying MIME messages with MIME-Tools
by skazat (Hermit) on Nov 09, 2004 at 22:06 UTC

    Rob,

    Thanks for given me that to go on! I think I've cracked it! I did have to tweak your code to the following to make it work with my setup:

    # The variable $entity contains a MIME::Entity object returned from +MIME::Parser # and from this object, a MIME::Body object is retrieved for content + manipulation. my $body = $entity->bodyhandle; my $content = $body->as_string; # The content of the MIME component can now be modified as you see f +it $content =~ s/foo/bar/g; # The updated content must now be written back into the MIME message + component - # This is performed through manipulation of the MIME::Body object. my $io = $body->open('w'); $io->print( $content ) $io->close; # At this point, you may need to re-synchronise the headers of the M +IME::Entity # object - This method will add or update a Content-Length header wi +thin the # MIME component. $entity->sync_headers( 'Length' => 'COMPUTE', 'Nonstandard' => 'ERASE' );

    basically, the line that says,

    my $body = $entity->body; Needed to be:

    my $body = $entity->bodyhandle;

     

    -justin simoni
    !skazat!

Re^2: Modifying MIME messages with MIME-Tools
by skazat (Hermit) on Nov 09, 2004 at 22:13 UTC

    OK!

    Here's my Proof of Concept to edit specific MIME types in a MIME Message. This example will only tweak parts that are in text/plain. How to exactly edit the mime part was graciously given by rob_au, all that had to after that was to create a recursive subroutine that would then reconstruct everything tweaked!

    #!/usr/bin/perl -w use strict; use MIME::Parser; use MIME::Entity; my $parser = new MIME::Parser; $parser->output_to_core(1); #so here's our test MIME thingy: my $test = MIME::Entity->build(Type => "multipart/alternative", From => 'me@myhost.com', To => 'you@yourhost.com', Subject => "Test Test Test"); $test->attach(Type => "text/plain", Data => "This is the plain text stuff" ); $test->attach(Type => "text/html", Data => "<h1>This is the HTML stuff</h1>" ); # Let's print the, "Before" print $test->as_string(); $test = tweak_plain_text($test); print "\n\nAnd After...\n\n\n"; print $test->as_string(); sub tweak_plain_text { my $entity = shift; my @parts = $entity->parts; if(@parts){ my $i; foreach $i (0 .. $#parts) { $parts[$i]= tweak_plain_text($parts[$i]); } $entity->sync_headers('Length' => 'COMPUTE', 'Nonstandard' => 'ERASE'); }else{ if($entity->head->mime_type eq 'text/plain'){ my $body = $entity->bodyhandle; my $content = $body->as_string; $content .= "\nThis has been tweaked!!!!\n"; my $io = $body->open('w'); $io->print( $content ); $io->close; $entity->sync_headers('Length' => 'COMPUTE', 'Nonstandard' => 'ERASE'); } return $entity; } my $content = $entity->as_string; return $entity; }

    Thanks everyone for the help!

     

    -justin simoni
    !skazat!

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (9)
As of 2015-07-08 08:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (98 votes), past polls