procmailについて

このQ&Aのポイント
  • procmailで特定のメールを携帯に転送する方法について
  • 具体的な条件を満たすメールを携帯に転送するための.procmail.rcファイルの設定方法
  • 書き方の違いや他の方法についてのアドバイス
回答を見る
  • ベストアンサー

procmailについて

procmailで特定のメールを携帯に転送させたいのですが 現状下記のレシピで正常に動作していると思います。 動作しているので何も問題ないのですがレシピの内容の 意味が分かりません。 やりたいことは・・・ 1.特定のメールアドレスから届くメールの内、「残業」 という件名が含まれていないメールを全て携帯に転送する 2.もう1つのメールアドレスから届くメールは全て携帯に 転送する .procmail.rcの内容は以下になります。 .procmail.rc --------------------------------------------------- 1 PATH=/bin:/usr/bin:/usr/sbin 2 VERBOSE=on 3 LOGFILE=$HOME/procmail.log 4 LOCKFILE=$HOME/.lockfile 5 MAILDIR=$HOME/Maildir/ 6 DEFAULT=$MAILDIR 7 8 :0 c 9 * ^From: メールアドレス 10 11 * ^Subject:.*=¥?iso-2022-jp¥? |^Subject:¥/.* 12 * ! ? echo "$MATCH" | nkf -me | egrep '残業' 13 14 # 転送先 15 ! 転送先メールアドレス 16 17 :0 c 18 * ^From: メールアドレス 19 ! 転送先メールアドレス --------------------------------------------------- ここの11行目なのですが、「^Subject:¥/.*」はどのような 意味になるのでしょうか? 11行目を2行に分け 「* ^Subject:.*=¥?iso-2022-jp¥?」 「* ^Subject:¥/.*」 のように記述すると、意図した動作になりません。 また、上記の書き方以外もあればアドバイスを頂きたいです。 例えば、{}を使った方法など。

noname#144066
noname#144066

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.1

11 * ^Subject:.*=¥?iso-2022-jp¥? |^Subject:¥/.* は、以下のように括弧を補ってみるとわかりやすいかも。 11 * (^Subject:.*=¥?iso-2022-jp¥? |^Subject:)¥/.* | は or 演算子。 \/は以降の文字列を環境変数MATCHに代入するという拡張正規表現。 よりシンプルに書くならこんな感じかな?(動確まではしていません) 11 * ^Subject:(.*=¥?iso-2022-jp¥? )?¥/.*

参考URL:
http://linuxjm.sourceforge.jp/html/procmail/man5/procmailrc.5.html
noname#144066
質問者

お礼

別の書き方もあるのですね。 ありがとうございました。

関連するQ&A

  • procmailでの自動返信

    PROCMAILを入れて、着信したメールに着信を確認する用にしたいと考えています。.Procmailrcの記入では、単純な転送等は問題なくできるのですが、自動返信が上手くいきません。書き方から良く分かっていないので、サイト上の情報を元に作ってみたのですが、返信されません。以下にソースを書きますので、添削等をどうぞよろしくお願いいたします。 [.procmailrc] PATH=/usr/bin:/usr/sbin:/usr/local/bin SHELL=/bin/bash LOGFILE=$HOME/procmail.log MAILDIR=$HOME/Maildir/ DEFAULT=$MAILDIR :0 c * ^Subject: info * !^FROM_DAEMON * !^X-No-Loop: sky@**.ac.jp | (/usr/bin/formail -r -A "X-No-Loop: sky@**.ac.jp" -A "Precedence: junk" ; echo "Mail received at `date`[`date -u`]. --AUTO GENERATED--") |\ /usr/sbin/semd,ail -t [procmail.logの記録] (/usr/bin/formail: (/usr/bin/formail: No such file or directory procmail: Skipped "-A "Precedence: junk" ; " procmail: Skipped ""Mail received at `date`[`date -u`]. --AUTO GENERATED--") |\" procmail: Skipped "/usr/sbin/semd,ail -t" From ***@dj.pdx.ne.jp Wed Jun 15 18:17:56 2005 Subject: =?ISO-2022-JP?B?GyRCJUYlOSVIGyhC?= Folder: /home/jorin/Maildir/new/1118827076.14422_0.mailsv 1223

  • procmailで振り分けたメールの受信方法

    なんどもお世話になってますが、 今回もよろしくお願いします。 qmailとprocmailをインストールしてメールサーバー(IMAP&POP、Maildir形式) を構築しているのですが、procmailで振り分けたメールを、 クライアントで受信することができなくて悩んでいます。 目的は、subjectに"test"とかかれたメールを $HOME/Maildir/test/フォルダに振り分け、クライアント(WinXP) OutlookExpressで受信したいのですが、どうしてもうまくいきません。 Outlookのサーバー設定をIMAPにし、メイン受信フォルダ以下にtest というディレクトリを作っても、$HOME/Maildir/(new,tmp,cur)直下のメール しか受信してくれず、$HOME/Maildir/test/(new,tmp,cur)以下のメールを受信してくれません どのようにすればいいのでしょうか。 どなたかご存知の方がいらしたら教えてください。 よろしくお願いします。 <<<~/.procmail>>> PATH=/usr/bin:/usr/local/bin LOGFILE=$HOME/procmail.log MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ LOCKFILE=$HOME/.lockmail :0 * ! ^Lines: { :0Bfh * $ H ?? ! ^Lines: * -1^0 * 1^1 ^.*$ |formail -A "Lines: $=" } :0 * ^Subject: .*test.* $MAILDIR/Test/

  • procmailrcでHwオプションやBオプションの意味は?

    RedHat9でprocmail-3.22-9を使用しています。 .procmailrcで VERBOSE=yes PATH=/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin:/pub/bin:$PATH. SHELL=/bin/sh MAILDIR=/home/user01/Maildir DEFAULT=$MAILDIR/new/ LOGFILE=$MAILDIR/.procmail.log :0 * ^mail-followup-to:.*q-beginners .q-beginners/ :0 * ^reply-to:.*FreeBSD-beginners-jp .FreeBSD-beginners-jp/ :0 * ^Subject:" hidesoft..*" [hidesoft]/. :0 B * ^Subject:" [Kuser:.*" [Kuser]/. :0 Hw /home/user01/Maildir/new exit という記述を見かけたのですがこのHwオプションの意味が分かりません。manを見て みたのですが H…ヘッダをegrepして w…フィルタやプログラムが終って、exitcodeを検出するまで待つ(通常無視され る)。 もし、そのフィルタが不成功ならばそのテキストはフィルタされてしまわない。 つまり、届いたメールファイルのヘッダを検出して(Hオプション)、マッチするかの 判定をして exitコードが現れるまで待つ? という事ですかね。うーん、イマイチよく分かりません。 このHwオプションがあるのとないとではどんな違いが起こるのでしょうか? あちこちで検索してみまてもイマイチ「Hw」の意義がわかりません。 「0: B」 の「B」もどういう意味になるのでしょうか? (manを見ては見たのですが)

  • procmailrcでの自動返信 catが使えない

    こんにちは、いろいろ調べたのですが どうしてもわからなくて質問させていただきます。 題名の件ですが、procmailのログに[cat: Permission denied] と出てきて、自動返信ができません。メールは届きます。 catが見る先のファイルのアクセス権は問題有りません。 レシピの記述は次のようになっています。 ▼.procmailrc記述 PATH=/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin:/pub/bin:. SHELL=/bin/sh MAILDIR=$HOME/Maildir/ DEFAULT=$MAILDIR LOCKFILE=$HOME/.lockmail SENDMAIL=/usr/sbin/sendmail MAIL=/home/test/mail.txt LOGFILE=$HOME/procmail.log SH=/home/test FORMAIL=/usr/bin/formail :0 h c * ^TO_test@xxxx.or.jp #* ^From:.*test@xxxx.or.jp * !^FROM_DAEMON * !^X-No-Loop: test@xxxx.or.jp |(/usr/bin/formail -r -A "X-No-Loop: test@xxxx.or.jp" \ -A "Precedence: test" ;\ cat $MAIL) |\ $SENDMAIL -t ▲以上が記述です。 たとえば、ユーザモードで下記のコマンドをたたくと mail.txtの内容を読み込んでくれて、メールが配信されます。   ★cat /home/test/mail.txt | /usr/sbin/sendmail -t★ 環境は  FreeBSD 6.1-RELEASE+qmail.1.03となっております。 もしわかる方がいらっしゃいましたら ご教授いただければと思います。

  • qmail Part2

    /var/qmail/rc の中身を ./Maildir に変更しました。 #/var/qmail/bin/maildirmake /etc/skel/Maildir を実行して #useradd user00 を作成し中身を確認すると /home/user00/Maildir /home/user00/.qmail は正常に作成されておりました。 #/var/qmail/rc & を実行すると 「1」 685 #PATH=/var/qmail/bin:/bin:/sbin:/usr/bin:/var/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin と出ます。(これって動いていないんですよね?) BINDは動作している様子です。

  • メールをトリガーに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

  • .qmail-defaultで設定したアカウントからの転送

    お世話になります。 Qmail+Vpopmailでメールサーバーを構築しています。 /home/vpopmail/domains/****.com/.qmail-defaultで | /home/vpopmail/bin/vdelivermail '' *****all@****.com という風にして存在しないアカウントへのメールを *****all@****.comで受信する設定にしてあります。 そして*****all@****.com自身も /home/vpopmail/domains/****.com/catchall/Maildir/ |/var/qmail/bin/preline /usr/bin/procmail /home/vpopmail/domains/****.com/catchall/procmailrc としてprocmailで*****all@****.comが受け取ったメールを 特定のアカウント(ここでは例として****@****.com)に 転送するような設定を施してあります。 しかし*****all@****.com宛へのメールは ちゃんと****@****.comに転送されるのですが、 存在しないアカウントに送られたメールが *****all@****.comには届くが****@****.comに 転送されないという現象が起こってしまいます。 転送されるメールとされないメールのヘッダを見比べたところ うまく転送できない時のヘッダー Delivered-To: *****all@****.com ------------------------------------- うまく転送されるときのヘッダー Delivered-To: ****.com-*****all@****.com となっておりここがちゃんとなれば良いのかな、と思ったのですが どこをどのように修正するかが分かりません。 以上、ご存知の方は教えていただければ幸いです。

  • 電子メールの配送エラー

    postfix、dovecotをCentOSマシンに導入し、メールサーバーを構築しました。 配送方式はMaildirにしました。これは/etc/postfix/main.cfにて、 home_mailbox = Maildir/ と記述することで指定しました。 /etc/procmailrcは以下のとおりです。 PATH=/bin:/usr/bin MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ LOGFILE=$MAILDIR/procmail.log 同時にこのマシンはNFSサーバー、NISクライアントです。 試しにユーザー(sample)を作成しました。 実体は/export/home/sample/ マウント先は/user/sample/ sample/以下にはMaildir/を作成し、 Maildir/newおよびMaildir/curおよびMaildir/tmpを作成し、 chmod 700をかけています。 これでsample宛てに電子メールを送ると/user/sample/Maildir/newに 配送されるはずですが、MAILER-DAEMONから"Undelivered Mail Returned to Sender" が来ます。 can't create user output file. Command output: procmail: Couldn't create "/var/mail/sample" procmail: Couldn't chdir to "/user/sample/Maildir" ここで/var/mail/sampleを作るとエラーは帰ってこなくなりましたが、 そこに蓄積されるだけで/user/sample/Maildir/newに配送されません。 いったい、なぜMaildir/に配送されないのでしょうか?

  • postfixのバーチャルドメイン管理でのspamフィルタについて

    はじめまして。現在postfix+postfixadmin+mysql+spamassassinを使用して運用しており、 spamassassinにはprocmailの/etc/procmailrcファイルにてspamのメールの振り分けを行っています。 postfixadminでtest@sample.comというアドレスとspam振り分け用のアドレスspam@sample.comを登録し、 test@sample.comから外部の携帯のアドレスに転送設定をしていますが、このときtest@sample.com 宛のspamメールは振り分けがおこなわれているのですが、外部の携帯にはspamが転送されてしまいます。 ログを見ましたが、test@sample.comにprocmailのフィルタが行われた後に転送が行われてしまっていました。 procmailを通過する段階で、spamを転送させない設定等がございましたらご指導の程、宜しくお願い致します。 下記postfixの設定です。 postconf -n alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases allow_min_user = yes broken_sasl_auth_clients = yes command_directory = /usr/sbin config_directory = /etc/postfix content_filter = smtp-amavis:[127.0.0.1]:10024 daemon_directory = /usr/libexec/postfix disable_vrfy_command = yes header_checks = regexp:/etc/postfix/header_checks home_mailbox = Maildir/ html_directory = no inet_interfaces = all local_destination_concurrency_limit = 20 local_transport = virtual mail_owner = postfix mailbox_command = /usr/bin/procmail mailq_path = /usr/bin/mailq manpage_directory = /usr/local/man maximal_backoff_time = 600s maximal_queue_lifetime = 6000s minimal_backoff_time = 60s mydestination = mydomain = sample.com myhostname = mail.sample.com mynetworks = 192.168.1.0/24, xxx.xxx.xxx.0/28, 127.0.0.0/8, check_client_access hash:/etc/mail/dracd ※xxx.xxx.xxx.0はサーバのネットワークです。 myorigin = $mydomain newaliases_path = /usr/bin/newaliases parent_domain_matches_subdomains = queue_directory = /var/spool/postfix readme_directory = no receive_override_options = no_address_mappings relay_domains = $mydestination relayhost = sample_directory = /etc/postfix sendmail_path = /usr/sbin/sendmail setgid_group = postdrop smtp_defer_if_no_mx_address_found = yes smtpd_helo_restrictions = check_helo_access hash:/etc/postfix/helo_access smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $mydomain smtpd_sasl_security_options = smtpd_sender_restrictions = hash:/etc/postfix/reject_sender transport_maps = hash:/etc/postfix/transport virtual_alias_domains = $virtual_alias_maps virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_gid_maps = static:10000 virtual_mailbox_base = /home/virtual virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 10000 virtual_transport = procmail virtual_uid_maps = static:10000 /etc/postfix/master.cfの設定 下記を追記 procmail unix - n n - - pipe flags=R user=virtual argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc /etc/procmailrcの設定 PATH=/bin:/usr/bin DEFAULT=$HOME/$DOMAIN/$USER/ SPAM=/home/virtual/sample.com/spam/ LOGFILE=/home/virtual/procmail.log LOCKFILE=/home/virtual/procmail.lock VERBOSE=ON :0 *^X-Spam-Status: Yes $SPAM

  • .qmailにftpで転送設定

    いま、メールを受信したら添付ファイルをFTPで送信することをしようとしています。 添付ファイルをuudeviewで抽出することはできているのですが、 その抽出したファイルを自動でftp送信することができなくて困ってます。 以下の設定にしているのですがメール受信時にmail-ftp/ftp/dataに添付ファイルの抽出はできます。しかしftp送信部分が自動で動いてくれません。 しかし、手動で./tensou.shとすると抽出から転送まですべて動いてくれます。 どこが間違っているのでしょうか? ---.qmail-------------------- ./Maildir/ |./ftp/tensou.sh ----------------------- ---tensou.sh------------- /usr/local/bin/uudeview -i -p /home/mail-ftp/ftp/data /home/mail-ftp/Maildir/new/* /usr/bin/ftp -n -i <ftpconfig rm -f /home/mail-ftp/Maildir/new/* rm -f /home/mail-ftp/ftp/data/* -----------------------------------------------