Laravel/Sail/PHPでオンラインFAXのメール受信をフックにアクションを実行する
必要なもの
- PHPのmailparseエクステンション
- PHPのパーサーライブラリ : php-mime-mail-parser
手順
- LaravelSailに“PHPのmailparseエクステンション”をインストール
- ライブラリをsail経由でインストール
- FAXのEメールを受信処理する
1.LaravelSailに“PHPのmailparseエクステンション”をインストール
1–1 sailの設定ファイルを書き出し(publish)
$ ./vendor/bin/sail artisan sail:publish
→/docker/以下にsailのdocker設定ファイルが生成される
1–2 sailのDockerfileにエクステンションを追記
/docker/(任意の利用しているバージョン)/Dockerfile
のphpをインストールしているブロックの最後の行に php8.4-mailparse \
を追記
(※利用しているphpのバージョンは /docker-compose.yml に記載があるので参照)
&& apt-get install -y php8.4-cli php8.4-dev \
php8.4-pgsql php8.4-sqlite3 php8.4-gd \
php8.4-curl php8.4-mongodb \
php8.4-imap php8.4-mysql php8.4-mbstring \
php8.4-xml php8.4-zip php8.4-bcmath php8.4-soap \
php8.4-intl php8.4-readline \
php8.4-ldap \
php8.4-msgpack php8.4-igbinary php8.4-redis php8.4-swoole \
php8.4-memcached php8.4-pcov php8.4-imagick php8.4-xdebug \
php8.4-mailparse \
1–2 sailのDockerを再ビルド
$ ./vendor/bin/sail build --no-cache
→少し時間がかかりますが、インストールを完了、sailを再起動するとphpinfoなどで「mailparse」が追加されていることを確認します。
2.ライブラリをsail経由でインストール
2–1.インストール
$ ./vendor/bin/sail composer require php-mime-mail-parser/php-mime-mail-parser
ライブラリの細かい使い方は以下より
https://github.com/php-mime-mail-parser/php-mime-mail-parser
3.FAXのEメールを受信処理する
3–1.受信〜画像の処理
//パーサーをuse
use PhpMimeMailParser\Parser;
//パーサーを生成、ソースの読込
$parser = new Parser();
$parser->setPath($path); //emlファイルを読込の場合
$parser->setStream(fopen('php://stdin', 'r')); //標準入力より
//添付ファイルを取得
$attachments = $this->parser->getAttachments();
$attachment = $attachments[0]; //今回は1ファイルのみしか来ないので1つのみを取得
//tiffファイルを保存
$tmpPath = $attachment->save(保存したいパス指定, Parser::ATTACHMENT_DUPLICATE_SUFFIX);
//ImageMagickで取得
$images = new Imagick($tmpPath);
//faxのデータがtiff(複数ページ)で来るので画像ごとに処理
foreach ($images as $index => $image) {
//フォーマット変更,画像処理,リサイズ,サムネ,DB紐づけ,その他何かしらの処理..
}
//画像クリア
$images->clear();
//元tiff要らなければ削除
unlink($tmpPath);