All Projects → php-mime-mail-parser → Php Mime Mail Parser

php-mime-mail-parser / Php Mime Mail Parser

Licence: mit
A fully tested email parser for PHP 7.2+ (mailparse extension wrapper).

Projects that are alternatives of or similar to Php Mime Mail Parser

Yii2 Swiftmailer
Yii 2 swiftmailer extension.
Stars: ✭ 109 (-84.13%)
Mutual labels:  hacktoberfest, email, mail
Enmime
MIME mail encoding and decoding package for Go
Stars: ✭ 246 (-64.19%)
Mutual labels:  parser, email, mail
Demoinfocs Golang
High performance CS:GO demo parser for Go (demoinfo)
Stars: ✭ 288 (-58.08%)
Mutual labels:  hacktoberfest, parser
Termimad
A library to display rich (Markdown) snippets and texts in a rust terminal application
Stars: ✭ 293 (-57.35%)
Mutual labels:  hacktoberfest, parser
Verible
Verible is a suite of SystemVerilog developer tools, including a parser, style-linter, and formatter.
Stars: ✭ 384 (-44.1%)
Mutual labels:  hacktoberfest, parser
laravel-mjml
Laravel MJML offers support for rendering MJML syntax into in-line HTML that can be sent within mails.
Stars: ✭ 26 (-96.22%)
Mutual labels:  mail, email
imapx
A cross-platform IMAP library for .NET, supporting .Net 2.0 - 4.5, Mono and Windows Phone
Stars: ✭ 28 (-95.92%)
Mutual labels:  mail, email
Anglesharp
👼 The ultimate angle brackets parser library parsing HTML5, MathML, SVG and CSS to construct a DOM based on the official W3C specifications.
Stars: ✭ 4,018 (+484.86%)
Mutual labels:  hacktoberfest, parser
is-biz-mail-php
isBizMail tells you whether a given email address belongs to a free email account provider (gmail.com, yahoo.es, yandex.ru etc) or not.
Stars: ✭ 19 (-97.23%)
Mutual labels:  mail, email
Sieve
Sieve Script Editor
Stars: ✭ 452 (-34.21%)
Mutual labels:  email, mail
Gatsby Mail
A Gatsby email *application*
Stars: ✭ 450 (-34.5%)
Mutual labels:  email, mail
Astroid
A graphical threads-with-tags style, lightweight and fast, e-mail client for Notmuch
Stars: ✭ 476 (-30.71%)
Mutual labels:  email, mail
ProtonClient
An unofficial desktop client for ProtonMail done with electron nativefier
Stars: ✭ 50 (-92.72%)
Mutual labels:  mail, email
ESP-Mail-Client
⚡️Arduino Mail Client Library to send, read and get incoming mail notification for ESP32, ESP8266 and SAMD21 devices. The library also supported other Arduino devices using Clients interfaces e.g. WiFiClient, EthernetClient, and GSMClient.
Stars: ✭ 78 (-88.65%)
Mutual labels:  mail, email
Phpmailer
The classic email sending library for PHP
Stars: ✭ 17,485 (+2445.12%)
Mutual labels:  hacktoberfest, email
himalaya
Command-line interface for email management
Stars: ✭ 1,715 (+149.64%)
Mutual labels:  mail, email
Grouparoo
🦘 The Grouparoo Monorepo - open source customer data sync framework
Stars: ✭ 334 (-51.38%)
Mutual labels:  hacktoberfest, email
Core
Dovecot mail server
Stars: ✭ 540 (-21.4%)
Mutual labels:  email, mail
mailx
A lightweight SMTP mail library
Stars: ✭ 17 (-97.53%)
Mutual labels:  mail, email
mailtrap
MailTrap has been renamed to Sendria. Please use Sendria now, MailTrap is abandoned. MailTrap is a SMTP server designed to run in your dev/test environment, that is designed to catch any email you or your application is sending, and display it in a web interface instead of sending to real world.
Stars: ✭ 14 (-97.96%)
Mutual labels:  mail, email

php-mime-mail-parser

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

It's the most effective php email parser around in terms of performance, foreign character encoding, attachment handling, and ease of use. Internet Message Format RFC 822, 2822, 5322.

Latest Version Total Downloads Software License

Why?

This extension can be used to...

  • Parse and read email from Postfix
  • For reading messages (Filename extension: eml)
  • Create webmail
  • Store email information such a subject, HTML body, attachments, and etc. into a database

Is it reliable?

Yes. All known issues have been reproduced, fixed and tested.

We use GitHub Actions, Codecov, Codacy to help ensure code quality. You can see real-time statistics below:

Build Status Coverage Code Quality

How do I install it?

The easiest way is via Composer.

To install the latest version of PHP MIME Mail Parser, run the command below:

composer require php-mime-mail-parser/php-mime-mail-parser

Requirements

The following versions of PHP are supported:

  • PHP 7.2
  • PHP 7.3
  • PHP 7.4
  • PHP 8.0

Previous Versions:

PHP Compatibility Version
HHVM php-mime-mail-parser 2.11.1
PHP 5.4 php-mime-mail-parser 2.11.1
PHP 5.5 php-mime-mail-parser 2.11.1
PHP 5.6 php-mime-mail-parser 3.0.4
PHP 7.0 php-mime-mail-parser 3.0.4
PHP 7.1 php-mime-mail-parser 5.0.5

Make sure you have the mailparse extension (http://php.net/manual/en/book.mailparse.php) properly installed. The command line php -m | grep mailparse needs to return "mailparse".

Install mailparse extension

Ubuntu, Debian & derivatives

sudo apt install php-cli php-mailparse

Php docker image

# Example with an alpine distribution
RUN apk update && apk add g++ autoconf make re2c && \
    pecl install mailparse && \
    docker-php-ext-enable mailparse && \
    apk del g++ autoconf make re2c
    

Others platforms

sudo apt install php-cli php-pear php-dev php-mbstring
pecl install mailparse

From source

git clone https://github.com/php/pecl-mail-mailparse.git
cd pecl-mail-mailparse
phpize
./configure
sed -i 's/#if\s!HAVE_MBSTRING/#ifndef MBFL_MBFILTER_H/' ./mailparse.c
make
sudo mv modules/mailparse.so $(php-config --extension-dir)
echo "extension=mailparse.so" | sudo tee /etc/php/7.1/mods-available/mailparse.ini
sudo phpenmod mailparse

Windows

You need to download mailparse DLL from http://pecl.php.net/package/mailparse and add the line "extension=php_mailparse.dll" to php.ini accordingly.

How do I use it?

Loading an email

You can load an email in 4 different ways – choose one:

require_once __DIR__.'/vendor/autoload.php';

$path = 'path/to/email.eml';
$parser = new PhpMimeMailParser\Parser();

// 1. Specify a file path (string)
$parser->setPath($path); 

// 2. Specify the raw mime mail text (string)
$parser->setText(file_get_contents($path));

// 3. Specify a php file resource (stream)
$parser->setStream(fopen($path, "r"));

// 4.  Specify a stream to work with mail server (stream)
$parser->setStream(fopen("php://stdin", "r"));

Get the metadata of the message

Get the sender and the receiver:

$rawHeaderTo = $parser->getHeader('to');
// return "test" <[email protected]>, "test2" <[email protected]>

$arrayHeaderTo = $parser->getAddresses('to');
// return [["display"=>"test", "address"=>"[email protected]", false]]

$rawHeaderFrom = $parser->getHeader('from');
// return "test" <[email protected]>

$arrayHeaderFrom = $parser->getAddresses('from');
// return [["display"=>"test", "address"=>"[email protected]", "is_group"=>false]]

Get the subject:

$subject = $parser->getHeader('subject');

Get other headers:

$stringHeaders = $parser->getHeadersRaw();
// return all headers as a string, no charset conversion

$arrayHeaders = $parser->getHeaders();
// return all headers as an array, with charset conversion

Get the body of the message

$text = $parser->getMessageBody('text');
// return the text version

$html = $parser->getMessageBody('html');
// return the html version

$htmlEmbedded = $parser->getMessageBody('htmlEmbedded');
// return the html version with the embedded contents like images

Get attachments

Save all attachments in a directory

$parser->saveAttachments('/path/to/save/attachments/');
// return all attachments saved in the directory (include inline attachments)

$parser->saveAttachments('/path/to/save/attachments/', false);
// return all attachments saved in the directory (exclude inline attachments)

// Save all attachments with the strategy ATTACHMENT_DUPLICATE_SUFFIX (default)
$parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_DUPLICATE_SUFFIX);
// return all attachments saved in the directory: logo.jpg, logo_1.jpg, ..., logo_100.jpg, YY34UFHBJ.jpg

// Save all attachments with the strategy ATTACHMENT_RANDOM_FILENAME
$parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_RANDOM_FILENAME);
// return all attachments saved in the directory: YY34UFHBJ.jpg and F98DBZ9FZF.jpg

// Save all attachments with the strategy ATTACHMENT_DUPLICATE_THROW
$parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_DUPLICATE_THROW);
// return an exception when there is attachments duplicate.

Get all attachments

$attachments = $parser->getAttachments();
// return an array of all attachments (include inline attachments)

$attachments = $parser->getAttachments(false);
// return an array of all attachments (exclude inline attachments)

Loop through all the Attachments

foreach ($attachments as $attachment) {
    echo 'Filename : '.$attachment->getFilename().'<br />';
    // return logo.jpg
    
    echo 'Filesize : '.filesize($attach_dir.$attachment->getFilename()).'<br />';
    // return 1000
    
    echo 'Filetype : '.$attachment->getContentType().'<br />';
    // return image/jpeg
    
    echo 'MIME part string : '.$attachment->getMimePartStr().'<br />';
    // return the whole MIME part of the attachment

    $attachment->save('/path/to/save/myattachment/', Parser::ATTACHMENT_DUPLICATE_SUFFIX);
    // return the path and the filename saved (same strategy available than saveAttachments)
}

Postfix configuration to manage email from a mail server

Next you need to forward emails to this script above. For that I'm using Postfix like a mail server, you need to configure /etc/postfix/master.cf

Add this line at the end of the file (specify myhook to send all emails to the script test.php)

myhook unix - n n - - pipe
  				flags=F user=www-data argv=php -c /etc/php5/apache2/php.ini -f /var/www/test.php ${sender} ${size} ${recipient}

Edit this line (register myhook)

smtp      inet  n       -       -       -       -       smtpd
        			-o content_filter=myhook:dummy

The php script must use the fourth method to work with this configuration.

And finally the easiest way is to use my SaaS https://mailcare.io

My sponsors

Thanks to Bertel Torp who is my first sponsor. Thanks to Will Browning who is my second sponsor.

Can I contribute?

Feel free to contribute!

git clone https://github.com/php-mime-mail-parser/php-mime-mail-parser
cd php-mime-mail-parser
composer install
./vendor/bin/phpunit

If you report an issue, please provide the raw email that triggered it. This helps us reproduce the issue and fix it more quickly.

License

The php-mime-mail-parser/php-mime-mail-parser is open-sourced software licensed under the MIT license

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].