-use Email::MIME;
-use Email::MIME::ContentType qw(parse_content_type);
-$Email::MIME::ContentType::STRICT_PARAMS = 0;
-use PublicInbox::MID qw(mid2path);
-use PublicInbox::MsgIter;
+use bytes (); # only for bytes::length
+use PublicInbox::EmlContentFoo qw(parse_content_type);
+use PublicInbox::Eml;
+
+sub get_attach_i { # ->each_part callback
+ my ($part, $depth, $idx) = @{$_[0]};
+ my $res = $_[1];
+ return if $idx ne $res->[3]; # [0-9]+(?:\.[0-9]+)+
+ $res->[0] = 200;
+ my $ct = $part->content_type;
+ $ct = parse_content_type($ct) if $ct;
+
+ # discrete == type, we remain Debian wheezy-compatible
+ if ($ct && (($ct->{discrete} || '') eq 'text')) {
+ # display all text as text/plain:
+ my $cset = $ct->{attributes}->{charset};
+ if ($cset && ($cset =~ /\A[a-zA-Z0-9_\-]+\z/)) {
+ $res->[1]->[1] .= qq(; charset=$cset);
+ }
+ } else { # TODO: allow user to configure safe types
+ $res->[1]->[1] = 'application/octet-stream';
+ }
+ $part = $part->body;
+ push @{$res->[1]}, 'Content-Length', bytes::length($part);
+ $res->[2]->[0] = $part;
+}