---
name: "Mail::MboxParser::Mail::Body"
section: "3pm"
platform: "linux"
package: "libmail-mboxparser-perl"
version: "0.55-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Mail::MboxParser::Mail::Body"
---

# Mail::MboxParser::Mail::Body(3pm)

rudimentary mail-body object

## NAME

Mail::MboxParser::Mail::Body - rudimentary mail-body object

## SYNOPSIS

```
    use Mail::MboxParser;
    [...]
    # $msg is a Mail::MboxParser::Mail
    my $body = $msg->body(0);
    # or preferably
    my $body = $msg->body($msg->find_body);
    for my $line ($body->signature) { print $line, "\n" }
    for my $url ($body->extract_urls(unique => 1)) {
        print $url->{url}, "\n";
        print $url->{context}, "\n";
    }
```

## DESCRIPTION

This class represents the body of an email-message.  Since emails can have multiple MIME-parts and each of these parts has a body it is not always easy to say which part actually holds the text of the message (if there is any at all). Mail::MboxParser::Mail::find\_body will help and suggest a part.

## METHODS

- **as\_string (\[strip\_sig =\> 1\])**

  Returns the textual representation of the body as one string. Decoding takes place when the mailbox has been opened using the decode =\> 'BODY' \| 'ALL' option.

  If 'strip\_sig' is set to a true value, the signature is stripped from the string.

- **as\_lines (\[strip\_sig =\> 1\])**

  Sames as **as\_string()** just that you get an array of lines with newlines attached to each line.

  **NOTE:** When the body is actually some encoded binary data (most commonly such a body is base64-encoded), you can still use this method. Then you wont really get proper lines. Instead you get chunks of binary data that you should concatenate as in

  ```
      my $binary = join "", $body->as_lines;
  ```

  If 'strip\_sig' is set to a true value, the signature is stripped from the string.

- **signature**

  Returns the signature of a message as an array of lines. Trailing newlines are already removed.

  `$body`-\>error returns a string if no signature has been found.

- **extract\_urls**

  - **extract\_urls (unique =\> 1)**

  Returns an array of hash-refs. Each hash-ref has two fields: 'url' and 'context' where context is the line in which the 'url' appeared.

  When calling it like `$mail`-\>extract\_urls(unique =\> 1), duplicate URLs will be filtered out regardless of the 'context'. That's useful if you just want a list of all URLs that can be found in your mails.

  `$body`-\>**error()** will return a string if no URLs could be found within the body.

- **quotes**

  Returns a hash-ref of array-refs where the hash-keys are the several levels of quotation. Each array-element contains the paragraphs of this quotation-level as one string. Example:

  ```
          my $quotes = $msg->body($msg->find_body)->quotes;
          print $quotes->{1}->[0], "\n";
          print $quotes->{0}->[0], "\n";
  ```

  This should print the first paragraph of the mail-body that has been quoted once and below that the paragraph that supposedly is the reply to this paragraph. Perhaps thus:

  ```
          > I had been trying to work with the CGI module
          > but I didn't yet fully understand it.
          Ah, it is tricky. Have you read the CGI-FAQ that
          comes with the module?
  ```

  Mark that empty lines will not be ignored and are part of the lines contained in the array of `$quotes`-\>{0}.

  So below is a little code-snippet that should, in most cases, restore the first 5 paragraphs (containing quote-level 0 and 1) of an email:

  ```
          for (0 .. 4) {
                  print $quotes->{0}->[$_];
                  print $quotes->{1}->[$_];
          }
  ```

  Since **quotes()** considers an empty line between two quotes paragraphs as a paragraph in `$quotes`-\>{0}, the paragraphs with one quote and those with zero are balanced. That means:

  scalar @{$quotes-\>{0}} - DIFF == scalar @{$quotes-\>{1}} where DIFF is element of {-1, 0, 1}.

  Unfortunately, **quotes()** can up to now only deal with '\>' as quotation-marks.

## VERSION

This is version 0.55.

## AUTHOR AND COPYRIGHT

Tassilo von Parseval \<tassilo.von.parseval@rwth-aachen.de\>

Copyright (c)  2001-2005 Tassilo von Parseval. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## SEE ALSO
