Re: base64 to quoted-printable
Dianne Skoll <[email protected]> Fri, 13 Oct 2017 10:20:04 -0400
| Newsgroups | gmane.mail.mimedefang |
|---|---|
| Organization | Roaring Penguin Software Inc. |
| Message-ID | <[email protected]> |
On Fri, 13 Oct 2017 06:53:33 -0700 "Michael Fox" <[email protected]> wrote: > While I appreciate everyone's attempt to warn me that "there be > dragons", the facts are that the client is what it is, it serves > hundreds of people (in my location alone), and the problem needs > solving. OK. You will most likely have to do all your changes in filter_end. You'll need to traverse the MIME tree, looking for text/* parts. If any are Base-64 encoded, you'll need to load them in and re-encode them using Quoted-Printable. As you do this, you need to build up a *new* replacement MIME::Entity. Finally, call replace_entire_message with your new entity as the argument. I won't give the actual Perl code, but here's a basic sketch, completely untested. I really have no idea whether or not this will work, but I think the basic approach is correct. :) sub re_encode { my ($in_entity, $out_entity, $did_something) = @_; # If it's multipart, recurse if ($in_entity->is_multipart) { my $new_entity = MIME::Entity->build(Type => $in_entity->type); $out_entity->add_part($new_entity); foreach my $p (@{$in_entity->parts}) { if (re_encode($p, $new_entity, $did_something)) { $did_something = 1; } } return $did_something; } # non-recursive case: Single part. # If $in_entity is base-64 encoded, make a new $new_entity # that is qp-encoded and call $out_entity->attach($new_entity) # and return 1 to indicate that a change was made. # Otherwise, call $out_entity->attach($in_entity) # and return 0. } sub filter_end { my ($entity) = @_; my $replacement_entity = MIME::Entity->build(Type => 'multipart/mixed'); my $changes_made = re_encode($entity, $replacement_entity, 0); if ($changes_made) { # Recursively remove single-part "multiparts" starting # from top-level. while ($replacement_entity->is_multipart && scalar(@{$replacement_entity->parts}) == 1) { $replacement_entity = $replacement_entity->parts(0); } replace_entire_message($replacement_entity); } } _______________________________________________ NOTE: If there is a disclaimer or other legal boilerplate in the above message, it is NULL AND VOID. You may ignore it. Visit http://www.mimedefang.org and http://www.roaringpenguin.com MIMEDefang mailing list [email protected] http://lists.roaringpenguin.com/mailman/listinfo/mimedefang