メールを受けたら内容を自動解析してほしいとかたまにあるやつ。
Postfixの設定
alias機能を使うとできるらしい。
sudo vi /etc/postfix/main.cf
とりあえずこんな感じにしてみる。
下2行のalias設定の有効化が大事。
myhostname = mail.hogehoge.com mydomain = hogehoge.com myorigin = $mydomain inet_interfaces = all inet_protocols = ipv4 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/postfix/aliases
次にaliasを設定。
vi /etc/postfix/aliases
foo@hogehoge.com
へ来たメールを/home/foo/script/mail_hook.php
に処理させる。
foo: foo,|"/usr/bin/php /home/foo/script/mail_hook.php"
設定ファイルを書いたら以下のコマンドで反映する。
newaliases
解析処理
PHPでやる。ほかの言語でもライブラリさえ探せば似たようなモノだと思う。
よいライブラリがあるのでありがたく使う。
公式の記載通り、Ubuntuでは以下のようにphp-mailparseが必要。
sudo apt install php-mailparse
RedHat系でも以下で入れられる。
dnf install php-mailparse
書くまでもないけどcomposerでライブラリを入れる。
composer require php-mime-mail-parser/php-mime-mail-parser
あとはこんなコードを書くとそれっぽくできる。
細かいことは公式を見ればOK。
<?php require_once __DIR__.'/../vendor/autoload.php'; // 保存先 $save_dir = '/home/path/to'; // ============================= // 標準入力からメールをもらって解析する // ============================= $parser = new PhpMimeMailParser\Parser(); $parser->setStream(fopen("php://stdin", "r")); // ============================= // fromを取得 // ============================= $from_addrs = $parser->getAddresses('from'); $from = $from_addrs[0]['address']; // ============================= // 保存する // ============================= // bodyを保存する $text = $parser->getMessageBody('text'); file_put_contents($save_dir.'/body.txt', $text); // 添付ファイルを保存する $parser->saveAttachments($save_dir.'/', false);
レンタルサーバーでも設定できるらしい
Xserverでやった人
XSERVER : メール受信をトリガーにして処理を起動 | R-Y-O の IT 備忘録 Ver.2.0
さくらでやった人
さくらのレンタルサーバでメール受信時にスクリプトを起動させる設定メモ - 風柳メモ