Un analyseur d'e-mails entièrement testé pour PHP 8.0+ (wrapper d'extension mailparse).
Il s'agit de l'analyseur de courrier électronique PHP le plus efficace du marché en termes de performances, de codage des caractères étrangers, de gestion des pièces jointes et de facilité d'utilisation. Format des messages Internet RFC 822, 2822, 5322.
Cette extension peut être utilisée pour...
.eml
)Oui. Tous les problèmes connus ont été reproduits, corrigés et testés.
Nous utilisons GitHub Actions, Codecov, Codacy pour garantir la qualité du code. Vous pouvez voir les statistiques en temps réel ci-dessous :
Le moyen le plus simple est via Composer.
Pour installer la dernière version de PHP MIME Mail Parser, exécutez la commande ci-dessous :
composer require php-mime-mail-parser/php-mime-mail-parser
Les versions suivantes de PHP sont prises en charge :
Versions précédentes :
Compatibilité PHP | Version |
---|---|
HHVM | php-mime-mail-parser 2.11.1 |
PHP5.4 | php-mime-mail-parser 2.11.1 |
PHP5.5 | php-mime-mail-parser 2.11.1 |
PHP5.6 | php-mime-mail-parser 3.0.4 |
PHP7.0 | php-mime-mail-parser 3.0.4 |
PHP7.1 | php-mime-mail-parser 5.0.5 |
PHP7.2 | php-mime-mail-parser 7.1.2 |
PHP7.3 | php-mime-mail-parser 7.1.2 |
PHP7.4 | php-mime-mail-parser 7.1.2 |
Assurez-vous que l'extension mailparse (http://php.net/manual/en/book.mailparse.php) est correctement installée. La ligne de commande php -m | grep mailparse
doit renvoyer "mailparse".
sudo apt install php-cli php-mailparse
brew install php
pecl install mailparse
sudo apt install php-cli php-pear php-dev php-mbstring
pecl install mailparse
AAAAMMDD devrait être php-config --extension-dir
git clone https://github.com/php/pecl-mail-mailparse.git
cd pecl-mail-mailparse
phpize
./configure
sed -i 's/#ifs!HAVE_MBSTRING/#ifndef MBFL_MBFILTER_H/' ./mailparse.c
make
sudo mv modules/mailparse.so /usr/lib/php/AAAAMMDD/
echo "extension=mailparse.so" | sudo tee /etc/php/8.4/mods-available/mailparse.ini
sudo phpenmod mailparse
Vous devez télécharger la DLL mailparse depuis http://pecl.php.net/package/mailparse et ajouter la ligne extension=php_mailparse.dll
au php.ini
en conséquence.
Vous pouvez charger un email de 4 manières différentes :
require_once __DIR__ . ' /vendor/autoload.php ' ;
$ path = ' path/to/email.eml ' ;
$ parser = new PhpMimeMailParser Parser ();
// 1. Either specify a file path (string)
$ parser -> setPath ( $ path );
// 2. or specify the raw mime mail text (string)
$ parser -> setText ( file_get_contents ( $ path ));
// 3. or specify a php file resource (stream)
$ parser -> setStream ( fopen ( $ path , " r " ));
// 4. or specify a stream to work with a mail server (stream)
$ parser -> setStream ( fopen ( " php://stdin " , " r " ));
Obtenez l'expéditeur et le destinataire :
$ 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]]
Obtenez le sujet :
$ subject = $ parser -> getHeader ( ' subject ' );
Obtenez d'autres en-têtes :
$ stringHeaders = $ parser -> getHeadersRaw ();
// return all headers as a string, no charset conversion
$ arrayHeaders = $ parser -> getHeaders ();
// return all headers as an array, with charset conversion
$ 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
Enregistrez toutes les pièces jointes dans un répertoire
$ 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.
Obtenez toutes les pièces jointes
$ 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)
Parcourez toutes les pièces jointes
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
$ stream = $ attachment -> getStream ();
// get the stream of the attachment file
$ attachment -> save ( ' /path/to/save/myattachment/ ' , Parser:: ATTACHMENT_DUPLICATE_SUFFIX );
// return the path and the filename saved (same strategy available than saveAttachments)
}
Pour transférer les mails de Postfix vers le script PHP ci-dessus, ajoutez cette ligne à la fin de votre /etc/postfix/master.cf
(pour spécifier myhook pour envoyer tous les emails au 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}
Modifiez cette ligne (enregistrez myhook)
smtp inet n - - - - smtpd
-o content_filter=myhook:dummy
Le script PHP doit utiliser la quatrième méthode (voir ci-dessus) pour fonctionner avec cette configuration.
Et enfin le plus simple est d'utiliser mon SaaS https://mailcare.io
N'hésitez pas à contribuer !
git clone https://github.com/php-mime-mail-parser/php-mime-mail-parser
cd php-mime-mail-parser
composer install
./vendor/bin/phpunit
Si vous signalez un problème, veuillez fournir l'e-mail brut qui l'a déclenché. Cela nous aide à reproduire le problème et à le résoudre plus rapidement.
Le php-mime-mail-parser/php-mime-mail-parser est un logiciel open source sous licence MIT.