โปรแกรมแยกวิเคราะห์อีเมลที่ผ่านการทดสอบอย่างสมบูรณ์สำหรับ PHP 8.0+ (ตัวตัดส่วนขยาย mailparse)
เป็นตัวแยกวิเคราะห์อีเมล PHP ที่มีประสิทธิภาพมากที่สุดในแง่ของประสิทธิภาพ การเข้ารหัสอักขระต่างประเทศ การจัดการไฟล์แนบ และความสะดวกในการใช้งาน รูปแบบข้อความอินเทอร์เน็ต RFC 822, 2822, 5322
ส่วนขยายนี้สามารถใช้เพื่อ...
.eml
)ใช่. ปัญหาที่ทราบทั้งหมดได้รับการทำซ้ำ แก้ไข และทดสอบแล้ว
เราใช้ GitHub Actions, Codecov, Codacy เพื่อช่วยรับรองคุณภาพของโค้ด คุณสามารถดูสถิติแบบเรียลไทม์ด้านล่าง:
วิธีที่ง่ายที่สุดคือผ่าน Composer
หากต้องการติดตั้ง PHP MIME Mail Parser เวอร์ชันล่าสุด ให้รันคำสั่งด้านล่าง:
composer require php-mime-mail-parser/php-mime-mail-parser
รองรับ PHP เวอร์ชันต่อไปนี้:
เวอร์ชันก่อนหน้า:
ความเข้ากันได้ของ PHP | เวอร์ชัน |
---|---|
HHVM | php-mime-mail-parser 2.11.1 |
พีเอชพี 5.4 | php-mime-mail-parser 2.11.1 |
พีเอชพี 5.5 | php-mime-mail-parser 2.11.1 |
พีเอชพี 5.6 | php-mime-mail-parser 3.0.4 |
PHP 7.0 | php-mime-mail-parser 3.0.4 |
พีเอชพี 7.1 | php-mime-mail-parser 5.0.5 |
พีเอชพี 7.2 | php-mime-mail-parser 7.1.2 |
พีเอชพี 7.3 | php-mime-mail-parser 7.1.2 |
พีเอชพี 7.4 | php-mime-mail-parser 7.1.2 |
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งส่วนขยาย mailparse (http://php.net/manual/en/book.mailparse.php) อย่างถูกต้อง บรรทัดคำสั่ง php -m | grep mailparse
จำเป็นต้องส่งคืน "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 ควรเป็น 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
คุณต้องดาวน์โหลด mailparse DLL จากhttp://pecl.php.net/package/mailparse และเพิ่ม line extension=php_mailparse.dll
ไปยัง php.ini
ตามลำดับ
คุณสามารถโหลดอีเมลได้ 4 วิธี:
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 " ));
รับผู้ส่งและผู้รับ:
$ 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]]
รับเรื่อง:
$ subject = $ parser -> getHeader ( ' subject ' );
รับส่วนหัวอื่น ๆ :
$ 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
บันทึกไฟล์แนบทั้งหมดในไดเร็กทอรี
$ 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.
รับสิ่งที่แนบมาทั้งหมด
$ 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)
วนซ้ำสิ่งที่แนบมาทั้งหมด
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)
}
หากต้องการส่งต่ออีเมลจาก Postfix ไปยังสคริปต์ PHP ด้านบน ให้เพิ่มบรรทัดนี้ต่อท้าย /etc/postfix/master.cf
ของคุณ (เพื่อระบุ myhook ให้ส่งอีเมลทั้งหมดไปยังสคริปต์ 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}
แก้ไขบรรทัดนี้ (ลงทะเบียน myhook)
smtp inet n - - - - smtpd
-o content_filter=myhook:dummy
สคริปต์ PHP ต้องใช้วิธีที่สี่ (ดูด้านบน) เพื่อทำงานกับการกำหนดค่านี้
และสุดท้ายวิธีที่ง่ายที่สุดคือใช้ SaaS https://mailcare.io ของฉัน
รู้สึกอิสระที่จะมีส่วนร่วม!
git clone https://github.com/php-mime-mail-parser/php-mime-mail-parser
cd php-mime-mail-parser
composer install
./vendor/bin/phpunit
หากคุณรายงานปัญหา โปรดระบุอีเมลดิบที่ทำให้เกิดปัญหา วิธีนี้ช่วยให้เราเกิดปัญหาซ้ำและแก้ไขปัญหาได้รวดเร็วยิ่งขึ้น
php-mime-mail-parser/php-mime-mail-parser เป็นซอฟต์แวร์โอเพ่นซอร์สที่ได้รับอนุญาตภายใต้ใบอนุญาต MIT