+sub _DowngradeFromHTML {
+ my $self = shift;
+ my $orig_entity = $self->MIMEObj;
+
+ my $new_entity = $orig_entity->dup; # this will fail badly if we go away from InCore parsing
+ $new_entity->head->mime_attr( "Content-Type" => 'text/plain' );
+ $new_entity->head->mime_attr( "Content-Type.charset" => 'utf-8' );
+
+ $orig_entity->head->mime_attr( "Content-Type" => 'text/html' );
+ $orig_entity->head->mime_attr( "Content-Type.charset" => 'utf-8' );
+ $orig_entity->make_multipart('alternative', Force => 1);
+
+ require HTML::FormatText;
+ require HTML::TreeBuilder;
+ require Encode;
+ # need to decode_utf8, see the doc of MIMEObj method
+ my $tree = HTML::TreeBuilder->new_from_content(
+ Encode::decode_utf8($new_entity->bodyhandle->as_string)
+ );
+ $new_entity->bodyhandle(MIME::Body::InCore->new(
+ \(scalar HTML::FormatText->new(
+ leftmargin => 0,
+ rightmargin => 78,
+ )->format( $tree ))
+ ));
+ $tree->delete;
+
+ $orig_entity->add_part($new_entity, 0); # plain comes before html
+ $self->{MIMEObj} = $orig_entity;
+
+ return;
+}