こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

[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で設定。

投稿日時 - 2011-06-21 12:02:28

QNo.6825133

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

情報が足りないので、そういう可能性もあるかと思って書いただけです。
補足でわかりました。

ところで、こういう書き方するんじゃないですかね?
http://www.key-p.com/blog/staff/archives/131

「postfix 受信 php実行」とかでぐぐったら、いろいろ情報出てきますが。

投稿日時 - 2011-07-07 20:03:50

補足

再度補足します。

今回問題に挙げていたpostfixによって、
メール受信をトリガーにファイル呼び出しを行う点について、
サーバ内部からmailコマンドを実行した場合に実現が出来ました。

今回呼び出されたPHPファイルでログファイルに出力を行い、
ログファイルに出力があるかないかで上記が実現出来ているか判断していたのですが、
実際は、PHP実行時権限がnobodyとなっていたのが原因で、
ログファイルに出力が出来ておらず、postfixでのファイル呼び出しが出来ていないと
思い込んでおりました。

フルアクセスのフォルダを作成し、PHP実行時に空ファイルを作成するというような
記述を行い、実際に空ファイルを作成出来たので、postfixでのファイル呼び出しが
出来ているという事を確認出来ました。

お騒がせして申し訳ございませんでした。
(別の問題はまだありますが、別質問にて問い合わせさせて頂きますので、
一旦こちらの質問はクローズします。)


また教えて頂いた書き方だと、エラーとなりファイル呼び出しが出来ませんでした。

私が質問に挙げたパイプでファイル名とPHP実行ファイルの箇所を指定する
記述で問題ありませんでした。参考までに。

投稿日時 - 2011-07-18 21:28:05

お礼

御回答ありがとうございます。
御礼が遅くなり申し訳ありません。

結論から述べますと、書き方変えてもダメでした。


今、出来ている事と出来てない事として以下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設定ファイル等)
といったところで、理解出来ていない部分があり困っております。
(中でも原因特定が一番困っています)

お気付きの点がございましたら、御教授頂けると幸いです。
よろしくお願い致します。長文失礼しました。

投稿日時 - 2011-07-12 12:08:09

ANo.1

受信ができない問題を最初に解決しないと、この問題も解決できないのでは?

投稿日時 - 2011-06-22 07:40:33

補足

ご回答頂き、ありがとうございます。

本件複数の問題があると思いますが、
(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バリュードメインにも該当ドメインは設定済みとの事です。
(本部分は他者が作業しており確認はこれから行う予定です。)

上記サーバー外部からのメール受信に関しても、
思い当たる点や確認方法を御教授頂けると助かります。

何卒よろしくお願い致します。

投稿日時 - 2011-06-22 14:25:39

お礼

お礼の記述になります。
再度の問い合わせで申し訳ないのですが、
「受信ができない問題を最初に解決しないと、この問題も解決できないのでは?」
と思われた理由を御教授頂けると助かります。

未だ本件解決できず。。。
御協力頂けますよう何卒よろしくお願い致します。

投稿日時 - 2011-07-07 18:22:12

あなたにオススメの質問