• 締切済み
  • すぐに回答を!

メール受信時にパイプしてPerlプログラム起動したい(FreeBSD sendmail)

FreeBSDのサーバで、メールを受信した際にその内容をパイプして、標準入力でPerlプログラムにパイプさせてWebサイトに反映させるという処理をしたいと思っております。 ただ、Perl以前の問題でつまずいています。 メール受信時に、/etc/mail/alias を編集し、 アカウント "| /path/proguram.pl" と設定しました。同様の設定でメールの転送はできているので、書式は間違っていないかと思います。 このプログラムを指定したとき、このメールアドレスにメールを送信すると、以下のエラーが出ます。 ----- The following addresses had permanent fatal errors ----- "| /home/****/www/cgi-bin/test.pl" (reason: 126) (expanded from: <****@**.**>) ----- Transcript of session follows ----- /home/****/www/cgi-bin/test.pl: Permission denied 554 5.3.0 unknown mailer error 126 サーバ会社へ問い合わせたところ、プログラムを起動しに行くmailnullというユーザ(?)の権限の問題だそうです。 mailnullというユーザにプログラムを起動するだけの権限を与えるにはどうしたらよいでしょうか? それとも、ほかの方法がありますでしょうか? よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数795
  • ありがとう数2

みんなの回答

  • 回答No.1
  • OKwebb
  • ベストアンサー率44% (92/208)

/home/****/www/cgi-bin/test.pl のグループ:権限はどうなってますか? mailnullというユーザのグループに同じグループを追加して chgmod g+x /home/****/www/cgi-bin/test.pl にするか もう誰でも実行していいなら chgmod o+x /home/****/www/cgi-bin/test.pl で。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お返事ありがとうございます。 mailnullはsendmailのデフォルトのユーザに設定してあり、mailnullグループに属しているようです。 /home/****/​www/cgi-bin/test.plは、その所有者とroot以外は権限を持っていません。 長いこと悩んでいましたが、実はこの質問を投稿した後で自己解決できました。 mailnullをsudoerに登録して、パスワードなしでsudoできるようにし、 パイプする際にsudoをはさんで起動して解決しました。 セキュリティ的にどうなのか? とも思いますが。。。 /etc/mail/aliases や ユーザごとのforwordをいじられない限りは問題ないはずなので、しばらくこの方法で解決しようと思っております。 ありがとうございました!

関連するQ&A

  • メールの受信をトリガーとしてperlを起動させたい

    メールの受信をトリガーとしてperlを起動させたいと考えています。 vine linux 4.0 で MTAはpostfix 2.2.10 のみが入っています。 /etc/postfix/aliases に root: "|/usr/bin/perl /root/test.cgi" と書いて postfix reload した後 root 宛にメールをすると、メール自体は普通に届きますが perlは起動しません。 test.cgi 自体は直接叩いてやると、ちゃんと動いています。 main.cf には alias_maps = hash:/etc/postfix/aliases と記述してあります。 メール受信で perlを起動させるにはどうしたらよいのでしょうか?

  • Postfixでメールを受信したらPerlスクリプトを実行したい

    Solaris10で構築したサーバにて、ユーザー宛のメールを受信したら Perlで記述したスクリプトを実行したい為、下に記載の手順1及び2の 方法で受信メールを渡すパイプを記述したのですがスクリプトが実行されませんでした。 手順1,2共に他のメールアドレスへ転送させた場合、メールの転送は正常に行われました。 メールを受信したらPerlスクリプトを実行するには、どのように設定すればよいのでしょうか? main.cfやmaster.cfに更なる設定の記述が必要なのでしょうか? 主な環境は下記の様になっているのですが不足がありましたら御指摘下さい。 申し訳ありませんがよろしくお願いします。 【手順1】~/.forwardによるスクリプト起動     (1)~/.forwardに、下記の様な記述をしましたがスクリプト起動せず。 (.forwardの記述)        (パターン1) \username,"|/home/username/test.pl"        (パターン2) "|/home/username/test.pl"        (パターン3) |"/home/username/test.pl"        (パターン4) "|/usr/local/bin/perl /home/username/test.pl"        ※下記のような転送は処理されました         \username,username@test.ne.jp 【手順2】main.cf修正によるスクリプト起動     (1)/usr/local/etc/postfix/main.cfに下記行を作成       alias_maps = hash:/usr/local/etc/postfix/aliases,hash:/usr/local/etc/postfix/usr_alias       (usr_aliasの記述) username: :include:/home/username/include       (includeの記述) |"/home/username/test.pl"               他に上記.forwardの記述の4パターンを試しましたが全てスクリプト起動せずでした。 【サーバ環境】 OS:Solaris10(Sparc) MTA:postfix-2.5.3 【test.plの内容】 #!/usr/local/bin/perl open(DATA_FILE, "> test_log.txt"); print DATA_FILE "Test_OK!!!\n"; close(DATA_FILE);     ※備考       ・保存場所:/home/username/test.pl       ・パーミション:test.plと/home/username共に777 (オーナはusername) 【main.cfについて】 念のために allow_mail_to_files = alias,forward,include allow_mail_to_commands = alias,forward,include の記述を追加しています。

  • Perl でメールを受信・・・不可能?

    レンタルをサーバーを借りています。 perl(CGIプログラム) でメールを受信し、その中身から 特定の文字を抜き出したり、加工したりしたいのですが、 それは可能でしょうか? 何冊かの書籍をみると、メールの送信のサンプルはある のですが、受信できる例がたまたま本がそうなのか、 どうか、見あたりません。 こんなサンプルのってるよ、なんて情報でも結構です。 やむにやまれず、CGIプログラムをはじめなければなら なくなりました。ご存知の方、どうかよろしくお願い します。

    • ベストアンサー
    • Perl
  • 受信メールからプログラムへのパイプについて

    今「1strentalserver(ファーストレンタルサーバー)」と言うサーバー会社のサーバー上で 運用をしているのですが、メール受信からパイプを利用してPHPのプログラムを起動させる ようにしているのですがうまく行きません。 プログラムのパーミッションを 755 にする事で一応?は動作するようになった様なのですが やっぱりエラーメールが返ってきます。 (動いた確認は、ファイルに仮出力する事で確認済) 状況は以下の通りです。 ---------------------------------------------------------- 【設定】 通常のメールアカウントは登録せずに、メール転送設定用アカウントを登録 パイプ先 : /home/xxxxx/public_html/work/mail_test.php アカウント : macc@xxxxxxx.com ※因みに「1strentalserver(ファーストレンタルサーバー)」は、cPanelと言うツールで  設定するようになっています。 【返ってきたエラーメール】 > ---<エラーメール>------------------------------------------------ > This message was created automatically by mail delivery software. > > A message that you sent could not be delivered to one or more of its > recipients. This is a permanent error. The following address(es) failed: > > pipe to |/home/xxxxx/public_html/work/mail_test.php > generated by macc@xxxxxxx.com > local delivery failed > ---------------------------------------------------------------- 【最終の確認ソース】 // 以下のように空っぽ(4行のみ)にしてもエラーになります。 #!/usr/bin/php <?php // ?> ---------------------------------------------------------- どなたか、ご経験のある方がいらっしゃいましたら よろしくお願いします。

  • sendmailの使えない環境でメールを送る

    いま使っている自分のサイトは CGI(Perl5)は OKですが sendmailが使えません。しかし、掲示板の書き込み内容をメールで送信したいと考えています。 で、幸いそのプロバイダには標準 CGIとしてメールデコードをサポートしています。これを巧く使ってメールを送信できないかとのご相談です。 件の CGIはPOSTメソッドで渡すので、CONTENT_LENGTHにその長さをセットし、標準入力へパラメータを。そして掲示板プログラムからメールでコードのCGIを呼び出せば巧くいきそうなのですが....。 1.まず、この方法は使えそうか? 2.perl中で別の CGIの標準入力へどのようにパラメータを渡すのか(パイプ?リダイレクト?) 3.環境変数 CONTENT_LENGTHへ CGI中から値を設定できるのか? 4.送信するパラメータはどんな文字列にすればいいのか?(エンコード、パラメータの区切りとか) 以上です。どなたかアドバイスお願いします

    • ベストアンサー
    • CGI
  • sendmail使用し、メールが送られた時にPerl実行するようにaliasesファイルを修正したが・・・

    こんにちは。 特定のアカウントにメールが送られた時に Perlが実行されるような実装をしていますが、うまく処理されていないようです。 aliases ファイルに、 aaa: "|/usr/local/bin/test.pl" と加えました。 test.plには、ファイルに文字列を記述するだけの処理になってます。 aaaにメールを送ったのですが、test.plが処理されてません。 perl test.pl とプロンプトで実行すると、正しく処理されているので test.plの記述が悪いわけではなさそうです。 aliasesファイルの記述が悪いのかと思いましたが、 仮に記述ミスしたtest.plにしてから aaaにメールを送ってみると メールデーモンが返ってきて、記述ミスした部分をエラー表示してくれます。 test.plは正しく呼び出されているようなのです。 これ以上、何が悪くて、どうすればこれ以上原因を判明することができるのか まったくわかりません。 どなたか心当たりのある方、ぜひともご教授ください。 よろしくお願い致します。

  • .forwardから呼び出すperlプログラムに引数を付ける事は可能ですか?

    はじめまして。Perlの初心者ものです。 よろしくお願い致します。 .forwardから呼び出すperlプログラムに引数をつけて プログラム内で引数とメール内容を処理に使用したいので すが、出来るのでしょうか? 例えば.forwardの中身を |/XXX/test.pl p1 と、記入して、 test1.pl内で引数によって、メールの内容を違ったファイルに保存したいです。 よろしくお願い致します。

  • Perl メールフォーム複数のアドレスに。

    メールを複数のアドレスに配置したいのですがPGをどう変更すれば よろしいでしょうか? 参考ソース #!/usr/bin/perl # フォームメール #jcode.plの場所を設定 require "./jcode.pl"; # sendmailの場所を設定 $sendmail = '/usr/lib/sendmail'; # サンプルのタイトル $mail_title = "メール送信サンプル"; # ページの背景色 $bgcolor = "#FFFFFF"; # ページの文字色 $text = "#000000"; # 戻り先のURL $back_url = '***@aaa.co.jp'; # CGIプログラムの設置場所 $cgi_url = "./mail.cgi"; # 受信メールアドレス(送信先) $mailto = '***@aaa.jp';

    • ベストアンサー
    • Perl
  • メールを標準入力として受け取るには

    現在、Xserverというレンタルサーバーを利用して 特定のアドレスに送られてきたメールの本文をサーバーに保存する、といったCGIを作成しています。 今現在、サーバーのメールフィルターにおける転送設定は下記のように設定しています。 | /usr/bin/perl /home/hoge/public_html/piyo.cgi これでメール受信時にこのCGIを起動することは確認できたのですが、標準入力を見たところ、 Return-Path: <差出人のメールアドレス> しかないようです。 一般的に、CGIにパイプしてメール本文を受け取るといった動作は可能なのでしょうか? phpでは可能、のような記事はあったのですが、当方phpは未熟で可能であればCGIで何とかしたいと思っています。 問題解決のため、皆様の知恵をお貸しいただければ幸いです。よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • perlによる外部プログラムの実行

    perlにてCGIを作成しています。 ブラウザでCGIにアクセスしたとき、gpgというコマンドプロンプトの プログラムを実行したいと考えており以下のようなプログラムを作成しました。 test.batを単体で実行したときにはうまく動作するのですが、CGIを介して 実行するとうまくいきません。 CGIのプログラム (WriteCmd.cgi) **********************************  #!c:/Perl/bin/perl  print "Content-type: text/html\n\n";  print "test.batの実行\n<br>";  system("test.bat");  exit; ********************************** test.bat **********************************  gpg --batch --gen-key sample.txt ********************************** またtest.batの内容を **********************************  mkdir test ********************************** としてみるとディレクトリがちゃんと作成できるので WebサーバやPerlのパスの問題ではないと考えております。 よい解決方法がありましたら教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • CGI