<%INIT>
use HTML::Entities;

my $parser = RT::EmailParser->new();
$parser->SmartParseMIMEEntityFromScalar (Message => $MessageString);
my $entity = $parser->Entity();

sub dump_entity {
	my ($depth, $entity) = @_;

	$entity->head->unfold;

	$m->out ('<table border="0" class="sidehead" style="border: solid black 1px;" cellspacing="0" cellpadding="2">');
	foreach (split /\n/, $entity->head->as_string) {
		my ($header, $value) = split /:/, $_, 2;
		$header = encode_entities($header, q{'"&<>});
		$value = encode_entities($value, q{'"&<>});
		my $tag = 'td';
		$tag = 'th' if ($header =~ /^(Subject|Date|From|To)$/);
		$m->out ('<tr><'.$tag.' style="text-align: right; vertical-align: top;"><small>'.$header.':</small></'.$tag.'><td style="text-align: left; vertical-align: top;"><small>'.$value.'</small></td></tr>'."\n");
	}

	$m->out ('<tr><td colspan="2" style="border-top: solid black 1px;">');

	my @parts = $entity->parts;
	if (@parts) {
		foreach my $i (0 .. $#parts) {
			dump_entity (1+$depth, $parts[$i]);
		}
	} else {
		my ($type, $subtype) = split('/', $entity->head->mime_type);
		if ($type =~ /^(text|message)$/) {
			my $body = $entity->bodyhandle->as_string;
			$body = substr($body,0,20000)."\n..." if (length $body > 20000);
			if ($subtype eq 'html') {
				$body =~ s/^.*<body[^>]*>//si;
				$body =~ s/<\/body>.*$//si;
				$m->out ($body);
			} else {
				$m->out ('<pre style="white-space: pre-wrap;">'.encode_entities($body, q{'"&<>})."</pre>\n");
			}
		} else {
			$m->out (encode_entities("Attachment of type $type/$subtype", q{'"&<>}));
		}
	}

	$m->out ('</td></tr></table>');
}

dump_entity(0, $entity);
</%INIT>
<%ARGS>
$MessageString => undef
</%ARGS>
