- 締切済み
[postfix]aliasesでphp呼び出し
linux環境でWEBシステムを構築しています。 postfixにてあるアドレス(pictup@test.jp)にメールを受信したタイミングで、 PHPファイルを呼び出させようとしていますが、 上手く出来ていません。 原因が特定できていない為、何ともいえないのですが、 POSTFIXのmain.cf、及びaliasesの設定に不備及び不足はあるでしょうか? その他に思い当たる原因や不備不足があれば御教授下さい。 (不足している情報があればおっしゃって下さい。) ●各種バージョンは以下の通りです。 [各種バージョン] OS:CentOS release 4.6 (Final)Kernel \r on an \m postfix:2.3.5 PHP:5.2.14 ●POSTFIXのmain.cf及びaliasesの記述内容 [POSTFIXのmain.cf] ・配置場所 /etc/postfix/main.cf ・内容 ※必要箇所のみ抜粋。(コメント行等抜粋) queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix mail_owner = postfix myhostname = host.local.domain mydomain = local.domain myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost, test.jp unknown_local_recipient_reject_code = 550 mynetworks = 168.100.189.0/28, 127.0.0.0/8, 125.100.128.101, 192.168.0.0/24, 127.0.0.0/8 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases home_mailbox = Maildir/ mail_spool_directory = /var/spool/mail debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.3.3/samples readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/isp_auth smtp_sasl_security_options = noanonymous [POSTFIXのaliases] ・配置場所 /etc/aliases ・内容 ※必要箇所のみ抜粋。(コメント行等抜粋) mailer-daemon: postmaster postmaster: root bin: root daemon: root adm: root lp: root sync: root shutdown: root halt: root mail: root news: root uucp: root operator: root games: root gopher: root ftp: root nobody: root radiusd: root nut: root dbus: root vcsa: root canna: root wnn: root rpm: root nscd: root pcap: root apache: root webalizer: root dovecot: root fax: root quagga: root radvd: root pvm: root amanda: root privoxy: root ident: root named: root xfs: root gdm: root mailnull: root postgres: root sshd: root smmsp: root postfix: root netdump: root ldap: root squid: root ntp: root mysql: root desktop: root rpcuser: root rpc: root nfsnobody: root ingres: root system: root toor: root manager: root dumper: root abuse: root newsadm: news newsadmin: news usenet: news ftpadm: ftp ftpadmin: ftp ftp-adm: ftp ftp-admin: ftp www: webmaster webmaster: root noc: root security: root hostmaster: root info: postmaster marketing: postmaster sales: postmaster support: postmaster decode: root # 転送設定 #pictup: testmail@abc.com ←この行を有効にして、mailコマンドでpictup@test.jpにメール送信したらtestmail@abc.comに転送は出来た。 pictup: "|/usr/local/php/bin/php /home/demo/batch/system/mail_received.php" ←パイプで繋いでいる内容としては、インストールしたphp本体在り処、起動したいphpファイルを記述。 ●動作確認方法 上記、linuxサーバーにログインして以下mailコマンド実行。 (linuxサーバー外からのメール受信も上手くいっていない為。 こちらも質問すると長くなる為、PHPファイル起動部分を一先ず解決したい。) # mail pictup@test.jp Subject: TEST AAAA . Cc: [Enter]で終了。 ●その他 ・/var/log/maillogには以下ログが出力されています。 *** ** **:**:** lvs01 postfix/cleanup[16096]: 609D82230044: message-id=<20110621025126.609D82230044@host.local.domain> *** ** **:**:** lvs01 postfix/qmgr[8904]: 609D82230044: from=<root@local.domain>, size=305, nrcpt=1 (queue active) *** ** **:**:** lvs01 postfix/local[16098]: 609D82230044: to=<pictup@test.jp>, relay=local, delay=0.05, delays=0.01/0/0/0.03, dsn=2.0.0, status=sent (delivered to command: /usr/local/php/bin/php /home/demo/batch/system/mail_received.php) *** ** **:**:** lvs01 postfix/qmgr[8904]: 609D82230044: remove ・postfix修正後は以下コマンド実行済み。 newaliases /etc/rc.d/init.d/postfix restart ・本サーバはGUI環境がなくCUIで設定。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- wingstar
- ベストアンサー率37% (102/275)
情報が足りないので、そういう可能性もあるかと思って書いただけです。 補足でわかりました。 ところで、こういう書き方するんじゃないですかね? http://www.key-p.com/blog/staff/archives/131 「postfix 受信 php実行」とかでぐぐったら、いろいろ情報出てきますが。
- wingstar
- ベストアンサー率37% (102/275)
受信ができない問題を最初に解決しないと、この問題も解決できないのでは?
お礼
お礼の記述になります。 再度の問い合わせで申し訳ないのですが、 「受信ができない問題を最初に解決しないと、この問題も解決できないのでは?」 と思われた理由を御教授頂けると助かります。 未だ本件解決できず。。。 御協力頂けますよう何卒よろしくお願い致します。
補足
ご回答頂き、ありがとうございます。 本件複数の問題があると思いますが、 (1)サーバー外部からのメールが受信できていない (2)サーバー内部からのメールに対してaliasesのPHP呼び出しができていない という問題は切り分けて考えられると思ったのですが、 (2)は(1)の要因で上手くいっていないのでしょうか? 何故そのように思われたかも補足して頂けると助かります。 一部補足しますと、内部からmailコマンドでroot宛や例に挙げたpictup宛の メールを送信した場合にaliasesに転送の記述をしていれば外部メールへ転送出来ているので、 (Ex. root: aaaa@co.jpのようにaliasesに記述すればaaaa@co.jpには転送出来ている) aliases自体のPHPを呼び出す記述に問題があるかと思いました。 サーバー外部からのメールを受信できていないという点は、 PORT設定やDNS設定等に問題があるかと考えています。 PORT25は開放して頂いておりDNSバリュードメインにも該当ドメインは設定済みとの事です。 (本部分は他者が作業しており確認はこれから行う予定です。) 上記サーバー外部からのメール受信に関しても、 思い当たる点や確認方法を御教授頂けると助かります。 何卒よろしくお願い致します。
お礼
御回答ありがとうございます。 御礼が遅くなり申し訳ありません。 結論から述べますと、書き方変えてもダメでした。 今、出来ている事と出来てない事として以下3点が挙げられます。 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. 上記を踏まえて、実行した内容は以下3点の通りです。 (1)postfixの記述変更(転送設定をコメントアウトして教えて頂いた内容を記述) # root: test@aaa.com root: "| /usr/local/php/bin/php -f /home/ioix/demo/batch/system/mail_received.php > /dev/null 2>&1" (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]# 上記実行時、tail -f /var/log/mailog に出力されていたログは以下の通りです。 Jul 12 **:**:** aaaaa postfix/pickup[12290]: 5BD7D223006D: uid=0 from=<root> Jul 12 **:**:** aaaaa postfix/cleanup[12823]: 5BD7D223006D: message-id=<20110712024943.5BD7D223006D@host.local.domain> Jul 12 **:**:** aaaaa postfix/qmgr[12291]: 5BD7D223006D: from=<root@local.domain>, size=318, nrcpt=1 (queue active) Jul 12 **:**:** aaaaa postfix/local[12825]: 5BD7D223006D: to=<root@3cha.test.jp>, relay=local, delay=0.04, delays=0.01/0/0/0.03, dsn=2.0.0, status=sent (delivered to command: /usr/local/php/bin/php -f /home/ioix/demo/batch/system/mail_received.php > /dev/null 2>&1) Jul 12 **:**:** aaaaa postfix/qmgr[12291]: 5BD7D223006D: removed ちなみに、教えて頂く前に私がpostfixに記載していた以下記述を linuxコマンドとして手動実行すると、phpは実行されているので、 postfixのaliasesのphp実行部分の記述ではなく、postfixの設定ファイル等の 他部分が上手くいっていない原因のような気がしています。 /usr/local/php/bin/php /home/demo/batch/system/mail_received.php mail_received.php内にはデバックログを入れており、 linuxコマンドでPHPファイルを手動実行すると、デバックログ出力される。 mailコマンドでPHPファイルをpostfixで実行すると、デバックログ出力されない。 という結果からpostfixの何らかの設定が上手く出来ていないと判断しました。 あと、postfixの設定は現在以下の通りです。 [root@aaa etc]# postconf -n 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 = 550 そして検索情報も教えて頂いてありがとうございます。 こちらでも教えて頂いたような検索キーワードで、 色々と情報を得て試してみているものの、 ・何故そのような設定にするのか? ・何を設定したらよいのか?(postfixの設定は調べれば出てくるが、「このように設定した」ばかりで、記述があっているか間違っているか判断材料となるようなサイトが少ない) ・上手くいっていない原因を調べる方法(サーバへの経路確認方法やpostfix設定ファイル等) といったところで、理解出来ていない部分があり困っております。 (中でも原因特定が一番困っています) お気付きの点がございましたら、御教授頂けると幸いです。 よろしくお願い致します。長文失礼しました。
補足
再度補足します。 今回問題に挙げていたpostfixによって、 メール受信をトリガーにファイル呼び出しを行う点について、 サーバ内部からmailコマンドを実行した場合に実現が出来ました。 今回呼び出されたPHPファイルでログファイルに出力を行い、 ログファイルに出力があるかないかで上記が実現出来ているか判断していたのですが、 実際は、PHP実行時権限がnobodyとなっていたのが原因で、 ログファイルに出力が出来ておらず、postfixでのファイル呼び出しが出来ていないと 思い込んでおりました。 フルアクセスのフォルダを作成し、PHP実行時に空ファイルを作成するというような 記述を行い、実際に空ファイルを作成出来たので、postfixでのファイル呼び出しが 出来ているという事を確認出来ました。 お騒がせして申し訳ございませんでした。 (別の問題はまだありますが、別質問にて問い合わせさせて頂きますので、 一旦こちらの質問はクローズします。) また教えて頂いた書き方だと、エラーとなりファイル呼び出しが出来ませんでした。 私が質問に挙げたパイプでファイル名とPHP実行ファイルの箇所を指定する 記述で問題ありませんでした。参考までに。