PHPackages                             bashkarev/email - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Mail &amp; Notifications](/categories/mail)
4. /
5. bashkarev/email

ActiveLibrary[Mail &amp; Notifications](/categories/mail)

bashkarev/email
===============

Faster MIME Mail Parser could be used to parse emails in MIME format.

1.0(9y ago)208.8k↓50%2[7 issues](https://github.com/bashkarev/email/issues)MITPHPPHP &gt;=5.4

Since Mar 13Pushed 8y ago2 watchersCompare

[ Source](https://github.com/bashkarev/email)[ Packagist](https://packagist.org/packages/bashkarev/email)[ RSS](/packages/bashkarev-email/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

Faster MIME Mail Parser
=======================

[](#faster-mime-mail-parser)

Faster MIME Mail Parser could be used to parse emails in MIME format.

[![Build Status](https://camo.githubusercontent.com/6190014c62ba93706db96bfe2941335d87a6540dae0f68cdced3b33150f6e374/68747470733a2f2f7472617669732d63692e6f72672f626173686b617265762f656d61696c2e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/bashkarev/email)

Usage
=====

[](#usage)

Basic usage is the following:

```
$file = fopen('path/to/file.eml', 'r');
$message = \bashkarev\email\Parser::email($file);

$message->textHtml();

$message->getParts();
$message->getAttachments();
```

Settings
--------

[](#settings)

There are settings available.

- `charset` - character set to use. Should be specified in uppercase only. Default is `UTF-8`.

    ```
    \bashkarev\email\Parser::$charset = "WINDOWS-1251";
    ```
- `buffer` - read buffer size in bytes. Default is `500000`.

    ```
    \bashkarev\email\Parser::$buffer = 4096;
    ```

Attachments
-----------

[](#attachments)

There is attachments parsing support.

### Saving attachments to files

[](#saving-attachments-to-files)

Saving to files could be done as follows:

```
$file = fopen('path/to/file.eml', 'rb');
$message = \bashkarev\email\Parser::email($file);
foreach ($message->getAttachments() as $attachment) {
    $attachment->save('dir/' . $attachment->getFileName('undefined'));
}
```

### Streaming attachment to output

[](#streaming-attachment-to-output)

In order to stream attachment to output directly you need to do the following:

```
$file = fopen('path/to/file.eml', 'rb');
$message = \bashkarev\email\Parser::email($file);
$attachment = $message->getAttachments()[0];
header("Content-Type: {$attachment->getMimeType()};");
header("Content-Disposition: attachment; filename=\"{$attachment->getFileName('undefined')}\"");
$attachment->getStream()->copy(fopen('php://output', 'c'));
```

message/partial
---------------

[](#messagepartial)

```
$block = \bashkarev\email\Parser::email([
    fopen('path/to/part.1.eml', 'rb'),
    fopen('path/to/part.2.eml', 'rb'),
]);
$block->getMessage();
```

message/rfc822
--------------

[](#messagerfc822)

```
$file = fopen('path/to/file.eml', 'rb');
$container = \bashkarev\email\Parser::email($file);
$message = $container->getAttachments()[0]->getMessage();
```

message/feedback-report
-----------------------

[](#messagefeedback-report)

```
$file = fopen('path/to/file.eml', 'rb');
$container = \bashkarev\email\Parser::email($file);
foreach ($container->getAttachments() as $attachment) {
    if ($attachment->getMimeType() === 'message/feedback-report') {
        /**
         * @var \bashkarev\email\messages\Feedback $feedback
         */
        $feedback = $attachment->getMessage();
        $feedback->getType(); // Feedback::TYPE_ABUSE ...
    }
}
```

message/external-body
---------------------

[](#messageexternal-body)

Supported types: url, local-file, ftp.

### FTP auth

[](#ftp-auth)

```
$file = fopen('path/to/file.eml', 'rb');
$container = \bashkarev\email\Parser::email($file);
foreach ($container->getAttachments() as $attachment) {
    if ($attachment->getStream() instanceof \bashkarev\email\transports\Ftp) {
        /**
         * @var \bashkarev\email\transports\Ftp $transport
         */
        $transport = $attachment->getStream();
        $transport->username = 'username';
        $transport->password = '******';
        $attachment->save('dir/' . $attachment->getFileName('undefined'));
    }
}
```

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance13

Infrequent updates — may be unmaintained

Popularity30

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 83.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

3353d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/43b9a90dc4a3db78eb835f5820f362f29af14d5cc95fdabc6a22738661bb111a?d=identicon)[bashkarev](/maintainers/bashkarev)

---

Top Contributors

[![bashkarev](https://avatars.githubusercontent.com/u/3738201?v=4)](https://github.com/bashkarev "bashkarev (30 commits)")[![samdark](https://avatars.githubusercontent.com/u/47294?v=4)](https://github.com/samdark "samdark (6 commits)")

---

Tags

emailemail-parsingmime-parserphpmailmimeemailmailparsemime-parserarffbl

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/bashkarev-email/health.svg)

```
[![Health](https://phpackages.com/badges/bashkarev-email/health.svg)](https://phpackages.com/packages/bashkarev-email)
```

###  Alternatives

[zbateson/mail-mime-parser

MIME email message parser

54149.2M79](/packages/zbateson-mail-mime-parser)[php-mime-mail-parser/php-mime-mail-parser

A fully tested email parser for PHP 8.0+ (mailparse extension wrapper).

9979.6M27](/packages/php-mime-mail-parser-php-mime-mail-parser)[nette/mail

📧 Nette Mail: A handy library for creating and sending emails in PHP.

5389.8M246](/packages/nette-mail)[propaganistas/laravel-disposable-email

Disposable email validator

5762.6M6](/packages/propaganistas-laravel-disposable-email)[coconutcraig/laravel-postmark

Laravel package for sending mail via the Postmark API

2152.9M1](/packages/coconutcraig-laravel-postmark)[zbateson/stream-decorators

PHP psr7 stream decorators for mime message part streams

4748.6M6](/packages/zbateson-stream-decorators)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
