サーバー管理ソフトウェアのPlesk皆さんお使いでしょうか?
1台のサーバーに複数のドメインを管理する時には必須といってもいいほど便利なソフトウェアです。
今回はこのpleskで管理しているメールアドレスへメールが送信されてきた時にPHPプログラムを動作させる方法を書いておきます。
● Plesk 12 (Centos 6)のqmailで管理しているメールアドレスへのメール受信でPHPプログラムを動作させる
● 1. テスト用PHPプログラムを用意する
こことても重要です。
とにかくシンプルなプログラムを用意してうまく動作しなかった時のチェック項目を減らすということが一番重要になってきます。
チェック用PHPプログラム。これをまず .qmail があるディレクトリへ作成します
メールアドレス TEST@YOUR.SERVER.COM でのケースとします。
.qmail の場所は
/var/qmail/mailnames/<YOUR.SERVER.COM>/<TEST>/.qmail
なので、
vi /var/qmail/mailnames/<YOUR.SERVER.COM>/<TEST>/test_mail.php
として、以下の内容で保存します。
test_mail.php
<?php
mail('HOGE@FUGA.FUGA.COM','title','mail text');
(HOGE@FUGA.FUGA.COM は 適宜書き換えてください。)
(ユーザー、グループは .qmail と同じものに変更してください。)
● 2. メール受信時にプログラム起動する .qmail ファイルを編集する
.qmail の場所は
vi /var/qmail/mailnames/<YOUR.SERVER.COM>/<TEST>/.qmail
.qmail のデフォルトの状態はこのようになっています。
| true
| /usr/bin/deliverquota ./Maildir
それをこちらに変更します。
.qmail
| true
| /usr/bin/deliverquota ./Maildir
| /usr/bin/php ./test_mail.php
これで、「TEST@YOUR.SERVER.COM」でメールを受信すると、
「自分のメールサーバーにメールを残しつつ」「PHPプログラムを動かす」ことができます
自分のメールサーバーにメールを残す必要がない場合は
| /usr/bin/deliverquota ./Maildir
この行を行ごと削除するか、 先頭に # を一つ付けてコメントアウトします。
「TEST@YOUR.SERVER.COM」へメールを送信し、プログラムが動いたかどうかを確認します。
● 3. 別のディレクトリにあるプログラムが動作するか確認する。
先ほどの
.qmail
| /usr/bin/php ./test_mail.php
を別のディレクトリに書き換えた時に動作するかどうか確認します。
例えば WEBサーバの上で公開しているプログラムが動作するかを確認してみます。
・http://<YOURDOMAIN>/php/test_mail.php のプログラムがメール受信をきっかけに動作するか確認する。
.qmail
| /usr/bin/php /var/www/vhosts/<YOUR.SERVER.COM>/httpdocs/<YOURDOMAIN>/php/test_mail.php
こちらに書き換えて、
「TEST@YOUR.SERVER.COM」へメールを送信し、プログラムが動いたかどうかを確認します。
・プログラムが動作していない場合
cat /var/log/maillog
こちらからメールのログを表示し、エラーがあるかどうかを調べます。
● 4. deferral エラーが maillog に記録されている場合
deferral: Could_not_open_input_file:_/usr/bin/php /var/www/vhosts/<YOUR.SERVER.COM>/httpdocs/2018fto/php/test_mail.php/
プログラムが動作していない時は、このようなエラーが表示されていると思います。
ルートからの絶対パスを記述しているのにこのようなエラーが出る場合は chroot されている可能性が高いです。
● 5. 別ディレクトリのphpプログラムが動作しない場合
qmailによって chroot されている可能性が高いです。
chroot時はシンボリックリンクが聞かないので、mount -o bind で使用したいパスを全てマウントするといいでしょう。
/opt
/usr
/lib64
/var
あたりをマウントするといいでしょう。
それでは良きPlesk管理を。