メール連動型のアプリケーションを作成しているとちょくちょく必要になってきます。
qmailなんかをよく使っていた頃は、ユーザーフォルダの.qmailファイルを使って行っていたのですが、postfixになって、aliasesファイルに一元化できたので色々と楽になりました。
/etc/aliases
このファイルです。
aliasesの記述方法
最後の一文を追加です。
sales: postmaster
support: postmaster
# trap decode to catch security attacks
decode: root
root: piyopiyo@monmon.jp
hogehoge: |"php /var/fugafuga/gehageha.php"
上記例では、monmon.jp のサーバだった場合、hogehoge@monmon.jpに届いたメールをフックに /var/fugafuga/gehageha.php を起動しています。”|” を忘れずに。
aliasesを変更した場合は、以下のコマンドで再読み込みが必要です。こっちもお忘れなく。
newaliases
php-mime-mail-parserをインストール
メールのパースには最近だとphp-mime-mail-parserを使うのが楽かなぁ。
composer require php-mime-mail-parser/php-mime-mail-parser
インストールでエラーが出た。。
Problem 1
- Root composer.json requires php-mime-mail-parser/php-mime-mail-parser ^7.0 -> satisfiable by php-mime-mail-parser/php-mime-mail-parser[7.0.0].
- php-mime-mail-parser/php-mime-mail-parser 7.0.0 requires ext-mailparse * -> it is missing from your system. Install or enable PHP's mailparse extension.
依存しているマルチパースライブラリが足りないみたい。
sudo apt install php-mailparse
Ubuntuの場合、これでOK。CentOSの場合は、
yum install --enablerepo=remi,remi-php74 php-pecl-mailparse
php7.4の場合は、こんな感じかなぁ。
再度、composerからインストールすると入りました。
Installing 'unzip' may remediate them.
- Downloading php-mime-mail-parser/php-mime-mail-parser (7.0.0)
- Installing php-mime-mail-parser/php-mime-mail-parser (7.0.0): Extracting archive
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
phpでメールを受け取る
phpのソースはこんな感じになります。
<?php
require __DIR__.'/vendor/autoload.php';
use PhpMimeMailParser\Parser;
//ライブラリでメールをパースして
$parser = new Parser();
$parser->setStream(fopen('php://stdin', 'r'));
//こんな感じで各要素を読み込み
$to = $parser->getHeader('to');
$addressesTo = $parser->getAddresses('to');
$from = $parser->getHeader('from');
$addressesFrom = $parser->getAddresses('from');
$subject = $parser->getHeader('subject');
$text = $parser->getMessageBody('text');
//あとは自由に使うだけ♪
非ユーザーの起動ユーザーを指定
非ユーザーだった場合に、postfixでプログラムを起動する際のユーザーが指定できます。
sudo vi /etc/postfix/main.cf
最後にこの行を追加です。
default_privs = apache
apacheの部分は任意のユーザー名でOKです。
デフォルトのままだとnobodyかな。ちなみにrootは指定できません。
sudo systemctl reload postfix
ここでも変更後はリロードをお忘れなく。