プロが教えるわが家の防犯対策術!

postfixでメール受信をトリガーにPHPファイル実行したいが、メールサーバでメールを受信できません。

linux環境でWEBシステムを構築しております。
環境構築や設定についての知識が乏しく分かり辛い点が多々あるかもしれませんが、
御指摘下さい。

実現したい事として、
postfixであるメールアドレス(pictup@3cha.test.jp)にメールを受信したタイミングで、
PHPファイルを実行させようとしていますが、上手く出来ていません。

メールサーバにてメールを受信出来ていない原因を追究し解消したいのですが、
どのような手順で調査すればよいか分からずにいます。
(通信経路に不具合がありそうなので調べたいのですが、何をどのように調べたらよいか理解しきれていません)

実施した内容や現在の設定を以下に記載します。
その他に必要な情報があれば追記致しますので、御連絡下さい。

●各種環境のバージョンは以下の通り
[各種バージョン]
OS:CentOS release 4.6 (Final)Kernel \r on an \m
postfix:2.3.5
PHP:5.2.14

●postfixのaliases及びmain.cfの記述内容
【postのaliases】
・配置場所
/etc/aliases
・内容
※追記箇所のみ抜粋。(コメント行等抜粋)
# 転送設定
#pictup: testmail@abc.com ←この行を有効にして、mailコマンドでpictup@3cha.test.jpにメール送信したらtestmail@abc.comに転送は出来た。
pictup: "| /usr/local/php/bin/php /home/ioix/demo/batch/system/mail_received.php"

【postfixのmain.cf】
[root@aaa etc]# postconf -n 実行結果
・配置場所
/etc/postfix/main.cf
・内容
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, 3cha.test.jp
mydomain = local.domain
myhostname = host.local.domain
mynetworks = 168.100.189.0/28, 127.0.0.0/8, 125.100.128.101, 192.168.100.0/24, 127.0.0.0/8
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
sample_directory = /usr/share/doc/postfix-2.3.3/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/isp_auth
smtp_sasl_security_options = noanonymous
unknown_local_recipient_reject_code = 55

●動作確認方法
以下、3点の手順で確認。
(linuxサーバ内部からmailコマンド実行している理由は、外からのメール受信が上手くいっていない為。)
下記コマンド実行したがPHPファイルは起動されなかった。

(1)postfixの記述変更(転送設定をコメントアウトして教えて頂いた内容を記述)
pictup: "| /usr/local/php/bin/php /home/ioix/demo/batch/system/mail_received.php"
上記のように設定。
(2)postfix再起動
以下コマンドを実行
[root@aaa etc]# newaliases
[root@aaa etc]# /etc/rc.d/init.d/postfix restart (←念の為リスタート実行)
(3)mailコマンドでサーバ内部からメール送信
[root@aaa etc]# mail -s TestSend root@3cha.test.jp
TESTSEND to Server
.
Cc:
[root@aaa etc]#

●現状の出来ている事
【出来ている事】
(1)サーバからmailコマンドで外部メールアドレスへメール送信出来る

(2)postfixのaliasesファイルに以下記述をして、root@***にサーバからmailコマンドで
root宛にメールを送ると転送されて外部メールアドレスで送ったメールが確認出来る
root: test@aaa.com

(3)サーバ外部からサーバのpostfixに設定したドメイン宛にメールを送っても以下エラーでサーバにメールは届かない。
[postfixのaliases内のmydestinationを以下に変更]
mydestination = $myhostname, localhost.$mydomain, localhost, 3cha.test.jp
[送信したメール宛に戻ってくるエラーメッセージ]
Hi. This is the qmail-send program at e2087.secure.jp.
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.

<root@3cha.test.jp>:
Sorry, I wasn't able to establish an SMTP connection. (#4.4.1) I'm not going to try again; this message has been in the queue too long.

(4)nslookupコマンドで正引きとMXレコードは確認済み(一部IPは伏せてあります)
※MXレコードの設定がこれで良いのかが自分自身で判断出来ていません。
[root@aaa etc]# nslookup
> 3cha.test.jp
Server: 192.***.***.***
Address: 192.***.***.***#53

Non-authoritative answer:
Name: 3cha.test.jp
Address: 125.***.***.***

[root@aaa etc]# nslookup
> set type=mx
> 3cha.test.jp
Server: 192.***.***.***
Address: 192.***.***.***#53

Non-authoritative answer:
3cha.test.jp mail exchanger = 10 mail.cpos.jp.

Authoritative answers can be found from:
cpos.jp nameserver = ns2.value-domain.com.
cpos.jp nameserver = ns1.value-domain.com.
mail.cpos.jp internet address = 125.***.***.***
ns1.value-domain.com internet address = 119.***.***.**
ns2.value-domain.com internet address = 175.**.**.**


長文且つ纏まりがなく大変申し訳ございません。
何から手をつけてよいのか、分からなくなってきてしまったので、
どんな些細な事で構わないのでアドバイス頂ければ幸いです。
よろしくお願い致します。

A 回答 (1件)

こんちす



本件、アプローチは以下と思います。

1)メールの送受信ができる
2)メールの受信をトリガとしてPHP(?)を起動する

ですが、2)はもともと実行できるんでしょうか?
私の認識では、PHPはサーバサイドのスクリプトで
Apacheなどがないと動かないのでは?

PHPって、Webサーバにブラウザでアクセスした時に動く
ものであり、サーバ上でPHPを単体で動かすなんてのは
聞いたことがありません。

大丈夫でしょうか?

この回答への補足

御回答ありがとうございます。
また、こちらの説明が不足しており大変申し訳ございません。

>私の認識では、PHPはサーバサイドのスクリプトで
>Apacheなどがないと動かないのでは?
御指摘の通りです。

今回の前提として何故メールをトリガにPHP(プログラム)を動かす必要があるのか補足させて頂きます。

現在、ガラケー(フィーチャーフォン)の開発をしております。
PCでは画像のアップロードをする場合、アップロードダイアログを利用して
ファイルアップ出来るのですが、ガラケーの場合それが出来ない機種があります。
なので、画像添付したメールを特定のメールアドレスに送信し、
postfixでメール受信をトリガーにプログラムを実行し、
メール解析を行い添付画像をサーバの特定ディレクトリに保存して、
後に参照するという事を実現しようとしています。
(上記は、ガラケーの画像投稿掲示板等を実現する為に多く行われている手法です。
またメールをトリガとして起動させるプログラムがPHPなのは、
受け取ったメールの情報を基に、画像加工やDB情報更新処理を同時に行う必要があり
処理を実装しているのが今回はPHPだからです。)

Parl等で画像のアップロードを実現する方法もあるようですが、
今回はPHP環境での開発を前提としている為、
他言語での実現は御教授頂いても実現が厳しいです。
(ガラケーの画像アップロード方法を論議し出すときりがなく、
質問から主旨がずれてしまう為、アドバイス程度に留めて頂ければ幸いです。)

同サーバにはPHPと一緒にApacheも入れています。
ちなみにApacheのバージョンは、
Apache/2.2.16
です。

>大丈夫でしょうか?
説明が不足しており申し訳ございません。
上記を踏まえて大丈夫じゃないと思われる事があれば
再度御指摘頂ければ幸いです。

上記を踏まえて、質問に再度御回答頂けると幸いです。
よろしくお願い致します。

補足日時:2011/07/15 11:51
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。
質問時の説明が不足しており申し訳ございません。

補足説明を参考に再度御回答頂ければ幸いです。
よろしくお願い致します。

お礼日時:2011/07/15 11:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!