On Mon, 16 Mar 2015 10:51:59 -0400
"Bill Cole" <[email protected]> wrote:
> Is the code for doing this shared anywhere or is it sharable? Please?
It's part of our commercial CanIt software. But I can post a
chunk of Perl that's roughly what we do.
We parse the message into a MIME::Entity. Then if we need to truncate
it, we call a function similar to the code shown below. It generates a
version of the message with all non-text parts emptied out. It's a really
evil hack.
Code is for your education. Most likely needs considerable tweaking
for production; our real production code obviously is much more
sophisticated.
Regards,
David.
# Pass the function below a MIME entity. It returns a file handle
# opened for reading on a truncated message body.
sub open_truncated_body
{
my($mime_entity) = @_;
# We are truncating non-text parts. So
# we override print_body... ugh.
no warnings 'redefine'; ## no critic (NoWarnings)
my $original_print_bodyhandle = *MIME::Entity::print_bodyhandle{'CODE'};
local *MIME::Entity::print_bodyhandle = sub {
my($self, $out) = @_;
$out ||= select;
if ($self->head->mime_type =~ m|^text/|) {
# Evil...
# TODO FIXME: per ticket 15530, need to cap
# the size of text/* attachments.
# Unfortunately, the only way to do this may
# require even more evil.
return &$original_print_bodyhandle($self, $out);
}
# Leave empty!!!
return 1;
};
my $fh = IO::File->new('TRUNCATED-MSG', O_WRONLY|O_CREAT);
if ($fh && $fh->opened) {
$mime_entity->print($fh);
$fh->close();
} else {
return undef;
}
return IO::File->new('TRUNCATED-MSG', O_RDONLY);
}