procmailの使い方

このQ&Aのポイント
  • procmailの基本的な使い方を解説します。
  • メールに対してhoge.plを実行するコードの書き方や編集方法について説明します。
  • 一定文字数以上を受信拒否する設定方法やオリジナルの自動返信メール送信の設定方法についてもprocmailでできる方法も教えます。
回答を見る
  • ベストアンサー

procmailの使い方

http://www.abe-tatsuya.com/web_prog/perl_cgi/mail2perl.php 届いたメールアドレスに対して、hoge.plスクリプトを実行したいと 思います。 サーバー管理会社より、aliasesは編集できないということでしたが、 procmailは編集できるそうです。 しかし、上記サイトを見てもイマイチprocmailの使い方が わかりません。 届いたメールに対し、hoge.plを実行させるコードの書き方、 編集方法を教えてください。 もしくは、“一定文字数以上を受信拒否する設定方法”、 “オリジナルの自動返信メール送信”設定方法がprocmailで できましたら教えてください。 知識はなくはないのですが、本業プログラマではないため わかりやすくご説明頂けると助かります。

noname#102630
noname#102630
  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

procmail経由で起動したいのがPerlスクリプトってだけでここで訊くのは微妙に場所が違うような気もしますが、 #それに設定を書くのはprocmailじゃなくて .procmailrc とかでは? PROCMAIL http://www.jaist.ac.jp/~fjt/procmail.html .procmailrc の書き方 http://www.ipc.hokusei.ac.jp/doc/online/procmail/setuprc.html この辺解説でどうですか。 問答無用で実行させるなら 0: * | hoge.pl こんなんでいいのかな。 10000バイト以上で実行だとこんな感じ。 0: * > 10000 | hoge.pl

noname#102630
質問者

お礼

わかりやすい解説ありがとうございます。 少しできそうな気がしてきました。 確かにPerlではなくて、サーバーのところで聞く べきでしたね。

関連するQ&A

  • メールをトリガーにPHPを自動起動したい

    PHPでも聞いてみたのですが、考えてみるとPHPと言うよりもLinuxのほうかもしれないということでお願いいたします 空メールの内容をPHPに渡したいと言うことで、いろいろ試してみましたが、なかなかうまくいきません Webminを使ってサーバの管理をしています MTAはsendmailを使っています sendmailの/etc/aliases にはこのように記述しました hoge: "|/usr/bin/procmail" /etc/procmailrc にはこのように記述しています PATH=/usr/bin:/bin:/usr/local/bin MAILDIR=/var/spool/mail LOGFILE=/var/www/html/****/procmail.log LOCKFILE=/var/www/html/****/procmail.lock :0 |/var/www/html/****/empty_mail_regist.php 私の考えでは hoge@hoge.comにメールが来る      ↓ sendmailが/usr/bin/procmailの起動      ↓ procmailが/etc/procmailrc を読み込んでプログラム実行 となると思っているのですが間違うでしょうか? /etc/aliases に hoge: "|/var/www/html/***/empty_mail_regist.php" と記述した場合、PHPのエラー(#!/usr/bin/php -q が抜けているなど)の場合はエラーメールが帰ってきます PHPにアクセスはしているが実行できていない理由がわかりません プログラム的なものだと思い、きめうちでメールを送るスクリプトを書きましたがダメでした もちろん、コマンドラインで実行するとメールの送信はできます スクリプトの所有者とメールアドレスのユーザは別なのでどれがダメなのかと思い、chownでhogeに変更してみましたが変わりはありませんでした 参考にしたサイトはこちらです メール配信時のPHPスクリプト起動(Sendmail編)http://www.dolphy.gr.jp/webap/topic/smrsh.html

  • テキストファイルに書き込めない(ファイルの所有者と実行者の違いか?)

    テキストファイルにログを書き込む以下の処理があります。 aaa.pl -------------------- open Log,">>aaa.txt"; print Log 'test'; close Log; Web上(アパッチ)からこのaaa.plを実行すると 正常に処理されて、aaa.txtに書き込まれます。 (aaa.txtのオーナーはwww。属性は644) それとは別に、/etc/aliasesに 特定のメールアカウントにメールが送られた時に このaaa.plが実行されるように設定しているのですが mail_address: "|/ccc/aaa.pl" (パスは適当ですが、実際にはあっています) こちらからaaa.plが処理させても、 aaa.txtに文字列が書き込まれなくて困っています。 open Log,">>aaa.txt"; chmod 666,"aaa.txt"; ... とPerl側でパーミッションを変更させようとしても うまく変更されていません。処理もされません。 おそらくaliasesに設定したPerlの実行権限者が ファイルの所有者(この場合www)と異なる為 書き込みもchmodもうまくいかないと思うのです。 aliasesで実行させるアカウントは いったいどのようなアカウントなのでしょうか(binユーザーとか?) また、これを回避するにはどのようにすればよろしいでしょうか? どなたかご存知の方、どうぞよろしくお願い致します。

    • ベストアンサー
    • Perl
  • 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は正しく呼び出されているようなのです。 これ以上、何が悪くて、どうすればこれ以上原因を判明することができるのか まったくわかりません。 どなたか心当たりのある方、ぜひともご教授ください。 よろしくお願い致します。

  • /etc/aliasesに設定した、sendmailからのプログラム処理はどのアカウントで行われる?

    こんにちは。 タイトルの通りですが、 /etc/aliasesに設定した、sendmailに登録されたメールアカウントに メールが届くと設定したPerlスクリプトが実行されるようにしました。 mail_address: "|/aaa/aaa.pl" (aaa.plはテキストファイルに文字列を記入するだけ。 パスは適当ですが、実際にはあっています) こちらからaaa.plが処理されても、 ある特定のフォルダ(/bbb/test.txt)のテキストファイルに対して 文字列が書き込まれなくて困っています。 そのプログラム自体は正しく動作しています。 ここで例をあげているtest.txtのパーミッションは777にしてあります。 しかし、そのフォルダ/bbbのパーミッションは770になってまして、 これが書込みをさせない原因なのかな?と。 別のフォルダにあるtest.txt(そのフォルダのパーミッションは775)は 正常に動作するので間違いないとは思います。 /etc/aliasesに設定した、sendmailから起動させる処理の アカウントがなんなのかよくわからないのです。 おそらくここでいう「その他」扱いになっているとは思うのですが、 それはそういうものなのでしょうか? /etc/aliasesはrootで設定するため、そこで設定した処理は rootに近いアカウントで起動されるものだと思っていたのですが…。 ちょっとわかりずらい文章で申し訳ないですが、 どなたかぜひともご教授ください。

  • 仮想アカウントをCGIで設定

    OS:Fedora Core2, Perl5.3.8, Sendmail 8.12.10 こんばんは。 やりたいことは、サーバー*****.jpに アカウント yamada が登録されているものとして、 このとき、yamada@*****.jpにきたメールを 転送するyamada2というアカウントを作りたいのです。 私の考えた方法としては (1)ユーザの追加 useradd yamada2 (2)/etc/aliases の編集 上記(1)-> (2)で解決できないかと考えています。CGIから/etc/aliasesの編集を行いたいのですが 可能でしょうか? この方法以外に、もっとスマートな、その他の方法が あれば、ご指導頂ければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • Perl ファイルハンドルを閉じずに反映させる

    お世話になっております。 Perl(プログラミング言語)について質問です。 openメソッドで開いたファイルハンドルに print文で書込みを行った際に、ファイルハンドルをcloseせずに、 書込みを反映させる方法はありますか? 開くのはファイルではなく(他プロセスへの)パイプです。 $| を設定してもだめでした (例としては perl1.pl , perl2.pl を用意する <perl1.pl> $i; open(OUT,"| perl2.pl") while(1){ print OUT "$i" $i++  } close(OUT) <perl2.pl> while( <STDIN> ) { print $_; } のようなことをやりたいです。 上記のようなスクリプトを実行したところ、 perl1のcloseが実行されるまで反映されません。 これをcloseをせずに反映させる方法はありますでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • Perlで use strict して our変数

    Perl 初心者です。初めて質問します。 test_sub.pl で宣言した変数を test_main.pl から参照したくて悩んでいます。 環境 : WindowsXP / ActivePerl 5.14.2 -------------------- * test_sub.pl -------------------- #!/usr/bin/perl use strict; our $hoge = 'HOGE'; 1; -------------------- * test_main.pl -------------------- #!/usr/bin/perl use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; -------------------- これを実行すると、 Global symbol "$hoge" requires explicit package name at C:/public_html/cgi-bin/test_main.pl line 7.\r というエラーが出ます。 require する前に、test_main.pl のほうで our($hoge); と宣言したり 参照する際に print $main::hoge; とパッケージを指定したりすればいけるのですが、 これらをしないとできないものなのでしょうか。 use strict; を書かなければ最初のソースでも動くのですが use strict は書きたい… 継承のようなことをしたいのです。 ちなみに以下試してみたソースです。 -------------------- * test_main.pl -------------------- #!/usr/bin/perl ######################################## # NG use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; ######################################## # OK our変数を宣言しておくといける =pod use strict; our ($hoge); require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## # OK 参照する際にパッケージ名を指定すればいける =pod use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $main::hoge; =cut ######################################## ######################################## # NG =pod use strict; use base qw(test_sub); print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## -------------------- * test_sub.pm -------------------- #!/usr/bin/perl package test_sub; use strict; our $hoge = 'HOGE'; 1; -------------------- NG パタンはどちらも Global symbol "$hoge" requires explicit package name のエラーとなります。 もしご存じの方がいらっしゃいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHP の system コマンド

    ブラウザからtest.php を実行してperl スクリプトを実行したいのですが、 うまく動きません。アクセス権の問題なのでしょうか。 よろしくお願いします。 ---------------- test.php ---------------------- <? system("/usr/bin/perl /home/usr/public_html/test.pl > /dev/null &"); echo "OK."; ?> ---------------- End File ---------------------- ---------------- test.pl ----------------------- #!/usr/local/bin/perl $sendmail = '/usr/sbin/sendmail'; open(SENDMAIL,"| $sendmail -t -i"); print SENDMAIL <<'END'; From: hoge@hoge.com To: moga@moga.com Subject: test Hello This is test END close(SENDMAIL); --------------------- End File -------------------------

    • ベストアンサー
    • PHP
  • perlの実行

    拡張子を.plとしたテキストperlを実行したいのですが、実行できません。 具体的には、 以前のパソコンでは(Os10.4.0)miエディターで開いてツールから実行していました。 ですがOs10.5.6になりmiからperlを実行すると、 Terminal でエラーが起きました:"* Inferior Terminal *" は «event TTplaplT» メッセージを認識できません。 (-1708) このようなエラーメッセージが出てきます。 perlが悪いのではないかと思い、pl(テキスト処理)をインターネットからダウンロードして試してみたのですが、どれも上記のエラーが出ます。 UnixScriptTools for miと言うものを入れてみましたが間違っているかもしれません。 設定など細かな部分でエラーが発生しているのかもしれません。 解決方法の予想がつく方、ご教授ください。

    • 締切済み
    • Mac
  • VB.NETからPerlを呼び出す

    メール自動送信機能をPerlで作成しました。 (仮にhello.plとします)hello.plを「C:\」においています。 コマンドプロンプトから次のようにperlコマンドを実行してた場合、 メールが自動送信されたことは確認できています。 perl hello.pl 同じようにVB.NETから実行したいのですが、上手くいきません。 ソース記述は以下の通りです。 Dim p As System.Diagnostics.Process = _ System.Diagnostics.Process.Start("C:\hello.pl") p.WaitForExit() どなたか分かる方がいらしたら、教えてください。

専門家に質問してみよう