• ベストアンサー

メールサーバで指定したスクリプトに転送方法

大変お世話になります。 PostfixとPerlを使ってメールサーバで指定したスクリプトに転送する方法を考えております。 たとえば、test@**.netでメールを受信した際に、そのメールをtest.cgiに送り、処理させたいと思っております。 私が考えた方法として、 /etc/aliasesに test:test,"| /home/test/test.cgi" と思ったのですが、書き方が間違っているのかうまくいきません。 どなたかご教授いただけませんか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

1./etc/postfix/main.cf に「alias_maps = hash:/etc/aliases」が入っていることを確認(main.cfのパスは違うかもしれません) 2./etc/alias に test: "|/home/test/test.cgi" と書く 3.下記コマンドで反映させる # postalias /etc/aliases でどうでしょうか? だめだったら/var/log/maillog のエラーメッセージを教えてください。

hana43
質問者

補足

ありがとうございます。 教えていただいた通り設定してみましたが、やはりうまくいきませんでした・・・。 .forwardでしたらうまくいったのですが・・・。 エラーを以下に明記します。 35 3 postfix/smtpd[1533]: table hash:/etc/aliases(0,100) has changed -- restarting 36 3 postfix/smtpd[1540]: connect from smtp23.*******.jp[***.***.***.***] 37 3 postfix/smtpd[1540]: 1DC351E403A: client=smtp23.*******.jp[***.***.***.***] 38 3 postfix/cleanup[1528]: 1DC351E403A: message-id=<021a01c6e57d$c7c4bd30$020ba8c0@pc> 39 3 postfix/qmgr[1366]: 1DC351E403A: from=<abc@*******.jp>, size=1220, nrcpt=1 (queue active) 40 3 postfix/local[1534]: table hash:/etc/aliases(0,34100) has changed -- restarting 41 3 postfix/local[1541]: 1DC351E403A: to=<test@**.net>, relay=local, delay=0, status=sent (delivered to mailbox) 42 3 local[1542]: fatal: execvp /home/test/test.cgi: Permission denied 43 3 postfix/smtpd[1540]: disconn>, size=2919, nrcpt=1 (queue active) 44 3 postfix/qmgr[1366]: 1DC351E403A: removed 45 3 postfix/smtp[1537]: 2C1251E403B: to=<abc@*******.jp>, relay=mx1.*******.jp[***.***.***.***], delay=0, status=sent (250 ok dirdel) 46 3 postfix/qmgr[1366]: 2C1251E403B: removed 42行目にPermission deniedと出てるのですが、.forwardでしたらうまくいきます。 私には原因がいまいちよくわからず・・・。 上記のようなエラーでアドバイスいただけますか?

その他の回答 (5)

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.6

であれば、次の情報源としては man 8 local を参照して下さい。forwardやaliasesを実際に解釈するのは、この local コマンドになります。 下の回答で >postfix の場合、直接メールを処理できるスクリプト >は /etc/smrsh/ にある必要があります。普通はここ >に実際のスクリプトへのシンボリックリンクを入れて >おきます。 とありますが、postfix標準では、smrshは利用されません。(LinuxDistribution次第では標準でそのように設定されていることもある) 恐らく、そちらのシステムでも利用されていないと思いますよ。 なお、execvpが失敗しているのは、下の回答にある通り、ファイルの実行権限(chmod o+x)でしょう。

参考URL:
http://www.kobitosan.net/postfix/trans-2.2/jhtml/local.8.html
hana43
質問者

お礼

ありがとうございます。 私のシステムでもsmrshは利用されていませんでした。 権限問題については、変更を行ったところ、うまくいきました。 ありがとうございました。

回答No.5

>42 3 local[1542]: fatal: execvp /home/test/test.cgi: Permission denied postfixで外部コマンド及びプログラム実行する権限はmain.cfの「default_privs」で設定されます。もしない場合はデフォルトの「nobody」になっていますので、おそらく/home/test/またはtest.cgiへの権限がないのではないかと思います。 .forwardで成功したなら深追いすることもないかもしれませんが。

hana43
質問者

お礼

ありがとうございました。 権限について調べて変更を行ったところ、うまくいきました。 本当にありがとうございました。

  • moritan2
  • ベストアンサー率25% (168/670)
回答No.3

postfix の場合、直接メールを処理できるスクリプトは /etc/smrsh/ にある必要があります。普通はここに実際のスクリプトへのシンボリックリンクを入れておきます。

hana43
質問者

補足

ありがとうございます。 見てみたのですが、/etc/smrsh/がないのですが・・・。 これは新規にディレクトリを作成するのでしょうか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

sendmailでしか試したことはないですがそう言う場合 ユーザーtestの.forwardに \test,"| /home/test/test.cgi" としてはいかがですか?

hana43
質問者

お礼

ありがとうございます。 .forwardでしたらうまくいきました。 しかし、なぜ、aliasesではうまくいかないのか疑問で・・・。 書き方なのか、設定なのか・・・。

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.1

ちゃんと、aliasesをデータベース化していますか? していなければ、マニュアルをちゃんと読みましょう。 man 5 aliases >Postfix エイリアスデータベースを変更した後は、 >インデックスファイルを再構築するために >newaliases コマンドを実行してください。

参考URL:
http://www.kobitosan.net/postfix/trans-2.0/jhtml/aliases.5.html
hana43
質問者

補足

ありがとうございます。 ご指摘いただいたデータベース化ですが、newaliases コマンドにてしております。 しかし、うまくスクリプトに送られていないようなので、書き方が間違ってるのかと・・・。

関連するQ&A