Ein vollständig getesteter E-Mail-Parser für PHP 8.0+ (Mailparse-Erweiterungs-Wrapper).
Es ist der effektivste PHP-E-Mail-Parser, den es gibt, was Leistung, Fremdzeichenkodierung, Anhangsverarbeitung und Benutzerfreundlichkeit betrifft. Internet-Nachrichtenformat RFC 822, 2822, 5322.
Diese Erweiterung kann verwendet werden, um...
.eml
)Ja. Alle bekannten Probleme wurden reproduziert, behoben und getestet.
Wir verwenden GitHub Actions, Codecov und Codacy, um die Codequalität sicherzustellen. Unten können Sie Echtzeitstatistiken sehen:
Am einfachsten geht es über Composer.
Um die neueste Version von PHP MIME Mail Parser zu installieren, führen Sie den folgenden Befehl aus:
composer require php-mime-mail-parser/php-mime-mail-parser
Die folgenden PHP-Versionen werden unterstützt:
Frühere Versionen:
PHP-Kompatibilität | 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 |
PHP 7.2 | php-mime-mail-parser 7.1.2 |
PHP 7.3 | php-mime-mail-parser 7.1.2 |
PHP 7.4 | php-mime-mail-parser 7.1.2 |
Stellen Sie sicher, dass Sie die Mailparse-Erweiterung (http://php.net/manual/en/book.mailparse.php) ordnungsgemäß installiert haben. Die Befehlszeile php -m | grep mailparse
muss „mailparse“ zurückgeben.
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 sollte php-config --extension-dir
sein
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
Sie müssen die Mailparse-DLL von http://pecl.php.net/package/mailparse herunterladen und die Zeile extension=php_mailparse.dll
entsprechend zur php.ini
hinzufügen.
Sie können eine E-Mail auf vier verschiedene Arten laden:
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 " ));
Ermitteln Sie den Sender und den Empfänger:
$ 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]]
Holen Sie sich den Betreff:
$ subject = $ parser -> getHeader ( ' subject ' );
Weitere Header abrufen:
$ 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
Speichern Sie alle Anhänge in einem Verzeichnis
$ 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.
Holen Sie sich alle Anhänge
$ 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)
Gehen Sie alle Anhänge durch
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)
}
Um E-Mails von Postfix an das obige PHP-Skript weiterzuleiten, fügen Sie diese Zeile am Ende Ihrer /etc/postfix/master.cf
hinzu (um myhook anzugeben, um alle E-Mails an das Skript test.php
zu senden):
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}
Bearbeiten Sie diese Zeile (registrieren Sie myhook)
smtp inet n - - - - smtpd
-o content_filter=myhook:dummy
Das PHP-Skript muss die vierte Methode (siehe oben) verwenden, um mit dieser Konfiguration zu arbeiten.
Und schließlich ist es am einfachsten, mein SaaS https://mailcare.io zu nutzen
Fühlen Sie sich frei, einen Beitrag zu leisten!
git clone https://github.com/php-mime-mail-parser/php-mime-mail-parser
cd php-mime-mail-parser
composer install
./vendor/bin/phpunit
Wenn Sie ein Problem melden, geben Sie bitte die Roh-E-Mail-Adresse an, die es ausgelöst hat. Dies hilft uns, das Problem zu reproduzieren und schneller zu beheben.
Der php-mime-mail-parser/php-mime-mail-parser ist eine Open-Source-Software, die unter der MIT-Lizenz lizenziert ist