pleskで管理しているメールアドレスでメール受信をきっかけに PHPプログラムを動作させる

サーバー管理ソフトウェアの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管理を。

pleskで管理しているメールアドレスでメール受信をきっかけに PHPプログラムを動作させる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です