ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

postfixコミュの【質問】メール受信からプログラムへのトリガーについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。
お酒と書いて僕と読むと言います。

自分で色々調べてやったのですがどうしてもうまく行かないのでアドバイスを頂ければと思い質問させてもらいます。

やりたい事:
testxxx@oreore.comにメールが来るとphpプログラムを起動


環境:
OS:CentOS release 5.3 (Final)
サーバー:お名前.com VPSサーバー
メールサーバー:Postfix 2.6.x
メールアカウントtestxxxは作ってません。


現在の設定:
/etc/aliasesの末尾に
testxxx: "|/usr/bin/php /var/www/・・・/httpdocs/system/test_aliases.php"
の後にnewaliasesコマンドでaliases.dbを更新
test_aliases.phpのパーミッション755

/etc/postfix/main.cf内の設定
mydomain = oreore.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
virtual_mailbox_domains = hash:/etc/postfix/virtual_domain_maps
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox_maps
virtual_alias_maps = hash:/etc/postfix/virtual_alias_maps


状況:
gmailからtestxxx@oreore.comにメールを送信すると
Delivery to the following recipient failed permanently
でメールが返ってくる。


メール受信からphpプログラムの起動という事だけが目的だったのでお名前.comのVPSサービスを選んだのですが、
phpやmysqlしかやった事がないのでサーバー関係は素人です。

他にも必要な事があれば追記で載せて行きますのでアドバイスの方をどうかお願いします。

コメント(21)

とりあえず、私の記憶では、エイリアスにコマンド書いても起動はできなかったような。
最近のでは出来たのでしたっけ?
よかったら、その情報を見つけられたポインタをお願いします。

あと、記載されている方法については存じませんんが、他の方法で良ければ、手段を存じています。
関係するキーワードをご存知なら、Googleでの検索でも出てこないではないですが、通常のパターンだと、sendmailサーバ側の知識がある程度でもないと戸惑うかもしれませんので、念のためアドバイスを。

1)postfixなら、まず、送信・受信の設定をきちんとして、よその踏み台にならないとか、サーバの場所によってはOB25Pとか、通常のメール送受信ができる準備をしてみてください。この手順に関しては、各所の情報をあさって、ある程度行うことができると思います。
まずは、この部分が出来ていないと、切り分けどころではないと思います。

2)postfix .forwardの2つのキーワードで検索して、設定方法を探してみてください。
設定方法としては割とTIPSというか、よくある質問系なので、ご自分で調べた方が理解しやすい位には情報が出てくると思います。

概要としては、指定のアカウントに届いたメールを転送処理する際に.forwardからフィルタプログラムを起動できる仕組みがあるので、ここからPHPを起動することができる、という感じです。

SPAMなどのフィルタプログラムを起動する仕組みを転用するわけですね。
コマンドの起動自体が出来ているかなどの確認方法はログに吐くなどで試せると思います。

ただし、.forwardファイルによる設定がお名前のVPSで使えるかどうかは私は把握していません。そのへんはご自分でご確認いただくか、自分で使用できるよう設定してみてください。

あと、.forward自体はsendmail時代から存在した機能/設定ファイルですので、概要についてはsendmail .forwardで検索してみて概要を把握してから詳細設定側に進んだ方が、最終的には遠回りにならないかもしれません。

これくらい検索キーワードを出しておけば、普通に回答にたどり着くと思います。
もし、これでもダメそうであれば、再度この下にぶら下げて聞くのが良いかと思います。

その際には、新たに今回お教えした内容に対して、「どこの参考資料を見て、どういう理解したから、どう設定して、どういうふうに試したが、こういうログが出て上手くいかない」などの形で具体的に書いた方が回答は得られやすいと思います。

あと、すいませんが、私はお名前のVPS環境自体を使ったことがないのでこの後の回答はできかねる気がします。参考情報のみでおゆるしくださいまし。

ではでは。
>エイリアスにコマンド書いても起動はできなかった

 出来ますよ。(間接的な表記方法であれば)
 Postfix + fml で ML 運用可能です。
 その際、Alias は /etc/alias 系じゃなく別のファイルを複数同時に指定する事も可能です。

---
alias_database = hash:/etc/mail/aliases, hash:/export/fml/(ML Name)/aliases
alias_maps = hash:/etc/mail/aliases, hash:/export/fml/(ML Name)/aliases
allow_mail_to_commands = alias, forward, include
---

 みたいな感じで。
 なので、エスパー的には「 allow_mail_to_commands 」辺りで引っ掛かってる様にも思えたり。
 とりあえず、以下を参考にしてみて下さい。
 → http://www.postfix-jp.info/trans-2.1/jhtml/postconf.5.html#allow_mail_to_commands

 つーか、「 Log を見ないと正直わからん」って事しか言えません。
 ( VPS って、Postfix の設定等は変更できても Log は読めないとか??)
アドバイス有難うございます。

>エイリアスにコマンド書いても起動はできなかったような
これに関しましては僕の書き方が悪かったので先に訂正させて頂きます。
/etc/aliases自体には
末尾にtestxxx: "|/usr/bin/php /var/www/・・・/httpdocs/system/test_aliases.php"
しか記述しておりません。
で、その後にnewaliasesコマンドでaliases.dbを更新しましたという事をお伝えしたかったのですが以後書き方に注意します。

すみませんでした。
文面を拝見する限りではメールログをみるのが手っ取り早いですね。

あちゃー、すいません。
もっと簡単な方法でできるのに、が先行して書いてしまいました。

記法を注意すればできるんですね。
おもしろそうなので、こちらでももう少し調べてみます。
教えていただいたMadさん、有難うございました。
皆さんアドバイス有難うございます。

高雄摩耶さんからの.forwardを使うという方法を先に試させて頂いたのですがどうも駄目でした。


実行した事:

お名前独自のコントロールパネルから
アカウントtestxxx@oreore.comを作成(ベッキーで送受信が出来る事は確認)

.forwardの設置場所がよく分からず
/var/vmail/oreore.com/testxxx/.forward
に設置してみました。

.forwardの内容は
○○.gmail.com
です。
パーミッションは600です。

これで取り合えず○○.gmail.comからtestxxx@oreore.comにメールを送って○○.gmail.comに転送されて来るか確かめようとしたのですが駄目でした。

他にも設定する事などはあるのでしょうか?
皆さんアドバイス有難うございます。


ちょっと最終的に自分のやりたい事と似てる事のやり方らしき事が書いてるのを見つけたので、改めて最終的にやりたい事をまとめてみました。

最終的にやりたい事の例:
info@oreore.comやtestxxx@oreore.comなどの、メールソフトなどで送受信できるアカウントは作る。
自動返信用としてはfree-.*@oreore.comみたいな固定でないメアドとしてメールを受信できるようにする
(この場合はphpなどのプログラムにパイプしてphp側でメアド、タイトル、本文を取得する。)
http://www.postfix-jp.info/ML/arc.2/msg00332.html
ここにも書いてるのですが
--------------------------------------------------------
普通なら.forwardでも使うところなんですが、
実際にアカウントがないためaliasesのパイプを使って
自前の転送プログラムにパイプする必要があるんです。
--------------------------------------------------------
との事なので自動返信用の場合はアカウントは作成しないようにしたいです。


現在試している事:
http://centossrv.com/bbshtml/webpatio/1554.shtml
この情報から

/etc/postfix/main.cf内設定は
virtual_alias_maps = hash:/etc/postfix/virtual_alias_maps


/etc/postfix/virtual_alias_mapsに
testxxx@oreore.com vvvvv
を記述


/etc/aliasesの末尾に
vvvvv: "|/usr/bin/php /var/www/vhosts/oreore.com/httpdocs/system/test_aliases.php"
を追記。
#
# Aliases in this file will NOT be expanded in the header from
# Mail, but WILL be visible over networks or from /bin/mail.
#
# >>>>>>>>>> The program "newaliases" must be run after
# >> NOTE >> this file is updated for any changes to
# >>>>>>>>>> show through to sendmail.
#

# Basic system aliases -- these MUST be present.
mailer-daemon: postmaster
postmaster: root

# General redirections for pseudo accounts.
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
webadmin: root
noc: root
security: root
hostmaster: root
info: postmaster
marketing: postmaster
sales: postmaster
support: postmaster
ssladmin: postmaster


# trap decode to catch security attacks
decode: root

# Person who should get root's mail
#root: marc
vvvvv: "|/usr/bin/php /var/www/vhosts/oreore.com/httpdocs/system/test_aliases.php"


アカウントtestxxxはお名前独自のコンパネから削除。


コマンドのnewaliasesで/etc/aliases.dbを更新
上記サイトではコマンドpostmapで/etc/postfix/virtual_alias_maps.dbを更新と書いてますが
postmap /etc/postfix/virtual_alias_maps
と打つとbash: postmap: command not foundとエラーが出て更新出来ませんでした。


一応これで○○.gmail.comからtestxxx@oreore.comにメールを送信してみましたが○○.comの方にエラーメールは返ってこないですがtest_aliases.phpが実行されもしませんでした。


長文になった上改めて違う質問内容にもなってしまいましたが、どうかアドバイスやこのキーワードで検索すればいいみたいな事でもいいので宜しくお願い致します。
状況報告させて頂きます。

postmapコマンドが使えなかった件は
suコマンドでrootに切り替えてたのを
su -で切り替える事によりpostmapコマンドが使えるようになりました。

それで無事/etc/postfix/virtual_alias_maps.dbを更新する事ができたのですが、そのせいか○○.gmail.comからtestxxx@oreore.comにメールを送信すると

This is the mail system at host smtp.oreore.com.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

The mail system

<vvvvv@smtp.oreore.com>: Command died with status 1: "/usr/bin/php
/var/www/vhosts/oreore.com/httpdocs/system/test_aliases.php". Command
output: Could not open input file:
/var/www/vhosts/oreore.com/httpdocs/system/test_aliases.php

Final-Recipient: rfc822; vvvvv@smtp.oreore.com
Original-Recipient: rfc822;testxxx@oreore.com
Action: failed
Status: 5.3.0
Diagnostic-Code: x-unix; Could not open input file:
/var/www/vhosts/oreore.com/httpdocs/system/test_aliases.php


このような内容でメールが返ってきました。

引き続き自分なりに調べてみます。
Madさん申し訳御座いません。

No.2も読んでたのですが、正直
>Postfix + fml で ML 運用可能です
>エスパー的には
など分からない事が多かった事と最後の
>Log を見ないと正直わからん
という言葉でそっちの方に気がいってしまいlogを見る事の方に気がいってました。

せっかくのアドバイスに失礼な事をしてしまい本当にすみませんでした。

改めてMadさんからのリンク先を見てlocal(8)やaliases(5)という言葉は完全には理解しきれてませんが内容的には
/etc/postfix/main.cf内に
allow_mail_to_commands = alias,forward,include
の設定がないとpostfixからプログラムを実行する事が出来ないと判断しました。

それに確かに/etc/postfix/main.cf内にallow_mail_to_commandsの設定も見つかりません。

ですが
allow_mail_to_commands = (デフォルト: alias, forward)
とあるので大丈夫かなとも思うのですがincludeが大事という事なのでしょうか。
よければアドバイスを頂けないでしょうか。

失礼な事をした上にまた頼ってしまい申し訳御座いません。
皆さんアドバイス有難う御座います。

くろきひろしさんからのアドバイス通りincludeについても調べた結果必要ないと思い今は
allow_mail_to_commands=alias,forward
にしました。

エラーのCould not open input fileについても、教えて頂いたコマンドを実行した結果権限がないという事が分かりました。
root権限で
php /var/www/vhosts/oreore.com/httpdocs/system/test_aliases.php
を実行する事は出来たのですが

# su - nobody -s/bin/sh
php /var/www/vhosts/oreore.com/httpdocs/system/test_aliases.php
でやると
Could not open input file: /var/www/vhosts/oreore.com/httpdocs/system/test_aliases.php
とエラーになりました。


lsコマンドの結果
4 -rwxr-xr-x 1 webadmin webadmin 685 1 2 02:29 test_aliases.php
となっていたので自分なりに調べて/etc/postfix/main.cf内の
#default_privs = nobody
のコメントを解除してnobodyをwebadminに変更した結果無事成功する事が出来ました。

皆さん本当に有難う御座いました。
今回の事で色々勉強にもなりもっともっとスキルアップしたいと思いました。

最後に
default_privs = webadmin
についてなのですがこのやり方でも問題はないのでしょうか?

もし他に影響が出る事があるとか別のやり方があるようなら宜しければ教えて頂きたいと思います。

本当に皆さん有難う御座いました。
> default_privs = webadmin
> についてなのですがこのやり方でも問題はないのでしょうか?
本来の defaults_privs の趣旨からは適切ではありません。(すぐに問題が
出るようなこともないでしょうけれど。)

defaut_privs は Postfix で、

* メールボックス等への配送をlocalというサブプログラム行い、
* :include: や aliasesデータベースの所有者がroot

といった場合にroot権限に代えて使用するユーザ権限で nobody や 、
専用のユーザを指定します。このユーザに求められるのは、余分な権限を
持たせないことです。

逆に、:include:するファイルや(/etc/aliasesと別に用意した)aliasesファイルの
所有者がrootでない場合は、そのユーザの権限で処理するはずです。

/var/www/vhosts/oreore.com/httpdocs/system/test_aliases.php をnobodyで
実行できるようなアクセス権を与えるか、test_aliases.phpの所有者をwebadminに
するといった方法の方が default_privs を変更するよりも適切に思います。

また、「su - だとうまくいった。」といったことを書かれていますが、おそらくは
シェルのPATHの設定の違いでpostconfを実行できていなかっただけでしょう。
その辺りはUNIX系OSの基本知識となりますので、検索等に頼るのではなく適切な
書籍等で体系的に学習されることをお勧めします。
いまさらではありますが..

whois oreore.com とすると、有効な結果が返ってきます。本当にこのドメインをターゲットとされているのですか?

もしそうでないなら、むやみやたらと他人の管理しているドメインをもち出さない方が良いと思います。

cf. http://ja.wikipedia.org/wiki/Example.com
皆さんアドバイス有難う御座います。

tacaさんアドバイス有難う御座います。

>本来の defaults_privs の趣旨からは適切ではありません。(すぐに問題が
>出るようなこともないでしょうけれど。)

やはり適切な解決方法ではなかったのですね。
取り合えず今回は今のままの設定で動作をさせていこうと思っていますが、今後もっと勉強して適切な設定を出来るようになりたいと思います。

またUNIX系OSの基本知識についても勉強していこうと思います。
色々と詳しくアドバイスを頂き有難う御座いました。


Shinichiroさん

>もしそうでないなら、むやみやたらと他人の管理しているドメインをもち出さない方が良いと思います。

そうですね。
自分的には説明の為に用いたoreore.comだったのですが、このドメインを管理している方も当然いるんですよね。
何も考えないでこうゆう場に書いてしまった事を反省します。

今後は例として出すにしてももっと配慮をするように心掛ける様にします。

有難う御座いました。
例示用に用意されているドメインがあるのですから、それを使いましょう。

cf. RFC2606

はじめまして。単発の質問です。

Linux Debianを主に使用しMySQL等のデータベースで自宅鯖してます。

すでにご存じの方もおられると思うのですが

http://www.google.co.jp/mobile/km/

Googleのモバイル検索というものがあり、これをMySQL+Postfixで実現できないものかと模索しています。

質問板の項目ではメール受信からプログラムへのトリガーについてというものであったので、質問です。

****  1)空メール登録機能と動作的に同じなのか
***    2)メール受信を行いデータベースへアクセスするプログラムに渡ったときに考えられる危険
**     3)現状でそういった製品が発売されているか否か
*      4)GPLの元で開発を行えばGoogleモバイル検索との著作権的な権利云々を回避できるのか


左肩につけている*は知りたい項目の重要度です。

質問として上記の1,2が解決できたら万歳です。

もし3をご存じの方が居られたら教えていただけませんンか?

1,2,3を飛ばして4の回答だけするよという方が居られたらいろいろと教えてください。

おそらく1,2項目がこの板の主旨に沿うものだと考えます。

皆様のお知恵お貸しください。

質問の内容いったい何なの?という回答でも構いません。よろしくお願いします。
>20
(1)同じと考えられます
(2)インターフェイスPGの実装によるでしょう
(3)聞いたことはありませんが、googleのAPI仕様がわかれば実装はそんなに難しくないです
(4)Googleのデータを利用する上では、Googleの使用許諾に縛られることになります。
使用するインターフェイスPG(これが世の中に出ているかは知らないのですが)がGPLでしたら、これに取り付けるPGもGPLが適用されることになります。
(いわゆるGPL汚染ってやつです)

具体的にどのようにすればインターフェイスが組めるか、という答えについては別途お問い合わせください。

ログインすると、残り4件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

postfix 更新情報

postfixのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング