アプリ版:「スタンプのみでお礼する」機能のリリースについて

大変お世話になります。

PostfixとPerlを使ってメールサーバで指定したスクリプトに転送する方法を考えております。
たとえば、test@**.netでメールを受信した際に、そのメールをtest.cgiに送り、処理させたいと思っております。

私が考えた方法として、
/etc/aliasesに
test:test,"| /home/test/test.cgi"
と思ったのですが、書き方が間違っているのかうまくいきません。

どなたかご教授いただけませんか。
よろしくお願いします。

A 回答 (6件)

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 のエラーメッセージを教えてください。

この回答への補足

ありがとうございます。

教えていただいた通り設定してみましたが、やはりうまくいきませんでした・・・。
.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でしたらうまくいきます。

私には原因がいまいちよくわからず・・・。
上記のようなエラーでアドバイスいただけますか?

補足日時:2006/10/02 02:30
    • good
    • 0

であれば、次の情報源としては


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 …
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お礼日時:2006/10/02 20:56

>42 3 local[1542]: fatal: execvp /home/test/test.cgi: Permission denied



postfixで外部コマンド及びプログラム実行する権限はmain.cfの「default_privs」で設定されます。もしない場合はデフォルトの「nobody」になっていますので、おそらく/home/test/またはtest.cgiへの権限がないのではないかと思います。

.forwardで成功したなら深追いすることもないかもしれませんが。
    • good
    • 0
この回答へのお礼

ありがとうございました。

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

お礼日時:2006/10/02 20:54

postfix の場合、直接メールを処理できるスクリプトは /etc/smrsh/ にある必要があります。

普通はここに実際のスクリプトへのシンボリックリンクを入れておきます。

この回答への補足

ありがとうございます。

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

補足日時:2006/10/01 22:42
    • good
    • 0

sendmailでしか試したことはないですがそう言う場合


ユーザーtestの.forwardに
\test,"| /home/test/test.cgi"
としてはいかがですか?
    • good
    • 1
この回答へのお礼

ありがとうございます。

.forwardでしたらうまくいきました。
しかし、なぜ、aliasesではうまくいかないのか疑問で・・・。
書き方なのか、設定なのか・・・。

お礼日時:2006/10/02 02:32

ちゃんと、aliasesをデータベース化していますか?


していなければ、マニュアルをちゃんと読みましょう。

man 5 aliases
>Postfix エイリアスデータベースを変更した後は、
>インデックスファイルを再構築するために
>newaliases コマンドを実行してください。

参考URL:http://www.kobitosan.net/postfix/trans-2.0/jhtml …

この回答への補足

ありがとうございます。

ご指摘いただいたデータベース化ですが、newaliases コマンドにてしております。

しかし、うまくスクリプトに送られていないようなので、書き方が間違ってるのかと・・・。

補足日時:2006/10/01 18:36
    • good
    • 0

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