.forwardで、特定のメールだけ(or以外)を転送するには?
[上に]
[前に]
[次に]
いそぎんちゃく
[E-Mail]
[HomePage]
1998/01/06(火) 18:42:28
UNIXサーバに.forwardファイルを設定すれば、メールを転送できますが
着信した全てのメールを転送するのではなく「ある特定のメールだけ」転送す
るにはどうしたら良いのでしょうか?
また、「特定のメール以外を転送」というのもあれば便利なのですが…。
なんとか、Subjectや発信者名などで上記のような技ができませんかねぇ
飯塚
[E-Mail]
[HomePage]
1998/01/06(火) 23:45:36
(1) .forwardに、以下のように書く。
"| my_cmd"
(2) .forwardと同じディレクトリに、my_cmdというプログラム
を作る。言語はPerlなどで良い。
処理内容は、「標準入力から読み込まれるメールのヘッダなど
を調査し、特定のメールならばsendmailコマンドでそのまま
転送する」というものになる。
という方法でできると思います。
あと、サーバ全体の環境設定をできる立場なら、.forwardだけで
上記のことができるそうです。
いそぎんちゃく
[E-Mail]
[HomePage]
1998/01/07(水) 12:15:54
あの…。ワタシCGIにはそんなに詳しくないので
具体的にどういう内容にしたらイイかも教えてもらえ
ないでしょうか…。
片松 祐司
[E-Mail]
1998/01/12(月) 23:16:03
飯塚さんへ
・転送する場合
標準入力 -> sendmail
・転送しない場合
標準入力 -> 標準出力
でよいのでしょうか?
私も興味あります。詳しく教えてください。
B-Cus
1998/01/12(月) 23:48:52
> あの…。ワタシCGIにはそんなに詳しくないので
とりあえずこれはCGIではありません。WWWサーバから実行される
わけではないからです。
メールがスプールにたまっている場合のファイルの形式を見たことは
ありますか?
From: ...
Received: ...
Received: ...
Received: ...
Date: ...
From: ...
Message-ID: ...
To: ...
Subject: ...
Content-Length: 本文の長さ
(空行。これより以前がヘッダ。これより後は本文)
本文
こんな感じになっているはずです(順番は違うかも)。これが
標準入力から流れてきますので、その内容に従って処理を
すればいいわけです。
ホームディレクトリに.forwardというファイルを作って
|IFS=''&&exec /usr/local/bin/perl /users/mail-delivery.pl||exit 75
と書いてください(この書き方に関してはよくわかりません。sendmail.cfの書式?)。
で、/users/mail-delivery.plは以下のように書いてください。
# /usersは自分のホームディレクトリに置き換えてください
----------------------------
#!/usr/local/bin/perl
$mail_spool = "/var/mail/ユーザ名";
# あるいは /var/spool/mail/ユーザ名
# あるいは /usr/spool/mail/ユーザ名 などなど…自分のスプール
while (<STDIN>){
$content .= $_;
m/^Content-Length: (\d+)$/;
if ( $1 > 100000 ){ exit; }
if ( m/^Subject: ANY SUBJECT$/ ){ $send="foo@bar.com"; }
if ( m/^From: ANY PERSON$/ ){ $send="any@any.com"; }
if ( m/^$/ ){ # 本文は調べない
while (<STDIN>){
$content .= $_;
}
}
}
if ( $send ne "" ){
open(SENDMAIL,"|/usr/bin/mail $send");
print SENDMAIL $content;
close(SENDMAIL);
} else {
print $content >> $MAIL_SPOOL;
}
-----------------------------
メールの100KB以上なら捨てます。
サブジェクトがANY SUBJECTなら foo@bar.comにメールを送ります。
ANY PERSONから届いたメールなら any@any.comにメールを送ります。
それ以外ならメールスプールに追加します。
このスクリプト動作確認はしていません。
昔似たようなことをした記憶に従って書きました。
あと、くれぐれも試すときは メーリングリストなどからは脱退して
行ってください。変なメールがMLに流れないという保証は
できませんので。
B-Cus
1998/01/12(月) 23:59:08
すいません、上のを書き込んだら、日付と送信者のところが
...となってindexの一番下に移動してしまいました。
これって僕が何か変なことしたんでしょうか?(x_x)
B-Cus
1998/02/04(水) 16:30:43
だいぶ前に上の方法で家のFreeBSDではうまくいったのですが、
先日学校のSolarisでやってみるとうまくいかなかったです。
~/.forward
----------------
|IFS=''&&exec /usr/local/bin/perl /home/b-cus/mail-delivery.pl||exit 75
----------------
~/mail-delivery.pl
----------------
open(OUT,">>/home/b-cus/sample");
while (<STDIN>){
print OUT $_;
}
close(OUT);
----------------
として、とりあえずセキュリティは無視して、
chmod 755 ~/.forward
chmod 755 ~/mail-delivery.pl
chmod 666 ~/sample
としたのですが、sampleには何も追加されません。
これが原因では?、というものはありますでしょうか。
ぼん
[E-Mail]
1998/02/05(木) 14:57:29
このような目的で実績のある procmail を使うのがいいのでは?
この名前でgooなどの検索サーバで適当に調べてみましょう。
結構引っかかります。
とほほ
1998/02/06(金) 00:53:26
ホームページ作成関連ではないので、ちょっと・・・・ですが、
.forward ファイルって、600 とかのパーミッションにしてお
かなくてはならないとかの制限(セキュリティのため)ってな
かったでしたっけ? (うろ覚えですが・・)
B-Cus
1998/02/07(土) 04:03:36
> .forward ファイルって、600 とかのパーミッションにしてお
> かなくてはならないとかの制限(セキュリティのため)ってな
> かったでしたっけ? (うろ覚えですが・・)
あ〜そういえば聞いたことがあるような。
というわけでやってみたんですが症状は変わらず…でした。
> このような目的で実績のある procmail を使うのがいいのでは?
実際にメール振り分けをしなければいけない状況だと
そうしますが、ただ単にSolarisでもできるかな〜と
思っただけなんで(^^;
もうちょっとがんばってみます。
ぼん
[E-Mail]
1998/02/08(日) 00:38:34
私はあまり詳しくないのですが、メールの処理量が増えてくると
ロックの制御をちゃんとしておかないとメールがロストする場合
も考えられないですか?実績のないスクリプトを教えても逆に迷惑
になるだけだと思いますが。
導入が簡単なものでperlのスクリプトで書かれているSMMSと言う物
もありますが、やはり信頼性に関しては後一歩の所のようなので
これは奨めずprocmailを奨めたのです。(私はSMMSで小規模MLを運営
していたこともあります。)
匿名希望
1998/03/26(木) 07:28:31
[上に]
[前に]
[次に]