---
name: "MIME::Explode"
section: "3pm"
platform: "linux"
package: "libmime-explode-perl"
version: "0.39-4+b4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/MIME::Explode"
---

# MIME::Explode(3pm)

Perl extension for explode MIME messages

## NAME

MIME::Explode - Perl extension for explode MIME messages

## SYNOPSIS

```
  use MIME::Explode;
  my $explode = MIME::Explode->new(
    output_dir         => "tmp",
    mkdir              => 0755,
    decode_subject     => 1,
    check_content_type => 1,
    content_types      => ["image/gif", "image/jpeg", "image/bmp"],
    types_action       => "exclude"
  );
  print "Number of messages: ", $explode->nmsgs, "\n";
  open(MAIL, "<file.mbox") or
        die("Couldn't open file.mbox for reading: $!\n");
  open(OUTPUT, ">file.tmp")
        or die("Couldn't open file.tmp for writing: $!\n");
  my $headers = $explode->parse(\*MAIL, \*OUTPUT);
  close(OUTPUT);
  close(MAIL);
  for my $part (sort{ $a cmp $b } keys(%{$headers})) {
    for my $k (keys(%{$headers->{$part}})) {
      if(ref($headers->{$part}->{$k}) eq "ARRAY") {
        for my $i (0 .. $#{$headers->{$part}->{$k}}) {
          print "$part => $k => $i => ", $headers->{$part}->{$k}->[$i], "\n";
        }
      } elsif(ref($headers->{$part}->{$k}) eq "HASH") {
        for my $ks (keys(%{$headers->{$part}->{$k}})) {
          if(ref($headers->{$part}->{$k}->{$ks}) eq "ARRAY") {
            print "$part => $k => $ks => ", join(($ks eq "charset") ? " " : "", @{$headers->{$part}->{$k}->{$ks}}), "\n";
          } else {
            print "$part => $k => $ks => ", $headers->{$part}->{$k}->{$ks}, "\n";
          }
          print "$part => $k => $ks => ", $headers->{$part}->{$k}->{$ks}, "\n";
        }
      } else {
        print "$part => $k => ", $headers->{$part}->{$k}, "\n";
      }
    }
  }
  if(my $e = $explode->clean_all()) {
    print "Error: $e\n";
  }
```

## DESCRIPTION

MIME::Explode is perl module for parsing and decoding single or multipart MIME messages, and outputting its decoded components to a given directory ie, this module is designed to allows users to extract the attached files out of a MIME encoded email messages or mailboxes.

## METHODS

### new(\[, OPTION ...\])

This method create a new MIME::Explode object. The following keys are available:

- output\_dir

  Directory where the decoded files are placed

- mkdir =\> octal\_number

  If the value is set to octal number then make the output\_dir directory (example: mkdir =\> 0755).

- check\_content\_type =\> 0 or 1

  If the value is set to 1 the content-type of file is checked

- decode\_subject =\> 0 or 1

  If the value is set to 1 then the subject is decoded into a list.

  ```
    $header->{'0.0'}->{subject}->{value} = [ARRAYREF];
    $header->{'0.0'}->{subject}->{charset} = [ARRAYREF];
    $subject = join("", @{$header->{'0.0'}->{subject}->{value}});
  ```

- exclude\_types =\> \[ARRAYREF\]

  Not save files with specified content types (deprecated in next versions)

- content\_types =\> \[ARRAYREF\]

  Array reference with content types for "include" or "exclude"

- types\_action =\> "include" or "exclude"

  If the action is a "include", all attached files with specified content types are saved but if the action is a "exclude", no files are saved except if its in the array of content types. If no array is specified, but the action is a "include", all attached files are saved, otherwise all files are removed if action is a "exclude". The default action is "include".

### parse(FILEHANDLE, FILEHANDLE)

This method parse the stream and splits it into its component entities. This method return a hash reference with all parts. The FILEHANDLE should be a reference to a GLOB. The second argument is optional.

### nmsgs

Returns the number of parsed messages.

### clean\_all

Cleans all files from the "output\_dir" directory and then removes the directory. If an error happens returns it.

## AUTHOR

Henrique Dias \<henrique.ribeiro.dias@gmail.com\>

## CREDITS

Thanks to Rui Castro for the revision.

## SEE ALSO

MIME::Tools, [**perl**(1)](/perl/1.md).
